Our Software Development Process

A common sense approach

Our philosophy

Over the last fifty years software development has evolved from a means of solving discrete mathematical and engineering problems into a true engineering discipline in its own right. As in any branch of engineering the process by which systems are designed and created is often the most important factor in the success or failure of a project.

There now exist many different philosophies and associated processes for the creation of high quality software systems. Neoworks is not dogmatic in its approach to selecting the most appropriate process for a particular development project. By using the most suitable process or elements of a number of processes systems can be designed and built in the most efficient manner possible while effectively managing risk and maintaining quality.

A generic software development framework

Almost all software development processes are made up of the same key stages. The reason for this is that in almost all software development projects of any size omission of one of these key stages introduces unacceptable risk factors. key stages of the generic software development process are as follow:

  1. System definition - Stating the objectives of the system and the environment in which it will be used.
  2. Requirements gathering - Discovering, usually from the intended users of the system, what requirements the system must fulfil.
  3. Software design - Deciding, based on the system requirements, what the most appropriate development tools and approach will be.
  4. System specification - Generating a formalised representation of the proposed system from which the work may be divided and performed by programmers.
  5. System development - Creating the software components as defined in the specification.
  6. Software testing - Testing the compliance of the software to the specification.
  7. Prototype system testing - Testing the resulting system in its entirety to ensure that it meets the initial requirements.
  8. System deployment - Deploying the finished and tested system for use.
  9. System maintenance - Ensuring that the system operates smoothly and that routine administration is carried out.

The stages described above are by no means discrete, there is as one would expect a great deal of feedback between different stages in the process. Managing that feedback is the most complex part of the software development process and is unsurprisingly an issue that still elicits a great deal of intellectual confrontation. In the next section we look at an overview of the most commonly used approaches. Other differences between methodologies tend to be less fundamental and generally relate to implementational specifics or notation.

Some commonly used methodologies

The Classic "Waterfall" Model

This model does not allow for feedback from later stages back into previous stages; e.g. in the event that a serious human interface issue is discovered during implementation, work would be halted and the system requirements revisited, leading to a respecification of the software and a new implementation.

Prototyping

This model adds the flexibility to trial elements of the system before a full implementation is started. In real world situations it is often difficult to determine all system requirements prior to testing a working (or partially working) system. This poses a problem in the classic model as at this point it is likely that a large investment has already been made. The prototyping model allows key parts of the system to be modelled or implemented quickly to gain user feedback early in the development cycle. These prototype implementations are then discarded, having cost relatively little to develop.

The Spiral (or Repetitive Waterfalls) Model

The spiral model combines the two approaches and allows for multiple generations of prototype system resulting in a finished system. At each generation an analysis of the previous prototype leads to a new list of requirements and a new design. A risk analysis is performed for each new design and a decision is made as to whether the new implementation should proceed. This approach can be expensive and time consuming and is unnecessary in all but the most complex of system developments.

Evolutionary Prototyping

In the evolutionary prototyping model the solution is prototyped iteratively until it meets all requirements and is delivered. The major drawback of this methodology is that the evolutionary development of the system can result in high maintenance costs over the solution lifetime. This can be mitigated by including phases of aggressive refactoring, although this is only cost effective in higher level languages with good development tool support.

Staged Delivery

The staged delivery model calls for delivery of the system to the customer after each cycle of development. Once the system has been tested the results are fed back into the cycle and this process is repeated until the solution is delivered and accepted.

Agile Software Development

The agile software development model calls for a much tighter collaboration between customer and developer and can be extremely effective, reducing development times and resulting in more effective solutions. The methodology is similar to staged delivery, but using very short cycles similar to those in evolutionary prototyping. There are a number of variations on this model, including eXtreme Programming.

The right tools for the job

Selecting the right model to use in a particular situation involves evaluating a number of parameters such as:

  1. The size of the system
  2. The number of developers working on the system
  3. How well defined the system is to begin with
  4. The expected lifetime of the system
  5. The budget available for development

With eight years of experience using the latest tools and methodologies Neoworks is well equipped to assess the most appropriate way to manage the development lifecycle and to put that management into practice. Neoworks will deliver you a system that performs not only in terms of speed and integrity but also integrates well into your existing environment and is maintainable in the long term.