There is a bit of debate surrounding the distinctions between software architecture vs design, or architectural pattern vs design patterns. These distinctions, at least to me over the years, have caused more confusion than they solved. In essence, these distinctions are contrived in most explanations that I have come across. There is no single definition of these terms or an agreement on their usage, and much seems to depend on the context of their application. My definition of Architecture or Design is more wholistic — or at least that I would like to believe, and abstract. I am fairly okay with this ambiguity and I think it is necessary in this case. The boundaries and categories we use to classify various artifacts don’t need to be clean and crisp and clearly delineated, and just because they are not, does not mean they are not viable for the purpose of system engineering.
Software Architecture or Design is about figuring out the placement of a software artifact within the larger context of a System Engineering, based on requirement it is meant to fulfill.
The artifact can be a component such as Zipkin, Kafka, or a module in your python application, or package in Golang or Java. Similarly, expanding on this definition, Architectural or Design patterns are about enumeration, classification, and categorization of the appropriateness of the usage of these artifacts within some larger context. The hardest part for any new developers is figuring out the application of these patterns, within their context, not with the definitions in the wild. My discussion with most developers that, I had the opportunity to mentor, revolves around emphasizing these points.
There is a list of requirements that are intrinsic to good architecture, and of these include extensibility, reliability, fault tolerance, etc. Your application of the set of these requirements would differ from project to project and your business needs, and time that you have at hand. Good architecture is about drawing balance between the business need and application of these non-functional requirements.
I am sick for the past few days trying to recover from the bug that I acquired from my kids (Although my symptoms seem to be very similar to COVID-19 descriptions online, I am hopeful it is not COVID-19, of course pending any further diagnosis) and stress. I thought I should work on a few unfinished blog posts since I can’t seem to concentrate on anything.