DevOps Fundamentals

DevOps is the practice of operations development engineers participating together in the entire service lifecycle, from design through the development process to production support

CAMS model

  • Culture – having dev and ops teams communicate more with each other
  • Automation – people over process over tools
  • Measurement – ability to measure – what’s happening, and if your changes are making any improvements (Mean time to recover MTTR appears, cycle time, costs, revenue, employee satisfaction)
  • Sharing

Concept to Cash

  • Amplifying feedback loops to help you with multi processes
  • Work culture that’s open to learning new things and experimentation (instead of falling into analysis paralysis)

DevOps Methodologies

  • People over process over tools
  • Continuous delivery (practice of coding, testing, and releasing features in small batches)
  • Lean Management (work in small batches, work in progress limits, feedback loops, visualization)
  • Change control (eliminate fragile artifacts, create a repeatable build process, manage dependencies, create an environment of continuous improvement)
  • Infrastructure as Code (systems treated like code, checked into source control, reviewed, built, and tested, and managed programmatically)

Practices for Success in DevOps

 

  • Kaizen is a popular dev ops cultural practice – means change for the better and we might roughly translate it to continuous improvement
  • Going to the actual place where the value’s created or where the problem is
  • Management by walking around
  • Define what you intend to do and what you expect the results to be, then you execute on that. Then you analyze the result and make any alterations needed
  • If newest plan is better than previous base line, it’s now the new base line
  • Plan, do, check, act gives people critical thinking skills
  • Five Whys, when there’s a problem, you ask the question why did it happen? And when you get an answer you ask why did that happen? Yu can repeat this as much as necessary, but five times is generally enough to exhaust the chain down to the root cause
  • Focus on underlying causes not symptoms (don’t accept answers like not enough time, do not accept human error as a root cause)

Agile Software Development

  • Process is iterative
  • Stresses collaboration
  • Promotes sustainable development
  • Waterfall goes through stage by stage

Seven Principles of Lean Software

  • Eliminate waste
  • Amplify learning
  • Decide as late as possible
  • Decide as fast as possible
  • Empower the team
  • Build in integrity
  • See the whole

Muda: work that absorbs resources but adds no value

Muri: unreasonable work imposed on workers and machines

Mura: work coming in unevenly instead of a constant or regular flow

Seven Wastes of Software

  • Partially done work
  • Extra feature
  • Relearning
  • Handoffs
  • Delays
  • Task switching
  • Defects

Build – Measure – Learn

  • Build the minimum viable product
  • Measure the outcome and internal metrics
  • Learn about your problem and your solution
  • Repeat. Go deep where it’s needed

Continuous Delivery

  • Code is always in a working state
  • Continuous Integration is the practice of building and unit testing the entire application frequently
  • Continuous Delivery is the additional practice of deploying every change to a production like environment and performing automated integration and acceptance testing
  • Continuous Deployment extends this to where every change goes through full enough automated testing. It’s deployed automatically to production.
  • Time to market goes down with continuous delivery
  • Quality increase, not decreases – gives room for experimentation
  • Limits your work in progress
  • Shortens lead times for changes
  • Improves mean time to recover
  • Builds should take less than five minutes
  • Make smaller commits
  • Don’t leave the build broken
  • Use a trunk-based development flow
  • Don’t allow flaky tests
  • Build should return a status, a log, and an artifact

Continuous Delivery Pipeline

  • Only build artifacts once
  • Artifacts should be immutable – doesn’t change during different stages
  • Deployment should go to a copy of production
  • Stop deploys if a previous step fails
  • Deployments should idempotent

Continuous Delivery: need to focus more on testing

  • Unit testing
  • Code hygiene (linting, formatting)
  • Integration testing
  • Security testing
  • TDD/BDD/ATDD (test-driven development – state desired outcome as a test, write code to pass the test, repeat; behavior-driven development – work with stakeholders, describe business functionality, tests are based on natural language descriptions; acceptance-test-driven development – end user perspective, use case automated testing, testing is continuous during development)
  • Infrastructure testing (starting up hosts)
  • Performance testing (load tests, etc good for nightly runs)

Container

  • Bundle app and dependencies in container and use that as the deployable artifact

Serverless

  • Functions as a service
  • Firebase
  • AWS lambda