In this article
- What Is a Software Architect?
- The Eight Expectations of a Software Architect
- 1. Domain Knowledge
- 2. Diverse Exposure and Experience
- 3. Making Architecture Decisions
- 4. Continuously Analyzing Architecture
- 5. Staying Current with the Latest Trends
- 6. Interpersonal Skills
- 7. Domain Knowledge (Business Alignment)
- 8. Understanding Architecture vs. Design
- The Two Laws of Software Architecture
- First Law
- Second Law
- Technical Depth vs. Technical Breadth
- Architectural Characteristics (Non-Functional Requirements)
- Why These Matter for Architecture
- There Are No Wrong Answers — Only Expensive Ones
- Putting It All Together
- 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
- Understand the business domain before proposing solutions
- Think in trade-offs, not in "right vs wrong"
- Document the why, not just the what and how
- Stay broad — depth is for the team, breadth is for the architect
- Keep learning — architecture is a continuously evolving discipline
- Communicate and lead — technical excellence without people skills has limited reach
- 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