The Nature of Software Development Methodologies – Cowboy, Waterfall and Agile
As technology and our understanding of software development mature, developers constantly have to rethink how they build software. As an example, it’s easy to understand how a COBOL programmer from the 60’s developed code differently from a Java coder today. In the old days of development, developing an application was much simpler. Developers could write a piece of code that queries a database and outputs the results to the screen directly. As a result, developers could create entire applications by themselves. Now that software is becoming increasingly complex, and designers are implementing architectural standards like MVC architecture, it’s important to understand best practices for software development. The purpose of this post is to explore the evolution of software development methodologies and conclude with today’s best practices.
Cowboy coding is a term used to describe development where the developers have autonomy over the development process. This includes control of the project’s schedule, algorithms, tools, and coding style. Cowboy programming occurred in the early years of software development partly because developing was much easier back then, and partly because software development methodologies had not yet been discovered. It is also the programming methodology of choice for new developers because they can focus on learning the core concepts a particular language.
Waterfall Programming is a sequential development process in which progress is seen as a downward flow of stages, like a waterfall, through the phases of conception, initiation, analysis, design, construction, testing and maintenance. This methodology began to evolve in the 70’s as a response to the increasingly complex nature of software development, and was based on manufacturing and construction industries. As software development continued to grow more complex, it was evident that this methodology was fatally flawed. The culprit was based on the fact that user requirements will continually change with each release, making the Waterfall model impossible to implement.
Agile Software Development refers to a group of methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. The term was coined in 2001 when the Agile Manifesto was formulated. Agile Programming was a response to the failure of Waterfall Programming, and has grown into today’s standard of software development.
The process works like this. The creation of a new system or application begins with conception, analysis, a very basic design, and a barebones implementation. This stage is usually referred to as the prototype. At this point, the product is shown to the users, and new requirements are formulated. The developers then design the new features, or redesign currently existing features, implement them, and then again show the product to the users in a timely manner (usually within 2 to 4 weeks). This process continues until the users are satisfied with the product. Once this happens however, it’s very common for the users to want additional requirements later on, which will restart the iterative process.