The only thing that matters is the time it takes to ship code and validate assumptions. Everything else should be in support of this.
When teams grow, they transition from people-sized problems to team-sized problems. People-sized problems require a few people and result in quick decisions and a manageable backlog of work. Team-sized problems need the effort of teams of people, wider consensus, and more tradeoffs.
Growth always results in team-sized problems and a pile-up of organisational and technical debt. Organisational debt results in the inability of organisations to make quick decisions while technical debt makes validating these decisions harder. These reinforce each other: the longer organisations take to make new decisions, the longer teams evolve without a clear strategy. Debt then builds up faster as more energy is injected through new code and processes. Yet, no problem can be solved perfectly: any work will create more work.
The initial panicked response to this is to eliminate all debt and add new processes. But, debt is a sunk business cost that will evolve and should be treated as such. The focus instead should be on debt management, rather than debt elimination, guided by the ability of a team to ship and validate decisions as quickly as possible. As a company grows into team-sized problems, it will need team-sized strategies to manage debt. People-sized solutions are a misfit for team-sized problems.
Measuring the build-up of debt is not easy. Engineering metrics like code test coverage are useful but incomplete and organisational metrics lack actionable details. The only metric that matters is the time it takes to ship code and validate assumptions. Everything else should be in support of this.
Planning work and predicting the future is hard. When teams grow, rather than investing in better planning accuracy, the focus should be on managing debt by acknowledging its sunk cost and removing obstacles to move fast and just ship things.Thanks to Caterina Bellinetti. Image by airpix (CC BY 2.0).