As software develops over time, there are distinct two directions that is tracing its progress:
- X - this is the horizontal aspect of development. This is characterized by the number of features, functions, scope and reach of the output. As you add more to the growing number of functions and features, the X axis is drawn further from the origin. The further it goes denotes a number of modules or usage it contains.
- Y - this is the vertical aspect of development. This is characterized by the quality, performance, speed, usability, friendliness, and security of the system. This aspect is also gearing to the non-visible part of the system. These developments may sometimes delay the deployment or may break the system all together.
A good balance of the X and Y axis is desired in any development. Any system that has many features but would require a great deal of power to operate is the same with a very secure system that is very hard to use.
At some point, prioritizing one axis over the other is inevitable specially for system developed by less than 3 people. Some features are held off in favor of performance or security. Some usability issues are sacrificed at some point for speed considerations.
Many of the chances that I have gone through as a developer, is to take the Y axis more priority than the X's. That is, make sure that the system performs better than having to add more features. More features, at many instances, would mean more work for Ys. Say you need to upgrade to a new version of the programming language -- this is a Y -- this would mean that development for the Xs had to be postponed until all areas of the system, in Y, are checked.
Stress and penetration tests are very rarely done during development, not until there is some prototype or feature to specifically test. Imagine a huge system, after so many years of development, it may have covered all business operations and had them automated/integrated into the system, that may have not been tested for security? Chances are, this huge system may just be like trash after proving that it can easily break.
As you improve both axis, you may need to trace back to many of the basic functions for upgrade. At some point, many have to be re-written from a blank file. This is a hold off to the X axis, but making sure that the Y is stretched up to a quality you can be assured of.
To speed up development, one thing to keep in mind is, how much effort you put into the Ys, will lead you to a further stretch on the Xs. That is, with enough thought and consideration on the performance, quality, and security of the system, the easier you can expand the functionality and usage of the system.