Like successful Agile transformations, becoming a mature DevOps organization takes time and requires a mindful approach. Effective DevOps practices are not born- they are grown. And, just like Agile transformations, you must take on a build-measure-learn approach to your DevOps transformation if you are building a mature practice.
Modern and mature DevOps practices include (in no particular order):
- Agile development practices
- Automated testing
- Continuous integration
- Managed environments & configuration as code
- Monitor and auditing systems
Of course, it’s unlikely that you’ll have the ability to implement all 5 of these practices into your DevOps practices at the beginning. In fact, the most effective DevOps practices leverage an Agile approach to DevOps transformation. By taking a build-measure-learn approach to building out a DevOps practice, you’ll likely find that these DevOps practices will naturally evolve. Let’s take a quick look into each of the 5 DevOps practices to see how you can begin your transformation.
Agile development practices
Agile organizations are already on their way to building a successful DevOps organization. The adoption of Agile and Lean development processes and methodologies are pivotal to DevOps. Healthy DevOps practices can naturally evolve from healthy Agile practices. As development organizations get faster, the speed of production releases must also increase. As long as operations and development have healthy communication practices, Operations’ release cadence will naturally increase, provided a few other DevOps practices are observed. Speed increases can lead to a decrease in quality so test automation is essential to improve the cadence of your production releases. Speed increases can will also lead to increased requests for new environments. The burden of provisioning environments will tax the limited resources of Operations, so managed environments are essential, which will naturally lead to the maintaining of configuration as code.
To increase the cadence of releases, developers will need the right tools to mitigate issues inherent in building software. Speed can introduce error, so it’s important to make sure that software is tested frequently and thoroughly. Because development and tester resources are likely limited, you should be unit testing your code. It’s not reasonable to expect all of your legacy code to be unit tested, but you should be taking the time to create unit tests for your new code. The biggest resistance to creating unit tests is that it takes too much time. But if you don’t take the time to create unit tests now, you’ll be spending that time resolving bugs which are introduced as you build off your code base. Unit tests save time and headache in the long run and lead to faster release cadences.
Continuous Integration (CI) and Continuous Delivery (CD) are the holy grail of software development. Everyone wants it, few have it. That’s because CI requires discipline- discipline to create quality unit tests and to build highly decoupled code that can be easily replaced and updated. Monolithic code design makes it hard to unit test with any level of confidence, so a tighter, more decoupled approach makes moving to CI/CD easier. A mature DevOps organization is CI/CD ready and able.
Managed environments and configuration as code
Manual processes slow things down. We like our manual processes because we all like control, but we know that automation saves time and headache. Manual deployment of environments in support of development team needs is costly. Pre-defined environments and automated deployments save time and money. By defining environment configurations and then storing them as code, DevOps teams can easily provision an environment and have it pre-configured quickly and easily.
Monitor and auditing systems
The mature DevOps team doesn’t just build and measure, but it learns. It learns from the data it gathers. Monitoring and auditing systems are key to understanding what is going on and essential for learning. Monitoring and auditing are often the last tools DevOps teams put into place, but it is none-the-less a fundamental tool in a DevOps organization. How can you learn if you don’t understand what’s happening? And how else can you authoritatively know what’s happening without monitoring and auditing systems?
The path to a healthy DevOps organization starts with assessing what your strengths and challenges are. Are your development and operations organizations communicating effectively and working together in an effective way? Do you have a healthy agile development practice? Are you using cloud technologies in support of your environments? Do you automate? Do you use configuration management tools? These are but a few questions you should be asking yourself.
Here are a few ways you can immediately improve your DevOps practices:
- Use DSC and PowerShell to manage your configuration.
- Leverage Azure for managed development and test environments.
- Increase the amount of unit test code coverage you have.
- Improve your software development agility. (Check out our “Hack Your Agility” Blog!)
- Start using dashboards you already have available (Azure, Chef, Jenkins, and MySQL to name a few)
Some of these recommendations are easier to implement than others, but all of them will deliver rewards in labor savings, and improved delivery times.
If you’d like to know more about ways to improve your DevOps practices, let us create a custom DevOps roadmap for you, help you improve your agility, coach you on ways to adopt configuration as code, and/or improve your unit testing practices. We are DevOps experts and would love to help you!