Notes on the first chapter of Design It: what software architects do, what software architecture is, and why it helps build amazing software.
What Software Architects Do
A unique position at the intersection of Business, Tech and Users. They do a lot and are the centre of everything.
- Define the problem - State it in a human centred way all stakeholders understand, with the engineering perspective in mind.
- Partition the system and assign responsibilities - Break it into small solvable pieces that are easy to reason about, test, build and manage, with a strategy to weave them back into a harmonious whole.
- Keep an eye on the bigger picture - Software lives in the context of a whole system: people, process, business, and many tech and non-tech factors. Decide with that whole in view, not just the local neighbourhood.
- Decide trade-offs among quality attributes - Systems are never perfect; compromises are made with the team and stakeholders.
- Manage technical debt - Debt is the gap between the current design and the design required to deliver value, estimated by the effort to close it. Architects know the whole system and every decision taken, so they must manage it, pay it down regularly, and keep it visible to stakeholders.
- Grow the team's architecture skills - Educate the team on the architecture and the decisions behind it.
What Is Software Architecture
The set of significant design decisions that promote certain quality attributes and properties. They influence everyone and are very difficult or costly to change later.
Essential structures - Elements are the fundamental blocks of software; they make up structures and have relations.
| Structure | Examples | Exists |
|---|---|---|
| Module | class, package, layer, stored procedure, config file, database table | At design time, when writing code |
| Component & Connector | object, connection, thread, process, tier, filter | At runtime, can connect to other components |
| Allocation | server, sensor, laptop, load balancer, docker container | In the physical world, maps and connects all structures |
Module and Component are used interchangeably, but semantically they must be kept separate.
Quality attributes - Any externally visible characteristic by which stakeholders judge the system's goodness. Choosing an architecture is choosing which to promote. A calculator adds 2 numbers, but it can also be fast, reliable, scalable, available, extensible, testable, maintainable.
Build Amazing Software
- Turn big problems into smaller manageable problems
- Define or show how people work together
- Provides vocabulary for talking about complex ideas
- Looks beyond features and functionality
- Helps to avoid costly mistakes