Progressive Elaboration

Progressive elaboration is one technique that can be applied to virtually any aspect of software development. In reality it is a simple analysis technique which revolves around the maxim: start with what you know.

In agile software development, we apply this to several activities: requirements, design, and planning.

Progressive elaboration starts with the notion, that you cannot know enough about a software system to get to “done”, before you start. Progressive elaboration is sort of a continuous bootstrap process for knowledge.

While agile proponents also talk about how they embrace change, that is not what progressive elaboration is for. Progressive elaboration is a means to get started before you know enough to get to done. It is a means to prevent knowledge gaps from impeding progress. It is a means of driving out information through completing work, rather than by theoretical analysis.

The way I have usually approached knowledge gaps is as follows:

1) write down what we do know
2) break current knowledge gaps into categories (it helps to have some pre-defined categories that you like)
3) use your categories to segment the knowledge gaps into sequence-able chunks
4) decide what principles you will use to sequence your chunks
5) apply the sequence to the chunks of knowledge gap
6) elaborate the chunks in sequence

Sometimes I will break knowledge gaps into multiple sets of categories, or aspects, trying to find a suitable way to render a sequence of elaboration. Usually elaboration is feeding some downstream project activity. Usually the sequence we choose, is selected specifically to allow the downstream activity to start sooner, and not be distracted, or disabled by our knowledge gaps until some later point in time.

While all this sounds completely abstract and useless, I want to provide an example, so that you can make sense of it. In fact in subsequent posts, I may provide examples from each agile domain (requirements, design, and planning) so that you can make sense of it in a domain that is more familiar to you.

No Comments

Leave a Reply