The main challenge, in particular with large SW project is complexity. As the complexity increases it becomes increasingly more difficult to verify the software, and they number of ways things ways can go wring rises exponentially. Fortunately there is a golden bullet. But before I reveal the secret I would like to review why things go wrong
The list is based on my almost 20 years experience on various project. Its applicability is in my opinion not limited to SW, however SW will be the focus here,
How Companies fails with SW
- Failing to view themselves as a SW company when they should
- Fundamental principles in SW development not implemented
- Pushing rapid progress in the start of a project and postponing to implement an adequate test regime.
- Progress is rapid in the beginning and everybody is but the fast progress normally come at the cost of buildup of technical debt. The total cost of the project increases dramatically.
- Lack of version control and configuration management
- Stuff that worked before stops working and nobody knows why
- No common code base for your company core SW
- Several similar project with “almost” similar code where “resuse” is implemented as “copy and paste”. Combined with lack of version control this constitutes a maintenance nightmare.
- Lack of a common strategy for SW developed.
- Lack of a proper regime for regression testing.
- Nobody dares to touch the code and fix bugs because one has no control of the consequences. The risk of introducing new bugs is too big.
- Lack of documentation.
The Solution
Get the right people for the job: This is number one on my list and an absolute requirement. If you hire the wrong people, the changes for success i very slim. There are no remedy for lack of ability. To find the right people you will need somebody who can ask the right question during an interview. Embedded Consulting can assist as a neutral 3rd party to assess your candidates.
Implement a SW development regime that takes into account the reality of SW development: The requirements of a complex SW system is rarely known in advance. This is why a waterfall model is doomed to fail. During the last decade or so there are methodologies that have evolve which takes this fact into account
- Agile/Scrum
- DevOps
Whereas Agile focuses mainly on SW development, DevOps takes same principles and applies them to the whole value chain. DevOps is an extension and a complement to Agile which as taken the industry by storm. This is for one simple reason, it dramatically increase bot production and customer satisfaction
You can read more about Agile and DevOps in this article.