System Development Methodologies
System Development Methodologies
DEVELOPMENT
Categories of Methodologies
1
Figure 1-7. A simple Behavioral Model for Making a Simple Lunch (Dennis, Wixon, & Tergaden, 2015)
They tended to move directly from a very simple planning phase right into the construction
step of the implementation phase—in other words, from a very fuzzy, not-well thought- out system
request into writing code. This is the same approach that you sometimes use when writing
programs for a programming class. It can work for small programs that require only one
programmer, but if the requirements are complex or unclear, you might miss important aspects of
the problem and have to start all over again, throwing away part of the program (and the time and
effort spent writing it). This approach also makes teamwork difficult because members have little
idea about what needs to be accomplished and how to work together to produce a final product.
Structured Design. These methodologies became dominant in the 1980s, replacing the previous
ad hoc and undisciplined approach. Structured design methodologies adopt a formal step-by-step
2
approach to the SDLC that moves logically from one phase to the next. Numerous process-
centered and data-centered methodologies follow the basic approach of the two structured design
categories outlined next.
• Waterfall Development. The original structured design methodology (still used today) is
waterfall development. With waterfall development-based methodologies, the analysts
and users proceed in sequence from one phase to the next (see Figure 1.8). The key
deliverables for each phase are typically very long (often hundreds of pages in length) and
are presented to the project sponsor for approval as the project moves from phase to
phase. Once the sponsor approves the work that was conducted for a phase, the phase
ends and the next one begins. This methodology is referred to as waterfall development
because it moves forward from phase to phase in the same manner as a waterfall.
Although it is possible to go backward in the SDLC (e.g., from design back to analysis), it
is extremely difficult (imagine yourself as a salmon trying to swim upstream against a
waterfall, as shown in Figure 1-8).
Figure 1-8. A Waterfall Developmental-Based Methodology (Dennis, Wixon, & Tergaden, 2015)
The two key advantages of the structured design waterfall approach are that it identifies
system requirements long before programming begins and it minimizes changes to the
requirements as the project proceeds. The two key disadvantages are that the design
must be completely specified before programming begins and that a long time elapses
between the completion of the system proposal in the analysis phase and the delivery of
the system (usually many months or years). If the project team misses important
requirements, expensive post-implementation programming may be needed (imagine
yourself trying to design a car on paper; how likely would you be to remember interior
lights that come on when the doors
3
open or to specify the right number of valves on the engine?). A system can also require
significant rework because the business environment has changed from the time when
the analysis phase occurred.
• Parallel Development. Parallel development methodology attempts to address the
problem of long delays between the analysis phase and the delivery of the system. Instead
of doing design and implementation in sequence, it performs a general design for the
whole system and then divides the project into a series of distinct subprojects that can be
designed and implemented in parallel. Once all subprojects are complete, the separate
pieces are integrated and the system is delivered (see Figure 1-9).
The primary advantage of this methodology is that it can reduce the time to deliver a
system; thus, there is less chance of changes in the business environment causing
rework. However, sometimes the subprojects are not completely independent; design
decisions made in one subproject can affect another, and the end of the project can require
significant integration eff orts.
Rapid Application Development (RAD). These are a newer class of systems development
methodologies that emerged in the 1990s. RAD-based methodologies attempt to address both
weaknesses of structured design methodologies by adjusting the SDLC phases to get some part
of the system developed quickly and into the hands of the users. In this way, the users can better
understand the system and suggest revisions that bring the system closer to what is needed.
4
system sponsor then categorize the requirements into a series of versions. The most
important and fundamental requirements are bundled into the first version of the system.
The analysis phase then leads into design and implementation—but only with the set of
requirements identified for version 1 (see Figure 1-10). Once version 1 is implemented,
work begins on version 2. Additional analysis is performed based on the previously
identified requirements and combined with new ideas and issues that arose from the
users’ experience with version 1. Version 2 then is designed and implemented, and work
immediately begins on the next version. This process continues until the system is
complete or is no longer in use.
5
Figure 1-11. A Prototyping-Based Methodology
6
Figure 1-12. A Throwaway Prototyping-Based Methodology
A system developed using this type of methodology relies on several design prototypes
during the analysis and design phases. Each of the prototypes is used to minimize the risk
associated with the system by confirming that important issues are understood before the
real system is built. Once the issues are resolved, the project moves into design and
implementation. At this point, the design prototypes are thrown away, which is an
important difference between these methodologies and prototyping methodologies, in
which the prototypes evolve into the final system.
Agile Development. All agile development methodologies are based on the agile manifesto and
a set of 12 principles. The emphasis of the manifesto is to focus the developers on the working
conditions of the developers, the working software, the customers, and addressing changing
requirements instead of focusing on detailed systems development processes, tools, all-inclusive
documentation, legal contracts, and detailed plans. These programming-centric methodologies
have few rules and practices, all of which are fairly easy to follow. These methodologies are
typically based only on the twelve principles of agile soft are. These principles include the
following:
1. Software is delivered early and continuously through the development process, satisfying
the customer.
2. Changing requirements are embraced regardless of when they occur in the development
process.
3. Working software is delivered frequently to the customer.
4. Customers and developers work together to solve the business problem.
5. Motivated individuals create solutions; provide them the tools and environment they need,
and trust them to deliver.
7
6. Face-to-face communication within the development team is the most efficient and
effective method of gathering requirements.
7. The primary measure of progress is working, executing software.
8. Both customers and developers should work at a pace that is sustainable. That is, the
level of work could be maintained indefinitely without any worker burnout.
9. Agility is heightened through attention to both technical excellence and good design.
10. Simplicity, the avoidance of unnecessary work, is essential.
11. Self-organizing teams develop the best architectures, requirements, and designs.
12. Development teams regularly reflect on how to improve their development processes.
8
system, and they must not only accept change, they must embrace change. Fourth,
developers must have a quality-first mentality. XP also supports team members in
developing their own skills. Three of the key principles that XP uses to create successful
systems are continuous testing, simple coding performed by pairs of developers, and
close interactions with end users to build systems very quickly.
Testing and efficient coding practices are the core of XP. Code is tested each day and is
placed into an integrative testing environment. If bugs exist, the code is backed out until it
is completely free of errors. An XP project begins with user stories that describe what the
system needs to do. Then, programmers code in small, simple modules and test to meet
those needs. Users are required to be available to clear up questions and issues as they
arise. Standards are very important to minimize confusion, so XP teams use a common
set of names, descriptions, and coding practices. XP projects deliver results sooner than
even the RAD approaches, and they rarely get bogged down in gathering requirements
for the system.
XP adherents claim many strengths associated with developing software using XP.
Programmers work closely with all stakeholders, and communication among all
stakeholders is improved. Continuous testing of the evolving system is encouraged. The
system is developed in an evolutionary and incremental manner, which allows the
requirements to evolve as the stakeholders understand the potential that the technology
has in providing a solution to their problem. Estimation is task driven and is performed by
the programmer who will implement the solution for the task under consideration. Because
all programming is done in pairs, a shared responsibility for each software component
develops among the programmers. Finally, the quality of the final product increases during
each iteration.
9
Figure 1-14. Extreme Programming Methodology
• Scrum. Scrum is a term that is well known to rugby fans. In rugby, a scrum is used to
restart a game. In a nutshell, the creators of the Scrum method believe that no matter how
much you plan, as soon as the software begins to be developed, chaos breaks out and
the plans go out the window. The best you can do is to react to where the proverbial rugby
ball squirts out. You then sprint with the ball until the next scrum. In the case of the Scrum
methodology, a sprint lasts 30 working days. At the end of the sprint, a system is delivered
to the customer.
Of all systems development approaches, on the surface, Scrum is the most chaotic. To
control some of the innate chaos, Scrum development focuses on a few key practices.
Teams are self-organized and self-directed. Unlike other approaches, Scrum teams do
not have a designated team leader. Instead, teams organize themselves in a symbiotic
manner and set their own goals for each sprint (iteration). Once a sprint has begun, Scrum
teams do not consider any additional requirements. Any new requirements that are
uncovered are placed on a backlog of requirements that still need to be addressed. At the
beginning of every workday, a Scrum meeting takes place. At the end of each sprint, the
team demonstrates the software to the client. Based on the results of the sprint, a new
plan is begun for the next sprint.
Scrum meetings are one of the most interesting aspects of the Scrum development
process. The team members attend the meetings, but anyone can attend. However, with
10
very few exceptions, only team members may speak. One prominent exception is
management providing feedback on the business relevance of the work being performed
by the specific team. In this meeting, all team members stand in a circle and report on
what they accomplished during the previous day, state what they plan to do today, and
describe anything that blocked progress the previous day. To enable continuous progress,
any block identified is dealt with within one hour. From a Scrum point of view, it is better
to make a “bad” decision about a block at this point in development than to not make a
decision. Because the meetings take place each day, a bad decision can easily be
undone. Larman suggests that each team member should report any additional
requirements that have been uncovered during the sprint and anything that the team
member learned that could be useful for other team members to know.
11
of the RAD-based methodologies require the use of new tools and techniques that have a
significant learning curve. Often these tools and techniques increase the complexity of the project
and require extra time for learning. However, once they are adopted and the team becomes
experienced, the tools and techniques can significantly increase the speed at which the
methodology can deliver a final system.
• Clarity of User Requirements. When the user requirements for a system are unclear, it
is difficult to understand them by talking about them and explaining them with written
reports. Users normally need to interact with technology to really understand what a new
system can do and how to best apply it to their needs. RAD and agile methodologies are
usually more appropriate when user requirements are unclear.
• Familiarity with Technology. When the system will use new technology with which the
analysts and programmers are not familiar, early application of the new technology in the
methodology will improve the chance of success. If the system is designed without some
familiarity with the base technology, risks increase because the tools might not be capable
of doing what is needed. Throwaway prototyping-based methodologies are particularly
appropriate if users lack familiarity with technology because they explicitly encourage the
developers to develop design prototypes for areas with high risks. Phased development-
based methodologies create opportunities to investigate the technology in some depth
before the design is complete. Also, owing to the programming-centric nature of agile
methodologies, both XP and Scrum are appropriate.
• System Complexity. Complex systems require careful and detailed analysis and design.
Throwaway prototyping-based methodologies are particularly well suited to such detailed
analysis and design, but prototyping-based methodologies are not. The traditional
structured design-based methodologies can handle complex systems, but without the
12
ability to get the system or prototypes into the users’ hands early on, some key issues may
be overlooked. Although phased development-based methodologies enable users to
interact with the system early in the process, we have observed that project teams who
follow these tend to devote less attention to the analysis of the complete problem domain
than they might using other methodologies. Finally, agile methodologies are a mixed bag
when it comes to system complexity. If the system is going to be a large one, agile
methodologies will perform poorly. However, if the system is small to medium size, then
agile approaches will be excellent.
• System Reliability. System reliability is usually an important factor in system
development; after all, who wants an unreliable system? However, reliability is just one
factor among several. For some applications, reliability is truly critical (e.g., medical
equipment, missile-control systems), whereas for other applications (e.g., games, Internet
video) it is merely important. Because throwaway prototyping methodologies combine
detailed analysis and design phases with the ability for the project team to test many
different approaches through design prototypes before completing the design, they are
appropriate when system reliability is a high priority. Prototyping methodologies are
generally not a good choice when reliability is critical because it lacks the careful analysis
and design phases that are essential for dependable systems. However, owing to the
heavy focus on testing, evolutionary and incremental identification of requirements, and
iterative and incremental development, agile methods may be the best overall approach.
• Short Time Schedules. RAD-based and agile methodologies are excellent choices when
timelines are short because they best enable the project team to adjust the functionality in
the system based on a specific delivery date, and if the project schedule starts to slip, it
can be readjusted by removing functionality from the version or prototype under
development. Waterfall-based methodologies are the worst choice when time is at a
premium because they do not allow easy schedule changes.
• Schedule Visibility. One of the greatest challenges in systems development is
determining whether a project is on schedule. This is particularly true of the structured
design methodologies because design and implementation occur at the end of the project.
The RAD-based methodologies move many of the critical design decisions earlier in the
project to help project managers recognize and address risk factors and keep expectations
in check. However, given the daily progress meetings associated with Agile approaches,
schedule visibility is always on the proverbial front burner.
13