Mike Acton's Problem Solving Checklist

Graham Taggart - - 2 mins read

What are the problems I'm trying to solve?

# Question
1 What is the problem I am trying to solve?
2 Why is this problem important to solve?
3 Where is the limit where solving this problem is not worth it?
4 What is plan B?
5 What are the steps required to solve this problem?
6 What are the unknowns and risks associated with the solution?
7 Which framework I created can I use and modify to solve this problem?
8 How do I know when I'm done solving the problem?
9 What am I trying to prove? What is my hypothesis?
10 How can I prove my hypothesis is wrong?
11 What are the latency requirements to solve my problem?
12 What is the throughput needed to solve my problem?
13 What is the most common use case of the solution I'm developing?
14 What are the most common actual real-life values I am manipulating?
15 What are the acceptable ranges of the values I am manipulating?
16 What happens when data outside this range enters the system?
17 What does the input data look like?
18 What is the frequency of change of the actual real-life values I am manipulating?
19 Where is the documentation of the tools I most commonly use to solve this problem?
20 What is the slowest part of the system's workflow for my users?
21 What information of my system do users need to make effective use of the solution?
22 Which hardware is this solution designed for?
23 How does this hardware affect the design of my system?
24 How does my solution perform? How long does it take?
25 How can I optimize my solution?
26 How can I debug live release builds of my solution?
27 Which data does the solution read and where does it come from?
28 How often do I read data I do not need as part of my solution?
29 Which data am I writing and where is it used?
30 How often do I write data I do not need as part of my solution?
31 How is the data articulated in memory?

Decisions

Graham Taggart - - 1 min read
What's a decision anyway?