Alternative approaches to System Development
1. Traditional Life Cycle (Waterfall Model)
The Waterfall Model is also referred to as a linear-sequential life cycle model. It is very simple to understand and use.
In a waterfall model, each phase must be completed fully before the next phase can begin. This model is basically used
for the project where there are no uncertain requirements. In this model software testing starts only after the
development is complete. In waterfall model phases do not overlap.
Diagram of Waterfall-model:
Advantages of waterfall model:
This model is simple and easy to understand and use.
It is easy to manage due to the rigidity of the model – each phase has specific deliverables and a review process.
In this model phases are processed and completed one at a time. Phases do not overlap.
Waterfall model works well for smaller projects where requirements are very well understood.
Disadvantages of waterfall model:
Once an application is in the testing stage, it is very difficult to go back and change something that was not well-
thought out in the concept stage.
No working software is produced until late during the life cycle.
Not a good model for complex and object-oriented projects.
Not suitable for the projects where requirements are at a moderate to high risk of changing.
When to use the waterfall model:
This model is used only when the requirements are very well known, clear and fixed.
Product definition is stable.
Technology is understood.
There are no ambiguous requirements
Ample resources with required expertise are available
Very less customer interaction is involved during the development of the product. Once the product is ready then
only demo can be given to the end users. Once the product is developed and if any failure occurs then the cost of
fixing such issues are very high, because we need to update everywhere from document till the logic.
2. Prototyping Model
The basic idea in Prototype model is that instead of freezing the requirements before a design or coding can proceed, a
throw-away prototype is built to understand the requirements. This prototype is developed based on the currently known
requirements. By using this prototype, the client can get an “actual feel” of the system, since the interactions with
prototype can enable the client to better understand the requirements of the desired system. Prototyping is an attractive
idea for complicated and large systems for which there is no manual process or existing system to help determining the
requirements.
The prototypes are usually not complete systems and many of the details are not built in the prototype. The goal is to
provide a system with overall functionality.
Steps in Prototyping:
1. Identify the user requirements
2. Develop an initial prototype
3. Use the prototype
4. Revise and enhance the prototype
Diagram of Prototype model:
Advantages of Prototype model:
Users are actively involved in the development
Since in this methodology a working model of the system is provided, the users get a better understanding of the
system being developed.
Quicker user feedback is available leading to better solutions.
Missing functionality can be identified easily
Disadvantages of Prototype model:
Practically, this methodology may increase the complexity of the system as scope of the system may expand
beyond original plans.
When to use Prototype model:
Prototype model should be used when the desired system needs to have a lot of interaction with the end users.
Prototyping ensures that the end users constantly work with the system and provide a feedback which is
incorporated in the prototype to result in a useable system. They are excellent for designing good human
computer interface systems.
3. End-user development (EUD)
End-user development (EUD) or end-user programming (EUP) refers to activities and tools that allow end-users,
people who are not professional software developers, to program computers. End-User Development can be defined as a
set of methods, techniques, and tools that allow users of software systems, who are acting as non-professional software
developers, at some point to create, modify or extend a software artifact. People who are not professional developers can
use EUD tools to create or modify software piece and complex data objects without significant knowledge of a
programming language.
A series of software tools categorized as fourth generation languages makes this possible. Fourth generation languages
are software tools that enable end users to develop software applications with minimal or no technical assistance. End
user development systems can be completed more rapidly than those developed through the conventional methods.
Allowing users to specify their own business needs improves requirements gathering and often leads to higher level of
user involvement and satisfaction with the system. But when systems are created rapidly, without a formal development
methodology, it may be inadequate.
Few categories of fourth generation languages are;
PC software tools eg: WordPerfect, Microsoft Access
Query language eg: SQL
Report generator eg: Crystal Reports
Graphics language eg: Systat, SAS/GRAPH
Application generator eg: WebFOCUS, QuickBase
Application software package eg: mySAP ERP
Very high level programming language eg: APL, Nomad2 (APL: A Programming Language)
4. Application software packages and outsourcing
Application software packages
Many applications are common to all business organization, like payroll, accounts receivable, general ledger etc. For
such universal functions with standard processes that do not change a great deal over time, a generalized system will
fulfill the requirements of many organizations. If a software package can fulfill most of an organization’s
requirements, the company doesn’t have to write its own software. The company can save time and money by using
pre-written, pre-designed, pretested software programs from the package. If an organization has unique requirements that
the package doesn’t address, many package include capabilities for customization. The most important evaluation criteria
are the functions provided by the package, flexibility, user friendliness, hardware and software resources, database
requirements, installation and maintenance efforts, documentation, vendor quality and cost. If the organization’s
requirements conflict with the way the package works and the package cannot be customized, the organization will have
to adapt to the package and change its procedures.
Outsourcing
If a firm doesn’t want to use its internal resources to build or operate information systems, it can outsource the work to an
external organization that specializes in providing these services. Cloud computing and SaaS providers are one form of
outsourcing. A company can also hire an external vendor to design and create the software, but that company operates
the system on its own computers. Your firm is the most likely to benefit from outsourcing if it takes the time to evaluate
all the risks and to make sure outsourcing is appropriate for its particular needs. Any company that outsources its
applications must thoroughly understand the project, including its requirements, method of implementation, anticipated
benefits, cost components and metrics for measuring performance.
So, why outsource your software development?
- Cost Savings
Outsourcing makes sense for cutting costs while reducing workload on the employee. You won’t need to make any
upfront investment, which makes development projects much more attractive.
- Time Savings
Software development takes less time when people are working on your applications around the clock, so you can get
your product to market more quickly than your competitors can.
- Lack of in house experience
When the internal resources of the company are not enough to globalize the company’s business, Outsourcing software
development will bring new dimensions to manage a business worldwide. Business applications will be more sound and
systematic for an overall performance.
- Flexibility
When you outsource, you don’t have to spend time recruiting, hiring, training, and housing employees for short-term
projects.
- Talented IT Professionals
You’ll have immediate access to some of the best and brightest information-technology professionals by going overseas
and bypassing the gaps in hiring pools in more developed countries.
- Focused Strategy
Outsourcing software development would streamline business processes. It will provide a focused strategy to have a
competitive advantage in the technological race.
- Technological Advances
Technology is evolving in different countries of the world. Companies thriving to gain competitive advantage are better
off outsourcing software development.
- Risk Mitigation
You can mitigate risks by choosing an outsourcing firm that has a high-quality project management system and a tried-
and-true process for developing applications.
Application Development for the Digital Firm
In the digital firm environment, organizations need to be able to add, change and retire their technological capabilities
very rapidly to respond to new opportunities. Companies are starting to use shorter, more informal development
processes that provide fast solutions. Businesses are relying more heavily on fast-cycle techniques such as RAD, JAD,
Agile development, component based development etc.
1. Rapid Application Development (RAD)
Object oriented software tools, reusable software, prototyping and fourth generation language tools are helping systems
builders create working systems much more rapidly than they could using traditional systems-building methods and
software tools. RAD is used to describe this process of creating workable systems in a very short period of time. It
emphasizes that software products can be developed faster and of higher quality through:
Gathering requirements using workshops or focus groups
Prototyping and reiterative user testing of designs
The re-use of software components
A rigidly paced schedule that defers design improvements to the next product version
Less formality in reviews and other team communication etc.
Advantages of the RAD model:
Reduced development time.
Increases reusability of components
Quick initial reviews occur
Encourages customer feedback
Integration from very beginning solves a lot of integration issues
Disadvantages of RAD model:
Depends on strong team and individual performances for identifying business requirements.
Only system that can be modularized can be built using RAD
Requires highly skilled developers/designers.
High dependency on modeling skills
Inapplicable to cheaper projects as cost of modeling and automated code generation is very high.
When to use RAD model:
RAD should be used when there is a need to create a system that can be modularized in 2-3 months of time.
It should be used if there’s high availability of designers for modeling and the budget is high enough to afford
their cost along with the cost of automated code generating tools.
2. JAD (Joint Application Development)
JAD (Joint Application Development) is a methodology that involves the client or end user in the design and
development of an application, through a succession of collaborative workshops called JAD sessions. It brings end users
and information system specialists together in an interactive session to discuss the system’s design. The JAD approach,
in comparison with the more traditional practice, is thought to lead to faster development times and greater client
satisfaction, because the client is involved throughout the development process. JAD centers around a workshop session
that is structured and focused. Participants of these sessions would typically include a facilitator, end users, developers,
observers, mediators and experts.
3. Agile Development
Agile development focuses on rapid delivery of working software by breaking a large project into a series of small
subprojects that are completed in short periods of time using iteration and continuous feedback. Each mini project is
worked on by a team including planning, requirements analysis, design, coding, testing and documentation. This helps to
minimize overall risk and allows the project to adapt to changes more quickly. It also focuses on empowering people to
collaborate and make decisions together quickly and effectively.
Advantages of Agile model:
Customer satisfaction by rapid, continuous delivery of useful software.
People and interactions are emphasized rather than process and tools. Customers, developers and testers
constantly interact with each other.
Working software is delivered frequently (weeks rather than months).
Face-to-face conversation is the best form of communication.
Close, daily cooperation between business people and developers.
Continuous attention to technical excellence and good design.
Regular adaptation to changing circumstances.
Even late changes in requirements are welcomed
Disadvantages of Agile model:
In case of some software deliverables, especially the large ones, it is difficult to assess the effort required at the
beginning of the software development life cycle.
There is lack of emphasis on necessary designing and documentation.
The project can easily get taken off track if the customer representative is not clear what final outcome that they
want.
Only senior programmers are capable of taking the kind of decisions required during the development process.
Hence it has no place for new programmers, unless combined with experienced resources.
When to use Agile model:
When new changes are needed to be implemented. The freedom agile gives to change is very important. New
changes can be implemented at very little cost because of the frequency of new increments that are produced.
To implement a new feature the developers need to lose only the work of a few days, or even only hours, to roll
back and implement it.
Unlike the waterfall model in agile model very limited planning is required to get started with the project. Agile
assumes that the end users’ needs are ever changing in a dynamic business and IT world. Changes can be
discussed and features can be newly affected or removed based on feedback. This effectively gives the customer
the finished system they want or need.
4. Component Based Development
Component-based development techniques involve procedures for developing software systems by choosing ideal off-
the-shelf components and then assembling them using well-defined software architecture. It is a reuse-based approach to
defining, implementing and composing loosely coupled independent components into systems.
Structured and Object oriented methodologies for modeling and designing systems
Structured refers to the fact that the techniques are step by step, top down approach. Structured methods are process
oriented, focusing primarily on modeling the processes. A separate programming procedure must be written every time
for every action on a particular piece of data. The procedures act on data that the program passes to them.
Structured methods are useful for modeling processes, but do not handle the modeling of data as well. They also treat
data and processes as logically separate entities, whereas in the real world such separation seems unnatural. Object
oriented development addresses these issues. Object oriented development uses the object as the basic unit of system
analysis and design. An object combines data and the specific processes that operate on those data. Data encapsulated in
an object can be accessed and modified only by the operations or methods associated with that object. The system is
modeled as a collection of objects and relationships among them. Object oriented modeling is based on the concepts of
class and inheritance. Objects belonging to certain class have the features of that class. Classes of objects in turn can
inherit all the structure and behaviors of a more general class and then add variables and behaviors unique to each object.
Object oriented development could potentially reduce the time and cost of writing software due to reusable software
objects.
Structured Programming Object Oriented Programming
Structured Programming is designed which focuses on process/ Object Oriented Programming is designed which focuses
logical structure and then data required for that process. on data.
Object oriented programming follows bottom-up
Structured programming follows top-down approach.
approach.
Structured Programming is also known as Modular
Object Oriented Programming supports inheritance,
Programming and a subset of procedural programming
encapsulation, abstraction, polymorphism, etc.
language.
In Structured Programming, Programs are divided into small self In Object Oriented Programming, Programs are divided
contained functions. into small entities called objects.
Structured Programming is less secure as there is no way of data Object Oriented Programming is more secure as having
hiding. data hiding feature.
Structured Programming can solve moderately complex Object Oriented Programming can solve any complex
programs. programs.
Structured Programming provides less reusability, more Object Oriented Programming provides more reusability,
function dependency. less function dependency.
Less abstraction and less flexibility. More abstraction and more flexibility.
Computer Aided Software Engineering (CASE)
CASE (computer-aided software engineering) is the use of a computer-assisted method to organize and control the
development of software, especially on large, complex projects involving many software components and people. Using
CASE allows designers, code writers, testers, planners, and managers to share a common view of where a project stands
at each stage of development. Computer-Aided Software Engineering (CASE) technologies are tools that provide
automated assistance for software development. The goal of introducing CASE tools is the reduction of the time and cost
of software development and the enhancement of the quality of the systems developed. The interest in CASE tools and
environments is based on expectations about increasing productivity, improving product quality, facilitating
maintenance, and making software engineers' task less odious and more enjoyable.
CASE tools are used for developing high-quality, defect-free, and maintainable software. CASE software is often
associated with methods for the development of information systems together with automated tools that can be used in
the software development process.