Getting Better At Solving Problems Actually Takes A System

Most people think problem solving is some kind of innate talent. It isn't. It's a repeatable process that anyone can learn, but almost nobody takes the time to actually formalize it. I've seen engineers spend weeks on issues that a solid framework would have collapsed into an afternoon. The difference is usually that they're skipping steps or pretending the wrong step is more important than it is.

The Art And Craft Of Problem Solving Solutions

Here's the basic sequence, the one that actually works when you stop overcomplicating it: That's it. Seven steps. Nobody follows all seven because step one is the hardest and also the one most people skip. They start building before they've actually stated what they're solving. I once watched a team spend three weeks deploying a database sharding strategy for a system that would have been fine with query caching and a connection pool increase. They skipped step one so badly they never came back to it. The biggest mistake is treating problems as if they're bigger than they are. A bottleneck at a single point in the pipeline is not a systemic architecture failure. A user complaint about a slow page load is not a network infrastructure crisis. Most of the time the problem lives in a much narrower band than anyone assumes.

The second mistake is falling in love with the first solution that comes to mind. Your initial idea is rarely the best one. It's just the most familiar. Spend five minutes writing down three alternative approaches before committing to any of them. This takes about two minutes and has saved my team from choosing terrible solutions on more occasions than I care to admit. Another common trap: conflating correlation with causation when diagnosing the issue. A metric drops after a deployment, so you blame the deployment. But maybe the metric dropped because of a seasonal pattern or a change in user behavior upstream. Run a controlled test if you can. If you can't, at least acknowledge the uncertainty instead of building an entire fix around an assumption.

A Specific War Story

About two years ago I was dealing with an intermittent latency spike in a service we operated. It showed up maybe once every few hours, lasted thirty seconds to two minutes, and affected maybe 5% of requests. The error rates looked clean. Logs were noisy. Several people suggested adding more replicas, increasing timeouts, or rewriting the query layer. All expensive, all probably unnecessary. Instead I spent a morning writing a tiny Python script that instrumented the exact request path and correlated response times with container memory usage, CPU steal, and disk I/O wait. The spike wasn't coming from our application logic at all. It was a garbage collection pause in the JVM on one of the shared underlying hosts. The host was under memory pressure from a neighboring tenant on the same physical machine — a noisy neighbor problem masked as an application problem. The fix was moving that service to a dedicated instance type. Cost: one configuration change and a redeploy. Time to resolve: four hours of investigation instead of the three weeks we were heading toward. The key was actually defining the problem correctly first. It wasn't a performance problem. It was an isolation problem.

Get the Full Details

Jual The Art and Craft of Problem Solving | Shopee Indonesia
Jual The Art and Craft of Problem Solving | Shopee Indonesia

When The Process Breaks Down

It doesn't always work. Here are the scenarios where a formal problem solving framework hits a wall: Time pressure is extreme. If someone is losing money by the minute and you need a decision in ten minutes, you don't have time for the full seven-step process. You make the best call you can with the information available, document your reasoning, and refine after. That's not cheating the process. That's recognizing the constraint. The problem is genuinely novel with no reference frame. Frameworks rely on patterns you've seen before. When you're operating in entirely uncharted territory, the definition phase becomes guesswork and your evaluation criteria are unreliable. In those cases you lean harder on small experiments and rapid feedback loops rather than extended analysis.

Multiple stakeholders have conflicting definitions of the problem. This is probably the most common real-world blocker. Engineering thinks the problem is technical. Product thinks it's about feature gaps. Sales thinks it's about pricing. No amount of structured analysis will resolve a disagreement about what you're actually solving. You have to resolve the conflict first, usually through direct negotiation, before the framework is useful.

A Few Practical Tactics That Actually Help

Write the problem statement on a whiteboard or shared doc where everyone can see it. If two people in the room can't agree on what it says, you're not ready to move to solutions yet. This alone prevents maybe half of the wasted effort I've seen on projects. Use the Five Whys technique but don't stop at the first answer that sounds reasonable. People tend to accept the third or fourth why and call it a day. Go until you hit something that feels unsatisfyingly vague or until you run out of honest answers. The real root cause is usually further down than people want to dig. Keep a personal repository of problems you've solved and how you solved them. Not elaborate documentation. Just a simple list with the problem description, the approach, and what actually worked. Six months from now you'll hit something similar and you'll save yourself two days of reinvention. I still go back to entries I wrote in 2019.

The Art And Craft of Problem Solving by Paul Zeitz | Goodreads
The Art And Craft of Problem Solving by Paul Zeitz | Goodreads

Decide upfront what success looks like with a measurable threshold. "Fix the latency" is not a goal. "P99 response time below 200ms for the checkout endpoint over a rolling 24-hour window" is. Without a threshold you can't tell when you're done and you'll keep optimizing past the point of diminishing returns. The framework isn't elegant. It doesn't feel like art when you're in the middle of it. But it works because it forces you to confront what you actually know and what you're assuming, and most bad solutions come from unchecked assumptions rather than lack of intelligence.