The main architecture goal is to strengthen and align system ideas, muscles and structures in areas most impacted by stress, changes and expansion.
In short, architecture covers every important aspect of the software system.
A good thoughtful software developer is torn apart by conflicting approaches for architecting complex software system:
- Heavy upfront system design leads to rigid, costly and over-engineered solutions
- Ignored business and technical perspectives cause business irrelevance or failure
- Poor reliability, performance or flaws could kill promising beautiful software system
What is the best approach to build a sound and successful system?
Let’s consider several architecture challenges that a software team faces during system development.
- Idealism (assumed known knowns) – mostly theoretical views, lack of practical experience, illusions. We often exaggerate our intellectual abilities to find right solution theoretically.
- Open problems (known unknowns) – problems or needs without foreseeable solution. These evil inconvenient unknowns could seriously impact the course of the project
- Uncertainty (unknown unknowns) – low predictability of the future in technology, business and Universe. Many good decisions could turn to be wrong after some time.
- Over-complication – over-engineering for domain problems because of over-thinking, misunderstanding, lack of information or technical enthusiasm. Over-complication steals development time and increase cost and complexity.
- Fragility – poor system quality (performance, reliability, uptime, security, etc.). Neglecting quality could cost reputation and harm system success.
- Complexity – complex structures, unpredictable behavior and states that turn a system into the Ball of Mud.
- Inconsistency – dissonance of the system approaches and parts; fragmented and incomplete knowledge in heads. Development teams produce incoherent system without coordination of ideas and implementation.
- Inertia– difficulties to introduce disruptive changes (for business, users, operations). People and established processes resist changes and have inertia that is difficult to overcome.
- Misalignment – with business goals, existing systems, infrastructure. Building a software system without considering business vision, existing IT landscape is the path to disaster.
Three Architecture Answers
There are 3 useful approaches to Software Architecture that address these challenges: