A software development methodology is a fairly nebulous thing. In this article, I’ll try to bring some clarity to the concept of the methodology, investigate various prominent methodologies and their manifestation in processes, programming language, frameworks and tools.
What is a Software Development Methodology?
A software development methodology is a set of principles and practices that dictate how to develop software. Organizations sometimes adopt a unified methodology and sometimes choose a different methodology for each project. The scope of methodologies has expanded significantly over time. Originally, the focus was on designing and writing software. All the planning was done ahead of time and testing was an afterthought. Installation, deployment and maintenance were a completely separate world. Nowadays, all these aspects are considered part of the software development process. Different methodologies are designed to promote different aspects such fast development lifecycle, high confidence or reliability.
Prominent Software Development Methodologies
The Waterfall Methodology
The waterfall methodology is one of the most famous (or infamous) methodologies around. It promotes a linear approach where stages follow each other strictly: analysis, design, implementation, testing and evaluation. It has fallen out of grace and is almost never practiced as is by modern companies.
The Agile Family of Methodologies
The Agile family of methodologies evolved as a response to the waterfall model. The Agile approach emphasizes quick iterations (typically 2-4 weeks) where all the software development phases take place and big projects are broken into small, easy-to-digest chunks. There are many flavors of Agile methodologies: Extreme programming, Scrum, Kanban and more.
The Object-Oriented Methodology
Object-oriented analysis, design and programming is a methodology that focuses on seeing the world as objects that have state and behavior. The analysis and design often leads to class hierarchies. Note that the object-oriented approach can be practiced as part of a waterfall or Agile process. It is orthogonal in a sense because it focuses on a lower-level of abstraction.
Programming Languages and Methodologies
When designing a programming language, the designers often have a philosophy about how software should be developed and they try to make their language support this notion in various ways. For example, Smalltalk is a complete system that puts objects front and center. There is probably no Smalltalk program that doesn’t use the object-oriented methodology. Other programming languages are more versatile, for example, C++ prides itself on being a multi-paradigm language.
The Go programming language was built around a very clear methodology of simplicity. The designers paid a lot of attention to what features they included–and maybe even more importantly–what feature they excluded from the language. For example, classes, exceptions and templates were explicitly excluded. While Go is an object-oriented language, it shuns many of the features that are present in most existing popular object-oriented languages (C++, Java, C#) to focus on the essence.
Some programming languages incorporate features of the development lifecycle that often left to other tools. Languages like D and Rust have built-in testing. Many languages provide standard packaging. Eiffel even promotes design by contract via language support.
What Methodology Should You Choose?
This is a pretty vague question. I would say with confidence that you should practice some form of Agile. The main question is how rigorously you implement your methodology. Developing software is hard. Whatever methodology you end up with make sure you practice it properly and adjust it as you learn more. The larger the scope and the team you’ll need more and more processes, checks and balances in place.
Software methodologies are confusing and overlapping entities. You should be familiar with the main ones and understand their strengths and weaknesses. Different projects call for different levels of rigor regardless of the specific methodology. The Agile approach in general has been successful from small to large organizations. Your programming language may have some built-in notions about the right software development methodology. Pay attention so that you don’t create unintended tension.