Flexible, Predictable, Scalable
Twelve years of experience developing large and small applications has taught us to build flexible, predictable and scalable software solutions.
Flexible systems are made up of small, well defined components. Working closely with project stake holders, we identify and prioritize the features required by the user. Then we model the application as a composition of small, well defined components. The separation and segregation of responsibilities that results leads to flexible applications that evolve easily as requirements evolve.
Predictable systems are the result of thoroughly tested and well designed components. Test Driven Development methods call for the development of unit tests prior to the development of components. These methods allow development to evolve predictably, even when requirements change. With banks of tests in place, the consequences of changes are immediately apparent. With a concrete list of problems to address, developers can resolve them systematically. Additionally, tests give us the confidence to re-factor our components to insure that the application remains well designed and modular with a clean separation of concerns.
Scalable software has traditionally been made of components that can be grouped into layers and then distributed across more and more servers as needed. This is yet another reason, beyond insuring flexibility and predictability, to use components as the basis for application design. However, new multicore processors are shifting the focus of scalability practices. New applications must now also consider distributing workload at the processor and thread level as well as at the component and layer level. As better tools and practices evolve in this new area of software development, we will continue to evaluate and incorporate what works best for our clients. That said, good application design will continue to be the key to developing applications that scale well.