Gerald Weinberg, an American computer scientist, once famously stated that “If builders built houses the way programmers built programs, [then] the first woodpecker to come along would destroy civilisation.” While this was far from a chirpy portrayal of the current state of software engineering, for many companies out there, it remains an accurate assessment today. The ongoing predicament facing developers, however, is not without reason.
The first issue is a matter of complexity. Modern software projects are highly intricate systems, and while competent programmers may well be able to single-handedly ensure quality of code, the process of implementing every piece of functionality can take them years. Unfortunately, however, no customer is ever willing to wait that long. As a result, software development has largely become a team effort, but this poses its own set of challenges.
Because customers expect projects to evolve in tandem with their organisations, success relies heavily on the team’s ability to be flexible, as they must be willing to continuously adapt their code in the face of rapidly changing requirements. Yet the main difficulty remains — every touch to the project codebase can cause unpredictable damage to the system. This is why it is so important to test software with every code alteration.