One last ingredient to defining architectures and their requirements is the use of good principles in the definition and implementation of the architecture. Items to be considered include:
• Reuse – don’t duplicate functionality where possible
• Keep it simple – don’t build/buy things you don’t need or won’t use
• Protect integrity – isolate functions and prevent processes from interfering with others, provide boundaries in the functionality
• Shield complexity through encapsulation – don’t expose functionality, provide interfaces based upon loose coupling
• Be cohesive – group related functions for maintainability
• Use layering – especially the separation of data, business function and (user) interface
Many of these principles are built into the core systems and frameworks we use, but it’s good to keep them in mind, especially when combining components from different sources.