Skip to content

Instantly share code, notes, and snippets.

@michaellihs
Last active October 26, 2018 22:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • 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

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