del.icio.us Reddit Digg Facebook Technorati Google StumbleUpon Yahoo Diigo Wink

Developing a significant software product with quality requires that a set of processes are established in any organization. There are several phases of the software development life cycle (SDLC).

In the traditional SDLC methodology, sometimes also referred to as Waterfall method, the SDLC is divided up into multiple phases that are performed in sequence. The phases are:

Requirements Gathering

In this phase, the idea for the product or release is explored. Representatives from multiple cross-functional teams including marketing and engineering discuss the business and technical feasibility of the product. Product management will translate market needs into product requirements and features. Working jointly with Engineering to estimate costs of these features, Marketing will prioritize the features so that the appropriate set can be selected for a release and a release horizon can be created.

Design

In this phase, the Engineering team will design the product. A new architecture or enhancements to the current architecture will be created. Appropriate technologies and components will be selected. The components that are available off the shelf (preferred!) will be evaluated for feasibility. Components that need to be built out will be designed. Typically, a high level and a detailed design is created. The high level design defines the system level description of the component and how it interacts with other parts of the system. The low-level design will describe the detailed APIs and software modules that comprise the component.

Implementation

Using the output of the design phase (high-level and low-level designs), the engineering team will start implementing the components that are required to build the product. As the implementation progresses, there will usually be changes to the design based on the new findings. These changes will be incorporated in the design and any effects of these changes on other modules will be communicated to the relevant sub-teams.

Integration

Once the modules are completed, the integration of the modules to build out the complete release will be undertaken. Representatives from various sub-teams will integrate the modules created by their teams. In theory, if the modules have been build according to the specifications that were created for them, they will integrate quickly and well to create the software. In practice, this phase brings forth a number of issues of incompatibility. The common cause of this is the inevitable inadequate communication of changes to the design as each team was developing their own components and making changes to incorporate new findings.

Verification or QA

After the modules have been integrated, the software will be release to QA who will perform testing on the system. During this phase, the QA team will find bugs and defects in the product which the development team will fix. Frequent updates to the software are released to the QA team incorporating the fixes for the bugs.

This phase continues until no more high severity bugs remain in the product. The Engineering and Marketing team will decide if the product is at acceptable level of quality to release to the market by evaluating the severity of the remaining bugs.

Release and Maintenance

Once the product has reached an acceptable level of quality, the product will be released. Depending on the type of product, the release team might burn master CDs, deploy the release on web servers or post the package on a website.

After the product hits the market, the customers during the use of the product may also discover more issues which will be reported back to the Marketing and Engineering teams. These changes will be factored into the product road map and minor releases might be created to take care of the issues that cannot wait for the next major release.

    Agile Development

The method described above, the Waterfall method, has multiple phases. Each phase is completed one by one and the output of each phase drives the next phase. This method is easy to understand and to communicate, especially for scheduling and budgeting purposes. Gross mistakes can usually be caught earlier and phase milestones can be approve by customers.

However, in practice things don’t work as well as one might imagine. In a dynamic market where new business realities make changes necessary in a product under development, it is hard to incorporate changes in this phased model. A discovery in a later phase can invalidate earlier decisions. Since each phase can last many months, customers have to wait for a long time before working product can be reviewed. Also, since not all people are needed in each phase, some resource are wasted as they are waiting for other resources to generate the deliverables.

To address these shortcomings, an Agile Development Methodology has been developed in recent years. There are several types of agile methodologies. Most of them share similar principles. They emphasize

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

The items on the right of each statement are important and will be needed in the process, but more value is put on the items on the left.

At its basic level, agile development turns the waterfall method into an iterative and incremental model. That is, small chunks of functionality is developed incrementally in separate iterations. This functionality is released to QA and demonstrated to customers. In this process, changes are made to the code as feedback is received from QA and customers. This is in contrast to getting feedback from QA in the QA phase and from the customers after release.

The main benefits for Agile are:

  • Deliver working code and valuable features to customers fast
  • Continuous and better visibility for customers and stake holders
  • Better productivity, quality and happiness in software development organizations

Since frequent and constant communication is essential to make Agile development work effectively, a number of tools and processes can be utilized including:

  1. A central source control system
  2. A bug tracking system
  3. A test case management system
  4. Insistence on writing unit tests
  5. An automated test suite and harness
  6. A continuous code integration system with the unit tests and the automated test suite integrated in
  7. A wiki, task management and messaging system

del.icio.us Reddit Digg Facebook Technorati Google StumbleUpon Yahoo Diigo Wink