Or be careful what you measure because you’ll get it.
One of Agile’s most effective, least understood and seldom realized disciplines is that teams should “maintain ship-readiness” of their product at all times. Explaining the real value of this discipline in simple terms eluded me for years until I was talking to an accountant on a ski lift.
Before I talk about snow and mountain air inspired insights, let me explain what ship-ready means. It means that you should always be ready to deliver the output from your last iteration to your most valuable customer. For example, when my company, BEware, finished our last iteration we could have delivered it to our top customer, Fin & Key, without losing our much needed beauty sleep. Because we maintain ship-readiness, we worked to ensure that they could upgrade, have complete documentation, and high quality without spending extra cycles on release hardening.
The version that we’d ship to Fin & Key would probably not have any new features enabled (see tippy towers & Eric Ries on split testing) , but it would have fixed defects and the incremental code for those new features baked in. While we may decide to limit shipments to fixed times for marketing reasons, that must not keep us from always being ready to ship.
Meanwhile, back at 8,200 feet, my accountant friend was enrolled in Cost Accounting 101. To fulfill my mission as an Agile Subversive, I suggested reading “The Goal” by Eli Goldratt which comes out very strongly against the evils of CA. Goldratt’s logic is simple – if you want people to sub-optimize and ignore the overall system productivity then you’d assign costs to each sub-component of your system. The result in manufacturing is that people will always try to keep the most expensive machine 100% utilized even if that causes lots of problems elsewhere and drives up costs all over the factory.
Cost Accounting’s process of measuring on a per cost basis (instead of a system basis) causes everyone to minimize the cost at their area rather than collaborate to make the system more efficient. I’ve worked in many environments where management tried to optimize expensive developer time by off loading documentation, quality, and support to different teams. The result was a much less effective system where defects were fixed late (if ever), test automation was never built, documentation was incomplete, and customer field issues lingered like the smell of stale malt beverage in a frat house.
No one wanted these behaviors, yet they were endemic because the company optimized developer time instead of working product.
Agile maintains ship readiness because it becomes Engineering’s primary measurement. Making sellable product the top priority focuses team on systems and collaboration. It may not be as “efficient” to have a highly paid developer running tests; however, it does real economic harm if the developer continues to write untested code ahead of your ability to verify it. Even more significantly, a developer who plays a larger part in test, documentation, and supports is much more invested in fixing problems early.
If your company wants ship product then find a metric that gets you to that goal. For Agile teams, that metric is percent of iterations delivering ship ready product. My condolences if your team’s top values are milestones completed, bugs fixed, or hours worked.