Analysis and Design

During Analysis and Design, we create a design model that serves as the abstraction for programmers when writing code. There is, unfortunately, no cookbook design technique that can unfailingly lead us from requirements to the design model of a complex software system. If there were one, the United States wouldn't have a failure rate on software projects of over 80%.

So how do we do it? How can we guarantee that the design model we create for your project will result in successful software? By carefully following a few steps that have worked well for us in several successful software projects, we are able to create the right design model.

Decompose complexity

A complex software system is hard to comprehend and build in its entirety. Starting with your requirements and use-cases, and using object-oriented decomposition, we split your project into smaller and smaller parts, and refine each part independently. Such decomposition not only breaks design complexity, it also helps you discern and control the project in easily manageable chunks.

Design incrementally and iteratively

Everybody makes design mistakes and so do we. However, we follow an iterative and incremental design approach that allows us to catch errors early and correct them before they become risks. If the design process is monolithic and long, a design mistake will be undetected until the very end when it is too late to correct it. An incremental and iterative design, on the other hand, attacks problems in several small steps, giving priority to high-risk decisions in early iterations and saving low-risks for later. Because we can revisit the early, critical decisions in every iteration, this approach gives ample chances to validate and fine-tune critical design decisions.

Design for maintenance

The cost of testing and maintaining a software system is often larger than the cost of programming. If your software is not specifically designed to reduce maintenance effort, you will pay for it when you deploy. This is why every design decision that we make is based on the ability to validate how well the system meets its requirements, how easy it is to track and eliminate performance bottlenecks, and how adaptable it is for future enhancements.

Employ reusable solutions

If we solved every design problem from scratch when building your project, it would take too long and cost too much. Instead, we look for patterns in your requirements and reuse solutions that have already solved these problems. By not reinventing the wheel, we are able to build software rapidly and at a low cost.

Follow sound discipline

Designing software is not voodoo: it's a craft. If your project is not designed using a discipline based upon solid theoretical foundation, you will end up with software that fails to meet your needs. Sound discipline consists of an effective process supported by strong tools, and a consistent notation to express the design. Our discipline follows an optimized object-oriented design process and uses the Unified Modeling Language (UML) as the notation.

If you do Analysis and Design right, you will reap quality software delivered on time and budget. If you need help in designing a client-server software system, call us. Depending upon the nature of help you want, we can assist you in several ways, from pointing you towards some excellent software-design literature, to performing complete and rapid Analysis and Design.