How to achieve a DevOps best practice in your organisation
As agility and speed to market become increasingly important for enterprises' survival in a highly competitive and dynamic business landscape, the popularity of DevOps has ballooned exponentially and is becoming a standard way of working for many companies.
DevOps is the software development approach that focuses on fostering collaboration between the teams that create and test applications (Dev) and those that maintain them in production environments (Ops).
Today, organisations globally as well as those in Australia and New Zealand are turning to DevOps to address the increasing pressure to deliver higher quality apps within a shorter period of time. Its ultimate goal is adding increased value to the customer and enabling organisations to react faster to change in the business.
The 2016 State of DevOps Report found that organisations employing DevOps are outperforming their lower-performing peers. They deploy 200 times more frequently, with 2,555 times faster lead times, recover 24 times faster, and have three times lower change failure rates.
Below are some principles and practices we've developed that will enable you to getting a step closer to achieving a DevOps-focused mindset in your organisation.
Plan
- Define expected impact upfront: Define the expected impact of developing an application or feature upfront. Consider how this will affect areas such as network configuration, security, and architecture. For instance, accounting for the growth of the number of concurrent users or transaction count ensures that your infrastructure capacity is fit and ready for the workload increase.
- Immediate provisioning: Automating your infrastructure provisioning activities will definitely boost your development and testing speed. Technologies such as Infrastructure as Code on top of virtualized servers or cloud providers can be a huge help.
- Anticipate failure: Having a disaster recovery plan is not enough to avoid disaster. It is also important to practice failure scenarios on top of a self-healing infrastructure. Plan for simulations during development cycles, as well as in production during off-peak hours, to guarantee the effectiveness of your disaster recovery plan.
Develop and test
- Develop based on production: Mimic production as closely as possible. Validate your apps against production-specific constraints early in development rather than dealing with them after the rollout. Bootstrap production data, simulate integrations, and test on target user devices.
- Continuously integrate your code: Regularly enforce a continuous integration approach and enforce the consistency of ongoing developments over the existing codebase. Run automated test scripts to pinpoint any breaking changes for developers to act upon them earlier in the development process.
- Trace all changes: Use a tool to manage the full lifecycle of anything that impacts your applications, from defects up to business requirements. Tracking every action performed along the way lets you have full traceability from origin, all the way down to the application version that implemented it.
Deploy
- Register your configuration: Register all development configuration activities in a centralised shared repository. This ensures they are later applied in the deployment process to subsequent environments. Don't let these changes be forgotten only to be recalled when operational errors start piling up.
- Orchestrate deployment process: Create a deployment script where you define all steps of the deployment process for each application, including rollback procedures. Apply it in pre-production environments and validate the deployment process to ensure reliability and consistent behaviour when your application reaches production. Automate your script execution to increase your efficiency even further.
- Compress delivery cycles: The sooner you reach production, the sooner you can start adding value to the business. Compressing delivery cycles through process automation and scope minimisation will help you increase the speed of delivery of new features with reduced risk.
Monitor
- Measurement is everything: Measure your apps' impact on your business and customer base once they reach production. Extract metrics from multiple sources and build dashboards with a real-time picture of your application activity and customer experience. Do it also while in development to identify potential risks and optimisation points in advance.
- Identify trends and deviation: Leverage the metrics collected from your applications and infrastructure to establish a baseline pattern for your applications. Identify deviations from the expected behavior and proactively address issues to reduce response times.
- Amplify feedback loops: Come full circle by impacting the focus and priorities of each stakeholder. Make sure all collected feedback is shared among everyone in the organisation and incorporated back into the development pipeline.