> Let’s talk about some of the fundamental software design principles, which are typically applied behind the scenes by designers. > > [[https://en.wikipedia.org/wiki/Software_architecture | Software architecture]] represents the result of a sequence of design decisions which take place over time as long as software system complexity increases. > > For the sake of clarity, let’s define an architecture as a collection of [[https://en.wikipedia.org/wiki/Component-based_software_engineering#Definition_and_characteristics_of_components | components]] combined together via connectors, which represent constraints on how components interact.