# Solutions Architect Handbook # Software Architecture basics Software architecture main requirements: - User requirements - Business requirements - IT System requirements Software architecture key principles: - minimize complexity - separation of concerns - single responsibility principle - principle of least knowledge - don't repeat yourself - minimize upfront design General guidelines: - no duplicate functionality - consistent patterns in your layers - composition over inheritance - use code conventions Layer guidelines - separate areas of concern - clearly define communication between layers - use abstraction to loosely couple layers - don't mix different types of components in a layer - use consistent data formatting within layers Component guidelines - No component should rely on the internals of another - Do not mix roles in a single components - Define clear contracts for components - Abstract system wide components away from other layers