@shaykec/bridge 0.4.25 → 0.4.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/journeys/ai-engineer.yaml +34 -0
- package/journeys/backend-developer.yaml +36 -0
- package/journeys/business-analyst.yaml +37 -0
- package/journeys/devops-engineer.yaml +37 -0
- package/journeys/engineering-manager.yaml +44 -0
- package/journeys/frontend-developer.yaml +41 -0
- package/journeys/fullstack-developer.yaml +49 -0
- package/journeys/mobile-developer.yaml +42 -0
- package/journeys/product-manager.yaml +35 -0
- package/journeys/qa-engineer.yaml +37 -0
- package/journeys/ux-designer.yaml +43 -0
- package/modules/README.md +52 -0
- package/modules/accessibility-fundamentals/content.md +126 -0
- package/modules/accessibility-fundamentals/exercises.md +88 -0
- package/modules/accessibility-fundamentals/module.yaml +43 -0
- package/modules/accessibility-fundamentals/quick-ref.md +71 -0
- package/modules/accessibility-fundamentals/quiz.md +100 -0
- package/modules/accessibility-fundamentals/resources.md +29 -0
- package/modules/accessibility-fundamentals/walkthrough.md +80 -0
- package/modules/adr-writing/content.md +121 -0
- package/modules/adr-writing/exercises.md +81 -0
- package/modules/adr-writing/module.yaml +41 -0
- package/modules/adr-writing/quick-ref.md +57 -0
- package/modules/adr-writing/quiz.md +73 -0
- package/modules/adr-writing/resources.md +29 -0
- package/modules/adr-writing/walkthrough.md +64 -0
- package/modules/ai-agents/content.md +120 -0
- package/modules/ai-agents/exercises.md +82 -0
- package/modules/ai-agents/module.yaml +42 -0
- package/modules/ai-agents/quick-ref.md +60 -0
- package/modules/ai-agents/quiz.md +103 -0
- package/modules/ai-agents/resources.md +30 -0
- package/modules/ai-agents/walkthrough.md +85 -0
- package/modules/ai-assisted-research/content.md +136 -0
- package/modules/ai-assisted-research/exercises.md +80 -0
- package/modules/ai-assisted-research/module.yaml +42 -0
- package/modules/ai-assisted-research/quick-ref.md +67 -0
- package/modules/ai-assisted-research/quiz.md +73 -0
- package/modules/ai-assisted-research/resources.md +33 -0
- package/modules/ai-assisted-research/walkthrough.md +85 -0
- package/modules/ai-pair-programming/content.md +105 -0
- package/modules/ai-pair-programming/exercises.md +98 -0
- package/modules/ai-pair-programming/module.yaml +39 -0
- package/modules/ai-pair-programming/quick-ref.md +58 -0
- package/modules/ai-pair-programming/quiz.md +73 -0
- package/modules/ai-pair-programming/resources.md +34 -0
- package/modules/ai-pair-programming/walkthrough.md +117 -0
- package/modules/ai-test-generation/content.md +125 -0
- package/modules/ai-test-generation/exercises.md +98 -0
- package/modules/ai-test-generation/module.yaml +39 -0
- package/modules/ai-test-generation/quick-ref.md +65 -0
- package/modules/ai-test-generation/quiz.md +74 -0
- package/modules/ai-test-generation/resources.md +41 -0
- package/modules/ai-test-generation/walkthrough.md +100 -0
- package/modules/api-design/content.md +189 -0
- package/modules/api-design/exercises.md +84 -0
- package/modules/api-design/game.yaml +113 -0
- package/modules/api-design/module.yaml +45 -0
- package/modules/api-design/quick-ref.md +73 -0
- package/modules/api-design/quiz.md +100 -0
- package/modules/api-design/resources.md +55 -0
- package/modules/api-design/walkthrough.md +88 -0
- package/modules/clean-code/content.md +136 -0
- package/modules/clean-code/exercises.md +137 -0
- package/modules/clean-code/game.yaml +172 -0
- package/modules/clean-code/module.yaml +44 -0
- package/modules/clean-code/quick-ref.md +44 -0
- package/modules/clean-code/quiz.md +105 -0
- package/modules/clean-code/resources.md +40 -0
- package/modules/clean-code/walkthrough.md +78 -0
- package/modules/clean-code/workshop.yaml +149 -0
- package/modules/code-review/content.md +130 -0
- package/modules/code-review/exercises.md +95 -0
- package/modules/code-review/game.yaml +83 -0
- package/modules/code-review/module.yaml +42 -0
- package/modules/code-review/quick-ref.md +77 -0
- package/modules/code-review/quiz.md +105 -0
- package/modules/code-review/resources.md +40 -0
- package/modules/code-review/walkthrough.md +106 -0
- package/modules/daily-workflow/content.md +81 -0
- package/modules/daily-workflow/exercises.md +50 -0
- package/modules/daily-workflow/module.yaml +33 -0
- package/modules/daily-workflow/quick-ref.md +37 -0
- package/modules/daily-workflow/quiz.md +65 -0
- package/modules/daily-workflow/resources.md +38 -0
- package/modules/daily-workflow/walkthrough.md +83 -0
- package/modules/debugging-systematically/content.md +139 -0
- package/modules/debugging-systematically/exercises.md +91 -0
- package/modules/debugging-systematically/module.yaml +46 -0
- package/modules/debugging-systematically/quick-ref.md +59 -0
- package/modules/debugging-systematically/quiz.md +105 -0
- package/modules/debugging-systematically/resources.md +42 -0
- package/modules/debugging-systematically/walkthrough.md +84 -0
- package/modules/debugging-systematically/workshop.yaml +127 -0
- package/modules/demo-test/content.md +68 -0
- package/modules/demo-test/exercises.md +28 -0
- package/modules/demo-test/game.yaml +171 -0
- package/modules/demo-test/module.yaml +41 -0
- package/modules/demo-test/quick-ref.md +54 -0
- package/modules/demo-test/quiz.md +74 -0
- package/modules/demo-test/resources.md +21 -0
- package/modules/demo-test/walkthrough.md +122 -0
- package/modules/demo-test/workshop.yaml +31 -0
- package/modules/design-critique/content.md +93 -0
- package/modules/design-critique/exercises.md +71 -0
- package/modules/design-critique/module.yaml +41 -0
- package/modules/design-critique/quick-ref.md +63 -0
- package/modules/design-critique/quiz.md +73 -0
- package/modules/design-critique/resources.md +27 -0
- package/modules/design-critique/walkthrough.md +68 -0
- package/modules/design-patterns/content.md +335 -0
- package/modules/design-patterns/exercises.md +82 -0
- package/modules/design-patterns/game.yaml +55 -0
- package/modules/design-patterns/module.yaml +45 -0
- package/modules/design-patterns/quick-ref.md +44 -0
- package/modules/design-patterns/quiz.md +101 -0
- package/modules/design-patterns/resources.md +40 -0
- package/modules/design-patterns/walkthrough.md +64 -0
- package/modules/exploratory-testing/content.md +133 -0
- package/modules/exploratory-testing/exercises.md +88 -0
- package/modules/exploratory-testing/module.yaml +41 -0
- package/modules/exploratory-testing/quick-ref.md +68 -0
- package/modules/exploratory-testing/quiz.md +75 -0
- package/modules/exploratory-testing/resources.md +39 -0
- package/modules/exploratory-testing/walkthrough.md +87 -0
- package/modules/git/content.md +128 -0
- package/modules/git/exercises.md +53 -0
- package/modules/git/game.yaml +190 -0
- package/modules/git/module.yaml +44 -0
- package/modules/git/quick-ref.md +67 -0
- package/modules/git/quiz.md +89 -0
- package/modules/git/resources.md +49 -0
- package/modules/git/walkthrough.md +92 -0
- package/modules/git/workshop.yaml +145 -0
- package/modules/hiring-interviews/content.md +130 -0
- package/modules/hiring-interviews/exercises.md +88 -0
- package/modules/hiring-interviews/module.yaml +41 -0
- package/modules/hiring-interviews/quick-ref.md +68 -0
- package/modules/hiring-interviews/quiz.md +73 -0
- package/modules/hiring-interviews/resources.md +36 -0
- package/modules/hiring-interviews/walkthrough.md +75 -0
- package/modules/hooks/content.md +97 -0
- package/modules/hooks/exercises.md +69 -0
- package/modules/hooks/module.yaml +39 -0
- package/modules/hooks/quick-ref.md +93 -0
- package/modules/hooks/quiz.md +81 -0
- package/modules/hooks/resources.md +34 -0
- package/modules/hooks/walkthrough.md +105 -0
- package/modules/hooks/workshop.yaml +64 -0
- package/modules/incident-response/content.md +124 -0
- package/modules/incident-response/exercises.md +82 -0
- package/modules/incident-response/game.yaml +132 -0
- package/modules/incident-response/module.yaml +45 -0
- package/modules/incident-response/quick-ref.md +53 -0
- package/modules/incident-response/quiz.md +103 -0
- package/modules/incident-response/resources.md +40 -0
- package/modules/incident-response/walkthrough.md +82 -0
- package/modules/llm-fundamentals/content.md +114 -0
- package/modules/llm-fundamentals/exercises.md +83 -0
- package/modules/llm-fundamentals/module.yaml +42 -0
- package/modules/llm-fundamentals/quick-ref.md +64 -0
- package/modules/llm-fundamentals/quiz.md +103 -0
- package/modules/llm-fundamentals/resources.md +30 -0
- package/modules/llm-fundamentals/walkthrough.md +91 -0
- package/modules/one-on-ones/content.md +133 -0
- package/modules/one-on-ones/exercises.md +81 -0
- package/modules/one-on-ones/module.yaml +44 -0
- package/modules/one-on-ones/quick-ref.md +67 -0
- package/modules/one-on-ones/quiz.md +73 -0
- package/modules/one-on-ones/resources.md +37 -0
- package/modules/one-on-ones/walkthrough.md +69 -0
- package/modules/package.json +9 -0
- package/modules/prioritization-frameworks/content.md +130 -0
- package/modules/prioritization-frameworks/exercises.md +93 -0
- package/modules/prioritization-frameworks/module.yaml +41 -0
- package/modules/prioritization-frameworks/quick-ref.md +77 -0
- package/modules/prioritization-frameworks/quiz.md +73 -0
- package/modules/prioritization-frameworks/resources.md +32 -0
- package/modules/prioritization-frameworks/walkthrough.md +69 -0
- package/modules/prompt-engineering/content.md +123 -0
- package/modules/prompt-engineering/exercises.md +82 -0
- package/modules/prompt-engineering/game.yaml +101 -0
- package/modules/prompt-engineering/module.yaml +45 -0
- package/modules/prompt-engineering/quick-ref.md +65 -0
- package/modules/prompt-engineering/quiz.md +105 -0
- package/modules/prompt-engineering/resources.md +36 -0
- package/modules/prompt-engineering/walkthrough.md +81 -0
- package/modules/rag-fundamentals/content.md +111 -0
- package/modules/rag-fundamentals/exercises.md +80 -0
- package/modules/rag-fundamentals/module.yaml +45 -0
- package/modules/rag-fundamentals/quick-ref.md +58 -0
- package/modules/rag-fundamentals/quiz.md +75 -0
- package/modules/rag-fundamentals/resources.md +34 -0
- package/modules/rag-fundamentals/walkthrough.md +75 -0
- package/modules/react-fundamentals/content.md +140 -0
- package/modules/react-fundamentals/exercises.md +81 -0
- package/modules/react-fundamentals/game.yaml +145 -0
- package/modules/react-fundamentals/module.yaml +45 -0
- package/modules/react-fundamentals/quick-ref.md +62 -0
- package/modules/react-fundamentals/quiz.md +106 -0
- package/modules/react-fundamentals/resources.md +42 -0
- package/modules/react-fundamentals/walkthrough.md +89 -0
- package/modules/react-fundamentals/workshop.yaml +112 -0
- package/modules/react-native-fundamentals/content.md +141 -0
- package/modules/react-native-fundamentals/exercises.md +79 -0
- package/modules/react-native-fundamentals/module.yaml +42 -0
- package/modules/react-native-fundamentals/quick-ref.md +60 -0
- package/modules/react-native-fundamentals/quiz.md +61 -0
- package/modules/react-native-fundamentals/resources.md +24 -0
- package/modules/react-native-fundamentals/walkthrough.md +84 -0
- package/modules/registry.yaml +1650 -0
- package/modules/risk-management/content.md +162 -0
- package/modules/risk-management/exercises.md +86 -0
- package/modules/risk-management/module.yaml +41 -0
- package/modules/risk-management/quick-ref.md +82 -0
- package/modules/risk-management/quiz.md +73 -0
- package/modules/risk-management/resources.md +40 -0
- package/modules/risk-management/walkthrough.md +67 -0
- package/modules/running-effective-standups/content.md +119 -0
- package/modules/running-effective-standups/exercises.md +79 -0
- package/modules/running-effective-standups/module.yaml +40 -0
- package/modules/running-effective-standups/quick-ref.md +61 -0
- package/modules/running-effective-standups/quiz.md +73 -0
- package/modules/running-effective-standups/resources.md +36 -0
- package/modules/running-effective-standups/walkthrough.md +76 -0
- package/modules/solid-principles/content.md +154 -0
- package/modules/solid-principles/exercises.md +107 -0
- package/modules/solid-principles/module.yaml +42 -0
- package/modules/solid-principles/quick-ref.md +50 -0
- package/modules/solid-principles/quiz.md +102 -0
- package/modules/solid-principles/resources.md +39 -0
- package/modules/solid-principles/walkthrough.md +84 -0
- package/modules/sprint-planning/content.md +142 -0
- package/modules/sprint-planning/exercises.md +79 -0
- package/modules/sprint-planning/game.yaml +84 -0
- package/modules/sprint-planning/module.yaml +44 -0
- package/modules/sprint-planning/quick-ref.md +76 -0
- package/modules/sprint-planning/quiz.md +102 -0
- package/modules/sprint-planning/resources.md +39 -0
- package/modules/sprint-planning/walkthrough.md +75 -0
- package/modules/sql-fundamentals/content.md +160 -0
- package/modules/sql-fundamentals/exercises.md +87 -0
- package/modules/sql-fundamentals/game.yaml +105 -0
- package/modules/sql-fundamentals/module.yaml +45 -0
- package/modules/sql-fundamentals/quick-ref.md +53 -0
- package/modules/sql-fundamentals/quiz.md +103 -0
- package/modules/sql-fundamentals/resources.md +42 -0
- package/modules/sql-fundamentals/walkthrough.md +92 -0
- package/modules/sql-fundamentals/workshop.yaml +109 -0
- package/modules/stakeholder-communication/content.md +186 -0
- package/modules/stakeholder-communication/exercises.md +87 -0
- package/modules/stakeholder-communication/module.yaml +38 -0
- package/modules/stakeholder-communication/quick-ref.md +89 -0
- package/modules/stakeholder-communication/quiz.md +73 -0
- package/modules/stakeholder-communication/resources.md +41 -0
- package/modules/stakeholder-communication/walkthrough.md +74 -0
- package/modules/system-design/content.md +149 -0
- package/modules/system-design/exercises.md +83 -0
- package/modules/system-design/game.yaml +95 -0
- package/modules/system-design/module.yaml +46 -0
- package/modules/system-design/quick-ref.md +59 -0
- package/modules/system-design/quiz.md +102 -0
- package/modules/system-design/resources.md +46 -0
- package/modules/system-design/walkthrough.md +90 -0
- package/modules/team-topologies/content.md +166 -0
- package/modules/team-topologies/exercises.md +85 -0
- package/modules/team-topologies/module.yaml +41 -0
- package/modules/team-topologies/quick-ref.md +61 -0
- package/modules/team-topologies/quiz.md +101 -0
- package/modules/team-topologies/resources.md +37 -0
- package/modules/team-topologies/walkthrough.md +76 -0
- package/modules/technical-debt/content.md +111 -0
- package/modules/technical-debt/exercises.md +92 -0
- package/modules/technical-debt/module.yaml +39 -0
- package/modules/technical-debt/quick-ref.md +60 -0
- package/modules/technical-debt/quiz.md +73 -0
- package/modules/technical-debt/resources.md +25 -0
- package/modules/technical-debt/walkthrough.md +94 -0
- package/modules/technical-mentoring/content.md +128 -0
- package/modules/technical-mentoring/exercises.md +84 -0
- package/modules/technical-mentoring/module.yaml +41 -0
- package/modules/technical-mentoring/quick-ref.md +74 -0
- package/modules/technical-mentoring/quiz.md +73 -0
- package/modules/technical-mentoring/resources.md +33 -0
- package/modules/technical-mentoring/walkthrough.md +65 -0
- package/modules/test-strategy/content.md +136 -0
- package/modules/test-strategy/exercises.md +84 -0
- package/modules/test-strategy/game.yaml +99 -0
- package/modules/test-strategy/module.yaml +45 -0
- package/modules/test-strategy/quick-ref.md +66 -0
- package/modules/test-strategy/quiz.md +99 -0
- package/modules/test-strategy/resources.md +60 -0
- package/modules/test-strategy/walkthrough.md +97 -0
- package/modules/test-strategy/workshop.yaml +96 -0
- package/modules/typescript-fundamentals/content.md +127 -0
- package/modules/typescript-fundamentals/exercises.md +79 -0
- package/modules/typescript-fundamentals/game.yaml +111 -0
- package/modules/typescript-fundamentals/module.yaml +45 -0
- package/modules/typescript-fundamentals/quick-ref.md +55 -0
- package/modules/typescript-fundamentals/quiz.md +104 -0
- package/modules/typescript-fundamentals/resources.md +42 -0
- package/modules/typescript-fundamentals/walkthrough.md +71 -0
- package/modules/typescript-fundamentals/workshop.yaml +146 -0
- package/modules/user-story-mapping/content.md +123 -0
- package/modules/user-story-mapping/exercises.md +87 -0
- package/modules/user-story-mapping/module.yaml +41 -0
- package/modules/user-story-mapping/quick-ref.md +64 -0
- package/modules/user-story-mapping/quiz.md +73 -0
- package/modules/user-story-mapping/resources.md +29 -0
- package/modules/user-story-mapping/walkthrough.md +86 -0
- package/modules/writing-prds/content.md +133 -0
- package/modules/writing-prds/exercises.md +93 -0
- package/modules/writing-prds/game.yaml +83 -0
- package/modules/writing-prds/module.yaml +44 -0
- package/modules/writing-prds/quick-ref.md +77 -0
- package/modules/writing-prds/quiz.md +103 -0
- package/modules/writing-prds/resources.md +30 -0
- package/modules/writing-prds/walkthrough.md +87 -0
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
slug: system-design
|
|
2
|
+
title: "System Design -- From Requirements to Architecture"
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Master the system design interview framework and scalable distributed architecture."
|
|
5
|
+
category: architecture
|
|
6
|
+
tags: [system-design, architecture, scalability, distributed-systems, infrastructure]
|
|
7
|
+
difficulty: advanced
|
|
8
|
+
|
|
9
|
+
xp:
|
|
10
|
+
read: 20
|
|
11
|
+
walkthrough: 50
|
|
12
|
+
exercise: 30
|
|
13
|
+
quiz: 25
|
|
14
|
+
quiz-perfect-bonus: 15
|
|
15
|
+
game: 25
|
|
16
|
+
game-perfect-bonus: 15
|
|
17
|
+
|
|
18
|
+
time:
|
|
19
|
+
quick: 5
|
|
20
|
+
read: 25
|
|
21
|
+
guided: 60
|
|
22
|
+
|
|
23
|
+
prerequisites: [api-design]
|
|
24
|
+
related: [adr-writing, design-patterns]
|
|
25
|
+
|
|
26
|
+
triggers:
|
|
27
|
+
- "How do I design a scalable system?"
|
|
28
|
+
- "What is system design?"
|
|
29
|
+
- "How do I handle millions of users?"
|
|
30
|
+
- "What are the key components of distributed systems?"
|
|
31
|
+
|
|
32
|
+
visuals:
|
|
33
|
+
diagrams: [diagram-mermaid, diagram-architecture]
|
|
34
|
+
quiz-types: [quiz-drag-order, quiz-matching]
|
|
35
|
+
game-types: [scenario]
|
|
36
|
+
playground: bash
|
|
37
|
+
web-embeds: true
|
|
38
|
+
slides: true
|
|
39
|
+
|
|
40
|
+
sources:
|
|
41
|
+
- url: "https://github.com/donnemartin/system-design-primer"
|
|
42
|
+
label: "System Design Primer"
|
|
43
|
+
type: docs
|
|
44
|
+
- url: "https://dataintensive.net/"
|
|
45
|
+
label: "Designing Data-Intensive Applications"
|
|
46
|
+
type: docs
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# System Design Quick Reference
|
|
2
|
+
|
|
3
|
+
## Interview Framework
|
|
4
|
+
|
|
5
|
+
1. **Requirements** — Functional + non-functional (scale, latency, availability)
|
|
6
|
+
2. **Estimation** — DAU, QPS, storage (back-of-envelope)
|
|
7
|
+
3. **High-level design** — Boxes and arrows, API, data flow
|
|
8
|
+
4. **Deep dive** — 2–3 components in detail
|
|
9
|
+
5. **Bottlenecks** — SPOFs, scale limits, mitigations
|
|
10
|
+
|
|
11
|
+
## CAP Theorem
|
|
12
|
+
|
|
13
|
+
- **C**onsistency, **A**vailability, **P**artition tolerance — pick two
|
|
14
|
+
- In practice: **CP** (banking) or **AP** (social feeds)
|
|
15
|
+
|
|
16
|
+
## Caching
|
|
17
|
+
|
|
18
|
+
| Strategy | When |
|
|
19
|
+
|----------|------|
|
|
20
|
+
| Cache-aside | App manages cache; on miss → DB → populate |
|
|
21
|
+
| Write-through | Write to cache + DB together |
|
|
22
|
+
| CDN | Static assets, edge |
|
|
23
|
+
| Redis/Memcached | App-layer hot data |
|
|
24
|
+
|
|
25
|
+
## Database
|
|
26
|
+
|
|
27
|
+
| Type | Use case |
|
|
28
|
+
|------|----------|
|
|
29
|
+
| SQL | ACID, joins, relational |
|
|
30
|
+
| NoSQL document | Flexible schema, high write |
|
|
31
|
+
| NoSQL key-value | Simple lookups |
|
|
32
|
+
| Sharding | Partition by key (user_id, etc.) |
|
|
33
|
+
| Replication | Read replicas for scale |
|
|
34
|
+
|
|
35
|
+
## Load Balancing
|
|
36
|
+
|
|
37
|
+
- Round-robin, least connections, consistent hashing
|
|
38
|
+
- Health checks to remove unhealthy nodes
|
|
39
|
+
|
|
40
|
+
## Message Queues
|
|
41
|
+
|
|
42
|
+
- Decouple producers/consumers
|
|
43
|
+
- Async processing, buffering, retries
|
|
44
|
+
- Kafka, RabbitMQ, SQS
|
|
45
|
+
|
|
46
|
+
## Rate Limiting
|
|
47
|
+
|
|
48
|
+
- Token bucket, sliding window, fixed window
|
|
49
|
+
- `429 Too Many Requests`, `Retry-After` header
|
|
50
|
+
|
|
51
|
+
## Microservices vs Monolith
|
|
52
|
+
|
|
53
|
+
- Start monolith; extract when boundaries clear
|
|
54
|
+
- Per-service DB, independent deploy
|
|
55
|
+
|
|
56
|
+
## Consistent Hashing
|
|
57
|
+
|
|
58
|
+
- Ring of hash space; nodes own ranges
|
|
59
|
+
- Add/remove node → minimal key movement
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# System Design Quiz
|
|
2
|
+
|
|
3
|
+
## Question 1
|
|
4
|
+
|
|
5
|
+
In the CAP theorem, partition tolerance means:
|
|
6
|
+
|
|
7
|
+
A) The system can split into multiple data centers
|
|
8
|
+
B) The system continues to operate despite network partitions
|
|
9
|
+
C) Data is partitioned across shards
|
|
10
|
+
D) You can choose between consistency and availability
|
|
11
|
+
|
|
12
|
+
<!-- ANSWER: B -->
|
|
13
|
+
<!-- EXPLANATION: Partition tolerance means the system still works when network links fail or messages are lost. In practice, you must assume partitions happen; you choose between CP (consistency + partition tolerance) or AP (availability + partition tolerance). -->
|
|
14
|
+
|
|
15
|
+
## Question 2
|
|
16
|
+
|
|
17
|
+
Cache-aside (lazy loading) means:
|
|
18
|
+
|
|
19
|
+
A) The cache is populated when the app starts
|
|
20
|
+
B) The app checks the cache first; on miss, fetches from DB and populates cache
|
|
21
|
+
C) Writes go to cache first, then DB
|
|
22
|
+
D) The cache sits alongside the database
|
|
23
|
+
|
|
24
|
+
<!-- ANSWER: B -->
|
|
25
|
+
<!-- EXPLANATION: Cache-aside: app reads from cache first. On miss, app fetches from DB, writes to cache, returns to client. The app is responsible for cache population. -->
|
|
26
|
+
|
|
27
|
+
## Question 3
|
|
28
|
+
|
|
29
|
+
When would you choose a message queue over synchronous HTTP calls?
|
|
30
|
+
|
|
31
|
+
A) When you need real-time responses
|
|
32
|
+
B) When you want to decouple services and handle traffic spikes asynchronously
|
|
33
|
+
C) When the database is too slow
|
|
34
|
+
D) When you need strong consistency
|
|
35
|
+
|
|
36
|
+
<!-- ANSWER: B -->
|
|
37
|
+
<!-- EXPLANATION: Message queues decouple producers and consumers. Async processing handles spikes, retries, and offloads heavy work. They trade latency for reliability and decoupling. -->
|
|
38
|
+
|
|
39
|
+
## Question 4
|
|
40
|
+
|
|
41
|
+
Consistent hashing is used to:
|
|
42
|
+
|
|
43
|
+
A) Encrypt data across nodes
|
|
44
|
+
B) Minimize key reassignment when nodes are added or removed
|
|
45
|
+
C) Balance load evenly across all nodes
|
|
46
|
+
D) Ensure data consistency in a distributed database
|
|
47
|
+
|
|
48
|
+
<!-- ANSWER: B -->
|
|
49
|
+
<!-- EXPLANATION: Consistent hashing maps keys to a ring. When a node joins/leaves, only keys in that node's range need to move. Used in CDNs, caches, and distributed storage. -->
|
|
50
|
+
|
|
51
|
+
## Question 5
|
|
52
|
+
|
|
53
|
+
For a URL shortener with 10:1 read:write ratio, the main scalability concern is:
|
|
54
|
+
|
|
55
|
+
A) Write throughput to the database
|
|
56
|
+
B) Read throughput — use caching aggressively
|
|
57
|
+
C) Storage capacity
|
|
58
|
+
D) Network latency between regions
|
|
59
|
+
|
|
60
|
+
<!-- ANSWER: B -->
|
|
61
|
+
<!-- EXPLANATION: With 10:1 read:write, reads dominate. Caching (CDN, app cache) for hot short URLs dramatically reduces DB read load. Writes are much lower volume. -->
|
|
62
|
+
|
|
63
|
+
## Question 6
|
|
64
|
+
|
|
65
|
+
Fan-out on write (precomputing feeds) is preferable when:
|
|
66
|
+
|
|
67
|
+
A) Most users have millions of followers
|
|
68
|
+
B) Most users have few followers and read frequently
|
|
69
|
+
C) Writes are more frequent than reads
|
|
70
|
+
D) You need real-time consistency
|
|
71
|
+
|
|
72
|
+
<!-- ANSWER: B -->
|
|
73
|
+
<!-- EXPLANATION: Fan-out on write: when a user posts, push to all followers' feeds. Good when followers are modest in number; reads are fast. Bad for celebrities (millions of followers). -->
|
|
74
|
+
|
|
75
|
+
## Question 7
|
|
76
|
+
|
|
77
|
+
<!-- VISUAL: quiz-drag-order -->
|
|
78
|
+
|
|
79
|
+
Put these system design interview steps in the recommended order:
|
|
80
|
+
|
|
81
|
+
A) Scale the design (bottlenecks, sharding, caching)
|
|
82
|
+
B) Clarify requirements and constraints
|
|
83
|
+
C) Design high-level components
|
|
84
|
+
D) Deep dive on 1–2 critical components
|
|
85
|
+
E) Identify and address trade-offs
|
|
86
|
+
|
|
87
|
+
<!-- ANSWER: B,C,A,D,E -->
|
|
88
|
+
<!-- EXPLANATION: Clarify requirements first. Design high-level components. Scale the design (handle load). Deep dive on critical parts. Discuss trade-offs and alternatives. -->
|
|
89
|
+
|
|
90
|
+
## Question 8
|
|
91
|
+
|
|
92
|
+
<!-- VISUAL: quiz-matching -->
|
|
93
|
+
|
|
94
|
+
Match each scaling technique to its description:
|
|
95
|
+
|
|
96
|
+
A) Horizontal scaling → 1) Add more machines to handle load
|
|
97
|
+
B) Vertical scaling → 2) Add more RAM, CPU to existing machines
|
|
98
|
+
C) Sharding → 3) Partition data across multiple databases by key
|
|
99
|
+
D) Load balancer → 4) Distribute requests across multiple servers
|
|
100
|
+
|
|
101
|
+
<!-- ANSWER: A1,B2,C3,D4 -->
|
|
102
|
+
<!-- EXPLANATION: Horizontal = add more nodes. Vertical = add resources to existing nodes. Sharding = partition data by key. Load balancer = distribute incoming requests. -->
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# System Design — Resources
|
|
2
|
+
|
|
3
|
+
## Videos
|
|
4
|
+
|
|
5
|
+
- [System Design Interview — Gaurav Sen](https://www.youtube.com/playlist?list=PLMCXHnjXnTnvo6alSjVkgxV-VH6EPyvoX) — Structured approach and common problems.
|
|
6
|
+
- [ByteByteGo — System Design](https://www.youtube.com/@ByteByteGo) — Visual explanations of distributed systems.
|
|
7
|
+
- [Gaurav Sen — CAP Theorem](https://www.youtube.com/watch?v=k-Yaq8AHlFA) — CAP explained clearly.
|
|
8
|
+
- [Tech Dummies — System Design](https://www.youtube.com/playlist?list=PLkQkbY7JN6BpnK7Xn-HVXy4cR-LxxHrBQ) — Interview-style walkthroughs.
|
|
9
|
+
|
|
10
|
+
## Articles and Guides
|
|
11
|
+
|
|
12
|
+
- [System Design Primer](https://github.com/donnemartin/system-design-primer) — Comprehensive GitHub repo with topics, patterns, and exercises.
|
|
13
|
+
- [High Scalability](http://highscalability.com/) — Case studies and patterns from real systems.
|
|
14
|
+
- [Martin Fowler — CQRS](https://martinfowler.com/bliki/CQRS.html) — Command Query Responsibility Segregation.
|
|
15
|
+
- [Martin Fowler — Event Sourcing](https://martinfowler.com/eaaDev/EventSourcing.html) — Event sourcing pattern.
|
|
16
|
+
- [InfoQ — Distributed Systems](https://www.infoq.com/distributed-systems/) — Articles on distributed systems.
|
|
17
|
+
|
|
18
|
+
## Books
|
|
19
|
+
|
|
20
|
+
- **Designing Data-Intensive Applications** by Martin Kleppmann — The definitive guide (DDIA).
|
|
21
|
+
- **System Design Interview** by Alex Xu — Two-volume interview preparation.
|
|
22
|
+
- **Building Microservices** by Sam Newman — Microservices architecture.
|
|
23
|
+
|
|
24
|
+
## Tools and References
|
|
25
|
+
|
|
26
|
+
- [Consistent Hashing — Original Paper](https://www.akamai.com/blog/performance/what-is-consistent-hashing) — Akamai's explanation.
|
|
27
|
+
- [Redis Documentation — Caching Strategies](https://redis.io/docs/manual/patterns/) — Cache patterns with Redis.
|
|
28
|
+
- [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/) — Scalability and reliability best practices.
|
|
29
|
+
|
|
30
|
+
## Podcasts
|
|
31
|
+
|
|
32
|
+
- [Software Engineering Daily — Distributed Systems](https://softwareengineeringdaily.com/category/all-episodes/exclusive-content/distributed-systems/) — Technical deep dives on databases, caching, messaging.
|
|
33
|
+
- [The Pragmatic Engineer Podcast](https://newsletter.pragmaticengineer.com/) — Gergely Orosz on large-scale system decisions.
|
|
34
|
+
- [InfoQ Podcast](https://www.infoq.com/podcasts/) — Architecture and scalability interviews with industry leaders.
|
|
35
|
+
|
|
36
|
+
## Interactive and Visual
|
|
37
|
+
|
|
38
|
+
- [ByteByteGo — System Design Visuals](https://bytebytego.com/) — Alex Xu's animated system design diagrams and newsletters.
|
|
39
|
+
- [Excalidraw](https://excalidraw.com/) — Collaborative whiteboard for sketching architecture diagrams.
|
|
40
|
+
- [System Design Primer — Anki Flashcards](https://github.com/donnemartin/system-design-primer#anki-flashcards) — Spaced-repetition cards for system design concepts.
|
|
41
|
+
|
|
42
|
+
## Courses
|
|
43
|
+
|
|
44
|
+
- [MIT 6.824 — Distributed Systems (free)](https://pdos.csail.mit.edu/6.824/) — Lecture videos, labs on Raft, MapReduce, and more.
|
|
45
|
+
- [Grokking the System Design Interview](https://www.designgurus.io/course/grokking-the-system-design-interview) — Structured walkthrough of common design problems.
|
|
46
|
+
- [Educative — System Design for Developers](https://www.educative.io/courses/grokking-modern-system-design-interview-for-engineers-managers) — Interactive text-based course with diagrams.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# System Design Walkthrough — Learn by Doing
|
|
2
|
+
|
|
3
|
+
## Before We Begin
|
|
4
|
+
|
|
5
|
+
<!-- hint:slides topic="System design process: requirements, estimation, high-level architecture, database choice, scaling, and CAP theorem" slides="6" -->
|
|
6
|
+
|
|
7
|
+
**Diagnostic Question:** When someone says "design a system," what do you think they mean first — the boxes and arrows, the data model, the APIs, or something else? Why might different people answer differently?
|
|
8
|
+
|
|
9
|
+
**Checkpoint:** You recognize that system design starts with understanding the problem before drawing anything. The "right" starting point depends on context.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Step 1: Clarify Requirements
|
|
14
|
+
|
|
15
|
+
<!-- hint:progress -->
|
|
16
|
+
|
|
17
|
+
**Task:** You're asked to "design a URL shortener." Write down 3 functional and 3 non-functional requirements you'd ask the interviewer to clarify.
|
|
18
|
+
|
|
19
|
+
**Question:** Why does it matter whether the short URLs are 6 chars or 8 chars? What about read vs write ratio?
|
|
20
|
+
|
|
21
|
+
**Checkpoint:** You have a clear list of assumptions (scale, TTL, analytics, etc.).
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 2: Back-of-Envelope Estimation
|
|
26
|
+
|
|
27
|
+
**Task:** Assume 100M URLs/month. Estimate: (a) writes per second, (b) reads per second (assume 10:1 read:write), (c) storage for 5 years (50 bytes per record).
|
|
28
|
+
|
|
29
|
+
**Question:** What rounding and approximations did you use? How accurate do estimates need to be at this stage?
|
|
30
|
+
|
|
31
|
+
**Checkpoint:** You have rough QPS and storage numbers that bound the problem.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Step 3: High-Level Diagram
|
|
36
|
+
|
|
37
|
+
<!-- hint:diagram mermaid-type="flowchart" topic="URL shortener architecture" -->
|
|
38
|
+
|
|
39
|
+
**Embed:** https://excalidraw.com/
|
|
40
|
+
|
|
41
|
+
**Task:** Draw a high-level architecture for the URL shortener: client, API, app servers, cache, database. Include the flow for "create short URL" and "resolve short URL."
|
|
42
|
+
|
|
43
|
+
**Question:** Where would a cache sit, and what keys would it use? What happens on a cache miss?
|
|
44
|
+
|
|
45
|
+
**Checkpoint:** You have a boxes-and-arrows diagram with clear data flow.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Step 4: Choose a Database
|
|
50
|
+
|
|
51
|
+
<!-- hint:buttons type="single" prompt="Which database would you choose for a URL shortener?" options="SQL for consistency,NoSQL for scale,Depends on requirements" -->
|
|
52
|
+
|
|
53
|
+
**Task:** Would you use SQL or NoSQL for the URL shortener? Justify. Consider: schema, scale, consistency needs, operational simplicity.
|
|
54
|
+
|
|
55
|
+
**Question:** What if the requirement was "we need to list all URLs created by user X"? Does that change your choice?
|
|
56
|
+
|
|
57
|
+
**Checkpoint:** You can articulate tradeoffs between SQL and NoSQL for this use case.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Step 5: Handle Scale and Bottlenecks
|
|
62
|
+
|
|
63
|
+
**Task:** Identify 2 bottlenecks: (1) DB write throughput, (2) cache stampede when a viral link gets massive traffic. Propose mitigations.
|
|
64
|
+
|
|
65
|
+
**Question:** What is a cache stampede? How would you prevent it (e.g., lock, probabilistic early expiration)?
|
|
66
|
+
|
|
67
|
+
**Checkpoint:** You can name concrete techniques (sharding, queuing, cache locking) for each bottleneck.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Step 6: CAP and Consistency
|
|
72
|
+
|
|
73
|
+
<!-- hint:card type="concept" title="CAP Theorem" -->
|
|
74
|
+
<!-- hint:celebrate -->
|
|
75
|
+
|
|
76
|
+
**Task:** For the URL shortener, would you choose CP or AP? Why? What would "eventual consistency" mean for a redirect?
|
|
77
|
+
|
|
78
|
+
**Question:** Can a user tolerate seeing a 404 for a few seconds after creating a link? What about a banking transfer?
|
|
79
|
+
|
|
80
|
+
**Checkpoint:** You can explain why this system likely chooses AP and what tradeoffs that implies.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Step 7: Rate Limiting
|
|
85
|
+
|
|
86
|
+
**Task:** Design a rate limit for the "create short URL" endpoint: 10 req/min per IP. Describe the algorithm (fixed window, sliding window, or token bucket) and what headers to return.
|
|
87
|
+
|
|
88
|
+
**Question:** What happens if a user hits the limit? Should you return 429 immediately or queue the request?
|
|
89
|
+
|
|
90
|
+
**Checkpoint:** You have a concrete rate-limiting strategy and response format.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Team Topologies — Structuring Teams for Fast Flow
|
|
2
|
+
|
|
3
|
+
<!-- hint:slides topic="Team topologies: Conway's Law, four team types (stream-aligned, enabling, complicated-subsystem, platform), interaction modes, and cognitive load" slides="6" -->
|
|
4
|
+
|
|
5
|
+
## Conway's Law
|
|
6
|
+
|
|
7
|
+
**"Organizations design systems that mirror their communication structure."** — Melvin Conway (1967)
|
|
8
|
+
|
|
9
|
+
If you have three teams working on a system, you'll get a three-part system. If teams don't talk to each other, the architecture will have hard boundaries where they don't. Conway's Law isn't a suggestion—it's an observation of how organizations actually work. The implication: **change the team structure to change the system architecture.**
|
|
10
|
+
|
|
11
|
+
## The Four Fundamental Team Types
|
|
12
|
+
|
|
13
|
+
From *Team Topologies* by Skelton & Pais:
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
flowchart TB
|
|
17
|
+
subgraph TeamTypes[Four Team Types]
|
|
18
|
+
SA[Stream-Aligned]
|
|
19
|
+
P[Platform]
|
|
20
|
+
E[Enabling]
|
|
21
|
+
CS[Complicated-Subsystem]
|
|
22
|
+
end
|
|
23
|
+
subgraph Modes[Interaction Modes]
|
|
24
|
+
Collab[Collaboration]
|
|
25
|
+
XaaS[X-as-a-Service]
|
|
26
|
+
Facil[Facilitating]
|
|
27
|
+
end
|
|
28
|
+
SA -->|XaaS| P
|
|
29
|
+
E -->|Facil| SA
|
|
30
|
+
CS -->|Collab| SA
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
flowchart TB
|
|
35
|
+
subgraph Types["Four Team Types"]
|
|
36
|
+
SA[Stream-Aligned Team]
|
|
37
|
+
P[Platform Team]
|
|
38
|
+
E[Enabling Team]
|
|
39
|
+
CS[Complicated-Subsystem Team]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
SA -->|"owns full stream"| P
|
|
43
|
+
P -->|"provides platform"| SA
|
|
44
|
+
E -->|"helps learn"| SA
|
|
45
|
+
CS -->|"owns complex domain"| SA
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
| Type | Purpose | Example |
|
|
49
|
+
|------|---------|---------|
|
|
50
|
+
| **Stream-aligned** | Own a full stream of value (e.g., checkout, search). They build, run, and evolve it. | "Checkout team" owns checkout end-to-end |
|
|
51
|
+
| **Platform** | Provide internal services, APIs, tooling so stream-aligned teams can ship without reinventing the wheel. | Platform team provides auth, deploy pipelines, observability |
|
|
52
|
+
| **Enabling** | Help stream-aligned teams learn new skills or adopt new tech. Temporary; they enable then step back. | Enable team helps adopt Kubernetes |
|
|
53
|
+
| **Complicated-subsystem** | Own a highly specialized domain (e.g., ML model, cryptography) that requires deep expertise. | Team owns payment compliance and PCI |
|
|
54
|
+
|
|
55
|
+
**Stream-aligned teams are the default.** Platform, enabling, and complicated-subsystem teams exist to *support* them.
|
|
56
|
+
|
|
57
|
+
## The Three Interaction Modes
|
|
58
|
+
|
|
59
|
+
How teams work together matters as much as team type:
|
|
60
|
+
|
|
61
|
+
```mermaid
|
|
62
|
+
flowchart LR
|
|
63
|
+
subgraph Modes["Interaction Modes"]
|
|
64
|
+
C[Collaboration]
|
|
65
|
+
X[X-as-a-Service]
|
|
66
|
+
F[Facilitating]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
C -->|"high trust, discover together"| X
|
|
70
|
+
X -->|"clear API, SLA"| F
|
|
71
|
+
F -->|"teach, then step back"| C
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
| Mode | When to Use | What It Looks Like |
|
|
75
|
+
|------|-------------|-------------------|
|
|
76
|
+
| **Collaboration** | Discovery, new domain, high ambiguity | Two teams work side-by-side; shared goals; flexible boundaries |
|
|
77
|
+
| **X-as-a-Service** | Stable, well-defined interface | Platform team provides a service; stream-aligned team consumes via API/SLA; low touch |
|
|
78
|
+
| **Facilitating** | Learning, adoption, transition | Enabling team teaches and supports; stream-aligned team learns; enabling steps back when done |
|
|
79
|
+
|
|
80
|
+
**Default to X-as-a-Service** for platform teams. Collaboration is expensive—use it when discovery is needed. Facilitating is time-bound.
|
|
81
|
+
|
|
82
|
+
## Cognitive Load: The Key Constraint
|
|
83
|
+
|
|
84
|
+
Teams can only hold so much in their heads. **Cognitive load** has three dimensions:
|
|
85
|
+
|
|
86
|
+
1. **Intrinsic** — inherent complexity of the domain (e.g., payments is hard)
|
|
87
|
+
2. **Extraneous** — unnecessary complexity from tooling, process, unclear ownership
|
|
88
|
+
3. **Germane** — productive learning that improves the team over time
|
|
89
|
+
|
|
90
|
+
**Goal:** Minimize extraneous, manage intrinsic, maximize germane. If a team's cognitive load is too high, they'll cut corners, create tech debt, or burn out. Splitting a team or adding a platform team can *reduce* load by simplifying what each team must understand.
|
|
91
|
+
|
|
92
|
+
## Team Size: Two-Pizza Rule and Dunbar
|
|
93
|
+
|
|
94
|
+
- **Two-pizza rule** (Amazon): Team should be feedable by two pizzas—roughly 5–9 people. Larger teams need more coordination.
|
|
95
|
+
- **Dunbar's number:** Humans can maintain ~150 meaningful relationships, but effective *working* teams are typically 7±2. Beyond that, sub-teams form informally—design for it explicitly.
|
|
96
|
+
|
|
97
|
+
**When to split:** When cognitive load is too high, when wait times for decisions grow, or when the team naturally divides into sub-domains.
|
|
98
|
+
|
|
99
|
+
## Team APIs
|
|
100
|
+
|
|
101
|
+
Teams interact through **APIs**—not just HTTP, but contracts: "We provide X; you consume Y; here's the SLA." A team API includes:
|
|
102
|
+
|
|
103
|
+
- **Documentation** — What we offer, how to use it
|
|
104
|
+
- **SLA** — Uptime, latency, support
|
|
105
|
+
- **Versioning** — How we evolve without breaking consumers
|
|
106
|
+
- **Support** — Who to ask, how to escalate
|
|
107
|
+
|
|
108
|
+
Platform teams should have clear team APIs so stream-aligned teams can self-serve.
|
|
109
|
+
|
|
110
|
+
## Evolving Team Structures
|
|
111
|
+
|
|
112
|
+
Team topologies aren't static. As the product and organization evolve:
|
|
113
|
+
|
|
114
|
+
- **Early stage:** Few stream-aligned teams; maybe one platform person
|
|
115
|
+
- **Growth:** Add platform team when stream-aligned teams duplicate work
|
|
116
|
+
- **Scale:** Add enabling teams for big transitions (e.g., cloud migration)
|
|
117
|
+
- **Mature:** Complicated-subsystem teams when a domain requires dedicated expertise
|
|
118
|
+
|
|
119
|
+
**Avoid the Inverse Conway Maneuver pitfall:** Don't reorganize to "match" a desired architecture without also changing communication and incentives. Structure and behavior must align.
|
|
120
|
+
|
|
121
|
+
## Common Pitfalls
|
|
122
|
+
|
|
123
|
+
| Pitfall | What Goes Wrong | Better Approach |
|
|
124
|
+
|---------|-----------------|-----------------|
|
|
125
|
+
| **Too many collaboration modes** | Everyone needs to work with everyone; meetings explode | Default to X-as-a-Service; limit collaboration to true discovery |
|
|
126
|
+
| **Platform team does project work** | Platform becomes a bottleneck; stream-aligned teams wait | Platform provides capabilities; stream-aligned teams build features |
|
|
127
|
+
| **Enabling never steps back** | Enabling team becomes permanent; stream-aligned doesn't own | Enabling has an exit criteria; handoff and step back |
|
|
128
|
+
| **Ignoring cognitive load** | Teams are overwhelmed; quality drops | Split teams or add platform; simplify ownership |
|
|
129
|
+
| **Reorg without behavior change** | New org chart, same silos | Change incentives, APIs, and communication patterns |
|
|
130
|
+
|
|
131
|
+
## Four Team Types — Visual Summary
|
|
132
|
+
|
|
133
|
+
```mermaid
|
|
134
|
+
flowchart TB
|
|
135
|
+
subgraph StreamAligned["Stream-Aligned (default)"]
|
|
136
|
+
SA1[Own full stream]
|
|
137
|
+
SA2[Build, run, evolve]
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
subgraph Platform["Platform"]
|
|
141
|
+
P1[Internal services, APIs]
|
|
142
|
+
P2[X-as-a-Service to streams]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
subgraph Enabling["Enabling"]
|
|
146
|
+
E1[Teach, support]
|
|
147
|
+
E2[Step back when done]
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
subgraph Complicated["Complicated-Subsystem"]
|
|
151
|
+
C1[Specialized domain]
|
|
152
|
+
C2[Deep expertise required]
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
Platform --> StreamAligned
|
|
156
|
+
Enabling --> StreamAligned
|
|
157
|
+
Complicated --> StreamAligned
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Key Takeaways
|
|
161
|
+
|
|
162
|
+
1. **Conway's Law** — Structure and architecture are linked; change one to change the other.
|
|
163
|
+
2. **Stream-aligned first** — Default team type; others support them.
|
|
164
|
+
3. **Interaction modes** — Collaboration (discovery), X-as-a-Service (default), Facilitating (learning).
|
|
165
|
+
4. **Cognitive load** — The key constraint; design to reduce it.
|
|
166
|
+
5. **Team APIs** — Clear contracts between teams enable autonomy.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Team Topologies — Exercises
|
|
2
|
+
|
|
3
|
+
## Exercise 1: Map Your Organization
|
|
4
|
+
|
|
5
|
+
**Task:** Create a diagram of your engineering organization (or a representative slice). Label each team by type: stream-aligned, platform, enabling, complicated-subsystem. Draw arrows for key interactions and label the mode (collaboration, X-as-a-Service, facilitating).
|
|
6
|
+
|
|
7
|
+
**Validation:**
|
|
8
|
+
- [ ] All teams classified
|
|
9
|
+
- [ ] Key interactions shown with mode labels
|
|
10
|
+
- [ ] At least one mismatch or improvement opportunity noted
|
|
11
|
+
|
|
12
|
+
**Hints:**
|
|
13
|
+
1. Stream-aligned = owns a full value stream (e.g., "checkout," "search")
|
|
14
|
+
2. Platform = provides services/tooling for other teams
|
|
15
|
+
3. Enabling = temporary; helps teams learn then steps back
|
|
16
|
+
4. Complicated-subsystem = highly specialized domain
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Exercise 2: Design a Platform Team API
|
|
21
|
+
|
|
22
|
+
**Task:** You're creating a platform team that will provide: CI/CD pipelines, observability (metrics, logs, traces), and a shared auth library. Write a one-page "team API" document: what each offering is, how to consume it, SLA (e.g., 99.9% uptime), and support path.
|
|
23
|
+
|
|
24
|
+
**Validation:**
|
|
25
|
+
- [ ] Each capability is defined
|
|
26
|
+
- [ ] Consumption path is clear (docs, examples, onboarding)
|
|
27
|
+
- [ ] SLA and support model specified
|
|
28
|
+
- [ ] A stream-aligned team could self-serve from this doc
|
|
29
|
+
|
|
30
|
+
**Hints:**
|
|
31
|
+
1. SLA: What does "platform down" mean? Response time for support?
|
|
32
|
+
2. Versioning: How do we evolve without breaking consumers?
|
|
33
|
+
3. Onboarding: Link to runbooks, slack channel, office hours
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Exercise 3: Cognitive Load Assessment
|
|
38
|
+
|
|
39
|
+
**Task:** Pick a team (real or hypothetical). List 5 sources of cognitive load. Classify each as intrinsic, extraneous, or germane. For each extraneous source, propose one change to reduce it.
|
|
40
|
+
|
|
41
|
+
**Validation:**
|
|
42
|
+
- [ ] 5 sources identified
|
|
43
|
+
- [ ] Each classified correctly
|
|
44
|
+
- [ ] At least 2 extraneous sources with proposed fixes
|
|
45
|
+
- [ ] Fixes are concrete and actionable
|
|
46
|
+
|
|
47
|
+
**Hints:**
|
|
48
|
+
1. Intrinsic: domain complexity (payments, ML, crypto)
|
|
49
|
+
2. Extraneous: unclear ownership, brittle tooling, excessive context-switching
|
|
50
|
+
3. Germane: learning a new system, deliberate practice
|
|
51
|
+
4. Fixes: simplify ownership, add platform, reduce meetings
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Exercise 4: When to Add a Platform Team
|
|
56
|
+
|
|
57
|
+
**Task:** You have 3 stream-aligned teams. Each has built its own deploy pipeline, logging, and error tracking—slightly different in each case. Write a short proposal: when and why to add a platform team. Include: trigger (what signals "now"?), scope (what does platform own?), and transition plan (how do stream-aligned teams migrate?).
|
|
58
|
+
|
|
59
|
+
**Validation:**
|
|
60
|
+
- [ ] Clear trigger for adding platform
|
|
61
|
+
- [ ] Scope is defined (what platform owns vs. streams)
|
|
62
|
+
- [ ] Transition plan addresses "how do we get there"
|
|
63
|
+
- [ ] Proposal is 1 page or less
|
|
64
|
+
|
|
65
|
+
**Hints:**
|
|
66
|
+
1. Trigger: duplication, inconsistency, long onboarding for new teams
|
|
67
|
+
2. Scope: start with highest-leverage (deploy? observability?)
|
|
68
|
+
3. Transition: platform builds v1; streams migrate over 2–3 months; deprecate old
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Exercise 5: Interaction Mode Mismatch
|
|
73
|
+
|
|
74
|
+
**Task:** Describe a scenario where two teams use the *wrong* interaction mode. Example: platform and stream-aligned in constant collaboration when X-as-a-Service would work. What are the symptoms? What would need to change to fix it?
|
|
75
|
+
|
|
76
|
+
**Validation:**
|
|
77
|
+
- [ ] Scenario is concrete (teams, domain, current mode)
|
|
78
|
+
- [ ] Wrong mode is justified (why is it a problem?)
|
|
79
|
+
- [ ] Correct mode identified
|
|
80
|
+
- [ ] Change plan includes: new API, SLA, communication pattern
|
|
81
|
+
|
|
82
|
+
**Hints:**
|
|
83
|
+
1. Collaboration when X-as-a-Service would work: everyone in every meeting, no clear API
|
|
84
|
+
2. Symptoms: platform is bottleneck, stream-aligned teams wait
|
|
85
|
+
3. Fix: define team API, document, establish SLA, reduce ad-hoc communication
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
slug: team-topologies
|
|
2
|
+
title: "Team Topologies — Structuring Teams for Fast Flow"
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Design teams for fast flow: Conway's Law, four team types, three interaction modes, and cognitive load."
|
|
5
|
+
category: leadership
|
|
6
|
+
tags: [team-topologies, organization-design, team-structure, conways-law, platform-teams]
|
|
7
|
+
difficulty: advanced
|
|
8
|
+
|
|
9
|
+
xp:
|
|
10
|
+
read: 20
|
|
11
|
+
walkthrough: 50
|
|
12
|
+
exercise: 30
|
|
13
|
+
quiz: 25
|
|
14
|
+
quiz-perfect-bonus: 15
|
|
15
|
+
|
|
16
|
+
time:
|
|
17
|
+
quick: 5
|
|
18
|
+
read: 25
|
|
19
|
+
guided: 60
|
|
20
|
+
|
|
21
|
+
prerequisites: []
|
|
22
|
+
related: [system-design, one-on-ones]
|
|
23
|
+
|
|
24
|
+
triggers:
|
|
25
|
+
- "How should I structure engineering teams?"
|
|
26
|
+
- "What are team topologies?"
|
|
27
|
+
- "What is Conway's Law?"
|
|
28
|
+
- "What are platform teams?"
|
|
29
|
+
|
|
30
|
+
visuals:
|
|
31
|
+
diagrams: [diagram-mermaid, diagram-architecture]
|
|
32
|
+
quiz-types: [quiz-matching, quiz-timed-choice]
|
|
33
|
+
slides: true
|
|
34
|
+
|
|
35
|
+
sources:
|
|
36
|
+
- label: "Team Topologies by Skelton & Pais"
|
|
37
|
+
type: book
|
|
38
|
+
url: "https://teamtopologies.com"
|
|
39
|
+
- label: "Conway's Law (original paper)"
|
|
40
|
+
type: article
|
|
41
|
+
url: "https://www.melconway.com/Home/Committees_Paper.html"
|