458 lines
18 KiB
Markdown
458 lines
18 KiB
Markdown
# Advanced Organizational Design Methodology
|
|
|
|
## Workflow
|
|
|
|
```
|
|
Advanced Org Design Progress:
|
|
- [ ] Step 1: Conway's Law analysis and reverse Conway maneuver
|
|
- [ ] Step 2: Team Topologies design
|
|
- [ ] Step 3: Domain-Driven Design alignment
|
|
- [ ] Step 4: Advanced stakeholder techniques
|
|
- [ ] Step 5: Organizational change patterns
|
|
```
|
|
|
|
**Step 1**: Conway's Law analysis - Understand current architecture-team misalignment. See [1. Conway's Law & Reverse Conway Maneuver](#1-conways-law--reverse-conway-maneuver).
|
|
|
|
**Step 2**: Team Topologies - Apply 4 fundamental types + 3 interaction modes. See [2. Team Topologies Framework](#2-team-topologies-framework).
|
|
|
|
**Step 3**: Domain-Driven Design - Align bounded contexts with team boundaries. See [3. Domain-Driven Design Alignment](#3-domain-driven-design-alignment).
|
|
|
|
**Step 4**: Advanced stakeholder techniques - Influence networks, coalition building. See [4. Advanced Stakeholder Techniques](#4-advanced-stakeholder-techniques).
|
|
|
|
**Step 5**: Organizational change - Transformation patterns, resistance management. See [5. Organizational Change Patterns](#5-organizational-change-patterns).
|
|
|
|
---
|
|
|
|
## 1. Conway's Law & Reverse Conway Maneuver
|
|
|
|
### Conway's Law Statement
|
|
|
|
**"Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations."** — Melvin Conway, 1967
|
|
|
|
**Practical Implications:**
|
|
- If you have 4 teams, you'll produce a system with 4 major components
|
|
- If backend and frontend are separate teams, you'll get a clear backend/frontend split (potentially with API bloat)
|
|
- If teams don't communicate, systems won't integrate well
|
|
|
|
### Reverse Conway Maneuver
|
|
|
|
**Principle**: Design team structure to match desired system architecture, not current org structure.
|
|
|
|
**Process:**
|
|
1. **Design target architecture** (microservices, modular monolith, etc.)
|
|
2. **Identify system boundaries** (services, modules, domains)
|
|
3. **Create teams matching boundaries** (one team per service/domain)
|
|
4. **Define clear interfaces** (APIs between teams = APIs between systems)
|
|
|
|
**Example: Microservices Transition**
|
|
|
|
**Current State (misaligned):**
|
|
- Monolithic team structure: Frontend team, Backend team, Database team, QA team
|
|
- Want: Microservices architecture (User Service, Payment Service, Notification Service)
|
|
- Problem: No team owns end-to-end service
|
|
|
|
**Target State (aligned):**
|
|
- User Service Team (owns frontend + backend + DB + deployment)
|
|
- Payment Service Team (owns frontend + backend + DB + deployment)
|
|
- Notification Service Team (owns frontend + backend + DB + deployment)
|
|
- Platform Team (provides shared infrastructure, monitoring, deployment tools)
|
|
|
|
**Result**: Teams naturally build microservices because that's their ownership boundary.
|
|
|
|
### Architecture-Team Alignment Matrix
|
|
|
|
| Architecture Style | Recommended Team Structure | Anti-pattern |
|
|
|--------------------|---------------------------|--------------|
|
|
| Monolith | Single cross-functional team (if <50 people) | Functional silos (FE/BE/QA teams) |
|
|
| Modular Monolith | Teams per module with clear interfaces | Shared code ownership across teams |
|
|
| Microservices | Teams per service, full-stack ownership | Shared service ownership |
|
|
| Microfrontends | Teams per micro-app + platform team | Single frontend team for all micro-apps |
|
|
| Platform/API | Product teams (consumers) + Platform team (provider) | Product teams building own platforms |
|
|
|
|
### Detecting Conway's Law Violations
|
|
|
|
**Symptoms:**
|
|
- Architecture constantly diverging from intended design
|
|
- Excessive coordination needed for simple changes
|
|
- Modules/services tightly coupled despite supposed independence
|
|
- Teams unable to deploy independently
|
|
|
|
**Diagnostic Questions:**
|
|
1. Do team boundaries match system boundaries?
|
|
2. Can teams deploy without coordinating with other teams?
|
|
3. Do frequent changes require cross-team sync meetings?
|
|
4. Are interfaces well-defined or constantly renegotiated?
|
|
|
|
**Fix**: Realign teams to match desired architecture OR redesign architecture to match practical team constraints.
|
|
|
|
---
|
|
|
|
## 2. Team Topologies Framework
|
|
|
|
### Four Fundamental Team Types
|
|
|
|
**1. Stream-Aligned Teams** (Product/Feature Teams)
|
|
- **Purpose**: Aligned with flow of business change (features, products, user journeys)
|
|
- **Characteristics**: Cross-functional, close to customer, fast flow
|
|
- **Size**: 5-9 people
|
|
- **Cognitive Load**: 1 product area, 1-2 user journeys
|
|
- **Example**: Checkout Team (owns entire checkout experience), Search Team, Recommendations Team
|
|
|
|
**2. Platform Teams** (Internal Product Teams)
|
|
- **Purpose**: Reduce cognitive load of stream-aligned teams by providing internal services
|
|
- **Characteristics**: Treat stream-aligned teams as customers, self-service, clear SLAs
|
|
- **Size**: Larger (10-15 people) or multiple smaller platform teams
|
|
- **Examples**: Developer Experience Platform (CI/CD, testing frameworks), Data Platform (analytics, ML infrastructure), Infrastructure Platform (AWS, Kubernetes)
|
|
|
|
**3. Enabling Teams** (Capability Building)
|
|
- **Purpose**: Build capability in stream-aligned teams (temporary, not permanent dependency)
|
|
- **Characteristics**: Coaches not doers, time-boxed engagements (3-6 months), transfer knowledge then leave
|
|
- **Size**: Small (2-5 people), specialists
|
|
- **Examples**: Security Enablement (teach teams secure coding), Accessibility Enablement, Performance Optimization Enablement
|
|
|
|
**4. Complicated-Subsystem Teams** (Specialists)
|
|
- **Purpose**: Own complex subsystems requiring deep expertise
|
|
- **Characteristics**: Specialist knowledge, reduce cognitive load on stream teams
|
|
- **Size**: Small (3-8 people), domain experts
|
|
- **Examples**: ML/AI team, Video encoding team, Payment processing team, Cryptography team
|
|
|
|
### Three Team Interaction Modes
|
|
|
|
**1. Collaboration Mode** (High Interaction)
|
|
- **When**: Discovery, rapid innovation, solving novel problems
|
|
- **Duration**: Temporary (weeks to months)
|
|
- **Example**: Stream team collaborates with enabling team to learn new capability
|
|
- **Characteristics**: High overlap, pair programming, joint problem-solving
|
|
- **Warning**: Don't make permanent—high cognitive load
|
|
|
|
**2. X-as-a-Service Mode** (Low Interaction)
|
|
- **When**: Clear interface, stable requirements, proven solution
|
|
- **Duration**: Permanent
|
|
- **Example**: Stream team consumes platform team's CI/CD service
|
|
- **Characteristics**: Self-service, clear SLA, API-first, minimal meetings
|
|
- **Goal**: Reduce cognitive load, enable autonomy
|
|
|
|
**3. Facilitating Mode** (Temporary Support)
|
|
- **When**: Building new capability, unblocking stream team
|
|
- **Duration**: Time-boxed (weeks to months)
|
|
- **Example**: Enabling team teaches stream team performance testing
|
|
- **Characteristics**: Knowledge transfer, workshops, pairing, then exit
|
|
- **Goal**: Leave stream team self-sufficient
|
|
|
|
### Team Topology Evolution
|
|
|
|
**Stage 1: Single Team** (Startup, <10 people)
|
|
- One stream-aligned team owns everything
|
|
- No platform team yet (premature optimization)
|
|
|
|
**Stage 2: Multiple Stream Teams** (Scale-up, 10-30 people)
|
|
- 2-4 stream-aligned teams
|
|
- Start seeing duplication (deployment, monitoring, data)
|
|
- Platform team emerges from common pain
|
|
|
|
**Stage 3: Stream + Platform** (Growth, 30-100 people)
|
|
- 4-10 stream-aligned teams
|
|
- 1-2 platform teams (developer experience, data, infrastructure)
|
|
- Possibly 1 enabling team for critical capability gaps
|
|
|
|
**Stage 4: Mature Topology** (Large, 100+ people)
|
|
- Many stream-aligned teams (organized by value stream)
|
|
- Multiple platform teams (federated platforms)
|
|
- Enabling teams for strategic capabilities
|
|
- Complicated-subsystem teams for deep specialties
|
|
|
|
### Team API Design
|
|
|
|
**Every team should document their "Team API":**
|
|
|
|
1. **Code API**: What services/libraries do we provide? (Endpoints, SDKs, packages)
|
|
2. **Documentation API**: What docs are available? (README, runbooks, architecture diagrams)
|
|
3. **Communication API**: How to reach us? (Slack, email, office hours, on-call)
|
|
4. **Collaboration API**: How to work with us? (Interaction mode, meeting cadence, decision process)
|
|
|
|
**Template:**
|
|
```
|
|
Team: [Name]
|
|
Type: [Stream-Aligned / Platform / Enabling / Complicated-Subsystem]
|
|
|
|
Services Provided:
|
|
- Service A: [Description] - SLA: [99.9% uptime]
|
|
- Service B: [Description] - SLA: [<100ms p95]
|
|
|
|
Documentation:
|
|
- Architecture: [Link]
|
|
- API Docs: [Link]
|
|
- Runbooks: [Link]
|
|
|
|
Communication:
|
|
- Slack: #team-name
|
|
- Email: team@company.com
|
|
- Office Hours: Tuesdays 2-3pm
|
|
- On-call: [PagerDuty link]
|
|
|
|
Interaction Modes:
|
|
- X-as-a-Service: Use our APIs (preferred)
|
|
- Collaboration: For new integrations (time-boxed to 2 weeks)
|
|
- Facilitation: We can teach your team [capability] (3-month engagement)
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Domain-Driven Design Alignment
|
|
|
|
### Bounded Contexts & Team Boundaries
|
|
|
|
**Principle**: Align team boundaries with bounded contexts (not just technical layers).
|
|
|
|
**Bounded Context**: A conceptual boundary within which a domain model is consistent. Different contexts may have different models for same concept.
|
|
|
|
**Example: E-commerce**
|
|
- **Shopping Context**: Product (SKU, description, price, inventory)
|
|
- **Fulfillment Context**: Product (tracking number, shipping address, delivery status)
|
|
- **Analytics Context**: Product (page views, conversion rate, revenue)
|
|
|
|
**Same entity ("Product"), different models, different teams.**
|
|
|
|
### Context Mapping Patterns
|
|
|
|
**1. Partnership** (Two teams collaborate closely)
|
|
- Symmetric relationship, joint planning
|
|
- Example: Checkout team + Payment team for new payment flow
|
|
|
|
**2. Shared Kernel** (Small shared code/data)
|
|
- Minimal shared model, high coordination cost
|
|
- Example: Shared customer ID schema across all teams
|
|
- Warning: Keep tiny—big shared kernels become bottlenecks
|
|
|
|
**3. Customer-Supplier** (Upstream provides to Downstream)
|
|
- Asymmetric relationship, SLA-based
|
|
- Example: User Auth service (upstream) provides to all product teams (downstream)
|
|
- Supplier responsible for meeting customer needs
|
|
|
|
**4. Conformist** (Downstream conforms to Upstream)
|
|
- Downstream has no influence on upstream
|
|
- Example: Product teams conform to external payment provider API
|
|
- Necessary when integrating third-party services
|
|
|
|
**5. Anti-Corruption Layer** (Translation Layer)
|
|
- Protect your model from external complexity
|
|
- Example: Wrapper around legacy system to present clean API
|
|
- Use when upstream is messy but you can't change it
|
|
|
|
**6. Separate Ways** (No integration)
|
|
- Contexts too different to integrate economically
|
|
- Example: HR system and product analytics—no overlap
|
|
|
|
### Team-to-Context Alignment
|
|
|
|
**Rule**: One team per bounded context (ideally).
|
|
|
|
**Options if context too large for one team:**
|
|
1. **Split context**: Find natural seam within bounded context
|
|
2. **Multiple teams share**: Requires tight coordination (expensive)
|
|
3. **Sub-teams within**: Maintain as one logical team, sub-teams for focus areas
|
|
|
|
**Options if team owns multiple contexts:**
|
|
1. **OK if contexts small** and tightly related
|
|
2. **Watch cognitive load**: Max 2-3 simple contexts per team
|
|
|
|
---
|
|
|
|
## 4. Advanced Stakeholder Techniques
|
|
|
|
### Influence Network Analysis
|
|
|
|
**Social Network Analysis for Organizations:**
|
|
|
|
1. **Identify nodes**: All stakeholders
|
|
2. **Map edges**: Who influences whom? (direction matters)
|
|
3. **Calculate centrality**:
|
|
- **Degree centrality**: Number of connections (who's most connected?)
|
|
- **Betweenness centrality**: Who bridges disconnected groups? (critical connectors)
|
|
- **Closeness centrality**: Who can reach everyone quickly? (efficient communicators)
|
|
|
|
**Application:**
|
|
- **High betweenness**: Critical bridges—if they leave or resist, networks fragment
|
|
- **High degree**: Opinion leaders—influence many directly
|
|
- **Low centrality but critical domain**: Hidden experts—engage directly
|
|
|
|
### Coalition Building
|
|
|
|
**For Major Organizational Change:**
|
|
|
|
**Phase 1: Identify Minimum Winning Coalition**
|
|
- What's minimum set of stakeholders needed to approve change?
|
|
- Who has veto power? (must include)
|
|
- Who has high influence? (prioritize)
|
|
|
|
**Phase 2: Address WIIFM (What's In It For Me)**
|
|
- For each coalition member: What do they gain from this change?
|
|
- If nothing: Can we adjust proposal to create gains?
|
|
- Document value proposition per stakeholder
|
|
|
|
**Phase 3: Sequence Engagement**
|
|
- Start with champions (easy wins)
|
|
- Then bridges (access to networks)
|
|
- Then high-power neutrals (sway with champion support)
|
|
- Finally address blockers (after coalition established)
|
|
|
|
**Phase 4: Manage Defection**
|
|
- Monitor for coalition members changing stance
|
|
- Regular check-ins, address concerns early
|
|
- Adjust proposal if needed to maintain coalition
|
|
|
|
### Resistance Management
|
|
|
|
**Kotter's 8-Step Change Model:**
|
|
1. Create urgency (burning platform)
|
|
2. Form guiding coalition (power + credibility)
|
|
3. Develop vision (clear future state)
|
|
4. Communicate vision (over-communicate 10x)
|
|
5. Empower action (remove obstacles)
|
|
6. Generate short-term wins (momentum)
|
|
7. Consolidate gains (don't declare victory early)
|
|
8. Anchor changes (make it "how we do things")
|
|
|
|
**Resistance Patterns:**
|
|
|
|
| Resistance Type | Symptom | Root Cause | Strategy |
|
|
|-----------------|---------|------------|----------|
|
|
| Rational | "This won't work because [data]" | Legitimate concerns | Address with analysis, pilot to test |
|
|
| Emotional | "I don't like this" | Fear, loss of status/control | Empathy, involvement, WIIFM |
|
|
| Political | "I'll block this" | Power play, competing agenda | Coalition, escalation, negotiation |
|
|
| Cultural | "Not how we do things here" | Clashes with norms/values | Small wins, demonstrate compatibility |
|
|
|
|
---
|
|
|
|
## 5. Organizational Change Patterns
|
|
|
|
### Spotify Model (Modified)
|
|
|
|
**Squads** (Stream-aligned teams, 5-9 people)
|
|
- Cross-functional, autonomous, long-lived
|
|
- Own features end-to-end
|
|
- Aligned with product areas
|
|
|
|
**Tribes** (Collection of related squads, 40-150 people)
|
|
- Share mission, loosely coordinated
|
|
- Tribe lead facilitates, doesn't dictate
|
|
- Regular tribe gatherings (demos, planning)
|
|
|
|
**Chapters** (Functional expertise groups within tribe)
|
|
- Engineers from different squads, same skill
|
|
- Led by chapter lead (line manager)
|
|
- Knowledge sharing, standards, career development
|
|
|
|
**Guilds** (Communities of practice across tribes)
|
|
- Voluntary, interest-based
|
|
- Share knowledge org-wide (security, testing, frontend)
|
|
- No formal authority, influence through expertise
|
|
|
|
**When to Use:**
|
|
- Large product orgs (100+ people)
|
|
- Need autonomy + alignment
|
|
- Strong engineering culture
|
|
|
|
**When NOT to Use:**
|
|
- Small orgs (<50 people) - too much overhead
|
|
- Weak engineering culture - guilds/chapters won't self-organize
|
|
- Highly regulated - too much autonomy
|
|
|
|
### Amazon's Two-Pizza Teams
|
|
|
|
**Principles:**
|
|
- Team size: 5-9 people (can feed with 2 pizzas)
|
|
- Fully autonomous: Own service end-to-end
|
|
- APIs only: Teams communicate via documented APIs
|
|
- You build it, you run it: Own production operations
|
|
|
|
**Supporting Infrastructure:**
|
|
- Service-oriented architecture (technical enabler)
|
|
- Self-service platform (AWS, deployment tools)
|
|
- Clear metrics (each team has dashboard)
|
|
|
|
**Results:**
|
|
- Reduced coordination overhead
|
|
- Faster innovation
|
|
- Clear accountability
|
|
|
|
**Challenges:**
|
|
- Requires mature platform (or teams duplicate infrastructure)
|
|
- API versioning complexity
|
|
- Potential for silos if over-isolated
|
|
|
|
### Platform Team Extraction
|
|
|
|
**When to Extract Platform Team:**
|
|
- **Signal 1**: 3+ stream teams duplicating infrastructure work
|
|
- **Signal 2**: Stream teams slowed by infrastructure
|
|
tasks (>20% time)
|
|
- **Signal 3**: Infrastructure quality suffering (monitoring gaps, deployment issues)
|
|
|
|
**How to Extract:**
|
|
1. **Identify common pain** across stream teams (deployment, monitoring, data)
|
|
2. **Form platform team** (pull volunteers from stream teams who enjoy infrastructure)
|
|
3. **Define charter**: What platform provides, what it doesn't
|
|
4. **Set SLAs**: Treat stream teams as customers
|
|
5. **Build self-service**: Documentation, automation, APIs
|
|
6. **Iterate**: Start small, expand based on demand
|
|
|
|
**Staffing Ratio:**
|
|
- **Rule of thumb**: 1 platform engineer per 7-10 product engineers
|
|
- **Too many platform**: Over-engineering, bloat
|
|
- **Too few platform**: Can't keep up with demand
|
|
|
|
**Success Metrics:**
|
|
- Stream team velocity (should increase after platform stabilizes)
|
|
- Time to deploy (should decrease)
|
|
- Platform adoption (% of stream teams using platform services)
|
|
- Platform team satisfaction survey (NPS from stream teams)
|
|
|
|
### Organizational Refactoring Patterns
|
|
|
|
**Pattern 1: Cell Division** (Split large team)
|
|
- **When**: Team >12 people, communication overhead high
|
|
- **How**: Identify natural seam in ownership, split into 2 teams
|
|
- **Example**: E-commerce team → Catalog team + Checkout team
|
|
|
|
**Pattern 2: Merging** (Combine small teams)
|
|
- **When**: Teams <4 people, lack skill diversity, too much coordination
|
|
- **How**: Merge related teams, clarify combined ownership
|
|
- **Example**: Frontend team + Backend team → Full-stack product team
|
|
|
|
**Pattern 3: Extraction** (Pull out specialists)
|
|
- **When**: Specialized need emerging across teams
|
|
- **How**: Form complicated-subsystem or platform team
|
|
- **Example**: Extract data engineers from product teams → Data Platform team
|
|
|
|
**Pattern 4: Embedding** (Integrate specialists)
|
|
- **When**: Specialist team bottleneck, stream teams need capability
|
|
- **How**: Embed specialists into stream teams, dissolve central team
|
|
- **Example**: Embed QA engineers into product teams, close central QA team
|
|
|
|
---
|
|
|
|
## 6. Measuring Organizational Effectiveness
|
|
|
|
**Accelerate Metrics (beyond DORA):**
|
|
- **Team autonomy**: % decisions made without escalation
|
|
- **Psychological safety**: Team survey (Edmondson scale)
|
|
- **Documentation quality**: % questions answerable via docs
|
|
- **Cognitive load**: % time on primary mission vs toil/coordination
|
|
|
|
**Org Design Quality Indicators:**
|
|
- [ ] <10% time in cross-team coordination meetings
|
|
- [ ] Teams can deploy independently (>80% deploys don't require sync)
|
|
- [ ] Clear ownership (anyone can name team owning any component in <30 seconds)
|
|
- [ ] Fast onboarding (new hire productive in <2 weeks)
|
|
- [ ] Low turnover (voluntary attrition <10%/year)
|
|
- [ ] High engagement (survey scores ≥4/5)
|
|
|
|
**Anti-patterns:**
|
|
- Conway's Law violations (architecture ≠ team structure)
|
|
- Shared code ownership (nobody accountable)
|
|
- Teams too large (>12) or too small (<3)
|
|
- Matrix hell (dual reporting, unclear decision rights)
|
|
- Platform teams building for themselves (not customer-focused)
|
|
- Permanent collaboration mode (high cognitive load, burnout)
|