Depth of Thinking Now Has a Proportional Return

Jun 9, 2026 7 min read

For most of my career, thinking too carefully about a problem was a luxury I could not afford. Implementation cost was the ceiling. That constraint has shifted — and it changes what it means to build well.

For most of my career, thinking too carefully about a problem was a luxury I could not afford.

Not because careful thinking was wrong. It was always right. But implementation cost was the ceiling.

You could design a system with perfect separation of concerns, clear invariants, orthogonal components — and then watch the cost of building it force shortcuts that undermined the design.

The gap between the thought and the thing was always there, and it always won eventually.

So you learned to stop thinking at a certain depth. Not because the thinking was wrong. Because the implementation would distort it anyway.

That constraint is gone now — or at least raised high enough that it no longer governs the decision.

What shifted

I recently built a tool I call Flywheel — a local-first relationship management system for my consulting work. The starting point was straightforward: capture contacts, track conversations, draft outreach messages with AI assistance.

But that description does not say what made it interesting to build.

I am an introvert who built a career on technical depth and paid a price on the social side. Maintaining warm professional relationships — knowing what to say, how to follow a thread, how to stay in someone else's world rather than retreating to the familiar — that did not come naturally. I wanted a tool that would help me do it better. Not automate it. Help me do it better, and learn from doing it.

That framing changed everything about how I designed the system.

Early on, I noticed something: every time I edited a generated draft before sending, I was implicitly signalling something the model did not know. A detail about the relationship. A specific reference. A direction I sensed was right but the system had not been given. That signal was disappearing. The system generated, I edited, I sent — and nothing was captured about why.

So I stopped. And did something I had not been able to justify before: I thought about it carefully, for a long time, before building more.

What emerged from that thinking was a feedback loop — three signals, a scoring layer, a knowledge tree, a diff call that runs at every finalize. The diff compares what was generated against what was sent and classifies the difference: wording only, semantic shift, or new insight added. New insight surfaces a prompt to save it back to the contact. Patterns across many contacts accumulate and surface at the weekly retro as potential prompt calibrations.

None of this was in the first version. But it was not a happy accident either. It came from using the system, noticing what the signal was not capturing, and then doing something I had not been able to justify before: designing the solution carefully and completely before building more.

The implementation followed the design. Not the other way around.

That is where I noticed the constraint had shifted.

The principles that were always right

There is a set of principles that serious software people know and value: separate what varies from what does not. Design for observability before scalability. Keep components loosely coupled. Think in event streams rather than stored state. Build systems that are easy to understand, easy to evolve, easy to maintain.

These principles exist for a reason. Systems built without them accumulate cost — not always visibly at first, but inevitably. Every shortcut taken in the name of speed creates a constraint that has to be worked around later. The cost of implementation goes up precisely because the principles were not applied in the first place.

The problem was never that the principles had diminishing value. The problem was that applying them carefully — going the extra depth, making the extra distinction, designing the extra layer of separation — added cost in the short term without guaranteeing the implementation would honour it. You could design the right thing and still watch it erode in the build.

The same constraint applied to product features. When I could not afford to think a feature all the way through, I did not. I shipped a version that worked and moved on. The depth that would have made it genuinely solve the problem — the edge cases, the feedback mechanisms, the way it would compound in value over time — that stayed on the mental shelf marked "later." Later rarely came. So I shipped breadth instead of depth, feature after feature, each one shallower than it could have been.

So a gap opened between design and execution. The design would be right. The build would approximate it. And over time, the approximation became the system.

That gap has shifted. When I hand a precise spec to Claude Code, what comes back is close to what I designed. Not because the tooling is magic — because the spec was precise enough to transfer. And the spec was precise because I spent the thinking time to make it so, without worrying that the thinking was getting ahead of what could be built.

The principles were always right. Now the execution environment can honour them.

Iteration changed character

There is a second shift that follows from the first.

In the old model, you built a rough version to learn. You had to. You could not anticipate everything in the spec, so you built something, hit reality, and adjusted. The first version was a learning tool, not a product.

Now the first version is already a second-generation design — because the spec phase is where the iteration happened.

The same pattern held throughout Flywheel's development — each phase handed to Claude Code with a precise spec, each phase returned close to what was designed. The implementation was not a first draft. It was the execution of a design that had already gone through its iterations in the thinking.

For a founder, this matters enormously. The cost of being precise upfront used to compete with the cost of just building and learning. Now it does not. Precision shifts directly into the output. And the feedback loop from real usage — which you still need, and which is still irreplaceable — becomes sharper faster, because the foundation is cleaner.

Quality compounding

I have been looking for the right way to describe what changed.

"Faster shipping" is not it. Speed is the wrong frame. I am not shipping more features per week. I am shipping fewer, better ones — because I spend the time I saved on implementation thinking more carefully about what to build and why.

"Higher quality" is closer but worn out as a phrase. Everyone says quality. It does not carry weight anymore.

What I experience is something more like compounding. Every hour spent thinking precisely — about what varies and what does not, about where coupling would hurt, about what the system needs to make visible — that hour now returns proportionally in the output. The thinking is not lost in translation. It shows up in the code, in the behaviour, in the way the system holds together under use.

This is the kind of thinking I built Shift Advisory around. Not as a theory — as a practice. Systems that are observable, evolvable, and decision-ready because the architecture was thought through before it was built. The difference now is that the thinking is no longer a risk. It pays back directly.

This is new. Not the principle — careful thinking was always right. But the return. The return has shifted.

What this means if you are building a product

If you are a founder thinking about what to build, I would suggest reconsidering where you spend your thinking time.

The traditional lean advice is to build fast, learn fast, iterate fast. That advice was right when implementation was the bottleneck. When you had to choose between thinking and building, building gave you information that thinking could not.

That tradeoff has shifted. You can now think longer and build faster. The information you get from thinking precisely — about your users, about your system design, about what the invariants are — is no longer wasted on approximation. It transfers.

This does not mean stop building. Real usage is still irreplaceable. The feedback loop from something working in the world is different from the feedback loop in a spec session. You still need both.

But the balance has moved. The depth of thinking that used to feel like over-engineering is now the thing that makes the first version good. And a good first version learns faster than a rough one — because the signal it generates is cleaner.

Think more carefully. Build more precisely. Let the iteration from real usage be sharp rather than foundational.

The ceiling has shifted. Use it.