A problem statement that engineers respect has five properties: it names a specific person, describes what they currently do, identifies where that breaks, quantifies the cost, and states what success looks like. Most problem statements have none of these properties.
"Users have trouble with the onboarding flow" is not a problem statement. It is a vague complaint. It tells an engineer nothing about what to build, who it is for, or whether the solution is working.
The five-part framework
1. Name the persona. Not "users", a specific role, context, and level of sophistication. "Senior product managers at B2B SaaS companies managing 3+ features simultaneously" is a persona. "Users" is a placeholder.
The reason specificity matters: a problem that applies to everyone applies to no one. When you name the persona, you make implicit constraints explicit. A senior PM's problem statement will look completely different from a junior PM's problem statement, even if the surface complaint is identical.
2. Describe the current state. What does this person currently do to accomplish the goal? Walk through the exact steps, including the workarounds they have constructed. The workarounds are often the most important part, they tell you where the biggest friction is and what the user actually values.
"Currently, the PM writes the PRD in Notion, manually creates tickets in Linear, copies acceptance criteria from Notion into each ticket, and cross-references both documents to verify nothing was missed. This takes 40 minutes per feature and introduces errors when sections are updated in Notion but not propagated to Linear."