Numerous software development methodologies have been introduced throughout the years in order to help teams create better software and deliver the best they can in the shortest amount of time. This article is going to give you a fairly detailed and non-opinionated overview of them in order to get the big picture and help you decide which is better for your team or organization.
What is a Software Development Methodology in the first place?
The term refers to the organized processes involved when tackling a software development project. It is a mix of design philosophies and pragmatic realism that stretches back to the early days of software engineering. The main objective is still to provide a systematic approach to building software. These methodologies provide a set of frameworks for developers, architects, managers, and other actors to collaborate and communicate more coherently.
Today, many IT companies agree that utilizing a software development methodology is critical for the continuance of their teams’ work. Determining which method is the best for your team is as important as the project itself. Each one has its upside and downside and getting the best out of them depends on many factors including team size, time constraints, client needs, etc. It is even feasible to use different software development methodologies on the same project.
Software Engineering and SDLC
Before going through the list, we need to understand first what is meant by software engineering and SDLC, and how they relate to each other.
IEEE defines Software Engineering as the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
SDLC: Software Development Life Cycle refers to the common stages followed in creating high-end, low-cost, and effective digital products within a short delivery time meeting customer, client, or final user’s needs and expectations.
The SDLC process is detached into the following ordered phases :
So, we can deduce that SDLC is the implementation of software engineering principles in a set of coherent stages in order to deliver the most optimal and efficient software possible.
Waterfall Development Methodology
Beginning with the earliest SDLC method that has been widely used for building a plethora of useful projects and systems. The waterfall software development methodology is basically a grouping of project tasks and actions into linear phases. Each phase strongly depends on the output of the preceding one and matches a specific set of common and related activities.
This approach is painless and quite easy to understand. By dividing the entire plan into smaller pieces i.e stages, team members and managers can get a sort of high level and more clear understanding of the entire procedure of software creation making project management way more simple.
Each stage’s amount of needed time and work can vary dramatically. In fact, some applications may take months to build, and no running software is obtained until finishing the whole development cycle.
This can be a big downside, especially in today’s world where frequent changes in the market occur on a regular basis, and businesses may (and eventually will) happily take advantage of the absence of their competitors at a given chance.
The V-model is an SDLC model in which processes are executed sequentially in a V-shape. The Verification and Validation model is another name for it. The V-Model is built on the association of a testing phase for each relevant development step, and it is an extension of the waterfall model.
The Spiral Model
The spiral model blends the idea of iterative development with the waterfall model’s methodical, regulated characteristics. This Spiral approach combines an iterative development process model with a sequential linear development model, i.e. the waterfall model, with a strong focus on risk analysis. It enables for incremental product releases or enhancement during each iteration around the spiral.
The Agile SDLC model combines iterative and incremental process models with a focus on process adaptation and customer satisfaction through the delivery of a working software product quickly. Agile software development methodologies divide a project into small, incremental steps. Iterations of these builds are available. Each repetition lasts anywhere from one to four weeks and a working product is shown to the client and other key stakeholders at the end of each iteration.
Extreme Programming (XP)
Extreme Programming (XP) is an agile software development approach that attempts to deliver better software while also improving the development team’s quality of life. In terms of proper engineering methods for software development, XP is the most detailed of the agile frameworks.
XP has five values which are communication, simplicity, feedback, courage, and respect.
Scrum Development Methodology
Scrum is a lightweight agile framework and technique that aids individuals, teams, and organizations in creating value by allowing them to adapt to complicated situations. The Scrum Guide was written by Scrum co-creators Ken Schwaber and Jeff Sutherland to explain Scrum clearly and succinctly.
Scrum’s accountabilities, events, artifacts, and the rules that bind them together are all included in this description.
In a nutshell, Scrum calls for a Scrum Master to create an environment in which:
- A Product Owner orders work for a complicated problem into a Product Backlog.
- During a Sprint, the Scrum Team turns a selection of work into a value increment.
- The Scrum Team, as well as its stakeholders, inspect the results and adjust for the next Sprint.
Kanban Development Methodology
Kanban is a well-known framework for agile and DevOps software development. It necessitates real-time capacity communication and complete work openness. On a kanban board, work items are visually depicted, allowing team members to see the status of each piece of work at any moment.
Lean Software Development (LSD)
The application of lean manufacturing ideas and techniques to the software development domain is known as lean software development. It is emerging with the assistance of a pro-lean subculture within the Agile community, having been adapted from the Toyota Production System. Lean provides a solid conceptual framework, values, and principles, as well as proven techniques that assist agile organizations.
DevOps Development Methodology
DevOps is a collection of principles that require development and operations teams to work together throughout the software development lifecycle. It leverages Agile methods to break down team silos, automate manual processes, and boost productivity through regular feedback.
Prototyping Software Development Methodology
The prototyping model is a software development method in which a prototype is created, tested, and changed until it is acceptable. It also serves as a foundation for the creation of the final system or software. It’s best used in situations where the project’s requirements aren’t fully understood. It is an iterative, trial-and-error process that occurs between the developer and the client.
Dynamic Systems Development Method (DSDM)
DSDM (formerly known as Dynamic System Development Technique) is an Agile method that focuses on the complete project lifecycle. It was founded in 1994 as project managers utilizing RAD (Rapid Application Development) sought additional governance and discipline to this new iterative style of working.
DSDM is vendor-agnostic, spans the whole project lifecycle, and provides best practice guidelines for delivering projects on time and on budget, with proven scalability to manage projects of all sizes and across all industries.
DSDM encourages the employment of various tried-and-true methods, including:
- Facilitated Workshops
- Modeling and Iterative Development
- MoSCoW Prioritisation
- Time boxing
Joint Application Development (JAD)
JAD (Joint Application Development) is a method for speeding up the development of information technology solutions. JAD employs consumer participation and group dynamics to effectively reflect the user’s perspective on the business need and to collaboratively build a solution. Prior to the introduction of JAD, requirements were determined by conducting individual interviews with stakeholders.
JAD takes a collaborative approach to the creation of information management systems, emphasizing a problem-solving methodology based on agreement. JAD allows system requirements to be documented more rapidly and precisely than a traditional approach by incorporating led workshops and promoting a culture of partnership. JAD integrates technological and business requirements in a consistent, repeatable, and efficient approach.
Feature Driven Development (FDD)
Feature-driven development is a method of software development that is iterative and incremental. It is a lightweight or Agile software development method. FDD combines several industry-recognized best practices into a unified whole. From a client-valued functionality standpoint, these approaches are driven.
Rapid Application Development (RAD)
Rapid Application Development (RAD) is an agile software development process that emphasizes prototype releases and revisions as quickly as possible. RAD, unlike the Waterfall method, prioritizes the usage of software and user feedback over meticulous planning and requirements documentation.
Which Software Development Methodology is used at Google?
Here’s an answer from someone at Google (Amanda) on Quora :
I’ve worked on waterfall projects, agile projects, DoD projects (which are their own adventure), and now Google … Overall, Google generally fits the spirit of agile methods, and in fact some groups use XP, or Scrum, or whatever, but it’s up to each team, and the methodology a team choses to use is definitely secondary to the results it produces, so nobody cares about buzzword compliance. The corporate philosophy seems to be “we’d rather underconstrain people than overconstrain them”. Some projects are time critical–and they use schedules, milestones, etc. (though not, that I have seen, MS Project) as a way to keep themselves on track. Some people do pair programming as a way to be more productive, but that’s up to them. That’s what’s most different from other large development organizations: process is intentionally not centralized except where absolutely necessary. It’s the polar opposite of, say, CMMI.
In this article, we discussed some of the well-known development methodologies and took a brief look at the ones that are used at large technology firms such as Google.
Sign up to get the blog’s latest posts and updates delivered to your mailbox!