Architecture encompasses not just the relationships that exist between individual classes, modules, components or systems but also the choice of languages, frameworks, servers or databases and the overall structuring of the development effort (environment setup (development, test, integration and production), source code control, dependency management, continuous integration and deployment). By working with you, we can help to define the architecture of a new system or define how an existing system needs to change.

When modifications are made to an existing system or a new system which is under development they come with an associated risk, so one of the areas that we focus on is making sure we have a strategy in place which identifies and then mitigates the risks of any changes. Fundamentally, this means that we need to have a version control system, a bug / incident / task management system, automated unit, integration, functional and performance testing, at least one continuous integration server and a clear and well defined development / release schedule.

We are firm believers in the use of patterns to help us describe and structure, on a number of different levels, the systems that we work with. Patterns allow us to apply common solutions to common problems as well as providing a standard vocabulary with which we can communicate about the design of the systems that we develop. That is not to say that we blindly apply the patterns and try to make every solution fit a given pattern, instead we use the patterns to help us to come up with new or refactor existing solutions and then evaluate their strengths and weaknesses. Often the process of thinking about a problem in terms of a pattern or patterns, that you later decide not to use, enables the development and subsequent refinement of a more effective bespoke solution.

We can help you to choose the right set of tools for the job, whatever stage of the development process your projects are at, as we know from experience what to take into account when deciding what the right tools are for a given set of requirements. We are also adept at helping you and your teams to adapt to the tools that we choose or to adapt those tools to your existing processes in order to get the most out of them and yourselves. In general, the former is rather less painful than the later but since each case is different by working together you can benefit from our judgement and experience to find a happy medium that works for everyone.