These are some tips and tricks I could gather (and continuing to gather) for creating good software architecture.
- Always look for achieving software quality attributes: extensibility, maintainability, agility, performance, scalability, standards based and feasibility.
- The architecture should be feasible enough to get implemented within the time and budget. Worlds best architectures are not the perfect ones, but the feasible ones.
- The architecture should be properly documented.
- The architecture should be able to adapt as required. Changes should be less expensive.
- Understand the problem first and create a solution for that problem. There is no single architecture that can solve every problem.
- Architecture is just the snapshot of the process and may be refined. It may not be possible to create an architecture upfront that can solve all your problems at once.
- Architecture is coupled to everything else, for instance a processes within the team/organization such as continuous delivery can affect your architecture decisions. It is just not the technical solution to a problem.
- Choice of technology (or actual implementation of a pattern) should never drive an architecture decision. Deciding on a particular technology is not an architecture decision, but deciding on a type or pattern is an architectural decision. An architect may however need to take a decision on a technology as well, based on the type or pattern.