Calytrix applies its already well-established COTS product development cycle to each project undertaken. This software lifecycle borrows heavily from the eXtreme Programming (XP) and Rational Unified Process (RUP) methodologies.
Key aspects of our design and development process include:
We invest significant resources into the upfront design and architecture of each software project we undertake to ensure that all knowledge and anticipated 'use cases' are covered prior to starting implementation. This greatly reduces the risk of implementing software components that deviate from their intended use and requirements.
Our software is implemented in small and logical units (components/objects). We follow an iterative development approach, decomposing each macro task into sub-units of work that can be easily managed and quality assured.
A Peer Engineer reviews every unit of software to ensure that the code is of high quality and complies with coding standards (including documentation). Doxygen API documentation files are also created and reviewed as part of this process.
Unit tests are developed in conjunction with a component's business logic. This ensures that each new piece of functionality is tested as it is developed.
Unit testing is augmented with Quality Assurance (QA) analysis for memory, threading and performance as part of our standard Software Development lifecycle. We currently use a number of tools to monitor the quality of our software, including gdb, gcov, jcoverage, gprof, valgrind.
Our major products and projects, are integrated into an automated overnight build system that exercises and reports on all unit and QA tests. Build failures and test failures can therefore be detected and addressed immediately. This approach also reduces the costs associated with future enhancements and maintenance.
We use a revision control system during the development of each and every project. This ensures that every change is monitored and incremental baselines can be set.
Our engineers do not work in isolation and thrive on sharing implementation problems with other team members via brainstorming sessions.
All of these processes go towards ensuring that the end result is delivered on time without having to compromise on quality, functionality or end-product stability.