Stackify CEO Matt Watson said the #1 problem with agile development is lack of confidence in deployment. Rapid deployment, one of agile’s greatest strengths, can also be a major weakness if testing and automation are not properly developed. Moving too fast without the right processes in place can lead to errors, downtime, and poor user experience.
However, companies can gain a major advantage over competitors when agile deployment is done right. Not only is agile (and particularly DevOps) faster, it also leads to fewer failures and quicker recovery time.
That’s why so many companies today have adopted agile development or DevOps. If you’re trying to improve your deployment process, consider the 8 best practices of agile deployment. Keep in mind that every company and every application is different. Use these best practices as a guide to developing a unique deployment process for your team.
Deploying new software can be a complicated task, but it’s simple once you have a process. Nothing prepares a team for success like a checklist. This app deployment checklist reminds you to complete critical tasks both before and after deployment. One crucial, often overlooked, step of deployment? Knowing your KPIs.
“Every app should have some form of key performance indicators or metrics that can be used to know if everything is running smoothly,” said Watson.
Of course, this checklist is just a sample. Use it as inspiration to make a customized checklist that perfectly suits your team’s needs.
Deployment at the speed of DevOps is made possible by a fleet of tools that let you automate key stages of the software development life cycle. Each project is different, so there is no perfect set of tools for every team. Generally, you want tools that work natively with your application infrastructure and integrate with your other tools. Jenkins, a continuous integration/continuous delivery server, is popular because the open-source platform supports thousands of plugins with other tools.
Check out this list of 25 deployment tools to get started on your toolkit.
One of the most important tools for successful agile deployment is a continuous integration (CI) server. CI servers pull in the source code from all developers and test it together in real time. This helps teams avoid “integration hell”, where code works on a developer’s workstation, but not together in the main branch.
CI servers are sometimes called “build servers” because they take the source code and package it into an application artifact (this is called “building”). Continuous integration also incorporates principles of continuous testing, where teams constantly collect feedback in order to catch problems as soon as possible.
Continuous integration and continuous delivery (CD) are often mentioned in one breath, but they are two different practices. Once the code is integrated and the application is built, CD involves packaging and preparing the code for deployment. The application is put in a pre-production environment, or a replica of the actual production server. Rigorous testing takes place during the delivery phase to ensure the application will work once deployed.
The goal of continuous delivery is to have applications that are always ready to deploy. Not only does this speed up software deployment, it has also been proven to produce higher quality software. Often, CI and CD can be automated together with tools like Jenkins, or you can find two tools that support each other, like TeamCity and Octopus Deploy.
If you’re manually deploying new versions of your software, you’re doing it wrong. Deployment is a complex process, and doing it by hand leaves too much room for human error. Deployment automation reduces errors, speeds up deployments, and makes the process so easy, practically anyone on your team can do it.
The simplest form of deployment automation is the use of scripts to deploy specific actions in a specific environment in a specific context. For more advanced automation, use any one of the software deployment tools on the market today. Many CI/CD tools also support automated deployment.
Continuous deployment takes continuous integration and continuous deployment a step further. It involves automatically deploying new versions of the software to customers, typically every time a developer makes a change. For a change to be automatically deployed, it would have to pass all tests in the CI and CD stages. Continuous deployment requires advanced testing automation and an acceptance of bugs in the production version. Continuous deployment benefits from incremental rollouts, which can be rolled back if an error occurs.
Continuous deployment isn’t for every team. While it speeds up your release rate, it requires high upfront investment in CI and CD testing to ensure deployments are as error-free as possible
For a complete overview of continuous integration, delivery, and deployment, check out these interviews with DevOps experts on the subject.
Once you deploy a new version of your software, keep an eye on your key metrics. Common deployment KPIs include server utilization, exception rates, log volume, and database performance. If there’s a performance issue, it’s also important to know where the issue is coming from. APM tools like Retrace let you monitor all of your KPIs and track deployment so you know the source of problems when they arise.
You want to be able to deploy with confidence, and that means always having a rollback strategy in case something goes wrong. When an error occurs upon deploying a new version, sometimes the best solution is to switch back to the last known working version of the software. There are release automation tools like Automic that support rollbacks, or you can keep a backup copy of your latest version until you know the new one is working properly.
The best case scenario for software deployment is that it becomes a mundane, uneventful task. It should never get in the way of all the hard development work of you and your team. By developing a process, choosing the right tools, and automating as much as possible, you can be confident that each deployment will perform just like you intended: awesome.
- Continuous Testing Requires Faster Feedback Loops - May 21, 2018
- Kubernetes as a Service - May 10, 2018
- 7 Code Merge Tools to Make Your Life 7x Easier - April 17, 2018
- Troubleshooting vs Debugging: What’s the Difference & Best Practices - April 10, 2018
- A Developer’s Guide to Cloud Adoption and Paths - March 27, 2018