The Ruthless Pursuit of Why đ„
Stop validating features by how âgoodâ they are. Start asking if they solve the right problem. A mindset shift for any team building software for real people.
A framework for building software that actually solves the problem
In our field, asking âwhyâ should be second nature. But when you're the one constantly asking itâespecially in rooms that value velocity over directionâyou can start to feel like a problem.
Iâve been called contentious, adversarial, even combative, simply for pushing back until we have a shared understanding of the problem weâre solving. And honestly? I'm okay with that. Because the alternative is building the wrong thing beautifully.
While I focus here on developer toolsâbecause thatâs what I buildâthe same mindset applies to any software built for humans. Internal or external. Technical or non-technical. Solving real problems means first understanding what those problems are.
Good Idea. Wrong Context. đ§
Letâs say someone comes to you with an idea:
âWe should give developers water.â
You ask why.
They respond with,
âBecause itâs good for you. Keeps you hydrated. Promotes a healthy lifestyle.â
And while all of that may be true, it still doesnât answer the real question:
What problem are we solving?
Because without knowing the problem, we canât weigh alternatives, identify flaws, or evaluate the solution at all. Weâre just reacting to the idea, not the need behind it.
Hereâs why that matters. Letâs say the real problem is:
- Theyâre thirsty
- They ate a really spicy pepper
- They feel nauseous
- They need something to swallow a pill
- Theyâre choking
âGive them waterâ might help with the first. It might make the second worse. It might do nothing for the third. It might help with the fourthâbut only if it's not carbonated. And in the last case? Giving them water could literally be dangerous.
So even if water seems like a great idea, itâs not a good solution without context. âWaterâ isnât the problem. Itâs someoneâs proposed answer. And until we know what theyâre trying to solve, weâre just guessingâand possibly making things worse.
Tasks Donât Deliver Value. Solving Problems Does. â
This happens all the time in software. A user says they want X. We implement X. We ship X. Everyone checks the box.
But value isnât in the shipping. Itâs in the solving.
We forget: effort doesnât equal impact. Work isnât valuable just because we did it. Itâs valuable when it changes something. When it makes someoneâs work better. When it removes pain, adds clarity, unlocks speed, or avoids error.
So the job isnât just to build fast. Itâs to build the right thingâand be willing to rewrite or throw it out if itâs not landing.
Stop Making Sandwiches for Yourself đ„Ș
When someone makes you a sandwich, theyâre not making it for themselves. At leastâthey shouldnât be.
A good sandwich maker asks questions. Toasted or not? Mayo or mustard? Any allergies? What do you like? If they skip all that and just make what theyâd wantâa spicy triple-decker Reuben with pickles and jalapeñosâyou might be impressed⊠until you realize you hate rye bread and canât eat dairy.
Thatâs what happens when we design solutions around our own preferences instead of the needs of the people we're building for.
Developer tools are no different. As engineers, we bring a lot to the tableâexperience, opinions, patterns that worked before. But our users live in a different context. They have different habits, workflows, and constraints. If we build something based on what we think is best without understanding their reality, it might look great to usâand be completely useless to them.
If we want our work to matter, we have to stop making sandwiches for ourselves.
My Kids Helped Me Learn This the Hard Way đź
I think about the time I built a sky base in Minecraft for my kids. I knew them wellâor so I thoughtâso I designed what I assumed they'd love: clean layouts, matching blocks, perfect symmetry.
My daughter immediately started adding random colors. At first, it drove me nuts. But then I realized: she was showing me what she likedâcolor-coded zones, playful mismatches, visual storytelling. So I adapted.
My son? Total chaos. Carefully designed rooms meant nothing to him. He preferred open spaces where he could experiment, knock things over, and rebuild. So I made space for that, too.
What I thought was âperfectâ didnât matter. What mattered was how they wanted to play. The only way to build something meaningful for them was to stop assuming and start observing.
As engineers, we need to approach building developer tools the same way. Donât guess. Watch. Ask. Adapt.
Stories Should Have Happy Endings đ
User stories arenât requirements. Theyâre invitations. Theyâre moments to ask what success really meansâand how weâll know if weâve delivered it.
Too often, we validate a feature by pointing to its inherent value: âWell, itâs a dashboard,â or âIt supports filters now.â But that only matters if those things help the user do something better. If not, theyâre just features in a vacuum.
Itâs easy to say, âWell, we built the water. Itâs cold. Itâs fast. Weâre done.â But maybe what they really needed was Gatorade. Or a milkshake. Or just someone to ask if theyâre okay.
One of the most common pitfalls teams face is validating a feature by the feature itself, rather than by whether it effectively solves the userâs actual problem. A feature can be polished and clever and still be pointless.
Donât just write stories. Write stories with happy endings. Solve the problem. Deliver the outcome.
Be Contentious. Be Curious. Be Kind. đ§
When you question assumptions, push for clarity, and challenge the default, you might get labeled as difficult. But asking âwhyâ isnât about being rightâitâs about getting it right.
This is how we get better. This is how we deliver real value. This is how we build tools developers actually want to use.
So yeahâbe contentious. Be adversarial. Be combative in your pursuit of why.
But do it with purpose. Do it with humility. Do it in service of the people youâre building for.