The Challenge
I started leading a development team formed initially by three developers. At that moment, I was doing all the Code Review, functional testing, and releases, which was fine, as we were a small team.
However, as new members incorporated to the team, I started to feel overwhelmed. Soon, I found myself reviewing dozens of Merge Requests every day and working extra hours to achieve milestones. As you may imagine, that's not scalable.
The challenge was finding a way to manage a growing development team while keeping milestones.
My Approach
The first thing I did was divide the whole team into smaller ones (~4-6 people per team). Then, we embraced Agile principles to manage our milestones and hired QA roles.
Once the teams were formed, I provided goals (what needs to be done) to the teams and let them figure out the way to achieve them (how to do them). To guarantee collaboration among different roles (QA, Developers, Design, DevOps), we included each one of them in specific teams so that they could be part of the development process since the beginning.
I also gave the teams trust and autonomy, so they could feel free to organize themselves and innovate. That way, each team became the owner of their code review, testing, and releases. We also created a shared knowledge repository and summits, in which every team would share its own experience and expertise.
As teams were innovating, it was inevitable to make mistakes along the way. However, each failure was also learning. Instead of just preventing failure, I helped the teams implementing systems to fast failure recovery, so when they failed, they could recover, learn and improve quickly. So, whenever there was a failure, instead of asking "Whose fault was this?", we asked "What happened? What can we learn from this? What can change to avoid this in the future?".
However, failure has to be non-lethal, as nobody wants the whole system to break down. To achieve this, we decoupled the software in little pieces and delivered software changes to just a few customers, so failures would only affect a tiny portion of the system and users for a short period - as teams know how to recover fast. Once new features passed the production testing, we delivered them to all customers.
The Results
Overall, we discovered that focusing on developing people, and not just products, gives the best results. Specifically:
- We created a flexible workflow based on Agile that was continuously improved by the whole team.
- We increased productivity and reduced number of bugs, which most of the times only affected a few customers.
- Developers were happier coding the way they wanted to, which also gave them a sense of ownership.