Sunday, June 7, 2009

Separating The How From The What

Poor AgileBoy!

One of the most common forms of "oppression" that I used to hear about in my role as Agile Manager involved Product people (or other representatives of management) going well beyond their mandate of providing "the "what" as they ventured into the thorny territory of "the how". I doubt that it was ever intended maliciously, no matter how much conspiratorial spice was attributed to it by the development team members... but if that's true, then why did it happen?

First, though, I suppose I should explain what I'm talking about. In most Agile methodologies, there's a principle that says that the Product Owner indicates what the team should work on - in the form of a prioritized Product Backlog - and the team itself figures out how best to deliver it. Thus, "the what" is the province of Product and "the how" is up to the team. It seems like a pretty sensible, straightforward arrangement, and yet it often goes off the rails. Why?

One cause for a blurring between the two can be Product people with technical backgrounds. We certainly had that in spades with our (aptly named) Technical Product Owners, most of whom were former "star coders" who had moved up through the programming ranks into management earlier in their careers. I'm sure it must have been very difficult for some of them to limit themselves to "the what" when they no doubt had all kinds of ideas - good or bad - about what form "the how" should take. In the most extreme cases, I suspect that there were times when our TPOs actually did have better ideas on how to implement certain features than the more junior team members did... but dictating "the how" still wasn't their job. In that sort of setup (where the Product area is made up of technical gurus), what would have been preferable would have been an arrangement where those TPOs could have coached the team members on design principles and architectural considerations in general, as part of the technical aspect of their title. That healthier response would have still accomplished what I assume was their goal - leading the team to better software choices - without overstepping their bounds and causing a schism between product and development.

Another factor that can result in people not responsible for "the how" trying to exert their influence on those who are, is a simple lack of trust. Again, I saw this in action many times as the Agile Manager. I'm not going to paint a black and white picture and pretend that it was always warranted, nor that it was never warranted. But the important point here is that dictating "the how" downward in that manner usually did more harm than good, and it certainly did nothing to close the trust gap. For one thing, having "the how" taken out of their hands gave those developers who were already skeptical about management's support of Agile more ammunition with which to say, "See? It's all just lip service! We're not really being empowered here!" It was also true, in some cases at least, that "the how" being supplied wasn't particularly well suited to the new development environment that was emerging. What with all of its automated tests, refactoring and focus on peer reviews, the code was resembling what "the old guard" remembered less and less with each passing Iteration. I experienced this first hand, as I'd make some small suggestion about how to tackle something that I thought might be helpful, only to get a condescending look and "Uh, it actually doesn't work like that anymore" from someone half my age. Yeah, that's tough on the ego, but it's also completely the right response.

As for why the trust gap was there in the first place, well... as both of my AgileMan books lay out in gory detail, lots of mistakes and missteps were being made. It wasn't exactly smooth sailing, let's say. The result of that, however, was that some among management apparently felt that the teams couldn't be trusted, and so they attempted to exert more and more control over them, in whatever ways they could. Had they simply applied that energy to improving the requirements gathering techniques being used within our organization, though, it would've benefited us more. Providing clear sets of Acceptance Criteria and good, well thought out constraints would certainly have done more to improve the product features that our teams were developing than any amount of "meddling" in the mechanics of the software development process itself ever did.

I imagine that it's often difficult to keep "the how" separated from "the what" as you work in an Agile environment, but it's critical that you do. After all, the people doing the work are in the best position to know how to do it, and that principle has helped make Toyota one of the premiere auto manufacturers in the world. We could do a lot worse than to follow their example in the Information Technology business!

3 comments:

Unknown said...

I think you may also have a third reason for Product people trying to specify the How rather than the What. If a company has moved from a C&C top down type development approach, the management types used to fill out a Product group may not even know the method of specifying what they want as outcomes rather than as implementation details. If those same people are under extreme workload or time pressure, it is not that unlikely that they will fall back on what they know best from pre-agile days: C&C dictates on how to implement what they desire.

Unknown said...

One other thought, the skill needed to specify "what" you want rather than "how" to build it is not really an easy one to learn I would imagine. When you specify a "how" there are a whole host of implicit outcomes you get from the details: performance, code flexibility, error handling, etc. characteristics. When designing an implementation you may cover some characteristics unconsciously, or with only a passing thought. Further you can make trade offs between them trivially (and consciously).

However, if you are limited to specifying the outcomes you desire, then first of all, you need to recognize in advance all of the characteristics for which you want an outcome. Secondly, you have to specify the outcomes as constraints, or usages which means you need to understand very well what will be acceptable to release. You can't just go with "what we currently have", or "as good as possible", as they provide little flexibility in selecting alternatives, or no useful information at all respectively.
Finally, When specifying outcomes, you are only tied to the trade off decisions in that your constraints will rule out some options.
This all will culminate in the natural reaction of over specifying, and heavily over constraining a solution, in an attempt to ensure a "best" implementation. Of course when a team gets the laundry list of constraints and requirements, they come back with a very large estimate, as it takes a lot of work to verify hundreds of constraints, and some very simple solutions may be ruled out because the violate one constraint.

The only way I can see to avoid the traps is with very heavy involvement with the team. The product person will need to specify what they want as a few usage style outcomes, and then they will need to be around to see (as an ongoing process) the trade offs the team is choosing. Then when a developer notices their current approach will scale quadratically, they can immediately ask the product person "will this characteristic be acceptable?". The trick is, that if the product person isn't there when the developer notices the characteristic, they may be missing out on the chance to be involved in the trade off decision.

Unknown said...

Rocking new business card, Agileman!