System design

It may seem a truism to state that good systems should be designed, rather than merely assembled, but is all too easy to identify applications with fundamental flaws in their implementation, which lead to a poor user experience, inflexibility, and in the worst cases unpredictable or unreliable performance.

One of the advantages of developing bespoke solutions is that an application can be tailored to meet the specific needs of the target users, rather than some generic user base whose actual requirements differ widely. But there is an issue about design that goes much deeper than this. Certain business practices are common to most organisations, and similarly the requirements of a piece of software often lead to commonly encountered functionality. Recognising these design patterns, and applying the experiences of previous implementations, enables us to define flexible frameworks for application construction. Modern Object-Oriented approaches to design, especially within a development environment such as Microsoft .Net, allow us to create many generic base components that can easily be re-deployed and enhanced for each new application, thus gaining both in the efficiency of the design and coding processes, as well as in the robustness of the final solution.