- Everything in software architecture is a trade-off.
- Why is more important than how.
- The best decision is context-dependent.
- Simplicity is the ultimate sophistication.
- Favor composition over inheritance.
- Design for change.
- Separation of concerns is key.
- Don’t optimize prematurely.
- Code is easier to change than architecture.
- Naming things matters.
- You can't have it all—prioritize.
- Understand the domain deeply.
- Be technology-agnostic.
- Make implicit decisions explicit.
- Validate assumptions continuously.
- Architect for failure.
- Avoid overengineering.
- Consistency beats cleverness.
- Feedback loops improve design.
- Communicate decisions clearly.