System Design Fundamentals

This is a large topic with many tomes written regarding various design patterns and processes. This BLOG is instead an overview of the inputs and approach that determine how you take a set of requirements in the form of acceptance criteria in a logical design and convert it into specifications for physical components. The key part of this process is to first have the logical design components. I have seen far too many failed projects simply because they failed to complete this step in the process.

One of the most important parts of this process is the technical architect and you really do need to trust them as if they get this wrong then the project will fail. However for them to do their jobs with any kind of efficiency there needs to be a decent set of logical design components provided to them in the first place. The most expensive failures are often due to a failure of the business analysts to elicit and design workable requirements with the business leaving the technical team the job of attempting to interpret high-level requirements into configuration management items in a single step. It is much easier if the architect only needs to have responsibility for taking requirements that work well on paper and converting them into a system design that can then be built.

The technical architect is aided in this work by a design strategy/technical architecture document. This is used to enshrine the design principles that have been adopted and agreed by the project and the chosen design patterns that the technical architect has adopted for the solution. There are also design decisions that must be made whenever a new logical component type has been identified as to how the project will implement the new component type. These are then added to the document for next time. Using this approach it is then a simple case of mapping from the logical design components and the changes specified to these components through the course of the project to the specification of the configuration management items that will deliver the functionality incorporated in the logical design components. E.G. the definition of a form in the logical design may map into the RAZOR view that delivers the form in a .Net MVC CORE application.