Fundamentals of Software Architecture

Last updated:


Software Architecture

Software Architects

Responsibilities

Comparison with a Developer

Katas

Architecture Characteristics

Criteria

Explicit and Implicit Characteristics

Common Characteristics

Architectural Quantum

Governance via Fitness Functions

Cyclomatic Complexity

Cohesion

Types

Metrics

Connascence

Types

Metrics

Architecture

Modules

Components

Techniques

Entity (Trap)

Actor/Action

Event Storming

Workflow

Recommended Process

  1. Identify initial components.
  2. Divide the functional requirements (or user stories) and assign them to each component.
  3. For each component:
    1. Establish characteristics from business concerns.
    2. Restructure the components.
  4. When the restructuring is no longer required:
    1. Prioritize the most important characteristics.
    2. Measure the top characteristics by setting fitness functions.

Architecture Styles

Big Ball of Mud

Layered

Pipeline

Microkernel

Service-Based

Event-Driven

Space-Based

Orchestration-Driven Service-Oriented

Microservices

Soft Skills

Making Decisions

Anti-patterns

Architecture Decision Records

Assessing Risks

Risk Storming

  1. Gather a bunch of professionals (developers, architects, etc.) from the core team.
  2. Identify the areas of risks for each pair component-characteristic.
  3. Establish consensus between participants.
  4. Mitigate the risks by applying enhancements to the most risky characteristics of components.

Diagramming

Leading Teams

Architect Personalities

  1. Control freak: Tries to control each aspect of the development. Imposes too tight boundaries, which cause frustration.
  2. Armchair: Is not interested in the development process at all. It has loose boundaries, which can create confusion.
  3. Effective: Can establish appropriate boundaries.

Dosing the Control

For each aspect below, add or subtract 20 from a baseline 0.

Team Risks

Using Checklists

Examples of checklists that can be offered to the development team are:

Leadership

Developing Thyself

Others

Fallacies of Distributed Architectures

Replicated versus Distributed Cache

Patterns

Anti-patterns

Mental Models

Quotes

"Never shoot for the best architecture, but rather the least worst architecture."

"There are not right or wrong answers in architecture—only trade-offs."

"It depends."

"Business stakeholders will appreciate visionary solutions that fit within a set of constraints, and developers will appreciate having a practical (rather then theoretical) solution to implement."


References