“Agile … is an attitude, not a technique with boundaries. An attitude has no boundaries, so we wouldn’t ask ‘can I use agile here,’ but rather ‘how would I act in the agile way here?’’ or ‘how agile can we be, here?’”

― Alistair Cockburn, Author of Agile Software Development (2001)

Software development is sensitive to technology and industry trends and constantly undergoing evolution. This forces teams to maintain vigilance and continually adapt their development workflows to stay up-to-date with ever-changing project challenges and requirements. No software development methodology has ever totally won out over all the others. Some are preferred over others, based upon the experiences of the team members and the specific business problem to be solved.

Software projects can take on practically unlimited forms depending on their goals, innovativeness, and implementation environment. To tackle this complexity and obtain a more structured overview of their work, teams follow certain methodologies and systems to facilitate the planning, project management, implementation, and release of software products.

Some of these methodologies, like Kanban or scrum, may already be familiar to team members. These are known to pretty much every specialist in the software development industry. However, although agile development and its child methods are exceedingly common these days, they aren’t the only ones in existence, and they aren’t always the right choice for the job.

With that in mind, which software development process should the team adopt to outline and execute your next project efficiently? To support your team with this challenge, our team has identified significant software development methodologies – in no particular order.

Four significant software development methodologies

Waterfall

Best for situations where the software development process is well-understood, highly structured, and documented.

The waterfall methodology has been largely phased out from software development due to its inflexibility compared to more modern workflows. However, it remains a viable option even in the realities of today. If NASA continues to use it (along with many other bureaucratic institutions), it must exhibit some business value proposition for stable projects that require exceptionally detailed descriptions and requirements analysis.

In a “waterfall” environment, the process of software development is broken down into steps or phases, like so:

  • Conception.
  • Design.
  • Implementation.
  • Testing and verification.
  • Maintenance.

These phases are strictly sequential, with each phase dependent on the completion of the previous ones (see Figure 2). The entire software development process is documented in detail, which makes it easy to understand and follow. Structure and the meticulous planning of all project details are the foundations of the waterfall model.

Figure 1: Waterfall Method [Source: Royce, W. W. (1970). Managing the Development of Large Software Systems. In Proceedings of IEEE WESCOM, IEEE Computer Society Press. p. 328-338].

The waterfall methodology’s rigidity and careful planning may sound great, but the model isn’t particularly popular in modern environments – mainly because of its inflexibility and non-iterative nature. Unlike the forms of agile development, waterfall workflows don’t allow teams to adjust their plans on the fly or respond quickly to new requirements.

Since each phase in a waterfall workflow relies on previous phases’ results, mistakes or miscalculations in one phase can undermine the success of all subsequent phases. Besides, actual testing of the system occurs near the end of the project, meaning that very little wiggle room exists for teams to assess the fruit of their efforts and treat mistakes before releasing their products.

With that in mind, the waterfall approach should only be used when all aspects of the project are known in detail.

Agile development conceptual framework

Best for situations where changes to the software need to be made quickly, while minimizing bugs.

“Agile is simple – but it simply is not easy.”

Ron Jeffries, Agile Guru

Brought to the masses with the Manifesto for Agile Software Development in 2001, agile development is a modern alternative to the waterfall methodology. A particular agile development method is the default framework of choice for many teams today. Each agile sub-framework solves very specific issues.

At its core, agile development is more “chaotic” and less structured than the waterfall methodology. Rather than rely on a comprehensive plan, agile development prioritizes:

  • delivery of working software over comprehensive documentation.
  • adaptive planning.
  • communication between developers and end-users.
  • iterative software updates.

Agile development is the ideal choice with projects that are difficult to plan in-depth and in advance of the actual deployment (see Figure 2 for the maturity of agile methods. Thanks to its flexibility, agile allows teams to adapt to changing environments quickly. With that, this methodological framework is often used in the development of new, previously unexplored solutions.

Figure 2: Agile Methods and Maturity [Source: DigitalAI. (2021). 15th State of Agile Report: Agile adoption accelerates across the enterprise. DigitalAI].

In agile development, projects are split into small tasks completed in short timeframes of one to four weeks called sprints. At the end of each sprint, developers interact with end-users to gather feedback and to iteratively make refinements to their product. This improves end-product quality and allows teams to catch and eliminate bugs and other issues quickly.

On the other hand, agile development is sub-optimal for inexperienced teams or teams that cannot quickly and efficiently communicate and adapt their approaches to the continuously evolving demands of their field. Agile is an over-arching conceptual framework that includes a wide range of sub-frameworks that can be used singularly or in combination. The framework selected often depends upon whether one team is committed, or multiple teams are engaged on the project, (see Figure 3).

Figure 3: Agile Conceptual Framework of Models.

Because of the breadth and depth of agile sub-frameworks, we will touch upon three that are very popular and have garnered a significant commitment in the workplace.

Lean development

Best for situations where an efficient approach to software development is necessary.

Lean development promotes efficiency by focusing on the removal of superfluous components from a project. Lean software development is built upon the following seven principles, as outlined in the Lean Software Development: An Agile Toolkit book written by Mary Poppendieck and Tom Poppendieck:

  • Eliminate waste. The elimination of waste aims to enable timely delivery of a product and provide value.
  • Build quality in. Quality is a fundamental characteristic of lean development–teams should direct their efforts at preventing defects or fixing them as they appear.
  • Create knowledge. Continuous learning and adaptation are the basis for improvement for lean development teams.
  • Defer commitment. Lean development promotes decision-making at the last responsible moment, allowing developers to keep their options open and make data-driven decisions.
  • Deliver fast. Delivering software products fast allows teams to reduce costs. Not only that, but speed keeps teams on their toes and forces them to adapt their approach to software delivery to keep up with plans while maintaining quality.
  • Respect people. Members of lean teams should be given reasonable goals and should be encouraged to self-direct themselves. Efficient and respectful communication between developers can also eliminate hurdles and keep the project on track.
  • Optimize the whole. Teams should focus on the ultimate goal of their projects rather than on their subtasks to maintain focus, not to waste effort on trivial matters, and to avoid the degradation of ROI.
Figure 4: Seven Principles of Lean Development.

Waste is an important component of lean development. In the context of lean development, examples of waste include:

  • Delays and waiting.
  • Extra, unnecessary features.
  • Relearning and failure to preserve knowledge.
  • Partially completed work, such as untested or undocumented code.
  • Task switching and lack of concentration.
  • Bugs and mistakes in the code.
  • Ineffective communication.

In the end, lean development can help teams reduce costs and improve their value proposition. Therefore, lean approaches could be beneficial in small companies with limited budgets, though lean development easily scales to large projects.

Feature-driven development

Best for large, complex projects that can be broken down into “features.”

Feature-driven development, or FDD, is an approach derived from the overall concept of agile development. FDD again focuses on flexibility and iteration, but it has a more structured approach than other agile sub-frameworks.

In feature-driven development, projects are broken down into features to simplify the delivery workflow. The breakdown is done so that the completion of each feature takes no more than two weeks.

Each feature is assigned to a separate team for planning and implementation. After delivery, teams make iterative changes to the features based on end-user feedback until they meet requirements.

Features in FDD are intended to deliver value to their end-users, meaning that each feature’s focus is client satisfaction. Despite this, feature-driven development is sometimes thought to be centered around feature development, which it is not. Features are merely a way to simplify and accelerate the delivery of large software products.

Scrum development

Best for situations when a fast, highly flexible approach is needed.

Scrum development is a specific direction in the family of agile approaches. The main emphasis in scrum is the quick delivery of a working product. Aside from that, scrum development heavily promotes intra-team collaboration and communication.

In scrum development, projects are broken down into smaller tasks (sprints) that can be completed in the timeframe of two to four weeks–similar to other agile development sub-frameworks. At the end of each sprint, completed work is presented to end-users or stakeholders for feedback and further improvement.

A notable feature of scrum development is that scrum team members gather daily for short meetings called scrums. Typically lasting 15 minutes, scrums aim to help developers review their progress and plan their next steps. Thanks to this, scrum development allows teams to stay flexible and rapidly respond to changing product requirements.

Scrum can be challenging for some because it requires discipline and the ability to communicate efficiently. With that in mind, it’s most effective in seasoned teams whose members can organically interact with each other and can promptly adapt to changing scope.

Next steps

“The secret of getting ahead is getting started. The secret of getting started is breaking your complex overwhelming tasks into small manageable tasks, and starting on the first one.”

― Mark Twain

Every project has its own unique requirements and challenges, so there is no one-size-fits-all approach to software development. To select an optimal software delivery method for the next project, businesses and teams should have a firm grasp of the challenges before them, and they should also thoroughly understand existing delivery models.

Simulators – such as Software Delivery Simulator – can help teams lay out their software delivery process flows to assess the pros and cons of the models they select more carefully. Although an understanding of software delivery models is beneficial for planning, simulators – among other things – allow teams to test different delivery configurations in a virtual environment without touching the real system.

If your team members have not yet engaged with agile development methods, a free, open online introductory course might be useful for sampling agile software development sub-frameworks.

References:

Saeed, S., Jhanjhi, N. Z., Naqvi, M., & Humayun, M. (2019). Analysis of Software Development Methodologies. International Journal of Computing and Digital Systems, 8(5), 446-460.

Fustik, V. (2017). Scrum Methodology Compared with Other Methodologies Applied in the Software Development Projects. In Proceedings of the International Conference on Information Technologies (pp. 7-16).

Ajith Jerom, B., & Rajamohana, S. P. (2019). A Survey on Comparative Analysis of Agile Software Development Methodologies. International Journal of Software and Computer Science Engineering, 5(1), 36-48.