Home | About | Blog | Skills | Innovations | Work with Me | Connect with me | Other Links
Published On: May 14 2025
Written By: Krishnan Sethuraman
Category: Software Engineering
If you’ve been in tech for any decent length of time, you’ve seen it, a promising product gets quietly shelved, a new vendor-client relationship ends up in an early divorce and a founder or a CTO sighs in a podcast about how they "learned a lot." It's common. But it shouldn't be.
I am referring to failed software projects.
Having worked with SaaS startups, enterprise clients, and indie hackers, I’ve seen a familiar set of patterns behind most software failures. This isn’t about bad ideas. It’s about execution—or lack of it.
In this article, we’ll walk through the 7 most common reasons why software projects fail and how you can spot and avoid them. If you’re a startup founder, product manager, software services company or a tech CEO, this is your survival guide.
You can apply these strategies to any project.
Many projects start with enthusiasm but no clarity. Founders say things like, "Let’s build an AI-powered app for HR" without defining what that really means.
Without detailed requirements, you're left with assumptions. And assumptions are poison in software.
You need to have a list of features that you are going to build. This will ensure that you stick to a plan and not get distracted. You can use Jira’s free version or even a simple spreadsheet to list down all the tasks.
In every project before I start writing the first code I understand the requirement from the business perspective. Then I list down all the features in a spreadsheet and name this sheet as backlog.
Once all the features are listed in a spreadsheet I create three more sheets in the same spreadsheet and name them as must have, good to have and nice to have. Then I move the features from the backlog sheet to the must have, good to have and nice to have sheets. This way I easily derive which of the features form the core part of the software.
I then split the must have features further into phases and then after client approval I delegate it to the team. At this point we create these tasks in Jira and create sprints to track the progress of the features. To start with I keep weekly sprints which eventually become biweekly as the project progresses.
The goal is to launch the prototype as soon as possible so that the client has something in hand to test and probably use or sell.
Remember - Clarity is speed. Ambiguity is drag.
Everyone underestimates. How hard can it be to build a simple product in two months? Very, if you haven’t scoped it properly. Teams often go from idea to "launch" mode with zero planning around timelines, budget buffers, or delivery milestones.
This is fine if you are working on your side project or personal project, but for anything that’s client facing this behaviour can be catastrophic.
I have been building software for more than a decade now and what I learnt was to never over commit. If a project can only be completed in three months then do not give any assurances of completing it in two months or so.
In my early days I worked with Google as one of their partners. We would migrate enterprises from their legacy email servers to Google Workspace (it was called Google Apps at the time).
When I joined the company I wondered, migrating to Google Workspace is pretty straightforward, then why does google have so many processes and document templates. Only after my first project where I shadowed my boss did I realise the importance of following those processes and using the document templates.
It helped us to complete the project successfully as we had all the details about the legacy email server, client requirements, network details and so on. With all the details we exactly knew what needs to be done, what risks might come up and how we need to mitigate them.
The process that Google set was simple yet highly efficient. The overall project was divided into three stages - Early Adopters, Mid-level Adopters, Global go live.
After the initial requirement gathering we would kickstart the early adopters phase. In this phase we would bring in a small group of users who are tech savvy and also interested in trying a new application. Until now these users have been using Outlook as their email interface. So changing to Gmail web interface was a difficult switch. So at this stage we only work with a small group of users.
Translating this to the world of software projects, the first step is to build an MVP. Whether it is a product or a custom software focusing on building the MVP in the first phase does two things.
So in all the software projects that I work on I make sure that we always finish the MVP first, and from there we move on to the other features. We also spend some time with the client to ensure unwanted and feel good features are postponed to a later stage.
I have not put this up as the number one mistake but most of the time this is the number one reason why software projects fail. You followed all the process correctly and sat down to write code. While doing so the customer sends you new features to add in the software. These features were never discussed in the requirement gathering phase. The client equally pressurises you to build it as according to him/her without these features the software is useless to them.
The poor developers listen to him and add the new features along with the features that were agreed upon previously. If this is a one off feature we are safe but if these requirements keep coming up regularly, the developers will never be able to build the software on time and additionally they are also spending more man hours than initially agreed upon.
So in a nutshell the client is affected as his software is not yet live and the developers are affected as they have been adding numerous features by spending man hours that was initially planned and billed for a different set of features.
The result is either a bloated software that is useless or an argument between the client and the developers to pay more money.
Unfortunately the solution for this mistake is a bit tricky. At the end of the day you cannot say no to your client. They are the ones who are paying the bill. But you need to understand that too many failed projects are not great for your business. So the sooner you figure out a way to deal with scope creep the better it is for your business.
I learnt this solution from one of Paul Jarvis’ videos. Paul Jarvis is the author of the book titled Company of One and is also the co-founder of Fathom Analytics (Unfortunately he is retired now and is not active online).
Paul used to run a website designing and development company. His strategy was to not get a huge number of clients but only get a particular number of clients and charge them high fees and provide them the best service possible. He would work for a couple of months every year and then take off at the time of christmas to spend time with his family and to recharge and rejuvenate for the next year.
In one of his podcasts he mentioned that the reason behind charging a high fee for his services was because he followed a set of processes which ensured his high success rate. The first step in this process was to train every new client before starting the work. The training was about what to expect, how to cooperate with Paul to ensure a successful completion and what not to do.
I was honestly thrown aback. I mean who trains the client. But Paul did this successfully. In his client training he would train the client on why they should avoid bad practices like scope creep. To be honest I was sceptical about this until I tried this in one of my projects and to my astonishment the client after their initial scepticism agreed to cooperate and that particular project was one of my first highly successful projects.
The lesson to be learnt here is to do your best to fight off scope creep practices and safeguard the project and your company’s reputation.
Look at every successful project or every successful company. You will have one thing in common, and that is An Amazing Team.
Likewise look at every failed project or failed companies, you will find one thing in common, and that being A Bad Team.
Teams can make or break a company and a project. Hiring is critical to a company and it should be taken seriously.
I founded an online restaurant in 2009. It was a simple site built with html, css and php. There was no database as all the orders were emailed to my inbox. We wanted to hire a junior developer to maintain this and its code as I had to focus on building the business and also I did not know programming at the time.
I downloaded some resumes from job portal and started interviewing prospective candidates. One resume caught my attention as the candidate had experience working in a startup and had all the necessary skill set. After a brief in person interview I hired him.
To cut the long story short one fine morning this developer connected to the server via ftp and deployed some changes. This was a very small change and the deployment risk was almost negligible. After the code was deployed we tested the site and the php pages threw an error. All the html pages were fine but the php pages displayed an ugly error.
We did not get any orders that day and I sat with the developer providing moral support as he was busy investigating the issue. At 8pm we decided to call it a day and the developer told me that we would work on the issue from home so that we had the site working in the morning.
I got up early that day and figured out that the site was still broken and the developer’s phone switched off. I had to eventually shut down that company.
One wrong hire is all that is required to bring a company down.
My father always says that if you pay peanuts you get monkey.
The solution here is to hire the best talent and pay them well.
If this is not possible then build a training program and hire promising fresh graduates out of college and train them before you induct them into your team. Obviously pay them above the market price. This will ensure that you have some of the best people working for you.
In addition to that, every experienced candidate should write code as part of the interview process. This should be non negotiable.
No matter how small you are, have an onboarding and training process. Every team member should be trained to use the internal tools and should be acquainted with the company culture and rules and regulations. This will gradually build a great culture of comradery and mutual support in your organization or team which is equally important.
A friend of mine recently called me asking if I could help him out with a technical problem (no he was not asking me to fix his computer).
His website was built with a custom built cms and he wanted me to help him upgrade the site from php 7.2 to php 8.1. I audited the site and figured out that this was a custom cms. If I had to upgrade the site to php 8.1 then I will have to now inherit the site and rewrite it so that it was compatible with the newer version of php.
I told him that it was not worth the effort and suggested that he rewrite the website with either Drupal or Wordpress. Conveying this message to his management team almost got him fired.
Always choose a stable and reliable tech stack. By stable and reliable I mean one that is well equipped to solve the problem at hand and is also well known in the industry and has a strong developer presence.
For example, in my friend’s case choosing php was right but building a custom cms was wrong. Instead they should have gone with either Drupal or Wordpress.
Never reinvent something that is already invented until absolutely necessary.
Most of the small and medium sized companies do not have a strong testing practice. They write code and deploy it via ftp to a remote server and call it a day. This is poor practice and will result in a bug filled poorly written code that becomes difficult to maintain in the longer run.
Testing and quality analysis should be part and parcel of the development process. The cost of this team can be billed to the client so that it makes financial sense to the small and medium companies.
Every code change should be first deployed to the staging environment and thoroughly tested. Only after the tests are successful should it be released to the production environment.
Automation is the key here. The testing team along with manual testing can write test scripts to test the core features. In Axion Tech we test the application thoroughly before every launch. We test the new features or changes manually and run automated scripts to test the core features. This ensures a robust testing mechanism.
Implement a pipeline like Jenkins to build and deploy new features. Manual code deployment via ftp is bound to mistakes and should be stopped.
Teams can also use open source applications like SonarQube for static code analysis. This will ensure that we are not only building a reliable system but the source code is also of high quality and best practices are followed while writing it.
This article is the result of a lifetime of mistakes made. It is true that every mistake has a lesson. But the dangerous aspect of making mistakes is some mistakes can be very expensive like a company shutting down or jobs lost.
If you’re building software - whether as a founder, developer, or manager - let these hard-won lessons be your shortcut.
The cost of failure is too high, but the roadmap to success is simple: define clearly, plan wisely, communicate openly, test thoroughly, and always work with the right people. Most importantly, build with the humility to learn and the discipline to finish. That’s what separates a failed idea from a thriving product.