Overview #
In this phase you will produce the requirements portion of a [Design Document] and get that approved.
How to Think About Requirements #
To put yourself in the customer’s shoes, here’s my advice:
- FORGET everything you know about the current solution!
- DON’T try to come up with a new solution!
- FOCUS on understanding the customer, their goals and experiences!
- ONCE you understand the customer, feel free to ask “what if X?”
- X should expose as little implementation detail as possible
- X should focus as much as possible on the user’s experience: the user’s actions, what they see, hear and feel
Target State, and How to Get There #
You want several stakeholders to approve a set of measurable goals. This means you’re juggling many interests at once. Your requirements must:
- Impress a customer or Product Manager
- This means (for projects with non-tech customers) a non-engineer has to understand how the new experience will be better
- This means the requirements have to be as non-technical as possible
- This means that a mockup may be needed to fully explain the requirements
- Seem like a small enough investment to Engineers and Managers to be worth the benefits
- This means you have to be thinking ahead to possible designs
- You need to have “ideal ways” and “shortcutted ways” in mind
- You need to believe that these requirements won’t become irrelevant later
Specializing the Pitch #
Your pitch needs to be expressed in a way your customer and key approvers will understand.
- Engineers
- These people tend to want hints about the solution before you’ve posed a problem
- Try to distract them from the solution and focus them on the problem :)
- Product Managers / Managers
- These people are specifically trained to help you get the right requirements
- Pull them into the discussion even if they aren’t the customer :)
- End Users
- These people may not understand what it’ll cost you to build this.
- Avoid over-promising, but see what will give them the biggest incremental boost :)
Steps #
- Identify who the customers are
- Identify a list of “key approvers” (individual humans, not teams)
- Understand what the customers do, and what their day-to-day goals are
- Narrow down and focus on the “core” problem that is causing the worst effects
- Come up with some proposed goals which, if reached, would solve the core problem
- Propose and get approval on:
- A summary of the problem the project will solve
- A list of concrete, measurable goals for the project to achieve
- A list of things the project will NOT achieve (“out of scope”)
Problem Statement #
- If the problem statement isn’t concrete (based on the customer’s experience), it’s not done yet
- If the problem statement describes several very different problems, you need to focus it more
- If the problem statement is being misunderstood, it needs to be clarified
Functional Requirements #
These explain what new functionality we need to build for the customer.
- Must say something about the experience the customer will have
- Must be easy for the customer to understand
- Should hint to engineers some “unit of functionality” to be built
- If building on an existing system, specify how it will affect the user’s experience of that system
- Templates:
- “As a {customer type}, when {activity} I can {action} in {location}, and that will result in {outcome}”
- “As a {customer type}, when {activity} I can see {information} in {location}”
- This has to be the kind of thing you (and the customer) can test when you’re done, to prove that it’s complete.
You can mix and match the templates above. They provide some useful constraints that will guide you toward better requirements.
Non-Functional Requirements #
These explain other aspects of the system, or the new functionality, in order to keep the experience high quality, and handle the needs of the business and developers.
- User-facing latency and availability SLAs
- Applicable Operations, Security and Privacy requirements
Out of Scope #
These explain things you will not achieve. It is best for these to be worded similarly to Functional Requirements, but sometimes you need to just explain something your own way and that’s fine.
When Am I Done? #
When you’ve filled in the Requirements section of [this design doc template] and gotten it approved by your key approvers.