software architecture = a set of rules, guidelines, interfaces, and conventions used to define how components and applications communicate and interoperate with eachother ...

see patterns