Agile approaches follow iterative divide-and-win strategies, based on fluent communication, incremental work and continuous feedback. The agile manifesto states that “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software”. However, the principle “The most efficient and effective method of conveying information to and within a development team is face-to-face conversation” does not hold at all in many projects because of time pressure, distributed projects, team changes, strict regulations, large-sized applications, huge domain knowledge or complex organizations,… In some contexts, face-to-face conversations may be not enough (or even not always possible) because “faces” may change, may become unavailable or they may simple go out from the project. Moreover, if the knowledge is spread out only over different minds, then the whole picture may be lost. In these situations, communication mechanisms need to be enriched with explicit knowledge specifications. Taking this into account, a question arises: can we use the core agile approaches together with accessible, centralized and explicit repositories of knowledge as an accelerator for agile approaches? The answer is no if documentation is too ambiguous, non-maintained and managed as bureaucracy. But, good news! The answer is yes if documentation is “alive”.
What does it mean “alive documentation”? Documentation is alive if it can be executable by simulation, non-ambiguous and ready to be easily changed as a reaction to frequent changes. Documentation may be a drawback for agility if we conceive it as a set of non-updated and unstructured collection of words with ambiguous meaning, because its utility is limited and usually becomes dead. In other words, we don’t need Shakespeare for documenting system knowledge. However, agility may be supported if we are able to manage structured, concise and easy-to-update specifications that support knowledge discussion at each iteration. If we have a useful map, we will find the right way faster. What if we were able to structure system functional knowledge in models from which we could generate purpose-driven documentation that could be easily regenerated after changes? This is not future, this is present (see Recover[i] for details).
Establishing a purpose-driven modeling strategy for managing knowledge in agile projects is essential for enhancing the potential of many other principles of agility, specially about change (“welcoming changing requirements even late in the development”), since models facilitate impact analysis and early inconsistencies detection, in addition to reporting and estimation facilities.
In summary, the claim is that “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software” but also (we add) “associated knowledge representations in the form of weighted models or documentation”. In this way, at each iteration, the piece of working software becomes part of the result, and the piece of documentation is integrated to the global specification view for better agility through enhanced knowledge management.