Ever since Timothy Fitz coined the term continuous deployment, it has become more than a buzzword in the modern world of software development. Most development teams have adopted techniques and practices that enable agile and safe continuous software delivery. The magical aura around streamlining software releases is that- no matter how elegant your code is or beautiful your UI designs are, it all comes to whether you can reduce deployment time and ship the code to production.
Most high-performing teams focus on deploying code fast while maintaining the quality of their products. To put the correlation between frequent deployment and high performance into context, high-performing development teams have 46 times more code deployments as compared to their low-performing counterparts. Nicole Forsgren debunks this concept of software delivery performance in their book Accelerate: The Science of Lean Software and DevOps.
Now that you understand that frequently deploying changes to production is a worthy goal, how can development teams achieve it? In this article, we will share some software deployment best practices that you can follow to reduce deployment time and streamline your release pipeline.
1) Execute continuous tests
When deploying code to production, development teams should be confident in their releases. A combination of automated functionality, unit, integration, and regression tests can help speed up deployment. Instead of performing tests towards the end of your software production pipeline, focus on running parallel tests before pushing code to the production branch. This way, you can safely push small, verified changes down your deployment pipeline.
Smaller iterations increase the efficiency because you can test, deploy, and monitor code carefully without worrying about large changesets that require more effort and pose a greater risk. Other than performing continuous tests, development teams should implement a series of small, fast-moving code reviews. Developers tend to be more thorough and quicker when reviewing smaller code batches as opposed to large pull requests.
The bottom line here is that neither automation nor developer tooling will make your deployment safe or fast if you focus on large developments, which often lead to poor code reviews and testing.
2) Use feature flags during deployment
Also known as feature switches or feature toggles, feature flags are a development technique that allows teams to enable or disable an application functionality or feature during runtime, without writing or deploying new code. With feature flags, you can build conditional features and make them available only to a specific group of users. The idea here is that when the feature flag is on, your new code will be executed. When turned off, the code is skipped.
Using feature flags gives you more confidence during deployment since you can monitor and modify your application's behavior without pushing disruptive code changes to a live environment. By giving you better control and flexibility for experimentation, feature flags streamline the development and deployment process. This ultimately results in quicker code merging, progressive deployment, faster rollbacks, and efficient release cycles.
3) Implement gradual rollout
Far too often, development teams deploy application changes that take effect almost immediately, globally. In some instances, such changes cause serious outages, especially if there were misconfigurations or the code shipped breaks existing services. The outage of critical services has a serious impact on business continuity and user experience, and the idea of debugging in production is even more scary. So, how can you avoid getting to this point? By rolling out application changes gradually.
Gradual rollout is a kind of phased release that allows you to safely roll out your solution to a small scope (number of users or tenants), and gradually expand the rollout scope as you find the changes you made are good. Deployment for your changes will be instantaneous, but only scoped to the subset of users you choose. This gives you the ability to halt deployment or rollback when there is an issue without disrupting customer experience. Similarly, if you'd like to proceed further with deployment after monitoring your service health, you can increase the scope of your rollout and eventually complete the rollout.
For instance, in a scenario where you plan to deliver a complete solution to a group of 100 users, you can first release it to a subset of five users. The first deployment gate would be limited to five, but the rollout scope would be increased gradually over subsequent deployment gates until 100% deployment is achieved.
4) Automate as much as possible
If there's something that can significantly reduce your deployment speed and frequency, it is the lack of automation. A build pipeline that consists of manual compilation, testing, issue tracking, and deployment processes makes it impossible for teams to deploy code as fast and often as they'd want.
Quick deployment is made possible by investing in tools that allow you to automate key stages and processes in your development cycle. A good example would be using ZenHub's workflow automation to automatically sync your projects as GitHub issues are updated or closed. Integrating a tool like ZenHub in your workflow would solve common pain points when tracking your team's development work, including handling multiple pull requests, tracking related issues, and making regular status check-ins.
Automating your team's workflow eliminates most deployment bottlenecks, thereby speeding up your production deployment.
5) Maximize the benefits of collaboration through an open platform
Lying at the heart of DevOps, collaboration is the main driver of success in today's agile software development. Development teams should leverage platforms that increase operational transparency in their workflows. When planning a project, for instance, teams can use a tool like ZenHub for automated sprint planning. This gives all team members insight into the sprint schedule, planned effort, project milestones, and status of current work items.
This level of openness when collaborating can radically improve the speed at which teams move. Another practical example would be using ZenHub's async planning poker to ensure all team members contribute to important project issues with minimal context switching. As a project leader, you do not want a situation where your developers are fully focusing and "in the flow", only to be distracted by unnecessary interruptions. The planning poker in ZenHub helps team members focus only on issues that require their attention, thereby making them more productive.
Using these tools will eliminate collaboration constraints that prevent developers from unlocking their full potential.
6) Monitor application performance
Application monitoring helps teams keep track of deployment errors in both development and production environments. The good thing is that tracking application performance shouldn't be a huge challenge if you leverage the power of automation. To reduce deployment time, keep a keen eye on key performance metrics such as database performance, load time, logs, exceptions, server utilization, and other factors that provide insight into the application.
While it is almost impossible to prevent every deployment error, tracking these metrics helps you anticipate most errors before they occur. When the APM service alerts you on an issue, it becomes easier to identify the source of the problem and solve it. Additionally, you can easily determine areas that need improvement, prioritize them, and deploy appropriate fixes in a timely manner.
Deploy faster with ZenHub
Rapid deployment is one of the greatest strengths of agile development. However, moving too fast can be a major weakness if your team does not have the right processes and automation tools in place. If you’re looking to develop a solid deployment strategy that supports frequent release cycles, take advantage of ZenHub’s amazing stack of automation features.
Want to learn how top performing teams ship faster? Download our free eBook: Project Management for Teams in GitHub.