Software Creation Mystery - https://softwarecreation.org

Raising Software Architecture. 9 Troubles and 3 Answers

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:

  1. Heavy upfront system design leads to rigid, costly and over-engineered solutions
  2. Ignored business and technical perspectives cause business irrelevance or failure
  3. 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.

  1. Idealism (assumed known knowns) – mostly theoretical views, lack of practical experience, illusions. We often exaggerate our intellectual abilities to find right solution theoretically.
  2. Open problems (known unknowns) – problems or needs without foreseeable solution. These evil inconvenient unknowns could seriously impact the course of the project
  3. Uncertainty (unknown unknowns) – low predictability of the future in technology, business and Universe. Many good decisions could turn to be wrong after some time.
  4. Over-complicationover-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.
  5. Fragility – poor system quality (performance, reliability, uptime, security, etc.). Neglecting quality could cost reputation and harm system success.
  6. Complexity – complex structures, unpredictable behavior and states that turn a system into the Ball of Mud.
  7. 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.
  8. Inertia– difficulties to introduce disruptive changes (for business, users, operations). People and established processes resist changes and have inertia that is difficult to overcome.
  9. 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:

  1. Strategic
  2. Technical
  3. 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

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

  • Fit for business and potential customers
Low

  • Cover most basic needs and demands
  • Avoid large effort that is expensive and premature – everything could change
High

  • Grow the system incrementally
  • Explore, experiment, validate and learn
Growing business (expansion, new projects, existing expertise and infrastructure) Medium

  • Integration with existing systems and projects
  • Adjust to business needs and customers
Medium

  • Support demands and system quality expectations
  • Provide integrity of a solution and adequate system design for increasing complexity
Medium

  • Reduce uncertainty, solve emerging problems
  • Refine and optimize growing system
Technological frontier (technical complexity, open non-trivial problems, innovative solutions, rapid growth) Low

  • Potential markets and possible business models are not clear
  • The team is focusing more on technical problems
High

  • Engineering excellence
  • Embracing complexity, technical challenges and constraints
Medium

  • Adapting to changing demands and discoveries
  • Learning and experimenting
Large business (many moving parts, maintenance, stability, bureaucracy) High

  • Alignment with complex existing landscapes: IT, organizational, political and business
High

  • Organize large teams to implement for known domains
  • Integrate to existing infrastructure and systems
  • Stabilize, support SLA and standards
Low

  • High predictability is more important
  • There are enough resources to tolerate inefficiency and inhibited adaptation

 

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!

 

AddThis Social Bookmark Button AddThis Feed Button


Comments

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.

Comment by Nils Davis | March 27, 2013 7:43 pm

This blog have little value without you and your comments, thoughts and discussions. Please, leave your comments. You are welcome to debate and criticize any idea, but, please, don't attack other people. Thanks for your contribution!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Subscribe without commenting

Software Creation Mystery - https://softwarecreation.org
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License .