Software Development MethodologiesDeveloper
In large-scale projects, software teams often implement a development methodology to guide them to the finish. It is a powerful organizational tool that we simply cannot do without.
We’re going to look at the various software development methodologies that software engineering teams use to structure, plan, and control the process of developing software.
Agile Software Development
Agile is arguably the most popular and modern framework to date. There are even sub-methodologies e.g Crystal Methods, DSDM, and Scrum which we will look into later.
The name of the game is to minimize risk and teams develop software in short timeboxes called iterations. An iteration typically lasts one to four weeks and is like a mini-project. The result is a new feature or functionality.
Each iteration undergoes the entire micro-cycle of planning, requirements analysis, design, coding, testing, and documentation.
Agile methods are most effective when everyone involved is in close proximity to each other. Communication is key for agile to succeed.
In the mid-1990s, Alistair Cockburn developed a family of methodologies called Crystal Methods. The methods came from years of research on various software teams.
The Crystal Methods approach focuses on people, interaction, community, skills, talents, and communications in order to harness optimal performance. It is a very adaptable methodology that employs different strategies to solve problems.
Which version of the crystal method you use depends on the size of the project. Factors such as team size, system criticality, and project priorities determine the various colors of the Crystal Method family.
Larger projects call for a heavier weight, for example developing software for a space shuttle. Such a project is mission critical, as there are lives at stake. In this case, a team would use Crystal Diamond or Saphire.
Dynamic Systems Development Model
DSDM came out of Rapid Application Development in the mid-1990s.
The nine principles of DSDM are:
- Active user involvement.
- Empowered teams that the authority to can make decisions.
- A focus on frequent delivery of products.
- Using fitness for business purpose as the essential criterion for acceptance of deliverables.
- Iterative and incremental development to ensure convergence on an accurate business solution.
- Reversible changes during development.
- High baseline requirements.
- Integrated testing throughout the life cycle.
- Collaboration and cooperation between all stakeholders.
Extreme Programming (XP)
XP is one of the most popular and controversial agile methodologies. It is geared towards delivering high-quality software quickly and continuously. With that comes high customer involvement, rapid feedback loops, continuous planning and testing to deliver iterations every 1-3 weeks.
Simplicity, communication, feedback, and courage are the four key values that define XP along with 12 supporting practices:
- Planning Game
- Small Releases
- Customer Acceptance Tests
- Simple Design
- Pair Programming
- Test-Driven Development
- Continuous Integration
- Collective Code Ownership
- Coding Standards
- Sustainable Pace
Consider the practices as a playbook to reach the end-zone (delivery). Customers work very closely with the development team to define “User Stories”. The development team then works to deliver the highest priority user stories in the form of working, tested software.
Feature Driven Development (FDD)
Feature driven development operates in two-week timeboxes. The development team focuses on designing and building by feature. Features are small and client-centric. Feature delivery uses eight practices to keep the team on track:
- Domain Object Modeling
- Developing by Feature
- Component/Class Ownership
- Feature Teams
- Configuration Management
- Regular Builds
- Visibility of progress and results
Joint Application Development (JAD)
JAD values extensive preparation in order save time in the developing process. Its success depends on the communication between end-users, executives, and developers who collectively attend JAD sessions.
By clearly outlining system requirements, developers can get to building software more rapidly.
Lean Development (LD)
Lean Development focuses on building change-tolerant software. There are 12 principles of Lean Development:
- Satisfying the customer is the highest priority.
- Always provide the best value for the money.
- Success depends on active customer participation.
- Every LD project is a team effort.
- Everything is changeable.
- Domain, not point, solutions.
- Complete, don’t construct.
- An 80 percent solution today instead of 100 percent solution tomorrow.
- Minimalism is essential.
- Needs determine technology.
- Product growth is feature growth, not size growth.
- Never push LD beyond its limits.
Scrum is an agile method by Ken Schwaber for project management that aims to increase productivity within teams.
This method works great with teams of three to nine developers. Developers work in sprints (typically two-weeks). They track progress and re-plan in brief meetings called daily scrums.
In addition to the development team, there is a scrum master that works to keep the team focused and productive.
Waterfall (a.k.a. Traditional)
The waterfall model is a popular development model for software engineering.
In waterfall development, the team sets goals for each phase and completes them without turning back. While this makes sense, in theory, the waterfall model falls short because it does not embrace the changes that become necessary with most projects (something that the JAD method tries to address).