Building software is addictive.
You think of a feature, open your editor, write some code, and eventually watch the idea become something real.
That feeling is difficult to beat.
But when you're building a product rather than working on an isolated project, there's a problem: you can spend months building things without getting any closer to building a product people actually need.
I've been thinking about this while working on developer tools.
The challenge isn't always figuring out how to implement something. Sometimes, it's deciding whether it should exist in the first place.
The feature trap
Imagine you're building a tool for developers.
You start with a clear problem to solve. Then you notice another problem you could address.
You add a feature.
While implementing it, you discover something else that would make the experience better. You add that, too.
Before long, your roadmap contains authentication, analytics, integrations, monitoring, deployment, automation, and several other ideas.
Individually, each feature makes sense.
Together, they can make the product harder to understand, harder to maintain, and harder to launch.
The dangerous part is that you're still making progress.
Your codebase is growing. Your feature list is getting longer. Your product looks more impressive.
But none of those things necessarily means you've found product-market fit.
You might simply be getting better at building things that people haven't asked for.
More features don't automatically create more value
A feature has at least two costs.
The first is the cost of building it.
The second is the cost of keeping it working.
Every new capability can introduce additional edge cases, bugs, documentation requirements, support requests, and maintenance work.
Integrations need to be maintained. APIs change. Dependencies become outdated. User expectations grow.
A feature that takes two days to implement might create months of maintenance.
This doesn't mean we should avoid ambitious products. It means we should understand the difference between the cost of creating a feature and the cost of owning it.
For a small team, that distinction matters enormously.
Start with the problem, not the feature
When evaluating a new feature, I think these questions are more useful than asking whether it would be cool to build.
- Who specifically has this problem? If the answer is everyone, the answer probably isn't specific enough. Identify the people who experience the problem and understand how they currently deal with it.
- How painful is the problem? A minor inconvenience might not justify a new product feature. A problem that repeatedly wastes hours, causes failures, or forces people to pay for several disconnected tools might be worth investigating.
- What do people do today? Look at existing workflows, competitors, spreadsheets, scripts, workarounds, and manual processes. The way people solve a problem today can reveal more than a list of features they say they want.
- Can we test the idea before fully building it? Sometimes a prototype, landing page, manual service, or small experiment can tell you whether the idea deserves more investment. You don't always need to build the entire system to test the underlying assumption.
- What will we stop doing to make room for it? This is the question I think early-stage builders should ask more often. Time is limited. If a new feature takes two weeks, those are two weeks you cannot spend improving onboarding, fixing an existing problem, talking to users, or finding customers. A roadmap should reflect those trade-offs. Distribution is part of building the product There's another trap developers can fall into: believing that a better product will automatically attract users. It won't. People need to discover your product, understand what it does, see why it matters, and decide that trying it is worth their time. That means distribution cannot always wait until development is finished. You can have excellent engineering and still struggle to get users if nobody knows your product exists. For an early-stage startup, speaking to potential users, publishing useful content, participating in developer communities, and testing acquisition channels are not distractions from building. They are part of discovering what is worth building. What I'd do differently with a new product If I were starting another developer tool from scratch, I'd keep the initial plan deliberately narrow. I'd identify one specific audience and one painful problem. Then I'd build the smallest version that could solve that problem for a real user. I'd put it in front of people early, observe what they actually do, and use that information to decide what comes next. I'd keep a separate list of interesting ideas so I wouldn't confuse an idea worth remembering with a feature worth implementing immediately. Most importantly, I'd measure progress by what users can accomplish, not simply by how much code I've written. The goal isn't to build the smallest product possible forever. It's to earn the right to build a bigger product by proving that the smaller one is useful. Final thought Building software rewards people who can execute. Building a sustainable product also requires knowing when not to execute. There will always be another feature to add, another integration to support, and another idea that seems too good to ignore. But an early-stage team doesn't have unlimited time or resources. Sometimes, the most valuable thing you can do for your product is leave a good idea unbuilt. I'm curious about other builders' experiences: What's one feature you were convinced you needed, but later realised you could have shipped without? I'd like to hear the reasoning behind it.
Top comments (0)