Concept Exploration

This phase occurs to create the objectives and limits of the development project.  How urgent is a solution to a problem or opportunity?  What are the benefits?  What are the possible solutions?  What are the preliminary estimated costs?  What are management's objectives?  Answers to these questions are the results of this phase.

Preliminary Requirements Analysis

This phase gathers the business requirements for a system. Measures of success are defined to ensure a successful project.  If there is a current system what are its functions, benefits, limitations?  What is the process that is used to accomplish a task?  What data is used to complete a process?  What do the people that will use the system expect it to do?

The output of this phase should be a fairly detailed list of the business functions that will be performed by the proposed application.  Most fail or marginally successful software projects started out with poorly defined business requirements!  This step is essential for high levels of success!  This stage defines what the system will do, not how to do it.  Without this information the developer will add and add and add to the software without a clear measure of when to stop.

Architectural Design

High level system design  begins to define how a system will accomplish what it is suppose to do.  This phase includes data modeling, process modeling, interface design, and partitioning a system's requirements into pieces (or versions) that can be delivered in rapid succession.  How the application is partitioned into deliverable versions depends on the purpose of the application.

Data Modeling

Data modeling is a technique to organize and document an application's data.  The technique is roughly divided into two steps:  the logical model and the physical model.  A logical data model is a pictorial representation of the data in an application, whose purpose is display data about things (entities) and their relationships.  Having a picture of this, usually called a entity relationship diagram (ERD), helps eliminate design problems in storing data for an application.  Having a picture makes it easier to communicate with clients and customers, and to spot errors in completeness, consistency and accuracy.  Problems in design can be very expensive to fix after an application has be delivered.

A physical data model of the data defines how the data will be stored.  Many notations are used to describe data models.  Which one to use depends on your choice of CASE (computer-aided software engineering) tools for creating the ERD.  CASE tools can be used to create a database from the model helping to speed development.

Process Modeling

Process modeling is a technique for organizing and documenting the logic, policies, and procedures that are implemented by a system.  Similar to data modeling, process modeling is divided up into two steps:  the logical model and the physical model.

The logical process model, sometimes called conceptual or business model, shows what a system does. It is implementation independent; that is, it depicts the independent of any technical solution.

As the process model is developed, it evolves into a physical process model that describes how a system does what it is required to perform.  The physical model will be affected by choices and limits of the technical implementation.

Process modeling has been since the beginning of the Industrial Revolution, so many types of process models exist.  Some examples are logic flowcharts, decision tables, hierarchy charts, and data flow diagram (DFD).

Interface Design

User interface design is the specification of the dialog between the application user and the computer.  Since the introduction of the Macintosh, application users are demanding that their applications look like and work like there other graphical user interface (GUI) applications.  The goal of GUI applications is to make them easier and less error prone to user that the older "prompt and process" character user interfaces of legacy applications.  The best user interfaces are "invisible" in that they are very intuitive for the user.  At the same time creating these "invisible" interfaces can be very time consuming and difficult for the application designers.

System interface design is the specification of how separate applications interact to allow exchange of information.  This allows purchased systems to be controlled by custom applications.  Newer GUI applications can extract data from older legacy applications.

Detailed Design, Code and Testing

The construction phase in creating a working version of a system. When a developer is creating the code for an application, many details are brought to the forefront.  A combination of detailed design and coding works very well in creating an application that meets the needs of the users, but is cost-effective to build.

Deliver Application

Creating a package for installing an application involves bringing together various components that allow the user to install a version of the application on their system.

The most important of these components is the executable application.  This is created by compiling tens and sometimes hundreds of program source files using a compiler.

Another important component of an application is the database.  This may be an empty structure or may contain a significant amount of reference data or data converted from a previous application.

Other components of the package include documentation (online and printed), setup program (an application in itself), and various system files that support the application.

The final step of creating a deliver package is testing the package on a system configured a closely as possible to the user's computer system.

Customer Feedback

No major application has ever been delivered error free or without some function missing!  This can be the result of changing customer needs, vague requirements, or poor design in varying degrees.  Pressure to deliver applications in shorter time frames has required that compromises are made.  Sometimes people using an application do not think of what they want done or how they want something accomplished until they use an application for awhile.

This phase allows the developers to evaluate their initial success and modify an application to better meet the needs of the customer.  Incremental changes to existing software can be excellent way to deliver applications rapidly!

Incorporate Changes

Design, code, test and deliver an application's changes based on the customer feedback.

Deliver Final Application

Packaging an application for installation on the end users computer system.  Also updating and archiving all analysis and design documentation to allow for better maintenance and enhancement of the application.  Finally, checking that the application meets all the business requirements outlined in the analysis phase of the software development life cycle.