Posts Tagged ‘Project Management’

Learning together: Kanban and the Twelve Principles of Agile Software

Monday, June 21st, 2010

This post is a spin off from the recent Scrum/Kanban debate.  Not wanting to let a situation go to waste, it seems a good time to affirm shared values, which I do here via the Twelve Principles behind the Agile manifesto.  I’m grateful to Joshua Bloom for his excellent input.

Commentary on the twelve principles of agile software

Our highest priority is to satisfy the customer through early and continuous delivery
of valuable software.

Kanban: Check. We pull business value through the system, creating flow.  It should be recognized however that sometimes we create value by means other than delivering software (sometimes even by not delivering software!).  Furthermore, the act of improving the system generates value as it increases the capability of the wider organisation to generate value.

Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.

Kanban: Check. We actively limit work-in-progress (WIP), facilitating late prioritisation and minimising the impact of change on lead times.  We actively work to clarify the customer’s priorities so that the team can manage risk by properly sequencing work.

Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

Kanban: Check. We make deliveries at intervals consistent with customer need and transaction cost.  We seek to minimise transactions costs attributable to the software development process, thereby making shorter delivery intervals economically optimal.  Highly advanced teams look towards continual deployment concepts to limit the inventory of complete yet not deployed software. We believe the best requirements come from software already depoyed being exercised by the customers/users. Achieving flow to the end-user generates higher value faster.

Business people and developers must work together daily throughout the project.

Kanban: Check. The development team and customer must learn together, in relation to both the problem domain and the delivery process.  The visual element of Kanban promotes transparency and creates triggers for customer interaction.

Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

Kanban: Check. Build processes that respect individuals; empower them to learn and to improve the system.

The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

Kanban: Check. Visualization and models allow face-to-face conversations to scale effectively. Limiting WIP prompts teams to have conversations DURING difficulties.

Working software is the primary measure of progress.

Kanban: Delivered business value is the primary measure of progress.

Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

Kanban:  We work within and share responsibility for the capability of our system; sustained long-run capability cannot be built at the short-term expense of the individual.

Continuous attention to technical excellence and good design enhances agility.

Kanban: Check.  And we look to increase capacity by identifying and reducing the failure demand that results from inattention to quality.

Simplicity - the art of maximizing the amount of work not done - is essential.

Kanban: Check.  Furthermore we actively manage work-in-progress, minimizing work not finished.

The best architectures, requirements, and designs emerge from self-organizing teams.

Kanban: Check, and process too. Leaders (inside and outside the team) must foster emergence, not squash it.

At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Kanban: Check. Continually even.

Conclusions

So there you have it, no fundamental conflict but a couple of clarifications and some changes of emphasis too.  It has to be said that these small differences do add up to a shift of mindset, but it is one that much of the Agile community has taken on board as a result of the increasing influence of Lean.

If I were to pick out a key thought it would be this:

The development team and customer must learn together, in relation to both the problem domain and the delivery process.

This lesson would be recognised by much of the Agile community I’m sure.

Book review: “Kanban”, by David J Anderson

Wednesday, June 16th, 2010

A big thumbs up for @agilemanager’s book!  If Don Reinersten’s “Principles of Product Development Flow” (which I raved about here) provides the foundations, this is the practical, experienced-filled go-to book.   It feels very authentic, full of relevant examples and managing to be both measured and positive at the same time.  It will be the definitive Kanban book for a long time to come I’m sure; I sincerely hope that it goes on to achieve the status of “Agile classic” too.

Key chapters for me:

Chapter 3, A recipe for success.  The recipe has been developed significantly since this blog post (which is still worth a read).  I’ve followed much of recipe myself (some of it pre-Kanban), and it rings true to my own experience.  But full credit to David - if there exists a more effective version of the recipe than his, I would very much like to see it!

Chapter 11, Establishing service-level agreements.  I had heard about this and the related concept of “classes of service” before but it’s all a lot clearer now since reading the book.  It’s a thought-provoking chapter but I had the nagging feeling that it was just a stepping stone to something else (a prioritisation and scheduling mechanism based on risk-adjusted cost of delay) and David kinda confirms this.  That’s not to play down the importance of this chapter though - it definitely adds real sophistication to the generally-accepted core of Kanban, and if a practical guide can lead on to new thinking, that’s a thoroughly good thing.

Chapter 14, Operations review.  This sounds mundane, but it illustrates how a single Kanban implementation can seed something much bigger right across a business unit, breaking out of the confines of IT.  A very timely read!  Taken with the surrounding chapters we have here as good a guide to scaling agile development as you’re likely to read, and it reaches much further than that.

The final few chapters (Part four, Making improvements) are also worth mentioning together.  They take us back to Kanban’s roots in TOC and Lean (particularly Lean product development à la Reinertsen) and the influence of Deming, all in the process of giving yet more great advice.  Nicely done!

Lead time diseases and treatments - 6 of 6: Failure to launch

Friday, April 30th, 2010

Oh dear, the most embarrassing of lead time diseases! There’s a black hole lurking at the bottom of your CFD, on your Kanban board tokens are piling up under “Ready for Release”, and your “Released” and “Implemented” columns look depressingly empty.

Common root causes:

  1. Inattention to the release and implementation process
  2. Lack of capacity (whether on the part of the project team or customer) to release &/or implement
  3. The system as built isn’t the one expected by the customer
  4. The world has changed

Clearly the first two aren’t mutually exclusive. Fail to plan or to reach agreement, and you may find that your customer or some critical resource on which your release depends is unavailable, perhaps for a long time. Lesson: take nothing for granted.

Agile methods have the most to say about the third cause. Forget blaming the specification if you get into this situation - products (not just documents) must be developed in partnership with the customer and the risk shared.

Sometimes there’s not much you can do about that last one. Volcanos, credit crunches, takeovers, high level changes of budget or focus do happen, and generally speaking it’s not worth trying to mitigate against them. But we live in a changing world, and projects need to be managed flexibly, serving the greater interest. Embrace change!

Symptomatic relief

Putting the (sometimes correct) “abandon” option to one side, extricating a project out of this situation involves both hard work and creativity. Do (or do again) what should have been done earlier: start with the customer, work backwards on implementation and release plans, revisit requirements as necessary. Try parallel running, emailed spreadsheets or screenshots, re-purposing, “re-customering” even - whatever it takes to get eyeballs on the system.

During this period you may be able to deliver positive business value even before systems are officially switched on, with (for example) data quality or business process issues revealed and addressed that might otherwise have gone undiscovered. This has happened for me on multiple occasions, so don’t despair, keep a positive eye open.

Prevention

We know already that the answers lie in small batches (”release early, release often”), visibility, engagement, automation. Taking a Lean approach, strive continually to reduce transaction costs - in this context, mainly testing, release and implementation costs - and (more sophisticatedly) factor risk into the batch size calculation. Both will lead to yet smaller batches, shorter cycles and a much reduced likelihood of project failure. Once again: go for flow!

Lead time diseases and remedies - 5 of 6: Kept on hold

Tuesday, April 27th, 2010

Still suffering volcano aftermath, I and my co-driver took the borrowed car back to Budapest from the UK, arriving before dawn this morning. So I’m making this one short:  a tip and a regret.

Tip: Consider adding “On Hold” columns to your Kanban board, especially “Development On Hold”.  When you have too much in play, it pays dividends to make explicit what work is to be put to one side .  At worst, you prevent the waste of talking about it every day; at best, you create real capacity.  Reinstate work only when it becomes genuinely top priority again, and no copping out with “background projects”!

Regret: The “counting tickets in columns” method for generating CFDs (see Kanban in a nutshell) is nice and easy, but I have to admit that I wish now that I had better control over the display of data from abandoned (one, small) and reorganised (e.g. adopted or outsourced) projects.  They have annoying negative effects on the chart that are difficult to remove retrospectively.  But would I go back 8 months and use an electronic Kanban board?  Maybe, not sure - I still love my wall!

Lead time diseases and remedies - 3 & 4 of 6: Two sides of the same coin

Thursday, April 22nd, 2010

The testing bottleneck episode came out mid-way through a fantastic week’s skiing in Val Thorens; since then I got stranded by in Budapest by the volcanic ash cloud, made it home (5 days late) after an epic 25-hour drive, and I have a borrowed car to return next week!  So to get the Lead time diseases and treatments series back on track I’m combining the closely-related episodes 3 and 4.  I’ll introduce them separately before discussing them together.

3. Feature starvation

I don’t recall seeing projects suffer for lack of needed features, but what happens when there has been a failure to prioritise and articulate clearly the next few features for development?  Developers tend not to sit on their hands doing nothing, so work expands to fill the available effort.  This plays out in several ways:

  • Gold-plating work currently in progress
  • Implementing non-urgent features
  • Inventing un-needed features
  • Indulging in standalone refactorings, framework-building, etc

In other words a tendency to add bloat, risk and downstream workload for marginal or even negative benefit.  Not only is the delivery of value sub-optimal, lead times will increase in ways that are hard to pinpoint. The smart product manager needs to recognise and treat the problem at source, which will be uncomfortably close to home!

4. The overwhelming backlog

Maybe it’s just me, but “backlog” seems to come with an implication that the work contained therein does actually need to be done (and soon), and therefore carries overtones of “push” rather than “pull”.  I try to avoid the term therefore, and my advice to backlog worriers is simple: don’t!

  • Don’t be overwhelmed (yeah, right)
  • Don’t think in terms of clearing the backlog
  • Don’t over-prioritise
  • Don’t over-engineer - sometimes synergistic features line up at the right time but don’t force it; YAGNI

The first two are a prelude to shifting to a mindset of prioritising for delivered business value, letting go of the rest.  The last two are about controlling work in progress even in those early Kanban columns, not committing prematurely, going for flow.  But realise that the combination of low WIP and an obsession for business value demands timely and high quality interaction with stakeholders; this may prove to be a significant constraint.

Two sides of the same coin

So… under-prioritisation tends to lead to bloat and (indirectly) to longer lead times; over-prioritisation also leads to longer lead times (this time through increased WIP) -  it’s an optimisation problem.  It’s a high stakes game, controlling perhaps the most powerful short-term lever on your development process.  Exciting!

Ultimately though, the lead time metric is only a proxy for real measures of success; the latter lie in the domain of the customer’s business.  Don Reinertsen’s superb book Principles of Product Development Flow goes much further than process-centric metrics and describes an economic approach to prioritisation; for introductions to the subject see articles from Dean Leffingwell and Silver Catalyst (the second hot off the press from last night’s LeanSSC keynote - I would so loved to have been there!).  But even if your organisation isn’t ready for an explicitly economic model, I hope that you find - as I did - that the concepts are helpful and motivating as well as enlightening.

Lead time diseases and remedies - 2 of 6: The testing bottleneck

Tuesday, April 13th, 2010

Why is testing so often a bottleneck?  Silly question really - it’s that way because we make it so!

In my previous post, I described a situation in which the testing bottleneck revealed by our Kanban board and CFD was more imagined than real: the work was getting done but completion criteria were inadequate; some clarity and some WIP limits soon fixed things.

Addressing mistakes like that early on in a project is easy, but here are a just a few of the ways in which we have contrived to make life on our projects difficult for ourselves over the years:

  1. Hey guys, we want to do a release soon.  Can everyone please do some testing?”
  2. Analysis (and some design), development, testing and rollout in syncronised, pipelined phases
  3. An impressively large automated test suite with a hopeless failure rate

Let’s look at these from a lead time perspective.

1. “Can everyone please do some testing?”, or sequential phases

Glossing over the apparent cluelessness, there are problems here common to any approach that has the same set of developers doing a large amount of development (over several months in this case), then downing their IDEs to start testing.  Features developed at the start of the development phase (including some of the most important ones) are already several months old before testing begins in earnest.  This adds a significant context switch overhead even where the original developer is now doing the testing (not something that can be guaranteed over these timeframes), added to which is the worry that the foundations on which that feature was built have since changed.  And those foundations aren’t merely technical - the business context in which the feature was conceived and development will have moved on too.  In other words, the wastefulness of long lead times is compounded by change, both planned and unplanned.

So if sequential phases are a problem, how about doing them in parallel?

2. Syncronised, pipelined phases

This is an approach that may seem attractive to teams that have the luxury of dedicated analysts, testers and release managers.  Why not let each team keep busy on what they do best and allow analysis, development, testing and rollout to happen concurrently?  So while we’re rolling out release 1.1 (on top of release 1.0), we can be testing 1.2, developing 1.3 and readying ourselves for 1.4.  Efficient, right?

Efficient it might be, but from a lead time perspective it’s dangerous.  What happens when one of these activities slips?  The others either stall or take on extra work to fill the slack period.  Taking the latter, “efficient” route adds to the workload of subsequent phases, thereby making the longer cycle the new normal and a descent to low performance begins.

I should mention that I have seen this pattern twice now: the first time it was entered into quite deliberately and lived with for a long time; the second time it was the consequence of allowing testing activities to spill over from one short development sprint to the next.  Those downward descents are so much easier to enter than to leave!

3. Automation (hopeless or otherwise)

However good its coverage, a test suite with an 85% pass rate is a burden, not a help; any new failure is lost in the noise.  Taking that figure to 99.something% was a challenging but worthwhile exercise, but I now take a hard line and insist on 100%, all the time.  “All the time” means that a failure becomes (in Lean-speak) a “stop the line” event.  Furthermore, the depth of the test suite needs to be such that the focus of the team’s manual testing activities can move from repetitive regression testing to focussed learning about the system, warts-and-all (”exploratory testing” in testing-speak).

Pulling it together

Recap: long, sequential phases are bad, whether syncronised or not.  Short cycles are better but aren’t immune to problems, especially if testing can’t be completed right away.  Automation is a help, except when it isn’t.

So: test as soon as features are developed, both by adding to the automated suite and via serious exploratory testing.  Make the regression test a non-event by running it all the time; stop the line when there’s a problem.  In short: practice Continuous Integration (CI) seriously, make learning part of the process, go for flow!

Lead time diseases and remedies - 1 of 6: Learning curves

Tuesday, April 6th, 2010

Consider the following CFD, based on data from the early part of a new build project:

image009

There are several interesting features to point out:

  1. A somewhat S-shaped overall profile
  2. The stepped profile at the project’s start
  3. The “bulge” of items stuck in the Testing state

Each of these represents a learning phase; let’s examine them in turn.

The S-shaped profile

I had a strange flashback when I first noticed this shape - having encountered it before in Earned Value charts, where the shape represents the fact that when tracking completed deliverables against a project plan you often see ramp-up and ramp-down periods.

Here though, the overall height of the CFD at any point measures all known work, whether that’s work done, work in progress, work that’s prioritised, and even work that just on the “maybe” list.  Isn’t the overall work required fixed for the life of the project?

There are at least three drivers to this particular ramp-up:

  1. As our understanding of the problem space increases, so does the known number of features required (or possibly required).  This process can get off to a slow start.
  2. As development gets properly underway, the number of features increases because large features (the “epics”) are split into several smaller ones.
  3. Feedback: what we learn from building and demonstrating the system creates opportunities for new and better requirements.  This process slows down as we get close to something releasable.

None of these disturb me fundamentally (I’m not of the “scope creep” school) but it does demonstrate the dangers inherent in making projections if it’s clear that requirements are still to be discovered.  There’s a tradeoff: if you want learning you lose some certainty.

I won’t deny that there are projects where certainty is of paramount importance (I’ve led some, with hard timelines mandated externally), but in most cases I would much rather take the learning approach.  You get to start earlier and deliver earlier, and there are opportunities to incorporate valuable (sometimes project-critical) feedback early, not just from within the confines of the project but from a changing business environment too.

[And yes I'm familiar with the argument that we should move away from organising work around projects, but that's definitely for another post]

The early stepped profile

Early in this particular project we tended to follow a regular pattern that looked a bit like planned sprints.  I had just come off a project that worked to time-boxed iterations whose CFD would have been similar,  but here this shape was merely a symptom of my unconventional working arrangements - I spent alternate weeks in and out of the offfice and planning activities were concentrated around set times.

It’s actually rather gratifying that this disappears over time as we establish good working patterns independent of my physical location.  Even so there’s still an unnecessary amount of work sitting in the Ready for Dev state at any given time (arguably the same could be said of Prioritised too), but we’ll revisit that issue later in this series.

The Testing “bulge”

I was happy to explain away first two CFD features but this bulge reflects a genuine problem.  Work really was piling up in the Testing column, flattering our development throughput whilst doing bad things to lead times overall.  We’ll focus on testing in the next post, but for now it’s fair to say that this reflected two wider problems, namely the absence of strong controls on WIP and the lack of clear exit criteria for each step in the value chain.

As a team we identified both issues in one of our retrospectives, the outcome of which was to define (1) WIP limits (see Kanban in a nutshell) and (2) how & when code review and feature demonstrations were to be conducted.  We addressed both sets of issues at the same time so we can’t measure their impacts separately, but it’s apparent from the CFD that the overall problem was reversed very quickly.

Points to take away

  1. You can expect your CFD to reflect something of your project’s style
  2. After a while it tells a story; feed this back into your project retrospectives
  3. Changes in working practices can be reflected back surprisingly quickly

Lead time diseases and treatments - 0 of 6: Natural variation?

Thursday, April 1st, 2010

So you have your Kanban board (mine is a wall covered in Post-It notes), you’re maintaining a CFD and you’re measuring your development process’s lead times.  But despite the best intentions of you and your team you see your lead times creep up.  What to do?

Don’t panic

There will be some natural variation in even the best-regulated of processes, and it’s inevitable in a creative process like software development. Some (for example the Statistical Process Control crowd) will tell you not to worry unduly about variations within so many standard deviations of the mean, sensible advice that may stop you from wasting effort on investigations that may yield little benefit.  But still raise it with your team (it’s a great standing topic for regular project retrospectives), try to work it out together.  “Special causes” may be mundane (unplanned absence or environmental unavailability, say) or remain as minor unsolved mysteries with no lasting impact.

But don’t get too comfortable either

Don’t rationalise away every problem and as a result miss opportunities for lasting improvement.  Even those seemingly mundane special causes may have serious underlying root causes that represent significant risks to your project.

What’s more, don’t compound that error by allowing a drift to low performance (very well described in Dana Meadow’s book Thinking in Systems).  Instead, surround your project with an expectation of improvement.  Free your team to be the engine of that improvement.  Review the data together in your retrospectives; experiment!  Establish performance baselines from your recent history (don’t set arbitrary targets - insert obligatory Seddon reference here!); you can let them and your tolerances for variation ratchet down over time as each improvement kicks in.

Learn to diagnose

Looking back over past projects, I recall some times of less-than-spectacular project performance, impacted by process issues that I’m sure will have been encountered countless times elsewhere.  I have seen them across a range of situations: in mature teams that I’ve inherited, in project turnarounds, and in new developments that I’ve led from the start.  I need not spell out here which disease belongs to which situation and thereby the degree of my culpability; it is better simply to assume that each was my fault!

These issues are like diseases - they have recognisable symptoms, common root causes and it’s often possible to recommend treatments.  So watch this space for these future articles:

1. Learning curves
2. The testing bottleneck
3. Feature starvation (with 4)
4. The overwhelming backlog
5. Kept on hold
6. Failure to launch

Of course other diseases are known, and more still are yet to be discovered, named and documented.  If you would like to add to my list, leave a comment here or drop me a line and I will discuss them when I wrap up this series.

Kanban in a nutshell

Saturday, March 27th, 2010

Step back, squint a little, and think of your development project organised in a big to-do-list.  In your imagination, pin your to-do, in progress and done deliverables onto a board like so:

To Do

In Progress

Done

Hold that picture for a few more moments and visualise those tokens moving across the board as work gets done.  See how items pass quickly through the In Progress stage when only a few are allowed there at at any one time; watch the whole process slow down as work-in-progress (WIP) is allowed to grow.

That three-stage process is of course an over-simplification, so let’s map it out in a little more detail.  In Lean-speak, we’re identifying our particular process’s “value stream”.  Here’s a representation of mine:

[To Do]

[In Progress]

[Done]

Proposed

Prioritised

Ready for Dev

Dev

Test

Ready for Release

Released

Imple-mented

In my model (yours may differ):

  • Proposed items could (but perhaps never will) get done; they are subject to a prioritisation process
  • Prioritised is where pre-dev analysis work gets done if any is needed
  • Ready for Dev is a buffer between the prioritisation and analysis activities the the left and the core Dev and Test activities to the right.  It’s handy too for forcing the sequencing of some prioritised items ahead of others.
  • Ready for Release is another buffer - we can’t always release immediately
  • Released is Done, Implemented is Really DoneTM. When that distinction isn’t important, items go straight to Implemented.

The items here are all features, recognisable by the people that sponsored them, even where the team has chosen to break the larger ones down to manageable size.  On those rare occasions where we need to break work down into pieces smaller than a working feature (into tasks, say), that breakdown goes into our Trac system but not onto the board - we’re interested in delivering value, not just tracking how busy we have been!

Then there are two rules for choosing what to work on:

  1. Pick a rightmost available feature (e.g. prefer one in Test over one in Dev)
  2. Don’t move an item into a column if doing so will breach a work-in-progress limit.  If that leaves you with no available features, go and help someone else complete theirs.

In a sentence, Kanban is a WIP-limited, pull-based system for feature-driven software development.

What makes for an “available” item here will depend on local factors: roles, skills, approvals to make high-impact transitions (e.g. releases), and so on.  I’m told that some teams - especially those that (i) practice pairing, and (ii) don’t have much differentiation between roles - find that WIP is limited naturally, in which case rule 1 suffices on its own.

But every team is different!  Initially, my team did without WIP limits but found that work didn’t flow quite as well as we expected; later we added a limit that spans the Dev and Testing columns, set (with buy-in from the team) low enough to encourage pairing.  That limit is so rarely reached now (let alone breached) we could consider removing it again.

Add some local rules for dealing with exceptions such as rework or unplanned urgent work, and that’s pretty much all there is to it.  With a bit of thought there should be nothing about Kanban that precludes it from being implemented on top of an existing process - probably a good starting point for most teams.

The control tools

These are simple too:

  1. The Cumulative Flow Diagram (CFD) - the counts of items in each column recorded over time and shown in a stacked chart, completed items at the bottom. Brilliant for visualising lead times and bottlenecks.
  2. Lead times (read off the CFD or captured on a per-feature basis) tracked over time

Here’s a CFD:

cfd1

If that seems too complicated, we can go back to the simpler to-do list model:

cfd2

but bear in mind that your definitions of “To Do”, “In Progress” and “Done” may differ from your customer’s, so be careful.

What makes the CFD a really useful tool (I refer to mine a lot) is that the widths and heights of those coloured bands give (respectively) average cycle times (lead times if measured from the “Prioritised” stage) and WIP. It is very interesting to see how these correlate over time - they tell a story about the progress of your project that you can use in your retrospectives and feed into your improvement process.

Next up: a series on lead time “diseases” with some Kanban-inspired remedies.  Watch this space!

Principles of Product Development Flow - review & retrospective

Tuesday, October 6th, 2009

Introduction

I have been encouraged by Eric Willeke and Alan Shalloway via the kanbandev group to share my thoughts on Donald Reinertsen’s new book Principles of Product Development Flow and I promised a review that would also serve as something of a personal retrospective. As book reviews go the result is probably a mess, but you can read clean & tidy book reviews elsewhere!

Why the retrospective? As past readers of my blog will know, I’ve recently undergone some significant change of late. I left behind a 12 year career in the City, took a very welcome 3 month break from work, and at the end of that time made something of a lifestyle change by moving well away from London to live in a cottage in the picturesque Derbyshire Dales. At the time we committed ourselves to the move I didn’t know exactly would come next but there was sure to be a Lean flavour to it, and during my time out I quickly fell in with the Kanban crowd. When I landed my new role it was clear that Kanban would feature prominently from day 1; two months have since passed…

Back to the book: it’s not about Kanban (though it is mentioned). Neither is it a book about software development (it’s much more general than that, though the specifics of software development occur frequently throughout the book). It is however a book that has shone light on both subjects for me – not as another methodology book, but by strengthening significantly my understanding of how development processes work in general, helping me to really understand why I’ve seen what I’ve seen in past projects (good and bad, mine and others’), and by helping me to crystallise how I can deal in an economically justifiable way with things that appear on the surface to be completely intangible.

To be more specific with that last thought, what excited me most about the book was the way it ties the management of queues – covered very well in their own right – to economics. This happens early in the book, changes (or at least changed for me) the way the rest of the book is read, and hugely increases its value. It may sound academic, but I found it motivating (if occasionally uncomfortable) that I could link so directly the way I run projects past, present and future to business performance. And making that link was straightforward; it’s a book that is free of hand-waving and its examples ring true to my own experience.

Diving in

Let’s get down to details with some quotes:

The issue is not queues, it is the economics of queues (p17)

We can define waste as a failure to optimize [globally] our economics (p33)

Optimum queue size is an economic trade-off (p68)

Focus on the wrong queue can actually create push rather than pull. Why (speaking in retrospect with embarrassment at my own stupidity, not to criticise the jargon of certain branded methods) emphasise the development backlog when you haven’t achieved flow downstream? Are all of your queues even visible (always, to all, on the wall)? Do you have any idea – even roughly – of your cost of delay (“COD”) and consciously optimise (portfolio-wide) to minimise it? I’m beginning to get a handle on my COD, and the numbers are staggering, especially when I’m tempted to apply a P/E multiple to the answer!

But other queues may not matter so much. On my Kanban wall I have a “Proposed” column preceding “Prioritised” and it’s my job to move items between the two. I don’t lie awake feeling overwhelmed by the large number of proposed items – in fact quite the reverse: it feels good to deny attention to work (even whole projects) that would only add delay to work actually in progress. Is the movement between the two columns push or pull in nature? Probably a bit of both, but it’s one part of the process that won’t get reduced to a system of rules – the sequencing and regulation of work going into the process is far too important for that, and I have the book to thank for giving me a fresh perspective on my personal responsibilities toward both the process and the end result.

Use CFDs to monitor queues (p71)

Cumulative Flow Diagrams (CFDs) can be done independently of Kanban but they make most sense done together - just log each day the number of work items held in each column and chart cumulatively over time - easy! What does my chart reveal? I work a pattern of alternate weeks, one week with the team in Budapest and one at home and this is reflected very clearly in the chart. Most re-planning happens when I’m in Budapest (near both team and customer), leading quite naturally to a 2-week cadence for the whole team. The CFD does hint at the cost of being apart and we work hard collectively to mitigate it, but my data collection gets a little patchy when I’m away so I haven’t properly quantified it yet. I check the CFD regularly to measure lead times, to look for any signs of growing bottlenecks that aren’t already glaing at me from the wall, and I plan to use it as a presentation tool in future management meetings.

It’s nice to discover that one can monitor lead times so easily and I’m prepared even to read some predictive power into the chart without ever requiring development estimates. In fact estimates have become yet another thing to be added the ever-growing list of supposedly indispensible things that I’m simply not missing. And let’s face it: so often they’re rubbish anyway!

Create [decentralized] systems to harvest the early cheap opportunities (p40)

Understanding decentralisation and delegation is especially important when running distributed development. Here’s a technical example (though the point isn’t the technique): I don’t (can’t!) review every line of code that gets committed but it is easily decentralized. Not only can developers review each other’s code, but my loathing of duplication in code has been communicated strongly, along with a counterbalancing worry about breaking working code without economic justification. As a result, the kinds of refactorings that lead to a smaller codebase and consequently to a smaller maintenance headache happen regularly without my direct involvement, and (thanks also to investments in unit tests and a CI system) seemingly without too much pain. But is this really a “cheap opportunity”? Yes, one has to be concerned about overdoing the up-front investment, but in our case it has already made for a more comfortable and productive environment and I’m happy that the pay-back period is short enough to make this a no-brainer.

Onwards and upwards

All of this has been drawn from or prompted by just the first three chapters, there being nine in total. Reinertsen goes on to discuss variability, batch sizes, WIP constraints, controllability and feedback before taking an interesting turn with a chapter on decentralisation, drawing heavily from military theory. All of it is excellent, some of it very quotable, some of it very valuable reference material (and no less readable for that). I make no apologies though for emphasising the core concept Don surely intends to keep at the fore as we continue with the rest of the book.

Nits to pick? Only one springs to mind, and it’s not a problem, just a minor missed opportunity. It follows from the book’s analysis of the economics of the timing of decisions that an un-made decision has real economic value, but this could have been made explicit. A link to Real Options Theory would have been very nice here, and it might have informed some of the later parts of the book. I have a vague recollection that Real Options do get mentioned, but I couldn’t find it in the index.

I have two concluding remarks to make. The first is about Kanban, and it is to restate a comment I made on one of the mailing lists: implementing Kanban was undoubtedly one of my better professional decisions in a 20-something year career as developer, project and program manager and now the senior IT guy in my new organisation. The second is about the book: quite simply it’s brilliant; buy it!