Skip to content

Instantly share code, notes, and snippets.

@michaellihs
Last active July 10, 2025 19:37
Show Gist options
  • Save michaellihs/3177c39a5b9b9c1012ea9ba9aee686b3 to your computer and use it in GitHub Desktop.
Save michaellihs/3177c39a5b9b9c1012ea9ba9aee686b3 to your computer and use it in GitHub Desktop.
DevOps Principles

DevOps Principles

Motivation: Assembly line

  • try to get product on the road as fast as possible
  • every delay costs money
  • try to identify and eliminate bottlenecks
  • KPI: lead time
  • establish the Flow of things

DevOps = more than Dev & Ops

  • collaboration of Dev & Ops
  • DevOps does not (necessarily) mean building up your whole tech stack on bare metal
    • provide self-service automation
  • DevOps is
    • Culture / Collaboration
    • Techniques
    • Tools

DevOps Prerequisites

  • Infrastructure automation
    • or at least well defined (automated) interfaces for Ops services
  • Ops knowledge in Dev teams
  • high level of automation

Recruiting of team members

  • T-Shaped people
  • certain Ops knowledge
  • identify required skills and possible gaps with skills in team
    • tech radar / skill radar

Architecture of Applications

  • have cloud native in mind
  • 12-factor apps
  • have backing services in mind

Development of Applications

  • Pairing
    • avoid knowledge bottlenecks
    • everybody in the team knows the codebase
    • Rookie + Ninja
  • Put EVERYTHING in version control
    • make changes transparent
    • enable roll backs, even for infrastructure
  • code reviews
    • knowledge sharing
    • enable feedback loop
  • keep dev, prod and test as similar as possible
    • avoid surprise in production
    • get early feedback

Deployment of Applications

  • automate everything
  • start with documentation
    • iterate by letting people do the job who were not involved initially
    • refactor and refine documentation
    • after manual review, automate it

Dev & Ops in Agile Workflows

  • Important: identify and reduce unplanned work
    • make work visible and transparent
    • all tasks on the board
  • rotating Ops
    • everybody has to do it & learn from Ops
    • refine documentation and processe
    • do not let Ops tasks destroy your sprint planning
  • establish Ops --> Dev feedback loop
    • have Ops in mind during development
  • identify bottlenecks and root causes and consequently eliminate them
    • improve automation
    • establish self-services
    • discuss requirements with Ops

Feedback

  • Establish and speed up feedback loops
  • Pair Programming
  • Code Reviews
  • Continuous Integration / automated tests
  • Continuous Delivery / fast feedback from customers

LEAN Approaches

  • Visualize your work (Kanban Board)
  • Identify Bottlenecks
  • Reduce Handoffs
  • Small Batches
  • WIP Limits
  • MVPs
  • 5 Whys
  • Actionable metrics (AARRR)
  • Build-Measure-Learn --> speedup this cycle
  • Pivot or Persevere

Tools for DevOps

  • Ticketing system
    • define requirements
    • define acceptance criteria
    • document your work
  • Dev workspace - Dev/Test/Prod parity
    • Vagrant
      • Dev & Prod parity (same OS, same configuration, same packages...)
    • Docker
      • e.g. for backing services
      • e.g. for quickly spinning up database with sample data
  • Version Control
    • provide transparent history of changes
      • link (JIRA) tickets in commits
      • write good user stories explaining what a change was made for
    • set up code review workflow
      • e.g. feature branches
      • no commits to master without review
      • establish a team guideline for what has to be checked in a code review
  • Continuous Integration server
    • run automated tests with every commit
    • make sure that merged features do not break the tests
    • integrate (production-like) integration stages into your test suites
  • Configuration management
    • keep your configuration in version control
    • provide staging for configuration management as well
  • Artifact repositories
    • build once, ship anywhere
    • agree upon a versioning schema
    • track versions in stages
    • provide proper release notes
      • what changes happend in a release
      • support troubleshooting for Ops (which change might have caused an incident)
  • Deployment Server
    • automate deployment (in any stage)
    • put your deployment scripts in version control
  • PAM (credentials store, vault)
    • central management of credentials
    • least privilege principle
  • Monitoring --> pre-incident (get an alarm BEFORE something goes wrong)
    • track all relevant KPIs / metrics
    • have reasonable alarms on critical metrics
    • introduce new metrics / checks as needed
  • Logging --> post incident (data for analyzing what went wrong after an incident)
    • centeral log management
    • provide all necessary data for easy debugging / analysing

Team tools for DevOps

  • motivate participation at meetups
  • have internal tech forums
  • introduce innovation days / hackathons
  • embrace (reasonable) introduction of new tools and technologies
  • do post mortems
  • continuous improvement by retrospectives
  • establish feedback loops

Resources

Online

Books

DevOps in General

Continuous Delivery / Continuous Integration

LEAN

@DimaMakuha
Copy link

In the e-commerce sphere, the speed and stability of applications are the decisive factors for success for us. We managed to significantly improve the quality and speed of releases thanks to competent automation of processes. devops services from Artjoker company artjoker.net, a team of guys who understand business tasks and technologies very well, helped us especially. This approach allowed us to make developments more transparent and reliable.

@JenyaMirnenko
Copy link

How often do you test your product during development? And have you had any experience of bringing in outside experts for testing?

@MaksimLenivenko
Copy link

The frequency of product testing during development, in my opinion, should be regular and integrated into each stage of the cycle. This helps to identify and eliminate errors in a timely manner, as well as improve quality. As for the involvement of external specialists, I have had experience of cooperation with teams providing ecommerce software testing services . This approach often helps to get a fresh look at the product and identify points that may be missed by the internal team. Ultimately, this increases reliability and convenience for end users.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment