Organize CI/CD chaos and make the invisible visible with a Maturity Matrix
I’m really excited to be sharing this technique with you. Maturity Matrix’s are something I learned from a software architect at Imdex when we were leading a major migration of legacy systems to Microsoft Azure. Since then I’ve used it with a bunch of different teams to help them improve their continuous integration and continuous deployment (CI/CD) process. Every single time I pull out this technique, people are surprised and delighted with how easy and effective it is. Maybe it’s even fun? If you can say something with a name like “Maturity Matrix” is fun…
Well, if you want to build a world class development team that delivers high quality code at a high pace then you need to have a world class CI/CD process.
But CI/CD can get pretty complicated. Whether you’re starting a shiny new product or trying to tidy up a crufty old legacy application, there are just too many different steps you can add to your CI/CD pipeline. The confusion is multiplied when (like most teams) you have multiple applications and services all of which have different pipelines at different levels of maturity.
The Maturity Matrix
Maturity Matrix’s help you organize the chaos. They take the invisible and make it visible. They are a super simple technique that helps you, your team and your stakeholders figure out what your CI/CD pipeline looks like now and what you need to do to improve it.
Open your table making application of choice. For this example I’ll be using Google Sheets.
Step 1: Create a row for each application or service.
Step 2: Create a column for each step in your ideal CI/CD pipeline.
Step 3: In each cell, rate how a well each application has implemented each step. I like to start with a stupidly simple good/ok/bad rating scheme with green/yellow/red.
Now you have a simple, clear and obvious view of the maturity of your CI/CD across all of your applications. Your whole team and external stakeholders can easily understand the current state and the places you need to improve.
Step 4: For each cell that isn’t green, create tasks to improve it and put those tasks in your work management system (Jira/Trello/etc).
Step 5: As you improve your CI/CD pipeline over time, keep the Maturity Matrix up to date.
So that’s it, it’s pretty simple.
Below are a few extra tips and tricks that I’ve learned over the years.
- For ratings, I like to start simple and then slowly make them more detailed. I start with a good/ok/bad rating scheme because it’s visual, obvious and often it’s enough. But if you want to get really specific, you can create custom rating systems for each column. Like for automated test coverage, you can decide specific percentages that are acceptable. Maybe your team decides 80% is the minimum and 95% is the goal.
- Always put tasks in your normal work management system. Please don’t put them in a wiki or a document or in TODOs in code. The only work that ever actually gets done is work in your work tracking system.
- Take periodic snapshots of your matrix so that you can see visually how it improves over time.
- As you add CI steps, keep an eye on the speed of your pipeline. Your goal is to maximize quality while minimizing the time it takes for changes to get from your developers to your users. Keep an eye on that balance.
- Start simple and set small incremental goals. If your automated test coverage is currently 2%, then maybe don’t set a goal of 95%, start with 5%. Once you reach 5%, then try for 10%. As long as the number is rising you’re improving. It’s more fun and engaging to set small incremental goals that you churn through rather than large unrealistic goals that are never achieved.
- Put the matrix somewhere where everyone can see it, like on a wiki. Realistically most teams don’t update wikis very often and this matrix will run the risk of becoming another dead document. But don’t beat yourself up, even if you never look at it again, the matrix has already delivered value to your team. So if you keep it up to date that’s great, and if you only use it once, that’s fine too.
Well, congratulations. Not only did you decide to read an article about CI/CD but you actually read to the end of it! You’re doing a great job 🙂