"How much is enough?" is a common question heard by analysts, designers and testers. How much detail of requirements do you need, how much detail of design do you need, how much testing do you need?
Let me give one answer for the requirements space. You will see that this philosophy can apply to the other areas as well.
A key question that needs to be asked first is "where in the SDLC are we talking about?". Unless the project is a classic waterfall project ,where all requirements are created in a single phase, requirements do "mature" through several stages.
To answer the question we can break down the concept of 'completeness' into three dimensions:
- Scope: are all areas covered?
- Detail: are all intricacies and all aspects of the requirements sufficiently described?
- Quality: are these the right requirements and are they consistent?
Requirements are basically an unbounded area into which an endless effort can be poured into. The practitioner, never having unlimited resources, needs to plan on how to get the best result with what is available. So the question of how much is enough is essentially a question of how to balance effort in each of these three dimensions to deliver the best result.
To illustrate these concepts let's walk through a simplified project lifecycle:
Early Idea
At this point the project is just an idea in the minds of a person or a small group. The objective is to turn this idea into a proposal that is serious enough to get funds for developing a business case.
Scope: At this stage the most important category. The objective is to identify key features that illustrate the intent and effect of the project. It does ignore the majority of alternatives and exceptions that do not contribute to the understanding of what the project is about.
The scope needs to be outlined both via inclusion and exclusion (At this a third category called 'unknown' is also very useful). The objective is to invite the target audience to help evolve what the project is about.
Detail: very sketchy, mostly bullet points are used and in some instance a little of narrative such as user stories are helpful.
Quality: The requirements are trying to paint a picture for the readers to imagine. Therefore consistency in this rather rough overview is very important to avoid confusion.
Proposal
At this point a business case is being built. The objective is to understand the requirements well enough so resources, budgets and time lines can be estimated. This implies that size, complexity and risks are identifiable.
Depending on the engagement model (fixed cost vs. budget vs. agility) the reliability of the estimate will vary which affects the depth of requirements. Quite often a reliable forecast for the effort for the next phase and a ball park for the overall implementation is necessary.
Scope: The scope must now be well described. This is critical, because any change in scope needs to be managed from now on.
To clearly describe scope more formal approaches such as Use Cases for functional requirements, UI mockups, early business domain model and key state diagrams are useful.
All functional requirements and business domain objects should be identified (but not defined, see Detail).
Detail: While the requirements now have structure, detail is focussed on the identification of requirements and less on the detail definition of requirements. That means that requirements elements are often identified by a name (and an ID) and an English language description to ensure common understanding in the audience.
Quality: Verification of having the right requirements is starting to become important. Reviews need to be held, however reviewers need to keep in mind the objective of the requirements at this state.
System Definition
This is the time when requirements need to be detailed and high level designs/architectures will solidify. From here on down stream consumers (designers and testers) require input to be able to do meaningful work. The end of this work provides requirements that are good enough to take design decisions, reliably estimate individual work packages and to plan and schedule the implementation.
Scope: At this point planning of iterations often starts. In the previous phase understanding of the system had been building to the point that it is possible to sensibly carve up the implementation into separate increments/iterations. Hence the requirements can be broken up and attacked in separate slices.
Detail: Requirements now need to be detailed to allow development of design. This is a tricky phase because diving into detail usually throws up even more detail questions - easily leading either into a morass of analysis paralysis or (usually) the subsequent abandonment of analysis and going on to implementation. A good rule of thumb is to partition questions:
- Show stopper questions for architects and designers: must be addressed here
- Questions that can wait until development: mark them to be resolved when development happens (e.g. what is the default value for a parameter)
- Changes to scope and requirement: flag them to the PM to determine if these are acceptable or need to be formally tracked as change requests
From this point on questions must be formally documented and tracked.
Quality: Requirements need to be validated to be consistent internally and with external documentation. Users need to verify that these requirements are the right requirements (with informal or formal sign off). At the end of this exercise requirements typically go into change control.
Implementation
If you think this is the end, think again. Design, implementation and testing will require more refinement of requirements. So plan for it. Also plan for changes in requirements, with each change request having a subset of requirements undergoing a similar maturation path as described above.
Conclusion
While this focussed on the requirements strand, the same strategy works for architecture, design and testing. A good SDLC recognizes this and coordinates the maturity of the deliverables across all streams, defining criteria to be able to assess what maturities deliverables have to have in various stages of the SDLC.
At the core of this approach lies the principle of not making decisions earlier than necessary. Following this principle this approach avoids creating requirements/design or other artefact details too early which in turn reduces the risk of costly rework later down the track, making for a more adaptive approach to running a project.