Over a million developers have joined DZone.

Optimize the Whole = Measure at All Levels

DZone's Guide to

Optimize the Whole = Measure at All Levels

· Agile Zone
Free Resource

See how three solutions work together to help your teams have the tools they need to deliver quality software quickly. Brought to you in partnership with CA Technologies

We know that measuring (and awarding) the wrong things in a system leads to nasty side-effects. And we know that self-organization allows a system to optimize for itself. In systems theory these concepts are known as the Sub-optimization Principle:

If each subsystem, regarded separately, is made to operate with maximum efficiency, the system as a whole will not operate with utmost efficiency. - General Systems Theory (Lars Skyttner)

The answer to this problem, and one of the basic principles of lean software development, is to always optimize the whole. Peter Drucker once said: “what gets measured gets managed,” and an alternative saying is: “what you measure is what you get (WYMIWYG).” Logically it follows that, in order to get an optimized whole, we have to measure the whole. What you measure (and constrain) has to cover everything, from start to finish, from top to bottom, or else the unmeasured and unconstrained parts in the system will self-organize toward sub-optimal results.

Many times I have struggled with the sub-optimization principle. I have measured overrun on projects at the team level, and subsequently got complaints from some team members that they were not responsible for the overrun, because they only got involved later in the project. I have measured individual skills, and subsequently got complaints that those particular skills had nothing to do with getting products delivered to the customer. Sometimes it seemed my only reliable metric was the steady number of complaints from people about the metrics.

Agile experts strongly believe that team members have to self-organize to optimize the output of the whole team, and not of the individual team members. I agree. But then many agilists suggest to measure only teams, not individuals. That’s where I am of a different opinion.

If this were a correct approach, then the same reasoning would apply to teams within a business unit, and business units within an organization. In every case measurement of (only) the subsystem would lead to sub-optimization at the next higher level. Taken to its extreme there would be one and only one proper metric: “continued survival and success of the whole organization,” which doesn’t look like a particularly useful one to me. (Note: even “profitability” is not a good metric at the organizational level, now that the credit crisis has proved that this metric alone also leads to sub-optimization.)

Evidently, optimize the whole cannot mean that we need to move all metrics to higher organizational levels. After a few recursive steps there wouldn’t be a sensible metric left to use. A more logical approach is to ensure that the combination of our metrics leaves no gaps in our measurements and understanding of the entire system. A metric of individual performance is fine if and only if it is augmented with metrics at the team level. And metrics concerning individual teams are OK if and only if supplemented with metrics for entire business units, and the organization as a whole.

One could even turn this into a fifth agile value:

Global metrics over local metrics.

While there is value in the item on the right, we value the item on the left more. But that doesn’t mean that the item on the right is unimportant…

(image by Pink Sherbet)

This article will be part of the book Management 3.0: Leading Agile Developers, Developing Agile Leaders. You can follow its progress here.

Discover how TDM Is Essential To Achieving Quality At Speed For Agile, DevOps, And Continuous Delivery. Brought to you in partnership with CA Technologies


Published at DZone with permission of Jurgen Appelo. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}