Most software projects that disappoint don't fail because the code was bad. They fail because the code solved the wrong problem, or the right problem in a way nobody would use.
That's why we start by understanding the problem before building.
The reported problem vs. the real problem
A request usually arrives as a solution: "We need a dashboard," or "Can you automate this report?" Those requests are valuable because they point at real pain, but they're a starting point, not a specification.
Asking why a few times often reveals something different. The dashboard is needed because three teams disagree on the numbers. The numbers disagree because two systems define a "customer" differently. Fixing the definition may matter more than the dashboard.
A simple discovery framework
When we start, we try to answer five questions:
- Who experiences the problem? Name the people and roles, not just the department.
- What do they do today? Observe the actual workflow, including the workarounds.
- What does it cost? Time, errors, delays or missed opportunities, even roughly.
- What would "solved" look like? A behaviour or measure that would visibly change.
- What are the constraints? Systems, security, budget, timelines, and people.
The output is short: a shared description of the problem, a definition of success, and a proposed first increment.
Why it saves time
Discovery can feel like a delay. In practice it shortens the path to a working solution, because each increment is aimed at the right target and the team agrees on how to judge it.
It also builds the relationships that make the rest of the engagement work. The people interviewed during discovery are often the ones who test early versions, and eventually the people who own the result.
If you're facing a problem that's hard to pin down, that's often the best time to talk. Tell us what you're working on, or read how we approach MVPs if you're starting something new.
