You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: patterns/architect-for-flow.md
+47-46Lines changed: 47 additions & 46 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,10 +7,10 @@
7
7
-[Core concepts and how they fit together](#core-concepts-and-how-they-fit-together)
8
8
-[Independent value streams (Lean Thinking)](#independent-value-streams-lean-thinking)
9
9
-[Stream-aligned teams (Team Topologies)](#stream-aligned-teams-team-topologies)
10
-
-[Services, products, and ownership](#services-products-and-ownership)
11
-
-[Bounded contexts and domain alignment](#bounded-contexts-and-domain-alignment)
12
-
-[Fast flow through small batches](#fast-flow-through-small-batches)
13
-
-[Co-creation, codesign, and coevolution](#co-creation-codesign-and-coevolution)
10
+
-[Services, products, and ownership (Socio-technical alignment)](#services-products-and-ownership-socio-technical-alignment)
11
+
-[Bounded contexts and domain alignment (Domain-Driven Design)](#bounded-contexts-and-domain-alignment-domain-driven-design)
12
+
-[Fast flow through small batches (Continuous Delivery / Accelerate)](#fast-flow-through-small-batches-continuous-delivery--accelerate)
13
+
-[Co-creation, co-design, and co-evolution](#co-creation-co-design-and-co-evolution)
14
14
-[Benefits](#benefits)
15
15
-[Out of scope](#out-of-scope)
16
16
-[Practical guidance](#practical-guidance)
@@ -40,27 +40,27 @@ Architecting for flow means intentionally shaping systems around:
40
40
- Clear bounded contexts
41
41
- Loosely coupled services and products
42
42
43
-
The primary goal is not technology elegance, reuse, or theoretical purity. The goal is fast flow, which is the ability for teams to deliver small, incremental changes frequently, with confidence.
43
+
The primary goal is not technical elegance, reuse, or theoretical purity. The goal is fast flow, the ability for teams to deliver small, incremental changes frequently, with confidence.
44
44
45
-
This requires aligning business domains, team ownership, services/products, and architecture boundaries so that:
45
+
This requires aligning business domains, team ownership, services and products, and architectural boundaries so that:
46
46
47
-
-teams can work independently
48
-
-changes are small and low-risk
49
-
-coordination and hand-offs are minimised
50
-
-learning happens early and often
47
+
-Teams can work independently
48
+
-Changes are small and lowrisk
49
+
-Co-ordination and hand-offs are minimised
50
+
-Learning happens early and often
51
51
52
-
This is a deliberate application of [Conway's Law](https://martinfowler.com/bliki/ConwaysLaw.html) which states that software architecture tends to mirror the communication and coordination structures of the organisation. By shaping team boundaries, ownership, and interfaces together, we make sure organisational design reinforces fast, independent flow instead of constraining it.
52
+
This is a deliberate application of [Conway's Law](https://martinfowler.com/bliki/ConwaysLaw.html), which states that software architecture tends to mirror the communication and co-ordination structures of the organisation. By shaping team boundaries, ownership, and interfaces together, we ensure organisational design reinforces fast, independent flow rather than constraining it.
53
53
54
54
## The mindset
55
55
56
-
Modern architecture recognises that software systems do not exist in isolation. Their behaviour, quality, speed of change, and reliability are shaped just as much by people, team structures, incentives, and ways of working as by code, infrastructure, or technologies.
56
+
Modern architecture recognises that software systems do not exist in isolation. Their behaviour, quality, speed of change, and reliability are shaped as much by people, team structures, incentives, and ways of working as by code, infrastructure, or technology.
57
57
58
-
Poorly shaped architectures create:
58
+
When architecture is not aligned with flow, it can lead to:
59
59
60
60
- Change coupling across teams
61
-
- Slow delivery and high coordination costs
61
+
- Slow delivery and high co-ordination costs
62
62
- Fragile systems and risky releases
63
-
-Unhappy, frustrated engineers and users
63
+
-Reduced satisfaction among engineers and users
64
64
65
65
Well-shaped architectures enable:
66
66
@@ -76,27 +76,27 @@ Architecting for flow is therefore a business optimisation strategy, not just an
76
76
77
77
### Independent value streams (Lean Thinking)
78
78
79
-
An **independent value stream** is the fundamental building block. Each value stream:
79
+
In Lean Thinking, a **value stream** is the end-to-end flow of activities required to deliver value to a specific user or customer outcome. In this pattern, an independent value stream is one where a team can make most day-to-day changes without needing co-ordinated work from many other teams. An independent value stream is the fundamental building block. Each value stream:
80
80
81
81
- Is aligned to a business subdomain
82
82
- Is owned by a single stream-aligned team
83
83
- Delivers business outcomes, not just features
84
84
- Can be developed and deployed independently
85
85
86
-
Architecture should make independence real, not just aspirational.
86
+
Architecture should help turn independence from aspiration into day-to-day reality.
87
87
88
88
### Stream-aligned teams (Team Topologies)
89
89
90
90
Each independent value stream is owned by a **stream-aligned team**. That team:
91
91
92
-
- Owns the product or service end-to-end
92
+
- Owns the product or service end to end
93
93
- Makes day-to-day product and technical decisions
94
94
- Builds, deploys, operates, and improves what they own
95
95
- Optimises for outcomes and flow, not hand-offs
96
96
97
-
Architecture should reduce the need for teams to coordinate in order to deliver change. In practice this means "reversing" [Conway's Law](https://www.agileanalytics.cloud/blog/team-topologies-the-reverse-conway-manoeuvre), which is intentionally designing teams, communication paths, and ownership boundaries so that the resulting architecture naturally supports fast, independent delivery.
97
+
Architecture should reduce the need for teams to co-ordinate in order to deliver change. In practice, this means "reversing" [Conway's Law](https://www.agileanalytics.cloud/blog/team-topologies-the-reverse-conway-manoeuvre), intentionally designing teams, communication paths, and ownership boundaries so that the resulting architecture naturally supports fast, independent delivery.
98
98
99
-
### Services, products, and ownership
99
+
### Services, products, and ownership (Socio-technical alignment)
100
100
101
101
Architecting for flow means aligning:
102
102
@@ -112,10 +112,10 @@ Teams should anchor this alignment on business outcomes rather than lists of fea
112
112
113
113
The outcome describes the change in behaviour or value you want to see, the feature is one possible intervention. Architecturally, ownership, data, and interfaces should be shaped so that stream-aligned teams can experiment with multiple features in pursuit of the same outcome.
114
114
115
-
A common smell is when:
115
+
A common sign of misalignment is when:
116
116
117
117
- Multiple teams must change their services together
118
-
- Features require cross-team coordination by default
118
+
- Features require cross-team co-ordination by default
119
119
- Teams share databases or internal implementation details
120
120
121
121
Instead:
@@ -124,21 +124,21 @@ Instead:
124
124
- Ownership boundaries should be obvious
125
125
- Dependencies should be explicit and intentional
126
126
127
-
Some domains are naturally cross-cutting, such as shared notification services, analytics, or identity. In a cancer screening context, a notification capability (for example NHS Notify) might send reminders across Bowel, Breast, and Cervical screening services. These cross-cutting capabilities are usually best owned by platform or enabling teams (at organisation scale, not just within a single digital area), exposed through clear APIs and contracts, and governed with explicit service level objectives (SLOs). Typical shared capabilities include messaging infrastructure, observability stacks, and identity/SSO services. Platform and enabling teams should optimise for the flow of the stream-aligned teams they support, not for their own internal roadmap, ensuring shared services make it easier (and faster) for value streams to deliver change.
127
+
Some domains are naturally cross-cutting, such as shared notification services, analytics, or identity. In a cancer screening context, a notification capability (for example, NHS Notify) might send reminders across Bowel, Breast, and Cervical screening services. These cross-cutting capabilities are usually best owned by platform or enabling teams (at organisational scale, not just within a single digital area), exposed through clear APIs and contracts, and governed with explicit service level objectives (SLOs). Typical shared capabilities include messaging infrastructure, observability stacks, and identity/SSO services. Platform and enabling teams should optimise for the flow of the stream-aligned teams they support, not for their own internal roadmaps, ensuring shared services make it easier (and faster) for value streams to deliver change.
128
128
129
-
### Bounded contexts and domain alignment
129
+
### Bounded contexts and domain alignment (Domain-Driven Design)
130
130
131
-
Clean **bounded contexts** are essential to flow. Key principles:
131
+
In Domain-Driven Design, a **bounded context**is a clear boundary within which a specific domain model, language, and set of rules apply consistently. Different bounded contexts can use different models and terms for the same real-world concept, as long as the seams and integration points between them are explicit and well-defined. Clear bounded contexts are essential to flow. Key principles include:
132
132
133
133
- Avoid shared databases across bounded contexts
134
134
- Encapsulate data, logic, and behaviour within each context
135
-
- Accept duplication where it reduces coupling and coordination
135
+
- Accept duplication where it reduces coupling and co-ordination
136
136
137
137
Bounded contexts reduce change coupling, allowing teams to move independently. Collaborative techniques such as [EventStorming](https://www.eventstorming.com/) are strongly encouraged to identify meaningful domain boundaries.
138
138
139
-
### Fast flow through small batches
139
+
### Fast flow through small batches (Continuous Delivery / Accelerate)
140
140
141
-
Flow improves when teams:
141
+
Continuous Delivery and the Accelerate research both show that teams achieve better outcomes when they work in **small, independently releasable batches** rather than large, infrequent changes. Small batches reduce risk, shorten feedback loops, and make it easier to understand, test, and recover from problems. Flow improves when teams:
Large, coordinated releases are a sign that flow is being constrained by architecture.
156
+
Large, co-ordinated releases often indicate that flow may be constrained by architectural or organisational choices.
156
157
157
-
## Co-creation, codesign, and coevolution
158
+
## Co-creation, co-design, and co-evolution
158
159
159
160
Architecting for flow is not a one-off design activity. It requires a **co-creation approach**, where:
160
161
161
162
- Engineers, product managers, domain experts, and users collaborate
162
163
- Architecture evolves incrementally
163
164
- Decisions are revisited as learning increases
164
165
165
-
Architecture should be **codesigned and coevolved** with the system:
166
+
Architecture should be **co-designed and co-evolved** with the system:
166
167
167
168
- Changes are made in small, safe steps
168
169
- Learning feeds back into design
169
170
- Teams continuously improve both the product and the architecture
170
171
171
-
This is a deliberate move away from big up-front designs.
172
+
This shifts emphasis from big up-front design towards more incremental, learning-driven design.
172
173
173
174
## Benefits
174
175
175
176
Systems architected for flow tend to deliver strong outcomes. Typical benefits include:
176
177
177
178
- Shorter lead times from idea to production and higher deployment frequency
178
-
- Reduced coordination overhead between teams, with fewer hand-offs to deliver change
179
+
- Reduced co-ordination overhead between teams, with fewer hand-offs to deliver change
179
180
- Improved reliability and faster incident recovery due to clearer ownership and boundaries
180
181
- Better morale and engagement, as teams have autonomy and a clear sense of purpose
181
182
182
183
Important caveats and trade-offs:
183
184
184
185
- Flow must not compromise quality, strong automation is essential (testing, security, deployment)
185
-
- More components ≠ better as over-fragmentation increases cognitive load and operational cost, small or simple systems may benefit from a well-structured modular monolith
186
-
- Distributed systems introduce complexity, network failures have to be factored in, versioning challenges become the norm, observability becomes mandatory
187
-
- Reuse is not the primary goal, build components for clear ownership and flow, reuse is a secondary benefit, not a justification
186
+
- More components ≠ better as over-fragmentation increases cognitive load and operational cost, and small or simple systems may benefit from a well-structured modular monolith
187
+
- Distributed systems introduce complexity, network failures must be factored in, versioning challenges become the norm, and observability becomes mandatory
188
+
- Reuse is a valuable outcome but not the primary goal here, components should first support clear ownership and flow, with reuse as a secondary benefit
188
189
189
190
There is usually a sweet spot between monoliths and over-distributed systems.
190
191
191
192
## Out of scope
192
193
193
-
This pattern is intentionally narrow in what it tries to solve. It does not optimise for maximum reuse across the entire organisation, nor does it address all cross-cutting concerns (for example security or regulatory compliance) on its own. Those concerns are covered by complementary principles and practices. Architecting for flow should be combined with them, not treated as a replacement.
194
+
This pattern is intentionally narrow in what it tries to solve. It does not optimise for maximum reuse across the organisation, nor does it address all cross-cutting concerns (for example, security or regulatory compliance) on its own. Those concerns are covered by complementary principles and practices. Architecting for flow should be combined with them, not treated as a replacement.
194
195
195
196
## Practical guidance
196
197
@@ -203,8 +204,8 @@ This pattern is intentionally narrow in what it tries to solve. It does not opti
203
204
204
205
### Practices
205
206
206
-
- Design services so a single team can change and deploy them independently
207
-
- Apply this pattern to existing systems as well as greenfield work, techniques like the [Strangler Fig](https://martinfowler.com/bliki/StranglerFigApplication.html) pattern can help evolve legacy systems safely
207
+
- Design services so that a single team can change and deploy them independently
208
+
- Apply this pattern to existing systems as well as greenfield work, techniques such as the [Strangler Fig](https://martinfowler.com/bliki/StranglerFigApplication.html) pattern can help evolve legacy systems safely
208
209
209
210
### How to measure flow
210
211
@@ -215,11 +216,11 @@ Flow is only useful if teams can see whether it is improving. Guidance on how to
215
216
When architecting for flow, some recurring anti-patterns make independent delivery much harder:
216
217
217
218
- Shared "integration" databases owned or written to by multiple teams
218
-
-"Platform" teams acting as gatekeepers for most changes
219
+
- Platform teams that sit on the critical path for most changes
219
220
- Services sliced primarily by technical layers (UI, API, DB) rather than by domain or value stream
220
-
- "API gateways" that accumulate significant domain logic and tight coupling between services
221
+
- "API gateways" that accumulate significant domain logic and create tight coupling between services
221
222
222
-
These are usually signs that Conway's Law is working against you, the architecture reflects centralised ownership and tightly coupled communication paths. Use them as prompts to realign teams, domains, and boundaries so value streams can move independently.
223
+
These patterns often suggest that organisational and architectural structures may be reinforcing centralised ownership and tight coupling. Use them as prompts to realign teams, domains, and boundaries so value streams can move independently.
0 commit comments