The two qualities of great software architecture
Great software architecture solves a present business need and is easy to change when business needs change. Software architects have developed a number of heuristics: patterns and principles that help to achieve these goals. A software engineer that applies but does not fully understand these heuristics may implement them in situations that run counter to the goal. To write great software, it's important to understand how each pattern and principle contributes to the goal. Entire books have been written on most of these subjects. This is intended to be a brief overview, not an exhaustive list or explanation.
Solving a present business need
- User experience
- Product Market Fit
- Reliability (Uptime/error rate)
Ease of Change
The SOLID principles, as laid out in Clean Code, are the most fundamental principles. These should be required reading for every software engineer. The purpose of all of these principles is to make the software easier to change. The book's description summarizes this well:
Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way.
DRY (Don't Repeat Yourself)
YAGNI (You Aren't Gonna Need It)
Easy to delete
Fast, good, cheap - pick two
The better adapted you are, the less adaptable you tend to be. - Gerald M. Weinberg