It doesn't matter how quickly you can build software if you can't get it in front of users. What's more, once it's out there, you need to be able to tell if it's actually doing what you'd hoped and ship adjustments fast.
Here's my roundup of some of the most useful resources for learning how to create a reliable, repeatable route to production that will help you release code faster.
Setting the scene
It’s always good to start with the basics. The founders of eXtreme Programming advocated years ago for small releases. Take a look to remind yourself of this essential principle.
John Willis wrote "What DevOps Means to Me" 10 years ago and did a great job explaining the original thoughts behind the DevOps movement.
Watch Dr. Nicole Forsgren talk about how you can Double the Awesome and increase both the speed and stability of your releases.
The Puppet State of DevOps Report is one of the best ways to get the lay of the land today.
"What's Next in DevOps" is a recent article on InfoQ discussing trends in the industry.
Continuous integration
There's no point in being able to release quickly if your code's not ready. Take a look at the book Continuous Integration: Improving Software Quality and Reducing Risk for the full roundup of practices to make sure it is.
Paul Hammant has a great, practical, five-minute overview of trunk-based development.
Dave Farley's blog is always engaging, and he's good at reminding us to be careful with branching.
Travis is a really easy-to-use CI server if you’re looking for a simple one to start with.
Jenkins is a full-featured, open-source CI server that's been around a long time.
Continuous delivery
Dave Farley and Jez Humble's book, Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, is the canonical guide on this enabling set of practices.
Not sure how to make it happen? Humble does a great talk on the process of adopting continuous delivery. He also has a talk about all the objections to continuous delivery he's encountered.
Kent Beck has some handy ideas on what needs to change in order to increase release frequency, which he covers in a talk called Software G Forces: The Effects of Acceleration.
Confused about the differences between continuous integration, continuous deployment, and continuous delivery? This post from Sten Pittet will clear things up.
If you're working with microservices, Sam Newman has a talk on deploying and scaling microservices.
People often forget that deploying to production isn't really the last step. David Rice has a good write-up about continuous delivery and feedback loops.
For a bit of fun, why not deploy with an actual button?
Techniques for less risky deployments
A list of software development resources can't really be considered complete without a couple of entries from Martin Fowler. His post on blue-green deployments will help you on your way to zero-downtime releases.
Fowler also has a good write-up on canary releases, which are a way of reducing the risk of releasing features by doing so gradually.
Unleash is a fantastic, full-featured feature toggling library that I've been using recently.
Infrastructure as code
Automating your deployment isn't enough. To really avoid wasting time, you’ll need to automate your infrastructure too. Kief Morris's book, Infrastructure as Code: Managing Servers in the Cloud, is a great introduction.
Whether you're debugging a failed deployment or writing a Docker file, you're probably going to need to write a little bash. Start with this list of handy commands. Here's a similar list of PowerShell commands if you're deploying on Windows.
Next you might want to try your hand at one of the popular configuration management libraries: Chef, Puppet, or Ansible.
Want to know about containers? Listen to this interview with core Docker maintainer Jessie Frazelle on the Google Cloud Platform podcast (starts at about 6:30).
Nigel Poulton has a good introductory course about Kubernetes on Pluralsight.
If you’re going to be deploying to the cloud, Terraform will be your friend, too.
Increasing your confidence
It's all good being able to release code quickly, but how do you know everything's working? Unless you have high confidence that your changes will withstand the unknown—or confidence that you will find out when they don't—you won't be able to release more often, because you'll be too scared.
Charity Majors explains that observability is about unknown unknowns and explains the most crucial parts of learning what's really going on.
Meera Rao has a very comprehensive article on how you can include security checks in your deployment pipeline.
Can your system deal with the unpredictable? Here's a good recent write-up about chaos engineering on InfoQ.
Watch John Allspaw talk about how people are the most adaptive part of your system.
Tanya Reilly does a great job explaining why resilience shouldn't be an afterthought.
Real stories
All the theory, tools, and opinions in the list thus far should give you the knowledge you need to improve your release frequency and stability. But the truth is that you'll get stuck somewhere along the way when implementing these ideas in your own unique context. When that happens, it's often helpful to turn to the stories of how other people navigated their journeys.
Nick Craver has an in-depth post showing you how deployment works at StackOverflow.
Watch how they scale continuous delivery at Walmart.
Sherry Chang presented "Intel's Journey to Large Scale DevOps Transformation" at the DevOps Enterprise Summit five years ago.
My colleague Dan Abel has a great series of blog posts on how we do instrumenting and observing at Tes to make sure we know what's happening in production.
If you’re working in .NET, I’m sure you’ll love listening to Rachel Laycock tell you about the pain she was feeling back in 2013 trying to implement continuous delivery on Windows.
- For a fascinating view into how continuous delivery principles can be employed in a very different environment, listen to Scott Hanselman's podcast where he interviews Jafar Soltani on how to his team does continuous delivery in game development.
Keep learning
Take a deep dive into the state of quality with TechBeacon's Guide. Plus: Download the free World Quality Report 2022-23.
Put performance engineering into practice with these top 10 performance engineering techniques that work.
Find to tools you need with TechBeacon's Buyer's Guide for Selecting Software Test Automation Tools.
Discover best practices for reducing software defects with TechBeacon's Guide.
- Take your testing career to the next level. TechBeacon's Careers Topic Center provides expert advice to prepare you for your next move.