Cargo Cult Agile

I first came across the phrase "Cargo Cult" in the book Surely You're Joking, Mr. Feynman! by Richard Feynman. In the book, Feynman warned researchers against fooling themselves and thus becoming cargo cult researchers. The term is from a 1974 commencement address given by Feynman where he talks about learning not to fool yourself, because you are the easiest person to fool.

What is a cargo cult?

The cargo cults Feynman described were based on natives from the islands of Melanesia in the South Pacific. During the war, the islands of Melanesia served as a staging area for the military where they built temporary operations. The natives observed all the ways in which the allied forces landed the planes and learned the techniques. After the war, the planes stopped landing and the cargo disappeared. The cults decided that they must perform the allied rituals of landing planes and bringing out the cargo, and so they built runways, control towers, bamboo "headsets" and military uniforms.

Apparently they have learned the "rituals" very well, and continue to perform them in the hopes of bringing back more planes full of bountiful cargo. Unfortunately, no matter how well they duplicate the ritual, there is no result.

Waterfall: The Worst Cargo Cult

As I wrote this post, I realized that the Waterfall process is actually the worst cargo cult of all. Waterfall software projects fail at astounding rates, and we still create our gantt charts and do our huge designs up front, and wonder why the planes aren't landing or why a simple project costs tens if not hundreds of millions of dollars to complete.

Asked for the chief reasons project success rates have improved, Standish Chairman Jim Johnson says, “The primary reason is the projects have gotten a lot smaller. Doing projects with iterative processing as opposed to the waterfall method, which called for all project requirements to be defined up front, is a major step forward.”

In 1970, W.W. Royce described a software development model in which each phase of the development process sequentially follows one another, and in the end results in a finished product. In this article, often cited by waterfall proponents, Royce points out that this "grandiose" model is prone to failure and recommends instead an iterative "feedback" model. Unfortunately this is the worst software process cargo cult of all because it never actually had anything to back it up as being a successful approach. The waterfall cultists stopped reading before they got to the conclusion.

In an ironic twist, about the time waterfall was losing popularity, the US military created a software development methodology called DOD-STD-2167 which not only reintroduced the otherwise failing software development methodology into widespread use, but lent it renewed credibility. I guess the natives weren't the only ones easily fooled into hopeless ritual destined to failure. Somewhere some cargo cultists are laughing.

Unfortunately, cargo cults tend to yield to more cargo cults.

What does a cargo cult agile shop look like?

From the outside, it may look a lot like an actual agile shop. After all, a cargo cult shop is imitating what they have seen about agile. However, like waterfall proponents, cargo cult agile shops are led by people who have looked at pictures of agile models, "read" agile books, or "learned" agile development from PowerPoint presentations. Perhaps there are a number of developers who know agile, but they may not be able to move the company towards agility in the face of generations of managers and developers who have been indoctrinated by DoD-2167.

By definition, agility describes an ability to respond to changes. As such, any agile process is going to have some sort of iterative process in which the software is improved and responds to any changes that have occurred during development. In a cargo cult shop, keep a particular eye out for iterations that don't include tasks other than programming. If the details of analysis, design, and testing are excluded, you are probably looking at a "cowboy" project or a waterfall project in disguise. An iteration should always include or consider changes. While possible, it is unlikely that the project will remain completely unchanged after an iteration.

With any agile process, the speed and effectiveness of adapting to change is the primary measure of how agile your team has become. If you are using an effective agile process, responding to change should be graceful. If a change causes a lot of disruption, or re-visiting a line of code that someone has already typed causes alarms to go off, you may be in a cargo cult.

If you are looking at a potential agile company, look at their process in as much detail as they will allow during the interview. If they use XP, ask to look at story cards. Do their unit tests actually test the functionality, or are they a check box to get past a sign-off? Are the story cards simply a requirements document created in one big design up front or do they add, change, and remove cards as they get further into the project. On a scrum project, ask how long a typical scrum meeting lasts. If their idea of a daily scrum is two hours, run, don't walk, to your next interview because they have missed the point entirely.

If you are already in a cargo cult agile shop challenge your process. Good agile process encourages a constant feedback loop regarding both your product and your process. If an agile process isn't working look into why and fix it. Go past the powerpoint presentations and the diagrams. Reproduce the results that created the processes you are attempting to emulate. If the agile process is printed and bound, and they haven't made a single change to it in five years, it is highly likely they have not challenged and enhanced their process to fit their people.

Some agile models are a toolkit and give guidance on how to effectively use them, while other methodologies require practices to be used together to achieve a result. Some practices stand on their own while others may be interdependent. Understand the benefits and consequences of cherry picking from agile, especially if you are doing a project waterfall style.

Agile as a Cult

I am a fan of agile development in general because the Agile movement formally questioned and rejected the dogma of how software development should be done and, in particular, challenged the continuously failing waterfall model. Agile is just a step along the way and isn't without fault and dogma itself. We sorely need to keep moving towards improving our understanding of successful software development.

Post-agilism is starting to take hold with a tempered view, absent much of the hype and absolutism that has formed in some Agile communities. I look forward to the thoughts of these people who refuse to be constrained by dogma and continually challenge how we write software. It is this sort of skepticism that I think Feynman is looking for when he says we must not fool ourselves.

- maxx -


Cargo Cult Science

The Cargo Cults

Scott Ambler

Agile Alliance

Post-Agilism: Process Skepticism

Don’t draw diagrams of wrong practices - or: Why people still believe in the Waterfall model

There's no such thing as the Waterfall Approach! (and there never was)


Trackback URL for this post:

http://www.exotribe.com/trackback/16

Alterntive Expressions of Agile

Agile Development has always both attracted me and left me just a little uneasy. Maybe it is the larger images of Agile some people hold and the variation in types of software projects that keeps hanging me up. I want an image/model that (among other things):

  • (almost) always has me driving to a clear(ish) endpoint
  • allows for variation in how projects are planned and executed
  • allows for the difference between doing a class of project for the first time and a class of project that you know well
  • accounts for the different degrees of difficulty in each project

As a result, let me propose something similar but slightly different.

Rapid Development

Ok, so I am, uh, repurposing the term from some 90's literature (McConnell, 1996, "Rapid Development," Microsoft Press), but I don't really mean to use it the same way. I also don't mean RAD, which has its place. In this case, I want to use "Rapid" as a noun:

From good ol' Merriam-Webster: a part of a river where the current is fast and the surface is usually broken by obstructions -- usually used in plural but sing. or plural in constr.

Rapid Development looks a lot like Agile in various ways:

  • Agile is centered around those typically short(ish) iterations; Rapid is centered around the running of one or more rapids
  • Agile has a completed feature set or user story or ... at the end of each iteration; the end of each rapid run aligns with this
  • Some versions of Agile have you in shippable form at the end of each iteration; in theory, you could exit the river at the end of any rapid, but hardly ever can you do this in the middle of one
  • Same goes with planning between iterations and rapids
  • At the end of each iteration in Agile, you should recheck you priorities and current value/accuracy of your target; after each rapid you can decide to continue or port to another (hopefully nearby) river
  • ...

Where it might look different (depending on your denomination of Agile):

  • All rivers are not the same

    • some can be successfully navigated with more up-front planning and less between each rapid because the river is well mapped, well known by the team or known to be easy class 2 and 3 stuff (in most cases, however, you will want to have some points along the way that you check-in and re-group)
    • some are pretty unknown, so it is very important that you stop and think carefully between each rapid -- look and plan ahead in the calmer waters before charging forward towards the rocks (sometimes you actually need to get out of the river and scout ahead a bit)
    • but with any reasonable knowledge of the river, you can make rough projections of how difficult the trip might be and how long it might take; these projections get better as you get further down the river
  • All teams are not the same
    • some teams can navigate a river better than others because they already know it; yes, the river changes a bit each time, but there is a difference between your first drop into class 4 and 5 stuff and when you've run it a few times
    • some teams are also better at making degree of difficulty and duration projections on certain rivers due to their experience from the same or a similar trip
  • All team members are not the same
    • sometimes you have to help a less experienced, weaker or tired member of your team between and in each of the rapids; you never want to lose a team member, the whole team must finish or you have failed
  • All rapids are not the same
    • some are naturally longer than others
    • some are naturally harder than others
    • when doing class 4 and 5 rapids you probably need to take advantage of every break; when doing class 2 and 3 stuff you can be more cavalier about grouping them together in a single run and still succeed

Blah, blah, blah.

I can stretch an analogy way beyond the breaking point if you leave me too long without adult supervision, so let me stop here. I do not view this as necessarily different than Agile (or other methodologies for that matter), but it is a projection on the ultimate "truth" that works better for me. As an aside, I have a sort of Platonic concept of "truth." We all have a sense of it, but it is usually beyond our ability to fully describe or define. Instead we try to project onto it in different ways. We can fully describe those projections, but the truth is fundamentally too abstracted.

Gonna' stop now; spent more time on it than it is worth!