Software architecture is reputed to be a complex matter. Many failures in software projects are admittedly due to poor architecture (which in turn occurs for a variety of reasons). This is because it is a relatively abstract aspect of software development and very much depends on the specific software under development.
In a software project, many situations can arise, maybe integrating with existing software, maybe geographically distributed systems, maybe high performance requirements and etc. In most cases it will be a combination of one or all of these.
The entire software development process attempts to address this situation, particularly in the analysis and design phases.
Here is an overview of a few of the most valuable best practices in this area (some of which are developed in more detailed KCards):
The 4 generic axis
- Technical and functional architecture (projection)
- Abstraction level reduction
- Dependency minimisation