Team Topologies & Conway's Law Alignment
Align organizational structure with system architecture for autonomy and efficiency
TL;DR
Conway's Law states: "Systems reflect the communication structure of organizations that design them." Inversely, to design a desired system architecture, align organizational structure accordingly. Team topologies directly influence system coupling, autonomy, and quality. Match team ownership to bounded contexts and value streams for maximum effectiveness.
Learning Objectives
- Understand Conway's Law and its implications
- Design team structure to enable desired architecture
- Recognize misalignment between organization and architecture
- Choose appropriate team topologies for different systems
- Evolve team structure as architecture changes
Motivating Scenario
Scenario 1: Monolith with Poor Alignment
You have a monolithic application with three distinct subdomains: Catalog, Orders, and Payments. But your teams are organized by technology:
- Frontend Team (10 people)
- Backend Team (15 people)
- Database Team (5 people)
Result: Changes to Catalog touch frontend, backend, and database teams. Coordination is painful. Release cycles are long. People step on each other's toes.
Scenario 2: Aligned to Architecture
Reorganize into three teams:
- Catalog Team: Frontend, backend, database for catalog
- Orders Team: Frontend, backend, database for orders
- Payments Team: Backend, database for payments (no UI)
Result: Each team owns a subdomain. Changes are localized. Teams move fast independently. Coordination is minimal.
Core Concepts
Conway's Law
"Any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure."
Implication: If you want a decoupled, modular system, design decoupled, modular teams.
Team Topology
The structure of teams, their communication patterns, and responsibility boundaries.
Inverse Conway Maneuver
Design your desired system architecture first. Then organize teams to match. This ensures architecture and organization are aligned.
Common Team Topologies
Functional Teams (Technology-based):
- Frontend Team
- Backend Team
- DevOps Team
Pros: Deep expertise. Cons: Silos, coordination overhead.
Feature Teams (Product/capability-based):
- Shopping Feature Team
- Checkout Feature Team
- User Profile Feature Team
Pros: Autonomy, fast delivery. Cons: Duplicated skills.
Domain-Aligned Teams (Bounded context-based):
- Catalog Domain Team
- Orders Domain Team
- Payments Domain Team
Pros: Autonomy, clear ownership, matches DDD. Cons: Need cross-domain coordination.
Platform Team (Infrastructure, shared services):
- API Platform Team
- Data Infrastructure
- Observability
Pros: Enables other teams. Cons: Can become bottleneck if not scaled.
Practical Example
Transformation: From Functional to Domain-Aligned
BEFORE (Functional Teams):
Frontend Team (12): Mobile & Web UI
- Works on: Navigation, Catalog UI, Shopping Cart, Checkout UI
- Coordination: Heavy (needs Backend for data)
Backend Team (18): API & Business Logic
- Works on: Catalog API, Order processing, Payment integration
- Coordination: Heavy (needs Frontend for requirements, Database for schema)
Database Team (5): Data & Infrastructure
- Works on: Schema design, migrations, optimization
- Coordination: Heavy (reviews all schema changes)
Result: Every feature requires all three teams. Slow, expensive, risk of miscommunication.
---
AFTER (Domain-Aligned Teams):
Catalog Team (8): Catalog domain
- Members: 3 Frontend, 3 Backend, 1 Data, 1 Product Manager
- Owns: Product search, recommendations, catalog administration
- Coordination: Internal to domain
Order Management Team (10): Orders domain
- Members: 2 Frontend, 4 Backend, 2 Data, 1 QA, 1 Product Manager
- Owns: Shopping cart, checkout, order status
- Coordination: Internal to domain
Payments Team (6): Payments domain
- Members: 2 Backend, 1 Data, 1 SRE, 1 Compliance, 1 Product Manager
- Owns: Payment processing, reconciliation, compliance
- Coordination: Internal to domain
Platform Team (7): Shared services
- Members: Various specialties
- Owns: API gateway, deployment pipeline, observability
Result: Teams are autonomous. Dependencies are well-defined. Fast iteration possible.
When to Use / When Not to Use
- Multiple bounded contexts exist
- System needs autonomous, fast-moving teams
- Long-term scalability is important
- Want to reduce coordination overhead
- Planning microservices or modular architecture
- System is small, unified codebase
- Need deep specialization in specific technology
- Team is tiny (5-10 people total)
- System architecture is not yet clear
Patterns and Pitfalls
Patterns and Pitfalls
Design Review Checklist
- Are bounded contexts and key domains clearly defined?
- Is team structure roughly aligned to bounded contexts?
- Can teams work independently without constant coordination?
- Are inter-team dependencies explicit and well-managed?
- Do teams have full-stack skills within their domain?
- Is there clear ownership of each domain/context?
- Are shared services/platforms properly scoped (not bottlenecks)?
- Can you draw the org chart and the system architecture and see the resemblance?
- Have communication patterns been intentionally designed?
- Is the team structure reviewed and evolved with architecture changes?
Self-Check
-
If architecture doesn't match organization, which should change? Typically, change organization. Architecture reflects desired system design. Teams should support that design. But sometimes architecture needs adjustment too.
-
Can a person work on multiple domains? Yes, but it should be intentional (platform support) not accidental (unclear ownership).
-
How do you handle dependencies between domains? Well-defined APIs, event streams, or async protocols. Avoid synchronous, blocking dependencies when possible.
One Takeaway: Don't treat organization as fixed. Design it to support desired architecture. Conway's Law is inevitable; use it deliberately by aligning organization to architecture. The result: faster, more autonomous teams and better systems.
Next Steps
- Bounded Contexts: Define clear ownership and boundaries for each domain
- Microservices: Align services to team and domain boundaries
- Inter-Service Communication: Design APIs and events between domains
- Team Practices: Implement team health metrics and organizational dynamics
Team Topology Examples
Spotify Model (Squad-Based)
Feature Team Structure:
Squad (8 people): Feature team owning one capability
- Product Manager
- Developers (backend, frontend)
- QA
- Designer
Tribe (multiple squads): Related features
- Checkout Squad
- Payment Squad
- Shipping Squad
Chapter: Cross-squad skill sharing
- Backend Chapter (all backend engineers)
- Security Chapter (all security-minded people)
Guild: Community of practice
- Kubernetes Guild
- GraphQL Guild
Three Tier Model
Level 1: Squads (Feature teams)
- Own bounded context
- Autonomous deployment
- Full-stack capability
Level 2: Chapters (Functional communities)
- Backend engineers across squads
- Frontend engineers across squads
- Ensures skill consistency
Level 3: Tribes (Product lines)
- Group related squads
- Shared roadmap
- Coordination across squads
Assessing Team-Architecture Alignment
Alignment Check
Question: Do team boundaries match bounded contexts?
Yes → Great! Teams can own services independently
No → Misalignment; coordinate across teams or reorganize
Question: Can team X deploy without team Y?
Yes → Autonomous deployment possible
No → Tight coupling; reduce dependencies
Question: How often do teams need to sync?
Daily standup → Likely too coupled
Weekly → Normal for related teams
Monthly → Well-decoupled
Question: Can a junior engineer on-board to a team and be productive in 2 weeks?
Yes → Clear ownership, good documentation
No → Team responsibility unclear or complex
Communication Structure Design
Formal Communication Paths
Specification review (design)
→ Architecture Review Board
Incident resolution (runtime)
→ On-call engineer → escalate to domain expert
Feature coordination (across teams)
→ Feature lead → Product steering committee
Operational decisions
→ DevOps lead → platform team
Informal Communication Paths
Slack channels:
#orders-squad (team communication)
#backend-chapter (skill sharing)
#incidents (real-time alerts)
#architecture (big decisions)
Office hours:
- Architect office hours (Tuesday 2pm)
- Security office hours (Wednesday 10am)
Pairing sessions:
- Frontend dev pairs with backend dev (knowledge sharing)
Managing Bounded Context Transitions
When organization changes but boundaries remain unclear:
# Unclear ownership (bad)
# Who is responsible for payment processing?
# - Payment squad says: we implement Stripe integration
# - Order squad says: we need payment processing
# - Unclear responsibility → bugs slip through cracks
# Clear ownership (good)
# Payment Squad owns:
# - Stripe integration
# - Payment processing service
# - Payment notifications
# - Refunds and disputes
# Order Squad owns:
# - Calling payment service
# - Reacting to payment events
# - Storing payment status in order
Self-Check
-
If architecture doesn't match organization, which should change? Typically organization. Architecture reflects desired system design; teams should support that design.
-
Can a person work on multiple domains? Yes, but intentionally (platform support) not accidentally (unclear ownership).
-
How do you handle dependencies between domains? Well-defined APIs, event streams, or async protocols. Avoid synchronous, blocking dependencies.
-
Does your org chart look like your system architecture? If yes, great! If no, either reorganize or refactor architecture.
-
How do you prevent team silos? Chapters and guilds for skill sharing, pairing sessions, shared repositories, good documentation.
One Takeaway: Don't treat organization as fixed. Design it to support desired architecture. Conway's Law is inevitable; use it deliberately by aligning organization to architecture. Result: faster, more autonomous teams and better systems. Review alignment quarterly as architecture evolves.
Next Steps
- Define Bounded Contexts: Identify domains and ownership
- Design Team Topologies: Choose squad, chapter, tribe structure
- Map Communication: Design both formal and informal communication
- Establish Sync Points: Weekly syncs for related teams, monthly all-hands
- Monitor Alignment: Track how often teams need to coordinate
References
- Conway, M. E. (1968). "How Do Committees Invent?" Datamation.
- Skelton, M., & Pais, M. (2019). Team Topologies: Organizing Business and Technology Teams for Fast Flow. IT Revolution Press.
- Evans, E. (2003). Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley.
- Kniberg, H., & Ivarsson, A. (2012). "Scaling Agile at Spotify with Tribes, Squads, Chapters, and Guilds".
- Forsgren, N., Humble, J., & Kim, G. (2018). Accelerate: The Science of Lean Software and DevOps. IT Revolution Press.