Choosing an SDLC Methodology
Choosing the right SDLC (Software Development Lifecycle) methodology for
your project is as important to the success of the project as the
implementation of any project management best practices. Choose the wrong software
methodology and you will add time to the development cycle. Adding extra time
to the development cycle will increase your budget and very likely prevent you
from delivering the project on time. Choosing the wrong methodology can also
hamper your effective management of the project and may also interfere with the
delivery of some of the project’s goals and objectives. Software development
methodologies are another tool in the development shop’s tool inventory, much
like your project management best practices are tools in your project manager’s
tool kit. You wouldn’t choose a chainsaw to finish the edges on your kitchen
cabinet doors because you know you wouldn’t get the results you want. Choose
your software methodology carefully to avoid spoiling your project results.
I realize that not every project manager can choose the software methodology
they will use on every project. Your organization may have invested heavily in
the software methodology and supporting tools used to develop their software.
There’s not much you can do in this case. Your organization won’t look
favorably on a request to cast aside a methodology and tools they’ve spent
thousands of dollars on because you recommend a different methodology for your
project. We’ll give you some tips on how to tailor some of the methodologies to
better fit with your project requirements later in this article. In the
meantime, before your organization invests in software development
methodologies you, or your PMO, ought to be consulted so that at least a
majority of projects are benefited from a good fit.
This article won’t cover every SDLC out there but we will attempt to cover
the most popular ones.
SCRUM
Scrum is a name rather than an acronym (which is why I haven’t capitalized
the letters), although some users have created acronyms, and is commonly used
together with agile software development. Scrum is typically chosen because of
its iterative nature and its ability to deliver working software quickly. It is
chosen to develop new products for those reasons. There is typically no role
for a project manager in this methodology, the 3 key roles are: the scrum
master (replacing the project manager), the product owner, and the team who
design and build the system. There is only one role that you would be asked to
play if your organization is committed to using this methodology, scrum master.
If you should determine that this would actually be the best methodology for
your project, you’ll have to re-examine your role as project manager. You can
either identify a suitable scrum master and return to the bench, or fill the
role of scrum master.
Scrum suits software development projects where its important for the
project to deliver working software quickly. Scrum is an iterative methodology
and uses cycles called sprints, to build a working system. Requirements are
captured in a "backlog” and a set of requirements is chosen with the help of
the product manager. Requirements are chosen based on 2 criteria: the
requirement takes priority over others left in the backlog and the set of
requirements chosen will build a functioning system. During the sprint, which
can last from 2 to 4 weeks maximum, no changes can be made to the requirements
in the sprint. This is one of the reasons that a project manager isn’t necessary
for this methodology. There is no need for requirements management because no
changes are allowed to the requirements under development. All changes must
occur in the requirements set in the backlog.
Scrum will be suitable for software development projects where the product
is a new software product. By new I mean that it is new to the organization
undertaking the project, not in general. The methodology was developed to
address a need for a method to build software when its necessary to learn on
the fly, not all requirements are known to the organization and the focus is on
delivering a working prototype quickly to demonstrate capabilities. You need to
be careful when choosing requirements to deliver in each sprint to ensure that
the set developed builds a software system that is capable of demonstrating the
feature set supporting the requirements included. You also need to ensure that
these requirements are well known and understood as no changes are allowed once
the sprint starts. This means that any changes to the requirements must come
through a new set of requirements in the backlog making changes to these
requirements very expensive.
This methodology divides stakeholders into 2 groups: pigs and chickens. The
inventors of this methodology chose this analogy based on the story of the pig
and the chicken – it goes something like this. A pig and a chicken were walking
down the road one morning and happened to notice some poor children who looked
like they hadn’t eaten for days. The compassionate chicken said to the pig:
"Why don’t we make those children a breakfast of ham and eggs?” The pig said:
"I’m not happy with your suggestion. You’re just involved in making the
breakfast, I’m totally committed!” The point to this is the product owner,
scrum master, and team are all in the "pig” group. All others are in the
"chicken” group. You will be in the "chicken” group if you choose the Scrum
methodology as a project manager.
Waterfall
Waterfall methodology calls for each phase of the development cycle to be
repeated once only. Requirements will be gathered and translated into
functional specifications once, functional specifications will be translated to
design once, designs will be built into software components once and the
components will be tested once. The advantage of this methodology is its focus.
You can concentrate the effort of all your analysts on producing functional
specifications during one period rather than have the effort dispersed
throughout the entire project. Focusing your resources in this way also reduces
the window during which resources will be required. Programmers will not be
engaged until all the functional specifications have been written and approved.
The disadvantage of this approach is its inability to teach the project team
anything during the project. A key difference between the waterfall approach
and an iterative methodology, such as Scrum or RUP, is the opportunity to learn
lessons from the current iteration which will improve the team’s effectiveness
with the next iteration. The waterfall methodology is an ideal methodology to
use when the project team has built software systems very similar to the one
your project is to deliver and has nothing to learn from development that would
improve their performance. A good example of a project which would benefit from
the waterfall methodology is a project to add functionality to a system the
project team built in the not too distant past. Another example of an
environment that is well suited to the waterfall methodology is a program to maintain
a software system where a project is scheduled for specific periods to enhance
the system. For example, an order and configuration software system which is
enhanced every 4 months.
The waterfall methodology does not lend itself particularly well to projects
where the requirements are not clearly understood at the outset. Iterative
approaches allow the product owners or user community to examine the result of
building a sub-set of requirements. Exercising the sub-set of requirements in
the iteration’s build may cause the product owners or user community to
re-examine those requirements or requirements to be built. You won’t have that
opportunity with the waterfall method so you need to be certain of your
requirements before you begin the build phase. Interpreting requirements into
functionality is not the only aspect of development that can benefit from an
iterative approach. Designing the system and building it can also benefit from
doing these activities iteratively. You should use the waterfal method when
your team is familiar with the system being developed and the tools used to
develop it. You should avoid using it when developing a system for the first
time or using a completely new set of tools to develop the system.
RUP
The Rational Unified Process, or RUP, combines an iterative approach with
use cases to govern system development. RUP is a methodology supported by IBM
and IBM provides tools (e.g. Rational Rose) that support the methodology. RUP
divides the project into 4 phases:
1. Inception phase – produces requirements, business case, and high level
use cases
2. Elaboration phase – produces refined use cases, architecture, a refined
risk list, a refined business case, and a project plan
3. Construction phase – produces the system
4. Transition phase – transitions the system from development to production
RUP also defines 9 disciplines: 6 engineering disciplines, and 3 supporting
disciplines: Configuration and Change Management, Project Management, and
environment so is intended to work hand in hand with project management best
practices.
Iteration is not limited to a specific project phase – it may even be used
to govern the inception phase, but is most applicable to the construction
phase. The project manager is responsible for an overall project plan which
defines the deliverables for each phase, and a detailed iteration plan which
manages the deliverables and tasks belonging to each phase. The purpose of the
iterations is to better identify risks and mitigate them.
RUP is essentially a cross between Scrum and waterfall in that it only
applies an iterative approach to project phases where the most benefit can be
derived from it. RUP also emphasizes the architecture of the system being
built. The strengths of RUP are its adaptability to different types of
projects. You could simulate some of the aspects of a Scrum method by making
all 4 phases iterative, or you could simulate the waterfall method by choosing
to avoid iterations altogether. RUP will be especially useful to you when you
have some familiarity with the technology but need the help of Use Cases to
help clarify your requirements. Use Cases can be combined with storyboarding
when you are developing a software system with a user interface to simulate the
interaction between the user and the system. Avoid using RUP where your team is
very familiar with the technology and the system being developed and your
product owners and users don’t need use cases to help clarify their
requirements.
RUP is one of those methodologies that your organization is very likely to
have invested heavily in. If that’s your situation, you probably don’t have the
authority to select another methodology but you can tailor RUP to suit your
project. Use iterations to eliminate risks and unknowns that stem from your team’s
unfamiliarity with the technology or the system, or eliminate iterations where
you would otherwise use the waterfall method.
JAD
Joint Application Development, or JAD, is another methodology developed by
IBM. It’s main focus is on the capture and interpretation of requirements but
can be used to manage that phase in other methodologies such as waterfall. JAD
gathers participants in a room to articulate and clarify requirements for the
system. The project manager is required for the workshop to provide background
information on the project’s goals, objectives, and system requirements. The
workshop also requires a facilitator, a scribe to capture requirements,
participants who contribute requirements, and members of the development team
whose purpose is to observe.
JAD can be used to quickly clarify and refine requirements because all the
players are gathered in one room. Your developers can avert misunderstandings
or ambiguities in requirements by questioning the participants. This method can
be used with just about any software methodology. Avoid using it where the
organization’s needs are not clearly understood or on large, complex projects.
RAD
RAD is an acronym for Rapid Application Development uses an iterative
approach and prototyping to speed application development. Prototyping begins
by building the data models and business process models that will define the
software application. The prototypes are used to verify and refine the business
and data models in an iterative cycle until a data model and software design
are refined enough to begin construction.
The purpose of RAD is to enable development teams to create and deploy
software systems in a relatively short period of time. It does this in part by
replacing the traditional methods of requirements gathering, analysis, and
design with prototyping and modeling, the prototyping and modeling allow the
team to prove the application components faster than traditional methods such
as waterfall. The advantage of this method is it facilitates rapid development
by eliminating design overhead. It’s disadvantage is that in eliminating design
overhead it also eliminates much of the safety net which prevents requirements
from being improperly interpreted or missed altogether.
RAD is suitable for projects where the requirements are fairly well known in
advance and the data is either an industry or business standard, or already in
existence in the organization. It is also suitable for a small development
team, or a project where the system can be broken down into individual
applications that require small teams. RAD is not suitable for large, complex
projects or projects where the requirements are not well understood.
LSD
Lean Software Development, or LSD, applies the principles of waste reduction
from the manufacturing world to the business of developing software. The goal
of LSD is to produce software in 1/3 the time, on 1/3 the budget, and with 1/3
the defects of comparable methods. Lean does this by applying 7 principles to
the endeavour of software development:
1. Eliminate waste
2. Amplify Learning (both technical and business)
3. Decide on requirements as late as possible
4. Deliver as fast as possible
5. Empower the team
6. Build integrity in
7. See the whole
Although Lean Manufacturing has been around for some time, its application
to the process of developing software is relatively new so I wouldn’t call it a
mature process.
LSD would be a suitable method to use where you have a subject matter expert
in the method who has some practical experience in applying lean methods to a
software development project. "Amplified” learning implies that your
development team has a depth of knowledge in the software tools provided, and
also a breadth of knowledge that includes an understanding of the business
needs of the client. LSD would be suitable for a project where the development
team has these attributes.
LSD depends on a quick turnaround and the late finalization of requirements
to eliminate the majority of change requests, so will not be suitable for a
project where a delayed finalization of requirements will have a poor chance of
eliminating change requests, or the size and comlexity of the system being
developed would prevent a quick turnaround.
Extreme Programming (XP)
Extreme programming places emphasis on an ability to accommodate changes to
requirements throughout the development cycle and testing so that the code
produced is of a high degree of quality and has a low failure rate in the
field. XP requires the developers to write concise, clear, and simple code to
solve problems. This code is then thoroughly tested by unit tests to ensure
that the code works exactly as the programmer intends and acceptance tests to
ensure that the code meets the customer’s needs. These tests are accummulated
so that all new code passes through them and the chances for a failure in the
field are reduced.
XP requires the development team to listen carefully to the needs and
requirements of the customer. Ambiguities will be clarified by asking questions
and providing feedback to the customer which clarifies the requirements. This
ability implies a certain degree of familiarity with the customer’s business;
the team will be less likely to understand the customer’s needs if they don’t
understand their business.
The intent of XP is to enhance coding, testing, and listening to the point
where there is less dependency on design. At some point it is expected that the
system will become sufficiently complex so that it needs a design. The intent
of the design is not to ensure that the coding will be tight, but that the
various components will fit together and function smoothly.
XP would be a suitable software development method where the development
team is knowledgable about the customers business and have the tools to conduct
the level of testing required for this method. Tools would include automated
unit testing and reporting tools, issue capture and tracking tools, and
multiple test platforms. Developers who are also business analysts and can
translate a requirement directly to code are a necessity because design is more
architectural than detail. This skill is also required as developers implement
changes directly into the software.
XP won’t be suitable where the development team does not possess business analysis
experience and where testing is done by a quality assurance team rather tha by
the development team. The method can work for large complex projects as well as
simple smaller ones.
There is no law that states you must choose one or the other of these
methodologies for your software project. The list I’ve given you here is not a
totally comprehensive list and some methodologies don’t appear on it (e.g.
Agile) so if you feel that there is some other methodology that will better
suit your project, run with it. You should also look at combining some of the
features of each of these methods to custom make a methodology for your
project. For example, the desire to eliminate waste from the process of
developing software is applicable to any method you choose and there is likely
waste that could be eliminated in any development shop.
Be careful to choose a methodology that is a good fit for your team,
stakeholders, and customer as well as your project. Bringing in a new
development methodology that your team will struggle to learn at the same time
they are trying to meet tight deadlines is not a good idea. On the other hand,
if you have the lattitude you may want to begin learning a new method with your
project. The
more you understand the interactions between project management and software
development methodologies, the better able you will be to choose the right SDLC
for your project. PMI offers the benchmark in project management certification,
the Project Management Professional (PMP®). To find out more about the certification process and our
training product, AceIt©, click on this link.
|