- Describe the problem to be solved/function to be implemented. Break large problems into sub groups of problems.
- Determine the root cause of the problem or the reason for the function. What is the expected outcome for solving the problem? What is the impact of not solving this problem? Understanding “why” will keep you rooted in the bigger picture.
- Indicate what you need to know to solve the problem.
- Describe the environment where the solution will exist. Describe the people, places and things that are impacted? How does the environment interact with your solution? How is it impacted by your solution? This will help you to evaluate the larger impact and to also uncover any assumptions or pre-conditions that you’re assuming will be present or active.
- Document the high-level solution. Writing it out is the next best thing to talking (or walking) it out. This is an excellent way to communicate your intent.
- Detail the steps for executing the solution. “When <the problem> occurs, First <an actor will> do this, then <an actor will> do that, then <this solution will> do this other thing”
- For each step, evaluate & indicate the outcomes. What do you need to know to perform the step? What are the results of performing the step? This is how you communicate the expected outputs & post-conditions.
- Now how many steps did that take? How can you make it faster, better, smarter? (similar process to editing a story). You may uncover some unnecessary steps, redundant procedures or methods for more efficiently solving the problem.
- Rinse & repeat.