To me, Agile software development approaches feel very natural. It got me to thinking why… I believe it may be because it has some similarities with what we experience in nature every day. So this posting is to compare and contrast what feels natural in Agile. While I recognize I am describing this in more or less an ideal fashion, it can help obtain some clarity by doing so.
Like streams, agile development flows to deliver value. That value may be increased throughput of a process or an increase of sales, improvement in communications, or a myriad of other things.
Even the lightweight processes we put in place are like flows. Short feedback loops are like eddies in the stream. Continuous integration is all about making this cyclical flow of feedback get shorter still. Techniques like Kanban help us visual this flow, identify blockages that we need to keep the flow from backing up, and setting work in process limits help us make the flow continue smoothly.
While some techniques or methods may seem more flow-oriented than others, I’d say that all of them try to identify and help flow become smoother. Whether it used only internally by the team to get feedback or to continuously create value, this usually comes down to emphasis only.
In nature we see rhythms all around us, the rotation of the earth to give use the sunrise-sunset cycle, our heart pumps our blood with a regular beat, the regular change of seasons, and so on.
Many of the techniques we use in Agile are to identify and help sustain team rhythms. We have daily stand-ups to feel the pulse of the team. We do regular just in time reviews and planning to help maintain the rhythm of work we are doing. We measure velocity to understand if our cadence is being effective. All of these is not necessarily about speeding up the rhythm of our team, though on occasions this may be desirable; it is more likely to identify, amplify, and understand what the team’s drumbeat is.
The heartbeat is probably the best metaphor. We look to ensure it is there, measure to know it is healthy, and when irregularities occur, we try to correct them as quickly as possible before they become detrimental.
Nature gives us things in small batches. The weather gives us periods of rain intermittently with sunshine and plants produce fruits for only a short period.
In Agile, many of the ways we approach things are to also try and deliver value in small batches. We attempt to demonstratively develop a small number of features that are ready for release. Using restrospectives, we attempt to identify and implement a small number of improvements to help the team.
Nature shows us many symbiotic relationships. We’ll find remoras with rays or sharks for example; remoras help clean the sharks and the shark’s hunting provides the food the remoras need. Sea anenomes will provide protection for the clownfish.
In Agile, I identify this symbiosis as collaboration. This could be our customers who provide requirements to the developers who build to these and demonstrate they achieved them back to the customer. It could be the project manager (to use a generic term) that facilitates removal of barriers. We use pair programming to ensure improve team collaboration. We use techniques like team retrospectives to help us find ways to collaborate better.
In nature teams organize to overcome threats or work together to hunt. The insects or animals in these circumstances collectively understand the goal, the sense of urgency, and the required communication. There isn’t large upfront planning by one animal, though one may take a leadership role and commit with the rest joining in.
Likewise, Agile teams self-organize to deliver working software, resolve issues, or make plans. In the ideal, this is done with as little ceremony and overhead as possible. It will involve the entire team when it makes sense (e.g. planning an iteration) or the right members (e.g. pair programming) at other times. When a major obstacle is encountered, the entire team will swarm until it is removed.
So if I am making a comparison to what is natural, it probably behooves me to look at
What’s not natural…
Checklists are used to ensure things get done. While one may use this as a tool in self-organization, it doesn’t feel natural; this is particularly true after you have tried Kanban and in particular Personal Kanban. Checklists feel overly simple and hide some of the complexities that need to be discussed. They tend to fall under control of one individual, which works well if it is intended to be used by only one person. If however they are intended to be used by a team, they tend to fall apart, as only one person is usually placed in control of the checklist. Often checklists aren’t tailored to the context of the project at hand either.
I’m not personally against using checklists, but they don’t feel natural. So I am suggesting just ensure that the context and environment is considered carefully.
In nature, nothing is identical; even identical twins aren’t truly identical. Plants grow based on the environment; the same plant type may grow differently based on how much sun or water they get. A stream meanders according to its terrain.
Software development is a craft. Craftsmen attempt to achieve perfection, but in context for what is being built. Even a commercial off-the-shelf application packages (e.g. an office application suite like Microsoft Office) are used differently by different organizations; each are built to different goals.
Contrast this with a manufacturing line; there if every item could be identical that would be a desirable process. It would mean the process is producing goods within the desired tolerances.
Big Upfront Design:
And this probably the least natural. Nature uses evolution to guide its designs. Ants don’t lay out a huge plan to raid the picnic; they get sensory feedback, self organize, and attack. Their planning is instinctive in nature and much like rolling wave planning. Watermelon too big to move? Bite and cut it into pieces for transportation.
Here is another example akin to rolling wave planning; evolution developed the sequoia trees to drop their cones around its base. The seeds then start growing the young sequoias in a circle around the parent tree. When the parent dies, it leaves a circle of trees called a druid circle. This is a plan that as environment of the sequoias change they will slowly evolve to perhaps have seeds that are blown like maples, or roll, or a perhaps will become dependent on being dispersed by animals.
If you liked this article, please tweet it!