Raising Software Architecture. 9 Troubles and 3 Answers
Apr 21st, 2012 | Agile, Architecture, Design, Lean Startup, System
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?
Problems
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:
- Strategic
- Technical
- Evolutionary
1. Strategic Architecture
“Plans are nothing; planning is everything.” – Dwight D. Eisenhower
Question: What are direction, constraints and external factors?
How: dedicated architecture group moves ahead of the main development activities to align ideas for business, development, infrastructure and partners.
Attacks challenges
- Misalignment
- Inertia
Outcome
Strategic Architecture defines a system playing field:
- Vision: system goals, purpose and desired end-state
- Domain: business needs and problems to solve; describe models and processes
- Constraints: budget, time and resources; acceptable system qualities
- IT landscape: existing infrastructure, required integration with internal and partner systems; standards and API
- Coordination: release planning, deployment and all necessary steps to build and operate successful systems.
Approach
- Business Canvas – strategic tool for business models
- Domain Driven Design – implementation of core business concepts
- Enterprise Architecture – organizing logic for complex business and IT fields.
2. Technical Architecture
“Vision without execution is hallucination.” – Thomas A. Edison
Question: How to build a solid well-engineered system?
How: Developers predict (based on experience and preliminary information) possible challenges and future requests and implement architecture elements early (system layers, databases, security, caching) keeping system consistent and meeting required system qualities.
Attacks challenges
- Complexity
- Fragility
- Inconsistency
Outcome
Technical architecture proactively cares about building an excellent engineering solution:
- Technology: technical and development platforms
- Organization: well structured software system, where all elements fit together without excessive dependencies and side effects
- System Qualities: reliability, performance and other quality targets; protection against failures and security threats
- Integrity: consistency in developers heads, their approaches and system implementation
Approach
- Architecture patterns and principles: open-closed, single responsibility, separation of concerns, dependency inversions, etc.
- QA; failure and performance testing
- Pair Programming, code reviews and threat assessment
3. Evolutionary Architecture
“In theory there is no difference between theory and practice. In practice there is.” – Yogi Berra
Question: How to find the most optimal design and adapt the system to unknown?
How: Architecture emerges as a result of iterative development and refining the system for the most important business needs and optimal design.
Attacks challenges
- Idealism
- Uncertainty
- Open problems
- Over-complication
Outcome
Evolutionary architecture grows a system by quickly adapting for new discoveries, changes and feedback
- Quick validation and refinement of ideas
- Optimal design – well-refactored system based on the best development practices and design principles
- Fast learning
Approach
- Agile practices: iterations, refactoring, continuous integration
- Start small with end-to-end simple, but working solution and grow based on learning what is needed and important
- Lean startup with ideas adaptation and validation
Selecting right Architecture Mix
The choice is not what kind of architecture is needed, but what is the right mix
Context / Approach | Strategic | Technical | Evolutionary |
Startup (new business, uncertainty) | Medium
|
Low
|
High
|
Growing business (expansion, new projects, existing expertise and infrastructure) | Medium
|
Medium
|
Medium
|
Technological frontier (technical complexity, open non-trivial problems, innovative solutions, rapid growth) | Low
|
High
|
Medium
|
Large business (many moving parts, maintenance, stability, bureaucracy) | High
|
High
|
Low
|
One cannot embrace the unembraceable and deeply focus on all architectural dimensions at the same time. However, you can tailor your approach to your current situation and most pressing challenges.
Right architecture mix will greatly increase chances of your system success!
Great article! Gave me some good food for thought as I work on getting my (new to me) product out of a less than perfect architecture situation.