Software Architecture

What Is a Software Architect?

In this article
  1. What Is a Software Architect?
  2. The Eight Expectations of a Software Architect
  3. 1. Domain Knowledge
  4. 2. Diverse Exposure and Experience
  5. 3. Making Architecture Decisions
  6. 4. Continuously Analyzing Architecture
  7. 5. Staying Current with the Latest Trends
  8. 6. Interpersonal Skills
  9. 7. Domain Knowledge (Business Alignment)
  10. 8. Understanding Architecture vs. Design
  11. The Two Laws of Software Architecture
  12. First Law
  13. Second Law
  14. Technical Depth vs. Technical Breadth
  15. Architectural Characteristics (Non-Functional Requirements)
  16. Why These Matter for Architecture
  17. There Are No Wrong Answers — Only Expensive Ones
  18. Putting It All Together
  19. The Architect's Mindset

Based on key excerpts from "Fundamentos da Arquitetura de Software: Uma Abordagem de Engenharia" by Mark Richards & Neal Ford (O'Reilly).


What Is a Software Architect?

Being a software architect is not just about knowing the right technologies. It is about a combination of technical mastery, business understanding, decision-making, and human skills — all working together.

The book defines eight core expectations for a software architect:

mindmap
  root((Software Architect))
    Technical
      Make architecture decisions
      Continuously analyze architecture
      Stay current with trends
      Diverse exposure and experience
    Business
      Domain knowledge
    Leadership
      Interpersonal skills
        Teamwork
        Facilitation
        Leadership
    Design
      Architecture vs Design distinction

Let's explore each expectation in depth.


The Eight Expectations of a Software Architect

1. Domain Knowledge

"A software architect must have a certain level of expertise in the business domain."

You cannot design a great system for a domain you do not understand. A healthcare platform needs an architect who understands compliance, privacy, and clinical workflows. A fintech product needs one who understands transactions, fraud, and regulatory constraints.

Practical takeaway: Invest time with product managers, domain experts, and end users. The more you understand why the business works the way it does, the better your architectural decisions will be.


2. Diverse Exposure and Experience

"An architect must expose themselves to multiple and diverse technologies, frameworks, platforms, and environments."

Breadth of exposure builds the judgment to know which tool fits which problem. An architect who has only ever used one database engine, one cloud provider, or one programming paradigm will make narrow decisions.

Practical takeaway: Deliberately work outside your comfort zone. Try a functional language if you come from OOP. Explore NoSQL if you only know relational databases. Breadth compounds over time.


3. Making Architecture Decisions

"An architect must establish the architectural decisions and design principles used to guide technology decisions within the team, department, or across the entire company."

This is one of the most critical roles. Architecture decisions are not implementation details — they are the constraints and principles that shape everything the team builds. Choosing a message broker over direct HTTP calls, or an event-driven model over request-response, are architectural decisions.

Practical takeaway: Document decisions as Architecture Decision Records (ADRs). Capture what was decided, why it was chosen, and what alternatives were rejected.


4. Continuously Analyzing Architecture

"An architect must continuously analyze the current architecture and technology environment, then recommend improvement solutions. This expectation refers to architecture vitality."

Architecture is not a one-time deliverable. It is a living system that must be evaluated continuously. What was a good decision two years ago may be a liability today — new scale requirements, new team size, new regulatory constraints.

flowchart LR
    A[Observe Current Architecture] --> B[Identify Pain Points]
    B --> C[Evaluate Alternatives]
    C --> D[Recommend Improvements]
    D --> E[Implement & Measure]
    E --> A

Practical takeaway: Build architecture review sessions into your engineering calendar. Use fitness functions — automated tests for architectural properties — to continuously verify the system stays aligned with its design intent.


5. Staying Current with the Latest Trends

"An architect must stay current with the latest technology and industry trends."

The technology landscape shifts fast. Cloud-native patterns, AI integrations, new database paradigms, and evolving security threats all change the playing field. An architect who stopped learning five years ago is navigating with an outdated map.

Practical takeaway: Follow industry newsletters, read release notes for your key dependencies, attend conferences, and engage in technical communities. Even 30 minutes a week compounds significantly over a year.


6. Interpersonal Skills

"An architect must have exceptional interpersonal skills, including teamwork, facilitation, and leadership."

This is the expectation most often underestimated. Architecture decisions are not made in isolation — they are negotiated, communicated, and implemented by teams. An architect who cannot communicate well, facilitate difficult conversations, or inspire trust will have little real influence regardless of technical depth.

Practical takeaway: Practice presenting trade-offs clearly to non-technical stakeholders. Learn facilitation techniques for design sessions. Influence through reasoning, not authority.


7. Domain Knowledge (Business Alignment)

Already covered above — the overlap is intentional. The book emphasizes this twice because it is that important. Technical decisions divorced from business context create expensive misalignments.


8. Understanding Architecture vs. Design

"Thinking like an architect means knowing the difference between architecture and design, seeing how both integrate to form solutions for business and technical problems."

This is one of the most misunderstood distinctions in the field.

flowchart TB
    subgraph Architecture["🏛 Architecture (Architect)"]
        A1[Technology choices]
        A2[Architectural patterns]
        A3[Cross-cutting concerns]
        A4[Non-functional requirements]
    end

    subgraph Design["🎨 Design (Developer)"]
        D1[Class structure]
        D2[Design patterns]
        D3[Function decomposition]
        D4[Module interfaces]
    end

    Architecture -->|guides and constrains| Design
    Design -->|informs and feeds back| Architecture
  • Architecture defines the structure, technology choices, and constraints that bound the solution space.
  • Design happens within those bounds — it is how developers solve specific problems within the architecture.

Neither can be done well without the other. A good architect understands design deeply. A good senior developer thinks architecturally.


The Two Laws of Software Architecture

First Law

"Everything in software architecture is a trade-off."

Every architectural decision gives you something and costs you something. Microservices give you independent deployability but add operational complexity. Event-driven systems decouple producers from consumers but make debugging harder.

Second Law

"The why is more important than the how."

This is the most underrated insight in the book. Understanding why a decision was made is what allows you to revisit it intelligently when circumstances change. "We chose this message queue because our write load spikes unpredictably and we needed back-pressure" is infinitely more valuable than just knowing which technology was chosen.

flowchart LR
    HOW["How\n(implementation)"] --> WHAT["What\n(the decision)"]
    WHY["Why\n(the reasoning)"] --> WHAT
    WHY -->|"more durable"| FUTURE["Future Decisions"]
    HOW -->|"becomes stale"| OUTDATED["Outdated docs"]

Practical takeaway: When documenting any architectural decision, lead with the why. Future maintainers (including your future self) will thank you.


Technical Depth vs. Technical Breadth

One of the most important mindset shifts for someone moving from developer to architect is the rebalancing of depth and breadth.

"What someone knows is technical depth and how much someone knows is technical breadth. As an architect, breadth is more important than depth."

xychart-beta
    title "Knowledge Profile Shift"
    x-axis ["Domain A", "Domain B", "Domain C", "Domain D", "Domain E"]
    y-axis "Depth" 0 --> 10
    bar [9, 7, 2, 1, 1]
    line [5, 5, 5, 5, 5]
Profile Description Best For
Deep specialist Knows one area very well Senior developer, staff engineer
T-shaped Deep in one area, broad exposure Tech lead
Broad generalist Wide but shallow across many domains Architect

This does not mean architects should be shallow — it means the investment ratio shifts. A developer optimizes for depth in their primary stack. An architect optimizes for enough breadth to make informed decisions across the full system landscape.


Architectural Characteristics (Non-Functional Requirements)

Architecture is not only about features. It is about how the system behaves under real-world conditions. The book groups these as operational characteristics:

mindmap
  root((Operational Characteristics))
    Performance
      Stress testing
      Peak analysis
      Response times
      Capacity planning
    Recoverability
      Business continuity
      Backup strategy
      Disaster recovery time
    Reliability / Security
      Fail-safe design
      Mission-critical impact
      Financial consequences of failure
    Robustness
      Error handling
      Internet outages
      Power failure
      Hardware failure
    Scalability
      User growth
      Request volume increase
      Horizontal vs vertical scaling

Why These Matter for Architecture

Each characteristic has real architectural implications:

Characteristic Architectural implication
Performance Caching layers, CDN, database indexing, async processing
Recoverability Multi-region deployment, automated backups, failover strategies
Reliability Circuit breakers, retry logic, idempotency, health checks
Robustness Graceful degradation, queue-based decoupling, timeout policies
Scalability Stateless services, horizontal scaling, load balancing

Practical takeaway: Before designing any system, explicitly list and prioritize these characteristics. A system optimized for scalability may require different patterns than one optimized for robustness or recoverability.


There Are No Wrong Answers — Only Expensive Ones

"There are no wrong answers in architecture, only expensive ones."

This is perhaps the most liberating — and sobering — insight in the book.

  • There is no universally correct architecture.
  • Every architecture makes trade-offs.
  • The goal is not to find the "right" answer but to make informed decisions whose trade-offs you understand and can accept.

The expensive answers come from:

  • Choosing based on familiarity rather than fit
  • Not understanding the trade-offs until they become production incidents
  • Making decisions without documenting the why, so they cannot be intelligently revisited
flowchart TD
    PROBLEM[Business Problem] --> OPTIONS[Identify 2-3 Architectural Options]
    OPTIONS --> TRADEOFFS[Analyze Trade-offs per Option]
    TRADEOFFS --> CONSTRAINTS[Apply Business Constraints]
    CONSTRAINTS --> DECISION[Make Informed Decision]
    DECISION --> DOCUMENT[Document: What + Why + Rejected Alternatives]
    DOCUMENT --> REVIEW[Schedule Future Review]

Putting It All Together

A software architect operates at the intersection of people, technology, and business. The technical depth is the foundation, but it is the breadth of knowledge, the clarity of reasoning, and the quality of decisions that define great architecture.

The Architect's Mindset

  1. Understand the business domain before proposing solutions
  2. Think in trade-offs, not in "right vs wrong"
  3. Document the why, not just the what and how
  4. Stay broad — depth is for the team, breadth is for the architect
  5. Keep learning — architecture is a continuously evolving discipline
  6. Communicate and lead — technical excellence without people skills has limited reach
  7. Treat architecture as living — review it continuously, not just at greenfield start

"The why is more important than the how." — Second Law of Software Architecture, Richards & Ford