“Technology is a perfect blend of innovation and ideation that conceptualizes to form a platform, which is suitable for operating various software developments taking place. In fact, the Software Development Methodology is considered as a structure used to planning and controlling the procedure of creating a specialized information system.”
Huff…WTF! Just wanted to understand the basics of what-they-call-it ‘Software Development Methodology’, & all I get is data-data-&-more-data in the crowded online space, with useless or no ‘information’ 🙁 Do you feel the same? No problem! Will try to be clear & concise while explaining this very-important concept, in layman terms!
Software Development Methodology
‘Methodology’ – means the same in Software Engineering as in English, a procedure. Yeah! You might be wondering then what’s all the fuss about it. Why so confusion. I too feel the same way. It’s just that too many methodologies have evolved since the inception of Software development & testing – Software Development Methodology is nothing but a set of different procedures applied to structure, plan & control the process (i.e. inception, requirement gathering, design, coding, testing & go-live).
Before jumping on to different Software Development methodology, let’s first understand an underlying concept called ‘prototyping’.
Prototyping (a.k.a. Modeling)
What if as a Client you can first get to see a sample software before deciding on the final product? Cool, right? Software prototyping is about creating a model software first, i.e., incomplete versions of the software program being developed.
- Prototyping is not a standalone, complete methodology, but rather an approach to try out particular features in the context of a full methodology (such as incremental, spiral, or rapid application development).
- Attempts to reduce inherent project risk by breaking a project into smaller segments and providing more ease-of-change during the development process.
Now that you have a fair idea about prototyping, let’s understand the basics of different Software Development Methodology.
Waterfall (a.k.a. Traditional)
One of the most popular classic Software Development Methodology, along with new-age Agile. Just like a natural waterfall flowing steadily downwards, waterfall model is ‘cascading’ & ‘sequential’, rigid and linear.
- Phase-by-phase approach (sequential) wherein next phase starts only when previous phase activities have been completed. For E.g. coding starts only after all the requirements are final, testing commence only after all the coding for all the requirements has been completed.
- A schedule is typically set with deadlines for each stage
- Emphasis is on planning, time schedules, target dates, budgets and implementation of an entire system at one time.
- Since it’s a linear model, it allows for departmentalization and managerial control.
- Tight control is maintained via extensive written documentation, formal reviews, and approval/sign-off at the end of most phases before beginning the next phase.
- Preferable for a small project where there are no uncertain requirements.
The major drawback of Waterfall Software development methodology – what if the requirement changes in the middle? Yeah! It does not embrace the inevitable changes and revisions.
Fun fact: Sometimes taught with the mnemonic “A Dance In The Dark Every Monday”, representing Analysis, Design, Implementation, Testing, Documentation and Execution, and Maintenance.
Iterative & Incremental Delivery
‘Repeated Augmentation’, i.e. break the project into smaller iterations, in moving closer to the final product with each iteration.
- Reduce the inherent project risk (mitigating @ each iteration) and providing more ease-of-change.
- Uncover important issues early before problems or faulty assumptions lead to disaster.
V-Model (a.k.a. Verification & Validation)
First of all – ‘V’ here stands for ‘Verification’ and ‘Validation’. The development & test life cycle are mapped to each other, i.e. testing is done side by side of the development.
- Just like the waterfall model, the V-Shaped Software development methodology is a sequential path of processes. Testing of the product is planned in parallel with a corresponding phase of development.
Spiral (a.k.a. Risk-based)
A fusion of Waterfall & Prototyping Software development methodology, just like the spiral shape – the final software product is a result of expanding scope & subsequent prototypes. The benefit – management & client can assess the risks* at each prototype completion & subsequently scale-up (next iteration of the spiral) or scale-down!
- Each trip around the spiral traverses four basic quadrants: (1-Planning) determine objectives, alternatives, and constraints; (2-Risk Analysis) evaluate alternatives; Identify and resolve risks; (3-Engineering) develop and verify deliverables; and (4-Evaluation) plan the next iteration.
- Rapid development is achieved not by speeding but by handling the risks
- The final system is constructed, based on the refined prototype (last iteration of the spiral when client is satisfied with the prototype).
- Preferable for large, expensive, and complicated projects
- The entire project can be aborted if the risk is deemed too great
* Risk factors might involve development cost overruns, operating-cost miscalculation, or any other factor that could result in a less-than-satisfactory final product.
Rapid Application Development (RAD a.k.a. Re-use)
As the name suggests, this Software development methodology is a procedure that favors speedy development instead of large amounts of up-front planning. And how do you achieve speed? Plan in parallel & Re-use! The lack of extensive pre-planning generally allows software to be written much faster. Languages that support speedier implementation like C or Java offered in visual programming packages, focus groups for req. analysis, re-use software components, deferring design improvements to next version, informal reviews & team communication and using available tools like groupware (E.g. Slack), GUI builders, DBMS, Code-generators, etc.
- Develop the prototype as fast as possible
- Iteratively develop the production software, on top of previous prototype
As you might have guessed, since it’s rapid – this software development methodology constrain flexibility, and are limited to specific kinds of problems like in-house business software or limited-distribution custom software.
Agile (a.k.a. Responsive)
Agile: The most popular Software development methodology now-a-days – Development & Testing in short sprints (yeah, it’s like gallops), typically one-to-four weeks wherein each sprint aims to deliver a sub-set of overall requirement.
- Each sprint involves all the tasks: plan, requirement analysis, design, code, test & document.
- As you might have guessed, at the end of each sprint – customer feedback & next sprint planning.
- Since it’s a sprint, interactions need to be quick & clear with minimum turnaround (preferably F2F).
- Since customer can review the actual software (after each sprint), there is minimum need for documentation.
- Direct communication and constant feedback from customer representative leaves no space for any guesswork in the system.
E.g. Crystal Methods, Dynamic Systems Development Model (DSDM), and Scrum.
Fun Fact: The term was coined in the year 2001 when the Agile Manifesto was formulated.
- Pre-definition of specific deliverables and artifacts to be created
- A variety of such software development methodology frameworks have evolved over the years, each with its own recognized strengths and weaknesses.
- One particular software development methodology is not necessarily suitable for use by all projects – best suited based on various technical, organizational, project and team considerations.
- The selection of particular methodology has very high impact on the testing – It defines the what, where and when of the planned testing efforts, influence regression testing and largely determines which test techniques to use.
- The ultimate goal is to deliver a quality product under the given project constraints
Hope this article was useful in understanding the basic concepts of software development methodology. Would love to know your feedback in the comments section below!