We have been called in to rescue platforms where the codebase was six months old and already felt legacy. The team was competent. The stack was modern. The debt was not syntactic, it was structural, inherited from discovery that treated software as the output of a brief rather than the embodiment of how a business actually works. That debt did not appear during development. It was contracted before a single repository was created.
Debt is contracted before the repository exists
Most organizations schedule discovery as a prelude to build, a two-week box to tick before engineering starts. What emerges is often a feature list, a rough timeline, and a shared fiction that everyone agrees on what is being built. Real discovery is slower and less comfortable. It surfaces conflicting definitions of the same workflow. It reveals that the "simple" integration depends on a spreadsheet maintained by one person. It forces decisions about ownership, data authority, and what happens when the business changes its mind, which it will.
Interactive · Where debt forms
Select a pre-development failure mode to see what debt it creates, and what to resolve in discovery instead.
Symptom
The brief says "build a platform" without defining the operational unit of work.
Debt created
Every feature becomes a negotiation. Scope creep is structurally guaranteed.
Fix at discovery
Name the smallest valuable workflow end-to-end. Build that first, explicitly.
The shapes pre-development debt takes
Debt before development shows up in predictable forms. A module boundary drawn around org chart politics instead of domain logic. A data model that mirrors a PDF process diagram from 2019. An integration strategy chosen because a vendor demo looked convincing, not because anyone mapped the failure modes. Each of these is a loan against future velocity. The interest compounds every time someone says "we can't change that without a major refactor" about something that should have been a configuration decision.
Interactive · Cost of fixing later
The same structural mistake costs more to fix at every stage. Drag to compare.
Before code
1×
A workshop, a written decision, a boundary on a whiteboard. Hours to days.
“The cheapest time to fix a system is before it exists.”
When discovery is actually done
Discovery is done when three questions have written answers your team can find in six months: What are we not building, and why? Who owns each piece of data at each step? What would we do differently if we had half the budget and half the time? If those answers live in a founder's head, you do not have discovery. You have risk waiting for a invoice.
Before you add headcount to ship faster, audit what was decided before code. The refactor you are avoiding may not be a coding problem, it may be a discovery problem you never paid down. Fix the shape of the system in conversation and documentation first. The repository will thank you.