65% of all software projects are either delayed, abandoned halfway or fail to deliver the desired outcome.
The most common reasons cited for this high rate of failure are:
Change in Business Strategy
As per Standish Group the Average Cost Overruns: 189%, Time Overruns: 222%, Features missed : 40% (Standish CHAOS Report 2020)
Software project execution is tricky because of multiple reasons. The number of variables involved are too high and too diverse. Any one of them going wrong can derail the whole project.
Take the example of estimates. Estimates determine the effort and hence the cost and timeline of a project. It is very difficult to get the estimates right. Even if one assumes that the person estimating a project is an expert and capable, most times the experts end up underestimating the project or are forced to do so to keep the cost of execution low! This happens a lot with software service providers who want to offer a competitive price to win a deal.
The project is put at high risk even before it starts!
Also, estimation is done assuming ideal conditions throughout the project. The expectation is that requirements and inputs will be provided in time, skilled coders will be available for the entire duration of the project. This almost never happens!
Attrition is the other important cause of project failures. A project manager leaving the company is not unheard of but has similar impact on project as a captain abandoning a ship in the ocean. Even developers leaving has devastating impact on the project. It causes dip in productivity and increased defect injection with new team members expected to be productive from day one.
Hiring the right people is getting hard increasingly. People with right attitude and skills are limited for the demand all across the globe. The demand supply gap to IT talent is here to stay for at least the next decade.
As per a "Talent Shortage" report by ManpowerGroup, 70% of employers find it difficult to hire skilled workers and this is not limited to IT.
The reasons for failure to hire are lack of technical skills and human strengths including accountability are reliability and discipline, resilience, stress tolerance and adaptability.
About 35 % organizations the world over have accelerated their digitization as a result of the pandemic . Of these, 90% organizations plan to increase hiring to create a more digital and connected world. This is promoting a growing polarization between those with the skills to take advantage of technical disruption, and those without.
Traditional software development follows a linear approach. Requirements are expected to be frozen before starting development. Change in requirements is resisted because the process is not dynamic and flexible enough to allow changes and adjust for them.
Such rigidity results from poor Design and Architecture.
A well designed system should be easy to change any number of times, with speed.
Agile methodology and PRINCE 2 framework help in mitigating some of the risks mentioned above. They attempt to break down the project into smaller cycles called sprints. The application is built incrementally. Features and changes are implemented only if absolutely necessary. While this helps bring method to the madness, some challenges still remain.
The assumption that capable and skilled developers will easily be available is impractical and untrue. Also breaking down a project into cycles adds to the overheads. It adds to the effort and increases the overall timeline. Continuous Integration and Continuous Deployment/Delivery (CI/CD) reduces some of the overheads by bridging the gaps between development and operation activities and teams by enforcing automation in building, testing and deployment of applications.
So how does one ensure success of a project despite the existing limitations and challenges?
Very simply, a successful project needs to be implemented fast, allowing the business to verify and provide timely feedback. The design should be good enough to allow incorporation of changes. The designed system should be nimble and adaptable to the changing requirements.
A lot of organizations are achieving speed and flexibility by using pre-built services and components. Such readily available services and components reduce the time required to build a solution. Plug them in or plug in to them. There is no need to reinvent the wheel. Limiting the code that the development team hast to write reduces the bugs and defects one has to deal with. The effort of expert coders should only be towards implementing specific business requirements that are unique to the organization.
There are application development platforms that provide the ability to build cloud native solutions fast. They provide visual aids for rapid application development. Such platforms have multitude of pre-built and pre-tested components, services and templates that can be readily used or quickly configured. They provide speed of implementation and reduce dependence on technical experts during implementation as well as maintenance.