DevOps: Building the Continuous Delivery Toolchain
DevOps is a capability that aligns culture, practices, and tools so that organizations can deliver high quality software at top velocity.
The two mainstays of DevOps are the CAMS model and the Three Ways.
- CAMS - Culture, Automation, Measurement, Sharing.
- The Three Ways - Flow <> Feedback <> Experimentation.
For DevOps to flourish, an understanding of culture and flow must come first. With the right perspective, teams can then use a common set of interwoven tools, or a toolchain, to streamline and accelerate routine work.
DevOps culture, practices, and tools culminate in continuous delivery: the ability to release on demand.
Toward that end, we provide this step-by-step guide to building your own toolchain from scratch. This guide is intended to be read alongside broader works, like The DevOps Handbook.
Each tool in the chain is covered in turn, and you may already have some bits in place. Feel free to adopt and adapt our examples to meet your own needs.
You do not need to implement the entire chain at once. If you are already using an agile methodology, a very good approach is to devote a portion of each iteration to building the chain step by step and introducing change at a steady rate.
One rule of thumb is to invest 20% of your velocity into continuous improvement. The dividends are astounding!
The toolchain is the foundation of a larger process often called the Continuous Delivery Pipeline. Although we may refer to the process as a chain, or a pipeline, continuous delivery is a loop. Many of the tools, or practices, provide feedback for future deliveries.
For more about the totality of DevOps, see
- What Devops Means to Me (John Willis)
- The Three Ways: The Principles Underpinning DevOps (Gene Kim)
- The DevOps Handbook (Audio Excerpt)
- The Continuous Delivery Pipeline — What it is and Why it’s so Important in Developing Software (Andrew Phillips)
- Welcome to DevOps (Sam Guckenheimer)
Put 1st things 1st
- Select and fully utilize an Issue Tracker to organize and authorize all work.
- Use a Version Control System to store source code and build scripts.
- Use a Configuration Management System to deploy infrastructure artifacts.
- Provision Equivalent Staging and Production Environments to establish a baseline.
Synergize
- Select a Branching Model, such as Trunk Based Development or Topic Branching.
- Standup a Continuous Integration Build Server to automate process.
- Build the trunk and Deploy to Staging on Every Merge.
- Provision Development Environments on Demand based on the trunk.
Seek first to understand, and then to be understood
Include an Acceptance Test Suite for features, stories, and subtasks.
- For each work item, include automated Unit Tests with sufficient code coverage.
Visualize work in progress using a Team Agile Board.
- Post dashboards on an Information Radiator that everyone in the office can view.
Begin with the end in mind
- Implement Feature Toggles to separate deployment from release.
- Construct a Value Stream Map to guide system-level improvements.
- Use a Feature Agile Board to track new features from specification through adoption.
- Use a dashboard or a Version Agile Board to track release preparation, certification, and deployment.
- For periodic versions, schedule Continual Builds of Complete Test Versions to vet the toolchain.
Retrospect
- For each work item, input a concise developer-facing description of the change, and generate a Technical Change Log for each version.
- Require Peer Review and Testing āāfor all changes.
- For periodic versions, hold Go/NoGo Milestone Checkpointsā to engage stakeholders.
- Conduct Root Cause Analysis to promote continuous improvement.
Be proactive
Publish a Coding Style Guide to enhance collaboration and establish consensus.
- Use āStatic Analysisā to identify common coding errors.
Implement Remote Event Logging for monitoring and analysis.
- Establish a Production Immune System to map trends and detect variations.
Teach the habits
- Maintain living Developer Design Documents for new features and capabilities.
- Publish API Documentation for integration points.
- File Troubleshooting Articles for commonly encountered problems and unusual events.
Sharpen the saw
- Create Sample Feature Data or a Production Data Subset to use with development environments.
- Maintain an External Regression Test Suite to exercise public API contracts.
- Monitor and analyze Feature Adoption as feedback to future planning.
- Improve the process by tracking Actionable KPIs aligned with specific business objectives.
While these 31 practices are not the only tools you will want in your shed, you will find that each one is essential to effective continuous delivery.
Please submit feedback to the DreamOps Success Group http://dreamops.org/group.
https://www.chef.io/blog/what-devops-means-to-me