agile

Dualities: A Pattern Language of Project Mangement

Change and risks of the unknown are the primary challenges of modern projects — changes in our team, our understanding of our problem, our market, etc. Experienced project members know that the “best process” for our project doesn’t fall neatly into formulas.  What was a successful strategy in one circumstance may fail completely in a seemingly similar circumstance. The relationship between our current situation and the best processes to deal with it are non-linear.

Lean thinking is one of the best starting points we have to systematically attack this problem with savvy about continuous improvement, shifting bottlenecks, systems thinking, statistical management, and respect for people on the front lines of the problem. And it’s been under-applied in getting us past the breakdown of traditional project management techniques in high-risk domains like software development.

But successful lean companies like Toyota have taken years or decades to build up institutional and cultural knowledge of where to start and how to evolve. Can we shorten this learning process for other companies or other domains?

Our unique circumstances and the changes around us require a kind of dance to make progress and stay balanced — sometimes steps forward, others to the side or back. This non-linear adaptation is very jarring for both our managers and our teams.

We need to find a way to empower people with the savvy to sense dissonance between the process we have vs. the process we need, give them the vocabulary to be able to discuss it, and the power to take action on that dissonance even if the solution is a step in a new direction or even a step back.

One of the best places to start is by attacking the belief that there is “one right process” for our teams.

Instead, we drive dialog around the spectrum of possibilities between any two poles or dualities: predictive vs. iterative management, larger vs. smaller batches, top-down vs. bottom up control, standardized vs. adaptative process, specialist vs. generalist teams, etc.

It’s not about choosing one or the other .. it’s about where you are on the spectrum.

As managers, we probe our teams, asking if they should be trying “more of this” or “less of that”. We can go forward or back on a spectrum, and we can step “to the side” by focusing our energies on a different duality.

What would help — in fact, what’s almost essential — is a pattern language to give names to abstractions and make dialog and discussion about where we are and where we’re going possible. Unfortunately, the PM pattern languages you’ll find today are based on absolutes (an assumption of one right process). We’re looking for one based on dualities — opposing forces or alternatives that we must balance to achieve the best-fit process for our circumstance, for this one point in time. We want terminology that ask us to think, adapt, and step in whatever direction our circumstance calls for.

Boehm (balance) and Cockburn (meta-methodologies) are wonderful starting points for this kind of thinking, at least in software developement. I’m sure there are others — please add a comment if you want to point out a resource.

Can we discover and build this pattern language of adaptive project management — and make it a an approachable, practical tool for today’s managers and project teams?

Comments (2)

Print This Post Print This Post

Email This Post Email This Post

Permalink

Time-boxed iteration: an idea whose time has come and gone

Poor Winston Royce. The guy’s big idea is vilified because of a popular misunderstanding of its meaning. The great irony of the Waterfall story is that Royce himself was trying to describe a more feedback-driven overlapping process.

But somehow, the Waterfall strawman itself became the reference model, presumably because it appealed to the authoritarian command-and-control mass-production paradigm of the American business culture of the 1970′s. In a triumph of absurdity, that very culture was about to reach its nadir of quality, productivity, and profitability, as the dawn of an era of humiliating ass-kicking at the hands of the Japanese lean producers had just begun.

The contemporaneous emergence of the “structured” paradigm with all of its top-down orientation probably only encouraged the enthusiastically misguided technology managers of the day. After all, wasn’t that the very promise of computer technology? That it would make predictions, automate production and accounting functions, provide managers with awesome new powers of control so that we didn’t have to rely so much on those pesky, unreliable workers anymore?

Of course, many serious thinkers about software development were uneasy with that direction, because few of them ever thought of the problem that way in the first place. The phasist project management model was imposed from without by a zealous and out-of-control management culture, desperate to assert social dominance in the face of mounting economic failure.

Like any big new idea, it took quite a long time for the structured/phased paradigm to fully diffuse through the profession. Consequently, it also took quite a long time for the profession to come back with a well-formulated reaction. The most forceful expression of that reaction was probably Barry Boehm’s Spiral Model.

The Spiral Model was not the revolution, it was the counter-revolution, but the momentum of the Waterfall/SDLC was such that it took a decade for the Spiral to be fully realized as an enterprise-class methodology, in the form of the Rational Unified Process (RUP). Now, for those who were paying attention, the elements of RUP had been visibly gestating all the while, it just took some time to build up the fighting weight necessary to challenge the reigning champion. But for the Object-Oriented faithful, it had always been a given that iterative development was the only credible approach.

The challenges before RUP were formidable. It had to simultaneously replace structured analysis/design methods and phased project management methods. But change was in the air, and the explosion of new technology and the resulting financial speculation suddenly made it look very uncool to hang on to yesterday’s business processes. The dysfunction of phasist project management was abundantly clear to anybody who was paying even the slightest attention, so the world was finally ready for a credible contender. On the other hand, a generation of middle managers would never accept a methodology that threatened the corpulent bureaucracy that would allow them to rest and vest through a finance-fueled stock market orgy, so it was in everybody’s best interest to make RUP as bloated and artifact-laden as possible. In this way, RUP was destined not to last, but it did serve to introduce a big idea into mainstream thought:

Maybe 5 iterations of 100 requirements is better than 1 iteration of 500 requirements.

Just like the asteroid killed off the dinosaurs in order to make room for the birds and the mammals, the dotcom bubble accelerated the retirement of a generation of middle managers and left behind a world less hospitable to the flourishing of heavyweight processes. RUP’s unwieldy bloatocracy had outlived its usefulness to the scrappy survivors of the Great IT Catastrophe of 2001. Furthermore, what you probably learned from executing 100 requirements in an iteration is that they have a funny way of multiplying into 200 requirements. Building 200 requirements at a time is not really that much more fun than building 500 requirements at a time, you just learn the truth a little faster (i.e. your budget is screwed and your quality will be awful).

Our faith in iteration remained undeterred, but something about the artifact-and-scope-driven approach of the 1990′s was clearly not working. Fortunately, while the Object Establishment was busy making the enterprise safe for the Spiral Model, another group was determined to continue to drive the idea to a more extreme conclusion:

Maybe 50 iterations of 10 requirements is better than 5 iterations of 100 requirements.

and furthermore:

If 10 requirements typically take a team 2 weeks, maybe 50 iterations of 2 weeks is better than 50 iterations of 10 requirements.

My experience (and I believe that of many others) with scope-driven coarse-grained iteration is that it does not work well. On the other hand, the enduring popularity of Agile time-boxed iteration over the last eight years suggests very strongly that it does work well. The wheels turn slowly, but the champions of iteration were right all along. But this mixed history suggests a troubling question: why does 10 work when 100 doesn’t? What is a good size? What is the ideal size?

The answer to that question takes us right back to the beginning of our story. Back when the software development world was first trying to recreate the obsolescent mass-production culture of its day, the Japanese had already provided us with the answer. The ideal batch size is one. Over the last year, I’ve been operating software development kanban systems with and without Agile-style iterations. My goal as a lean workcell manager has been the realization of one-piece flow. What I’ve learned from my experience is:

In a well-regulated pull system, iterations add no value at all.

Just like RUP was a historical necessity to establish the legitimacy of the question, I believe that the first-generation Agile processes are a historical necessity to confirm that batch size is just as important to a development process as it is to a manufacturing process. And now that we know what the question really is, we find that we also know the answer. Iteration is only a transient concept to lead us to the deeper truths of pull and flow. The second generation of Agile processes will have no need for iterations as such. Continuous integration will be matched by continuous planning and continuous deployment. Live software systems will evolve before your eyes, and Little’s Law will rule the world.

Comments (12)

Print This Post Print This Post

Email This Post Email This Post

Permalink

Striking a different bargain with the business

Iteration planning is another core element of Scrum. Scrum divides the calendar up into fixed-duration time boxes. Traditionally, this is 4 weeks, though some teams make it shorter. Scrum aims to limit disruption of work-in-process by the business, so the 4 week iteration cycle includes a planning window where the business is allowed (expected, even) to adjust the content of a backlog of pending work requests. Of the prioritized backlog, the team estimates the scope of work they believe they can deliver in the iteration and sets a goal to do that.

The bargain with the business is that the stakeholders have a time to have their say, but otherwise are expected to leave the team alone to complete their goal. In a nutshell, Scrum’s expectation of the business is:

You may not interrupt work in process, and you may not adjust the work plan more frequently than once every n days.

Our teams strike a different bargain with the business:

You may not interrupt work in process, and you may not adjust the work plan less frequently than once every n days.

But…if the business can come in and change priorities any time they like, how can you commit to a goal?

A scope-driven goal is only one kind of goal. We don’t make that kind of goal. Another kind of goal is quality of service, and that is what we do. The team commits to deliver working features, on average, within a time limit that we consider a Service Level Agreement, or SLA. A typical SLA for us would be something on the order of 30 days. The engineering team’s promise is:

When we agree to take on a work request, we intend to deliver it within n days.

According to this criterion, it doesn’t really matter what the work is in the backlog. It only matters that the work has been appropriately sized and has been specified with a reasonable amount of clarity. This also greatly simplifies estimation by setting a single sizing criterion: not too big to meet the SLA. And if you don’t make a scope-driven goal, then there’s no such goal to meet and no need to package any such group of features together for delivery.

So we don’t do that either.

What we do instead is agree to release all of the features that have been completed since the prior release on a periodic interval. Because the amount of work that is in process is limited, that means that the rate of features exiting the process has to be the same as the rate of features entering the process. Some features are bigger, and some features are smaller, but on average, most releases will be of a similar size.

This kind of arrangement means that the planning interval and the release interval don’t have to be the same. Which means that there are no time boxes and no iterations. The planning interval should be often enough to keep the input queue from starving. The release interval should be set to the optimum point between the cost of deploying a new release vs the opportunity cost of carrying finished inventory. If the cost to release is high, you’ll want to release less often. If the cost to release is low, you’ll want to release more often. Cost of release is a worthy target to optimize and the ideal result is deployment on demand.

Comments (3)

Print This Post Print This Post

Email This Post Email This Post

Permalink

Lean scales differently than Agile

One question I like to ask myself regularly is: What would Lean software development look like if Agile development had never happened? That thought helps to clarify some of the more dubious ideas bouncing around the Agile camp.

A Scrum team, like most Agile teams, is meant to be around 5-9 people. A key practice of Scrum, common to most Agile processes, is the daily standup meeting. The daily scrum meeting enumerates each of the team members and asks them for a brief history, a brief plan, and any obstacles. The idea is to regulate productivity and identify special cause variation. The cost of the meeting is controlled by limiting it to 15 minutes (typically). This regular n-way communication helps control some of the problems that Fred Brooks described in The Mythical Man Month. In theory, Scrum looks like a closed-loop control system with two nested feedback controllers (the daily standup, and timeboxed iteration planning). That theoretical description is what got me interested in Scrum in the first place.

One of the development teams I’m working with has got upwards of 40 people all on the same kanban board. The kanban teams I’m working with also do daily standup meetings. A daily standup with 40 people could not possibly finish in 15 minutes if everybody got their turn at status reporting. But they do finish in 15 minutes with great reliability, so they must be doing something different. The kanban process revolves around workflow first, so a natural consequence is that the standup meeting enumerates work-in-process instead of headcount. Only some of the WIP requires any comment (for special causes), and then only one or two people who are involved with that special cause really need to say anything. The board itself continuously broadcasts the productivity status of the system. Upstream resources are always on the hook for delivery to their downstream customers. Productivity lapses show up on the board very quickly and stand out like a sore thumb. Lean thinking is relentlessly value driven.

A consequence of Scrum and the “scrum of scrums” is that such a small span of control will create a deep hierarchy as you scale up. That’s not very lean. A lean organization ought to be pretty flat, and a span of control of 40 is very flat indeed.

Comments (9)

Print This Post Print This Post

Email This Post Email This Post

Permalink

Perhaps a subtle distinction

Saying that analysis comes before design is not the same thing as saying all analysis comes before all design. Some seem to interpret the idea of abandoning phased processes as abandoning the idea of sequence altogether, but even the slackest *cough* (Scrum) agile process still expects that more-or-less traditional development activities happen in the more-or-less traditional order. They just happen in smaller batches.

The fact that these activities occur in a mostly-regular sequence is exactly why we can apply ideas from lean thinking and Theory of Constraints. And in spite of the opinion of a few unenlightened souls, lean and TOC are not about manufacturing processes. They are about sequential processes.

Is it possible that some kinds of software development are not subject to sequentiality? Yes, but you would most likely characterize this kind of development as art or research or hobbyist tinkering. Probably not line-of-business or product development, and certainly not software engineering.

Comments (0)

Print This Post Print This Post

Email This Post Email This Post

Permalink

Close
E-mail It
Socialized through Gregarious 42