
Every development team faces the same paradox: you can’t learn what users truly want without shipping code, yet every experiment you ship risks adding to your code’s “dead weight.” Pendo’s research tells us that 80% of product features languish unused, quietly inflating maintenance burdens. This article unpacks why feature bloat happens, whether it’s truly unavoidable, and how to flip the script—investing more in pre-code validation so your next MVP delivers real value from day one.
1. The Anatomy of Dead Code
- Feature Bloat & Creep: Stakeholder requests, competitor chasing, and “just-one-more” mindset lead to incremental feature add-ons that rarely get used. Over time, these unvalidated extras accumulate into ballast.
- Optimistic Ideation vs. Real-World Use: Every idea feels like a winner in planning sessions. Only after release do analytics reveal what really moves the needle.
- A/B Testing Overhead: Building multiple variants to test a flow or UI often leaves non-winning code behind. These abandoned branches of experiments become permanent fixtures unless rigorously pruned.
“Every experiment is a bet; you only pay off on the winners, but you still foot the bill for all the tickets you bought.”
2. Is Experimentation a Necessary Evil?
Yes... and No.
Necessary: Data-driven optimisation, whether through A/B tests, feature flags, or canary releases, is the only way to learn what users actually want. Without experiments, you’re shooting in the dark, and nobody has time for big-bang launches that flop.
Evil: Too often, teams treat experimentation like a mini-build cycle: spinning up multiple full-featured versions in production, hoping one sticks. That’s how bloated codebases, unfinished forks, and tech-debt nightmares happen.
Good experimentation doesn’t require 1,000 lines of code per idea. You don’t need a perfect dashboard to test a layout or a complete flow to test messaging. Sometimes the best tests are the ugliest: wireframes, no-code prototypes, or a simple landing page can give you the insights you need, before your devs even log in. The point of testing is to minimise effort and maximise learning. If you’re building full stacks just to validate ideas, you’re not experimenting, you’re overbuilding with extra steps.
Remember, the best insights often come before a single line of code exists.
So yes, run experiments. Just don’t confuse code-heavy production with real product discovery. The best insights come before a single line of code exists.
3. Shifting Left: Validation Before Code
Rather than coding to discover, push learning as early as possible:
Deep Market & User Research
- Conduct 5–10 problem interviews to surface real pain points - I know, I know - we're not all extroverted socialites, but this is where real insight hides. The gold isn't in surveys, it's in the unscripted stories people tell when you just shut up and listen
- Deploy surveys to quantify which “jobs to be done” matter most.
Low-Fidelity Prototypes
- Sketch or build clickable wireframes in Figma - You’d be surprised how many “brilliant” ideas die in front of a basic clickable mockup - better here than after two sprints of dev time!
- Run usability sessions: observe clicks, capture friction, iterate.
Backlog Audits & Prioritisation
- Map each feature to a clear outcome (revenue lift, engagement, retention).
- Use RICE (Reach / Impact / Confidence / Effort) or MoSCoW (Must/Should/Could/Won’t) to isolate the top 20% of initiatives that will deliver 80% of value. And no, “the CEO wants it” isn’t a valid prioritisation method—though we’ve all been there.
4. Wiring an MVP with Less Waste
Minimum Shippable Experiments: Break features into the smallest slices that still yield actionable insights (e.g., a single screen, one user flow). Think: one screen, one button, one clear “did they or didn’t they?” moment—not a fully themed experience with onboarding, tutorials, and dark mode.
Feature Flags & Kill Switches: Wrap experiment code behind toggles so unused variants never truly “go live.” It’s like duct tape for your product roadmap - cheap, fast, and life-saving when you’re unsure what’s actually going to stick.
Pruning Sprints: Schedule quarterly sessions to remove retired experiments, refactor abandoned code, and reclaim capacity.
5. Breaking the Chicken-or-Egg Loop
It feels like “Which comes first: experimentation or dead code?” but the answer lies in balance:
- Invest 70–80% of effort in discovery (interviews, prototypes, prioritisation) before writing a single line of code.
- Release fast, measure ruthlessly, then decide: refactor winners, kill the losers.
- Rinse & repeat, keeping your codebase lean and your team focused on building what truly matters. Of course, this mindset is best suited for MVP development and early-stage product discovery - once you’ve validated demand and hit scale, the game changes.
“Real innovation isn’t measured by how much you build, but by how quickly and safely you learn what to build.”
Let’s turn the inevitable cost of experimentation into a strategic advantage.