From time to time most developers and architects have had to work with an inherited solution and it’s codebase.  This can be a less than pleasant experience for a number of reasons whether it’s an old technology, an old programming language or just bad design or implementation. You cannot help technology moving forward but you can help bad architecture or coding.

Architecture is not black and white; there is no ‘right way’. As they say it is both art and science. That said there are a number of guiding principles that most Architects worth their salt will use, perhaps subconsciously, when designing solutions (Microsoft has a good primer on the topic here ). Whilst the benefits of understanding and using these principles is generally realised straight away and enjoyed throughout a solutions lifetime the problems associated with not using them can often not raise their heads for some time.

Now a developer is ultimately responsible for the code they write and bad developers can compromise the best architected solutions but conversely the best developers cannot save a poorly architected solution. Both of these scenarios are common enough to have a website dedicated to highlighting the most amusing. Unfortunately however when these problems to come to light the consequences can be drastic, costing time and money and in severe circumstances can render a codebase unsalvageable.

How easy a solution is to support and maintain and how well a solution holds up to change (or perhaps more appropriately how well it embraces change) are true tests of good architecture. This is ultimately what you are faced with when inheriting code. Large numbers of bugs, complicated deployments or disorganised code bases can often be symptoms of more systemic problems that can often not be fixed. This is the legacy that bad architecture creates.

It does not need to happen. Architecture that is robust and pragmatic combined with good software engineering will create applications that meet the needs of the business now and embrace change in the future.