Strategy

How to handle a software project that has failed

Editorial · Reveneau · August 15, 2026

How to handle a software project that has failed

At some point most companies that build software have a project go wrong. It runs far over budget, it misses every deadline, or it is released and nobody uses it. When it happens to you, it feels like a uniquely bad situation, something to be embarrassed about. It is not. Failing software projects are common, and they have been for as long as people have built software. The thing that actually matters is not whether a project fails, because plenty do. It is what you do once you know it is failing. Handled well, a failed project becomes a cheaper next attempt. Handled badly, it becomes months of extra spending on a plan that was already broken. Here is how we think about handling it well.

First, understand why, without blame

The most common mistake when a project is failing is to react before you understand. The pressure is enormous: money has been spent, people are watching, and the instinct is to do something, usually to put in more effort. Resist that. The first step is understanding. Until you know, in plain terms, why the project is failing, any big decision you make is a guess.

So run a post-mortem, and run it honestly. Get the people who actually did the work in a meeting and make it safe for them to tell the truth. The way you make it safe is to focus on decisions and causes, never on individuals. The moment a post-mortem turns into finding who to blame, people start protecting themselves, and the honest information you need disappears. Ask what went wrong, when the project first started to fall behind, and what you would have needed to know earlier to avoid it. You are not looking for a comfortable story. You are looking for the real cause, even when it is uncomfortable and even when it leads back to a decision you made yourself.

It helps to know that most software projects fail on direction and scope, not on engineering skill. Unclear goals, scope that grew too large, a plan built on wrong assumptions, or building something users did not actually want. These are the usual causes, and none of them are fixed by the team simply trying harder. Industry research has shown for a long time that a large share of software projects miss their goals in some way, which is documented in work like the Standish Group's CHAOS research. Your failing project is not a sign you assembled uniquely bad people. It is a normal outcome that you now have a chance to handle better than most.

Then decide: fix, restart, or stop

Once you honestly understand the cause, you face three real options, and naming them clearly is a large part of the work. You can fix the project, restart it, or stop it entirely. Most teams only seriously consider the first, which is exactly why so many failing projects keep failing.

Fix it when the core idea is sound and the problems are specific and solvable. If the goal is right, users want the thing, and the trouble is a handful of concrete issues, then targeted repair is the answer. You address the specific causes the post-mortem found and continue. Restart it when the goal is still worth pursuing but the basic design is wrong. Sometimes the idea is good and the execution went in a direction that cannot be repaired, whether that is an architecture that will not keep working or a plan built on assumptions that turned out false. In that case, patching it forever costs more than starting the build again with what you now know, and a restart is the honest choice. Stop it when the goal itself no longer makes sense, or when what you have learned shows the idea does not work, or when the cost to reach the goal is simply more than the goal is worth.

That last option, stopping, is the one people avoid most, and it is worth saying plainly: stopping is not failure. It is refusing to spend more money on something that will not return its cost. Money and time already spent are gone whether you continue or not, so the only real question is whether the next dollar is worth spending. If the honest answer is no, stopping is the most valuable decision you can make, and a clear stop frees your best people to work on something that matters instead. The biggest mistake in this whole situation is putting more effort into a broken plan, adding people and hours to a project whose problem was never a shortage of effort. That just pays for more of the same failure. We wrote about why "we just need more people" is so often the wrong diagnosis in staff augmentation vs a managed team, and a failing project is the exact place that mistake does the most damage.

Save what is worth keeping

Whatever you decide, do not leave with nothing. Even a project that was never released almost always produced things worth keeping, and the failure is only total if you throw them away.

Look for three kinds of value. First, the working pieces: parts of the code, designs, or research that are sound and can be reused even if the whole did not work. Second, the assets that last beyond the specific attempt, like the understanding of the problem you built up and the user research you gathered along the way. Third, and most valuable, the lessons about what does not work. You now know which assumptions were wrong, which approach failed, and how real users actually behaved when they used it. That knowledge is expensive, because you paid for it with the failed project, and it would be a waste to pay for it again by forgetting it.

This is the mindset that turns a failure into something useful: a failed project removes unknowns. The reason a first attempt is so risky is that it is full of things nobody knows yet, and the failure, painful as it is, answered a lot of them. The next attempt starts with those answers. It skips the mistakes you already made, avoids the assumptions you already disproved, and moves faster because you now know more about the problem you are building for. That is how a failed project makes the next one cheaper. The cost of the failure gives you a clearer plan the second time, but only if you actually use the lessons instead of hiding them out of embarrassment.

The mindset that makes the next attempt cheaper

In the end, the whole thing depends on how you treat failure. If you treat a failing project as a shameful event to hide, you will avoid the honest post-mortem, avoid the clear decision, and avoid admitting what you learned, which is the surest way to repeat it. If you treat it as normal, which it is, and as information, which it is, you get the opposite: an honest look at the cause, a clear choice about what to do, and a set of lessons that make your next attempt genuinely better.

Separate the idea from the execution, and you will usually find the failure was in how the product was built rather than in what it was meant to do. The goal might still be worth pursuing. If it is, a fix or a restart informed by everything you just learned has a much better chance than the first attempt ever did, because it starts with a record of where the first attempt went wrong. And if the goal itself no longer makes sense, stopping cleanly and moving your people to better work is not a loss either. It is the discipline that keeps one failed project from becoming two. When we join a project that is in trouble, the first thing we do is run that honest post-mortem, help make the fix-restart-stop decision clearly, and make sure the next attempt is cheaper than the last. That work is the core of a full product build and of the technical due diligence we do when someone needs an outside opinion on whether a struggling project can be saved.

A failure mode that is specific to fast tooling

There is a newer way for a project to be in trouble, and the usual warning signs do not show it.

The classic troubled project is visibly behind. Everyone can see it, even if nobody wants to say it. The newer version looks fine: changes are being merged, the demos are good, the velocity chart is fine. What is wrong is that a large amount of code has entered the system that nobody has read carefully, and the gap between what the software does and what the team understands has been widening for weeks.

It appears late and all at once, usually as a bug nobody can explain in code nobody can account for. If your project is producing a lot and understanding little, treat that as the same emergency as a missed deadline, because it is one.

Sources

Common questions

What should I do first when a software project is failing?

Stop and run an honest post-mortem before making any big decision. Understand why it is failing, in plain terms, without blaming individuals. Until you know the real cause, any decision to put in more effort, restart, or hire more people is a guess. The first step is understanding, not action.

How do I run an honest project post-mortem?

Get the people who did the work in a meeting, and make it safe to tell the truth by focusing on decisions and causes, not blame. Ask what went wrong, when the project started to fall behind, and what you would need to know to avoid it next time. The goal is an honest cause, not a comfortable story.

Why do software projects fail so often?

Most projects fail on direction and scope rather than pure engineering skill. Common causes are unclear goals, scope that grew too large, a plan built on wrong assumptions, or building something users did not actually want. Industry research has long shown that a large share of software projects miss their goals, so a failing project is normal, not shameful.

Should I fix, restart, or stop a failing project?

The right choice depends on the honest cause. Fix it if the core idea is sound and the problems are specific and solvable. Restart if the basic design is wrong but the goal is still worth pursuing. Stop if the goal itself no longer makes sense or the cost to reach it is more than it is worth.

When is it right to stop a software project entirely?

Stop when the goal is no longer worth the cost to reach it, or when what you have learned shows the idea itself does not work. Stopping is not failure, it is refusing to spend more on something that will not return its cost. A clear stop can be the most valuable decision you make.

How do I get value from a failed project?

Look for the parts worth keeping: working pieces of code, designs, research, and above all the lessons about what does not work. Even a project that was never released usually produced knowledge that makes the next attempt cheaper and faster. The failure is only total if you ignore what it taught you.

How can a failed project make the next attempt cheaper?

A failed project removes unknowns. You now know which assumptions were wrong, which approach did not work, and what users actually do. The next attempt starts with that knowledge, so it avoids the same mistakes and moves faster. The cost of the failure gives you a clearer plan the second time.

Should I blame the team for a failed project?

No. Blame makes people hide the truth, which is the one thing you cannot afford during a post-mortem. Most failures come from unclear direction, bad assumptions, or scope problems, not from individuals not trying. Focus on causes and decisions, and you will learn far more than blame ever teaches.

What is the biggest mistake when a project is failing?

Putting more effort into the same plan without asking why it is failing. Adding people, adding hours, or demanding more effort on a plan that is broken just spends more money on the same mistake. The biggest error is treating a direction problem as if it were an effort problem.

How do I decide if the core idea is still worth pursuing?

Separate the idea from the execution. Ask whether the goal still matters to the business and to users, setting aside how badly the attempt went. If the goal is still valuable, the failure was in how it was built, and a restart or fix can work. If the goal itself no longer makes sense, stop.

Is a failing project always a sign of a bad team?

No. Even strong teams have failing projects, usually because of unclear goals, changing scope, or assumptions that turned out wrong. What separates good teams is not that they never fail, it is that they run an honest post-mortem, decide clearly, and turn the failure into a cheaper next attempt.