Methodology

Our ‘Quality Delivery Methodology’ (QDM) is an Agile-based, consistent, and formal approach for delivering high quality, repeatable solutions, and providing superior support to our customers.

Each iteration has a set of well-defined activities and produces a partial working implementation. Iterations in the Inception and Elaboration (Requirements and Design) phases focus on management, requirements, and design activities; iterations in the Construction phase focus on low-level design implementation and test; and iterations in the Transition phase focus on user acceptance testing, deployment, parallel runs, maintenance and operational support. Iterations are time-boxed, that is, the schedule for iteration is regarded as fixed, and the scope of the iteration's content is actively managed to meet that schedule. Iteration length varies generally between two and six weeks.

Sustainable is acutely focused on reducing technical and process risk associated with software development. Rather than addressing risks later in the project, our team focuses on identifying and addressing risks early and continuously throughout the project. Our QDM offers significant risk-reduction as compared to the traditional waterfall development approach since we address all disciplines in each development lifecycle phase. Our methodology offers some of the following advantages:

  • Our team identifies the riskiest use cases and develops them before tackling less risky requirements. We also consider use-case dependency to allow sufficient time to overcome obstacles. In addition to addressing high-risk use cases, the team addresses higher risk non-functional technologies and requirements (i.e. external interfaces) early in the project for the same reasons described above.
  • Our approach will develop an executable architecture for the application during the first iteration of the ‘Elaboration Phase’. An executable architecture is a partial implementation of the system and is testable. It addresses core high-risk use cases that span multiple technologies in the project. This ensures technology coverage while at the same time allowing for verification that the system meets the customer's technical requirements (performance, throughput, capacity, reliability etc.). This approach allows the team to correct architectural and design issues up front before starting the construction phase, even before detailed design documents are prepared during the elaboration phase.
  • A guiding principle of our methodology is to produce executable, therefore testable, code frequently. Our iteration plans are set up to allow for testing throughout the construction lifecycle. It is our experience that testing software solely at the end of the lifecycle is unnecessarily risky. We encourage our customers to test the software based on milestone deliverables. The resulting feedback confirms (or not) that we are heading down the right path and delivering a solution that meets the customer’s expectations. Frequent testing schedules facilitate improvement and refinement of the solution, resulting in a more robust user-friendly system.
  • Our approach of continuous integration and unit testing is the key to success of the development effort. Our team uses a variety of tools including Selenium, Ant, nUnit, Hg CVS, CVS (Microsoft automatic test and build tools) to improve the integrity of project builds and ensure adequate test coverage at the unit level.
  • Our team will build the application using a components-based approach. Applications built using components are easier to maintain and facilitate distribution of work across a larger team. Code that is component-based, and therefore maintainable, is generally cheaper in the long term.