Working DevOps

Taylorism and Working in Silos

Working DevOps:

  • Culture of teaming and collaboration

  • Agile development as a shared discipline

  • Automate relentlessly

  • Push smaller releases faster

    Taylorism:

  • Adoption of command and control management

  • Organizations divided into functional silos

  • Decision-making is separated from work

Impact of Taylorism on IT:

Working DevOps Working DevOps

Software development is bespoke:

  • Software development is NOT like assembling automobiles

  • Most of the parts don’t exist, yet

  • Software development is craft work

  • Taylorism is not appropriate for craft work

    Abandon Command and Control:

  • Command and control is not Agile

  • Stop working in silos

  • Let your people amaze you

Software Engineering vs. Civil Engineering

Software engineering is organic:

  • Software stack is constantly updated

  • New features are being added

  • System behavior changes over time

  • Yet we treat software engineering like a civil engineering project

    The project model is flawed:

  • The project model doesn’t work for software development

  • Treat software development like product development

  • Encourage ownership and understanding

  • Software engineering is not civil engineering

  • Maintain stable, lasting teams

Required DevOps Behaviors

Diametrically opposed views:

  • Enterprises see “new” as complex and time-consuming
  • DevOps delivers a continual series of small changes
  • These cannot survive traditional overheads

A clash of work culture:

Working DevOps Working DevOps

The no-win scenario:

  • Development wants innovation
  • Operations wants stability

Working DevOps Working DevOps

Operations view of development:

  • Development teams throw dead cats over the wall

  • Manually implemented changes

  • Lack of back-out plans

  • Lack of testing

  • Environments that don’t look like production

    Development view of operations:

  • All-or-nothing changes

  • Change windows in the dead of night

  • Implemented by people furthest away from the application

  • Ops just cuts and pastes from “runbooks”

    No-win scenario:

  • If the website works, the developers get the praise!

  • If the website is down, operations gets the blame!

    Required DevOps behaviors:

Working DevOps Working DevOps

Infrastructure as Code

  • Described an executable textual format

  • Configure using that description

  • Configuration Management Systems to make this possible (Ansible, puppet etc.)

  • Never perform configurations manually

  • Use version control

    Ephemeral immutable infrastructure:

  • Server drift is a major source of failure

  • Servers are cattle not pets

  • Infrastructure is transient

  • Build through parallel infrastructure

    Immutable delivery via containers:

  • Applications are packaged in containers

  • Same container that runs in production can be run locally

  • Dependencies are contained

  • No variance limits side effects

  • Rolling updates with immediate roll-back

    Immutable way of working:

  • You never make changes to a running container

  • You make changes to the image

  • Then redeploy a new container

  • Keep images up-to-date

Continuous Integration (CI)

CI vs. CD:

  • CI/CD is not one thing
  • Continuous Integration (CI):
    • Continuously building, testing, and merging to master
  • Continuous Delivery (CD):
    • Continuously deploying to a production-like environment

      Traditional Development:

  • Devs work in long-lived development branches
  • Branches are periodically merged into a release
  • Builds are run periodically
  • Devs continue to add to the development branch

Working DevOps Working DevOps

Continuous Integration

  • Devs integrate code often
  • Devs work in short-lived feature branches
  • Each check-in is verified by an automated build

Working DevOps Working DevOps

Changes are kept small:

  • Working in small batches

  • Committing regularly

  • Using pull requests

  • Committing all changes daily

    CI automation:

  • Build and test every pull request

  • Use CI tools that monitor version control

  • Test should run after each build

  • Never merge a PR with failing tests

    Benefits of CI:

  • Faster reaction times to changes

  • Reduced code integration risk

  • Higher code quality

  • The code in version control works

  • Master branch is always deployable

Continuous Delivery

“Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.” — Martin Fowler

Release to production at any time:

  • The master branch should always be ready to deploy
  • You need a way to know if something will “break the build”
  • Deliver every change to a production-like environment

CI/CD pipeline:

  • Automated gates that create a pipeline of checks:
    • Unit testing
    • Code quality checks
    • Integration testing
    • Security testing
    • Vulnerability scanning
    • Package signing

A CI/CD pipeline needs:

  • A code repository
  • A build server
  • An integration server
  • An artifact repository
  • Automatic configuration and deployment

Continuous integration and delivery:

Working DevOps Working DevOps

Five key principles:

  1. Build quality in
  2. Work in small batches
  3. Computers perform repetitive tasks, people solve problems
  4. Relentlessly pursue continuous improvement
  5. Everyone is responsible

CI/CD + Continuous deployment:

Working DevOps Working DevOps

How DevOps manages risk:

  • Deployment is king
  • Deployment is decoupled from activation
  • Deployment is not “one size fits all”