Last year at Ve, we embarked on a massive code restructuring from a monolith TFS repository to granular Git repos, and a migration from fixed data centre infrastructure to cloud (at the same time...). This worked well in terms of enabling us to scale the company, and we now find ourselves with a large number of teams, working on an even larger number of projects.
The distribution of projects is not even, some teams will have one project with the sole objective of maintaining high velocity throughput, others will work on multiple projects where the focus is on delivering new UI features rapidly, and still others work on multiple API projects which are focused on coordinated releases and avoiding breaking changes.
This breakup has highlighted the broad spectrum of quality across projects, and we needed a way of grading our projects so we could better channel effort into improving processes, infrastructure and automation where it would be most effective. To this end, we created a number of maturity level categories each project would be graded against. The three categories are:
In this post I'm going to go over what the different levels are for maturity, and what is involved in reaching them.
Environment maturity covers the quality of infrastructure and the level of automation in place. At the lowest level, we have a physical box with manual setup and install required. From there, it goes all the way to fully automated Infrastructure-As-Code deployments with elastic scaling and intelligent failure management.
Deployment maturity is, at least for me, the most exciting one. As a developer, I love writing code, but code on its own is useless without a delivery mechanism (oh and storage / data, but whatever :) ). So Deployment maturity is all about being able to ship code that you trust, and is robust to production in the shortest period of time, with the minimum amount of disruption. This is really about driving the DevOps culture into development teams and getting everyone on-board with looking after their own deployment pipelines and systems monitoring. (I may spend too much time looking at the pretty graphs that tell me our app is not broken. Editor note: We don't mind this, it keeps Tristan distracted.)
QA maturity covers the quality of testing and test infrastructure. This ranges from no testing, through manual testing, unit and integration testing, all the way up to full test automation with performance and penetration testing as part of our deployment pipeline.
That's how we rate our projects at Ve. Some projects are still very much a work in progress and slowly climbing the maturity levels, others are pretty much the top of the scale, as is expected in any large company.
So if that sounds interesting, and:
Then drop us a line, we are hiring.
Images credit: Credit to Simon Larkin for the maturity level overview and images.