Why Software Projects Fail in the First 90 Days
June 18, 2025
Three conditions established in the first ninety days determine most project outcomes: whether requirements are specified at an actionable level, whether architecture was chosen or accumulated, and whether integrations were validated or assumed. Failures that surface in year two are visible in quarter one, in a form that does not yet resemble a problem.
Requirements specified at the wrong altitude
Requirements written at an abstraction level that permits multiple readings will produce multiple readings, and the divergence surfaces at the first demo.
The mechanism is not negligence. Leadership wants visible progress, engineers want to build, and no one wants weeks of alignment sessions. So work begins against terms like flexible, scalable, and user-friendly, each of which allows every stakeholder to hear their own expectation. Three months later a sprint review reveals that the stakeholders held different models the entire time.
The requirement altitude test: a requirement is specified when two engineers who have not spoken could implement it and produce compatible results. Applied to the terms above:
- "Flexible" → which specific dimensions will vary, and who can change them without a deployment
- "Scalable" → concurrent users at launch, expected in year two, and acceptable response time at each
- "User-friendly" → the specific tasks, the target completion time, and who validates it
- "Real-time" → the maximum acceptable latency, as a number
The remedy is written decisions with explicit confirmation, not additional meetings. Record decisions as they are made, circulate them, and require acknowledgment rather than inferring agreement from silence. This reads as overhead in month one and eliminates the rework that follows discovering the misalignment after implementation.
Architecture chosen by accumulation
Absent a deliberate decision, structure emerges from individual developer preference, and by the time the inconsistency is visible the patterns are load-bearing.
The sequence is predictable. The first developer selects a framework they know. The second adds a library they have used. Neither decision is unreasonable in isolation, and no one owns the overall structure. Six months later, three parts of the codebase solve the same problem three ways, and each has dependents.
What a deliberate decision requires, in the first month, is a short written record for each significant choice: what was selected, what was rejected, and which requirement drove it. The document is a page. Its value is that in year two, when someone asks why the system works a particular way, the answer exists.
The decisions worth recording early are the ones expensive to reverse: data store, authentication model, deployment target, and the boundaries between major components.
Integrations assumed rather than validated
Integration counts enter estimates as units of work. They are units of uncertainty, and the uncertainty resides outside the team's control.
A system connecting to five existing systems is estimated as five integrations. The actual conditions are routinely: two systems have no API, one has an API whose documented behavior differs from its actual behavior, one has a security requirement incompatible with the planned connection method, and the vendor for the fifth requires six weeks to provision credentials.
None of these are discoverable from documentation. All are discoverable in week two with a proof of connection — not an implementation, just a demonstration that a connection can be established, authenticated, and used to retrieve real data.
The validation checklist per integration:
- Credentials provisioned in a non-production environment, with the request lead time recorded
- One real record retrieved end to end
- Actual response payload compared against documented schema
- Rate limits and quotas confirmed in writing
- Failure behavior observed, not assumed
- Named contact at the other organization with a response time expectation
Moving this work to month one is the single change that most reliably shifts a project from struggling to on track, because it relocates the discoveries from month four, when the schedule is committed, to month one, when it is not.
The day-90 checklist
A project in defensible condition at day ninety has produced five artifacts. Missing more than one is a risk signal that warrants a schedule conversation rather than absorption into existing float.
- Requirements documented at actionable altitude, with named sign-off. Not approval of a concept — sign-off on specific behavior.
- A working build and deployment pipeline. Code committed and deployed automatically to a test environment.
- One feature deployed end to end through every layer to a running environment. This exercises the full stack and surfaces environment problems while they are cheap.
- Every external integration validated against the checklist above.
- Named decision authority for scope questions, with an expected turnaround. Unresolved scope questions are the most common cause of idle engineering time.
Recovery from a poor start is available and requires naming it. The failure pattern is absorbing a rough quarter as schedule pressure and continuing against the original date, which converts a recoverable ninety-day problem into an eighteen-month one.
Working through a problem like this?
Describe the system and where it's stuck. I'll tell you what the work actually involves.
Get in touch