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.

    Heading 1

    Heading 2

    Heading 3

    Heading 4

    Heading 5
    Heading 6

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

    Block quote

    Ordered list

    1. Item 1
    2. Item 2
    3. Item 3

    Unordered list

    • Item A
    • Item B
    • Item C

    Text link

    Bold text

    Emphasis

    Superscript

    Subscript