The most common cause of custom software projects running over time and over budget is not bad engineering. It is scope that was not defined before the project started.

What a good scope document includes

  • Functional requirements: what the software does, described from the user’s perspective, with enough specificity that done is unambiguous
  • Non-functional requirements: performance, reliability, security, and scalability targets
  • Integration requirements: what external systems the software connects to
  • Explicit exclusions: a list of features that are out of scope for this phase
  • Acceptance criteria: how you will verify the software meets each requirement

The MoSCoW method in practice

The Won’t Have list is as important as the Must Have list. Writing down what you are explicitly not building prevents scope creep. When a stakeholder asks to add something in week eight, the answer is that it is in the Won’t Have list and here is the change order process.

The validation step

Before writing the first line of code: can you walk through the scope in a 30-minute meeting and have everyone agree on what done looks like? If not, the scope is not ready. Wireframes or low-fidelity prototypes at this stage are the highest-ROI investment you can make.