Having to scrap a project after working on it for more than a year is not really an interesting way to up your morale. But it is one the most common things to occur in software development.
To take a real world example; A development company I know has been developing a shopping cart for the last 14 months ( beats me why anyone has to develop a shopping cart when so many free and excellent are already available ). But it is still nowhere near production ready. There is always something left to be added or cleaned. During the development period more than half a dozen programmers have worked on the project and left, producing a convoluted piece of software, which every new member dreads to touch in fear of breaking something somewhere. Salvaging the project is getting harder by the day.
The above episode is a perfect case of what is known in our field as the ‘Software Peter principle’. I first came across this principle in chapter 3 of C++ FAQs. Originally borrowed from management, the principle basically describes:
a dying project which has little by little become too complex to be understood even by its own developers.
Some reasons usually cited being :
Loss of Conceptual Integrity
Conceptual integrity is a measure of how well software conforms to a simple set of design principles. Conceptual integrity ensures that anywhere you look in your software system, you can tell that each small design is part of the same overall structure and not a mishmash of different designs.
Conceptual integrity is achieved when the software’s design proceeds from a small number of agreeing individuals, with a well defined but strong architectural team. In projects devoid of strong teams each individual favors personal interest over the common interest of the project. Adding his own coding style, altering earlier designs to suit his individual taste or deviating from the initial architectural design. Incidentally frameworks provide a means to achieve Conceptual Integrity
Incompetent & Inexperienced programmers
Not much can be done if the developers are not up to the project skills. All you can do is cross your fingers and pray, or at a little more price hire good developers. However hiring good programmers isn’t always enough. The experience of developing real world projects is way different than developing in an academic environment. Many times developers go about using complex language constructs in the code to showoff their proficiency, when a simple one could easily do.
Like diabetes, the Software Peter Principle is known as a silent killer; by the time symptoms show it is already too late. Salvaging becomes impossible and the only option left is to kill the project and move on. (Although not exactly the same with diabetes. Thank Heavens!)