Chapter 1
Frame the Problem Before Choosing a Solution
Good engineering starts by making the problem small enough to reason about and important enough to solve.
Problem framing states who is affected, what outcome is failing, how often it happens, and what constraints matter. A request such as “make the dashboard faster” is not yet a useful problem because it does not name the slow action, target, or user impact.
Separate observations from assumptions. Collect a baseline, trace the current flow, and ask what would count as success. Constraints include time, compliance, team skills, compatibility, and operational capacity. They shape the solution and should be written before options are compared.
Instead of “replace the frontend framework,” a useful frame may be “p95 navigation to the orders screen is 4.2 seconds for mobile users; most time is spent in an uncached API; the target is below 1.5 seconds without changing order semantics.”
A precise problem statement prevents a technically impressive answer to the wrong question.
How to apply this
- Name the user, failed outcome, baseline, and target.
- Write assumptions separately and identify how to test them.
- Record constraints before evaluating solutions.
Situation
The team assumes React is the cause without measuring the request path.
Decision
Trace the journey, find the API bottleneck, and frame a measurable latency problem before choosing implementation work.