@shaykec/bridge 0.4.24 → 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.
Files changed (320) hide show
  1. package/journeys/ai-engineer.yaml +34 -0
  2. package/journeys/backend-developer.yaml +36 -0
  3. package/journeys/business-analyst.yaml +37 -0
  4. package/journeys/devops-engineer.yaml +37 -0
  5. package/journeys/engineering-manager.yaml +44 -0
  6. package/journeys/frontend-developer.yaml +41 -0
  7. package/journeys/fullstack-developer.yaml +49 -0
  8. package/journeys/mobile-developer.yaml +42 -0
  9. package/journeys/product-manager.yaml +35 -0
  10. package/journeys/qa-engineer.yaml +37 -0
  11. package/journeys/ux-designer.yaml +43 -0
  12. package/modules/README.md +52 -0
  13. package/modules/accessibility-fundamentals/content.md +126 -0
  14. package/modules/accessibility-fundamentals/exercises.md +88 -0
  15. package/modules/accessibility-fundamentals/module.yaml +43 -0
  16. package/modules/accessibility-fundamentals/quick-ref.md +71 -0
  17. package/modules/accessibility-fundamentals/quiz.md +100 -0
  18. package/modules/accessibility-fundamentals/resources.md +29 -0
  19. package/modules/accessibility-fundamentals/walkthrough.md +80 -0
  20. package/modules/adr-writing/content.md +121 -0
  21. package/modules/adr-writing/exercises.md +81 -0
  22. package/modules/adr-writing/module.yaml +41 -0
  23. package/modules/adr-writing/quick-ref.md +57 -0
  24. package/modules/adr-writing/quiz.md +73 -0
  25. package/modules/adr-writing/resources.md +29 -0
  26. package/modules/adr-writing/walkthrough.md +64 -0
  27. package/modules/ai-agents/content.md +120 -0
  28. package/modules/ai-agents/exercises.md +82 -0
  29. package/modules/ai-agents/module.yaml +42 -0
  30. package/modules/ai-agents/quick-ref.md +60 -0
  31. package/modules/ai-agents/quiz.md +103 -0
  32. package/modules/ai-agents/resources.md +30 -0
  33. package/modules/ai-agents/walkthrough.md +85 -0
  34. package/modules/ai-assisted-research/content.md +136 -0
  35. package/modules/ai-assisted-research/exercises.md +80 -0
  36. package/modules/ai-assisted-research/module.yaml +42 -0
  37. package/modules/ai-assisted-research/quick-ref.md +67 -0
  38. package/modules/ai-assisted-research/quiz.md +73 -0
  39. package/modules/ai-assisted-research/resources.md +33 -0
  40. package/modules/ai-assisted-research/walkthrough.md +85 -0
  41. package/modules/ai-pair-programming/content.md +105 -0
  42. package/modules/ai-pair-programming/exercises.md +98 -0
  43. package/modules/ai-pair-programming/module.yaml +39 -0
  44. package/modules/ai-pair-programming/quick-ref.md +58 -0
  45. package/modules/ai-pair-programming/quiz.md +73 -0
  46. package/modules/ai-pair-programming/resources.md +34 -0
  47. package/modules/ai-pair-programming/walkthrough.md +117 -0
  48. package/modules/ai-test-generation/content.md +125 -0
  49. package/modules/ai-test-generation/exercises.md +98 -0
  50. package/modules/ai-test-generation/module.yaml +39 -0
  51. package/modules/ai-test-generation/quick-ref.md +65 -0
  52. package/modules/ai-test-generation/quiz.md +74 -0
  53. package/modules/ai-test-generation/resources.md +41 -0
  54. package/modules/ai-test-generation/walkthrough.md +100 -0
  55. package/modules/api-design/content.md +189 -0
  56. package/modules/api-design/exercises.md +84 -0
  57. package/modules/api-design/game.yaml +113 -0
  58. package/modules/api-design/module.yaml +45 -0
  59. package/modules/api-design/quick-ref.md +73 -0
  60. package/modules/api-design/quiz.md +100 -0
  61. package/modules/api-design/resources.md +55 -0
  62. package/modules/api-design/walkthrough.md +88 -0
  63. package/modules/clean-code/content.md +136 -0
  64. package/modules/clean-code/exercises.md +137 -0
  65. package/modules/clean-code/game.yaml +172 -0
  66. package/modules/clean-code/module.yaml +44 -0
  67. package/modules/clean-code/quick-ref.md +44 -0
  68. package/modules/clean-code/quiz.md +105 -0
  69. package/modules/clean-code/resources.md +40 -0
  70. package/modules/clean-code/walkthrough.md +78 -0
  71. package/modules/clean-code/workshop.yaml +149 -0
  72. package/modules/code-review/content.md +130 -0
  73. package/modules/code-review/exercises.md +95 -0
  74. package/modules/code-review/game.yaml +83 -0
  75. package/modules/code-review/module.yaml +42 -0
  76. package/modules/code-review/quick-ref.md +77 -0
  77. package/modules/code-review/quiz.md +105 -0
  78. package/modules/code-review/resources.md +40 -0
  79. package/modules/code-review/walkthrough.md +106 -0
  80. package/modules/daily-workflow/content.md +81 -0
  81. package/modules/daily-workflow/exercises.md +50 -0
  82. package/modules/daily-workflow/module.yaml +33 -0
  83. package/modules/daily-workflow/quick-ref.md +37 -0
  84. package/modules/daily-workflow/quiz.md +65 -0
  85. package/modules/daily-workflow/resources.md +38 -0
  86. package/modules/daily-workflow/walkthrough.md +83 -0
  87. package/modules/debugging-systematically/content.md +139 -0
  88. package/modules/debugging-systematically/exercises.md +91 -0
  89. package/modules/debugging-systematically/module.yaml +46 -0
  90. package/modules/debugging-systematically/quick-ref.md +59 -0
  91. package/modules/debugging-systematically/quiz.md +105 -0
  92. package/modules/debugging-systematically/resources.md +42 -0
  93. package/modules/debugging-systematically/walkthrough.md +84 -0
  94. package/modules/debugging-systematically/workshop.yaml +127 -0
  95. package/modules/demo-test/content.md +68 -0
  96. package/modules/demo-test/exercises.md +28 -0
  97. package/modules/demo-test/game.yaml +171 -0
  98. package/modules/demo-test/module.yaml +41 -0
  99. package/modules/demo-test/quick-ref.md +54 -0
  100. package/modules/demo-test/quiz.md +74 -0
  101. package/modules/demo-test/resources.md +21 -0
  102. package/modules/demo-test/walkthrough.md +122 -0
  103. package/modules/demo-test/workshop.yaml +31 -0
  104. package/modules/design-critique/content.md +93 -0
  105. package/modules/design-critique/exercises.md +71 -0
  106. package/modules/design-critique/module.yaml +41 -0
  107. package/modules/design-critique/quick-ref.md +63 -0
  108. package/modules/design-critique/quiz.md +73 -0
  109. package/modules/design-critique/resources.md +27 -0
  110. package/modules/design-critique/walkthrough.md +68 -0
  111. package/modules/design-patterns/content.md +335 -0
  112. package/modules/design-patterns/exercises.md +82 -0
  113. package/modules/design-patterns/game.yaml +55 -0
  114. package/modules/design-patterns/module.yaml +45 -0
  115. package/modules/design-patterns/quick-ref.md +44 -0
  116. package/modules/design-patterns/quiz.md +101 -0
  117. package/modules/design-patterns/resources.md +40 -0
  118. package/modules/design-patterns/walkthrough.md +64 -0
  119. package/modules/exploratory-testing/content.md +133 -0
  120. package/modules/exploratory-testing/exercises.md +88 -0
  121. package/modules/exploratory-testing/module.yaml +41 -0
  122. package/modules/exploratory-testing/quick-ref.md +68 -0
  123. package/modules/exploratory-testing/quiz.md +75 -0
  124. package/modules/exploratory-testing/resources.md +39 -0
  125. package/modules/exploratory-testing/walkthrough.md +87 -0
  126. package/modules/git/content.md +128 -0
  127. package/modules/git/exercises.md +53 -0
  128. package/modules/git/game.yaml +190 -0
  129. package/modules/git/module.yaml +44 -0
  130. package/modules/git/quick-ref.md +67 -0
  131. package/modules/git/quiz.md +89 -0
  132. package/modules/git/resources.md +49 -0
  133. package/modules/git/walkthrough.md +92 -0
  134. package/modules/git/workshop.yaml +145 -0
  135. package/modules/hiring-interviews/content.md +130 -0
  136. package/modules/hiring-interviews/exercises.md +88 -0
  137. package/modules/hiring-interviews/module.yaml +41 -0
  138. package/modules/hiring-interviews/quick-ref.md +68 -0
  139. package/modules/hiring-interviews/quiz.md +73 -0
  140. package/modules/hiring-interviews/resources.md +36 -0
  141. package/modules/hiring-interviews/walkthrough.md +75 -0
  142. package/modules/hooks/content.md +97 -0
  143. package/modules/hooks/exercises.md +69 -0
  144. package/modules/hooks/module.yaml +39 -0
  145. package/modules/hooks/quick-ref.md +93 -0
  146. package/modules/hooks/quiz.md +81 -0
  147. package/modules/hooks/resources.md +34 -0
  148. package/modules/hooks/walkthrough.md +105 -0
  149. package/modules/hooks/workshop.yaml +64 -0
  150. package/modules/incident-response/content.md +124 -0
  151. package/modules/incident-response/exercises.md +82 -0
  152. package/modules/incident-response/game.yaml +132 -0
  153. package/modules/incident-response/module.yaml +45 -0
  154. package/modules/incident-response/quick-ref.md +53 -0
  155. package/modules/incident-response/quiz.md +103 -0
  156. package/modules/incident-response/resources.md +40 -0
  157. package/modules/incident-response/walkthrough.md +82 -0
  158. package/modules/llm-fundamentals/content.md +114 -0
  159. package/modules/llm-fundamentals/exercises.md +83 -0
  160. package/modules/llm-fundamentals/module.yaml +42 -0
  161. package/modules/llm-fundamentals/quick-ref.md +64 -0
  162. package/modules/llm-fundamentals/quiz.md +103 -0
  163. package/modules/llm-fundamentals/resources.md +30 -0
  164. package/modules/llm-fundamentals/walkthrough.md +91 -0
  165. package/modules/one-on-ones/content.md +133 -0
  166. package/modules/one-on-ones/exercises.md +81 -0
  167. package/modules/one-on-ones/module.yaml +44 -0
  168. package/modules/one-on-ones/quick-ref.md +67 -0
  169. package/modules/one-on-ones/quiz.md +73 -0
  170. package/modules/one-on-ones/resources.md +37 -0
  171. package/modules/one-on-ones/walkthrough.md +69 -0
  172. package/modules/package.json +9 -0
  173. package/modules/prioritization-frameworks/content.md +130 -0
  174. package/modules/prioritization-frameworks/exercises.md +93 -0
  175. package/modules/prioritization-frameworks/module.yaml +41 -0
  176. package/modules/prioritization-frameworks/quick-ref.md +77 -0
  177. package/modules/prioritization-frameworks/quiz.md +73 -0
  178. package/modules/prioritization-frameworks/resources.md +32 -0
  179. package/modules/prioritization-frameworks/walkthrough.md +69 -0
  180. package/modules/prompt-engineering/content.md +123 -0
  181. package/modules/prompt-engineering/exercises.md +82 -0
  182. package/modules/prompt-engineering/game.yaml +101 -0
  183. package/modules/prompt-engineering/module.yaml +45 -0
  184. package/modules/prompt-engineering/quick-ref.md +65 -0
  185. package/modules/prompt-engineering/quiz.md +105 -0
  186. package/modules/prompt-engineering/resources.md +36 -0
  187. package/modules/prompt-engineering/walkthrough.md +81 -0
  188. package/modules/rag-fundamentals/content.md +111 -0
  189. package/modules/rag-fundamentals/exercises.md +80 -0
  190. package/modules/rag-fundamentals/module.yaml +45 -0
  191. package/modules/rag-fundamentals/quick-ref.md +58 -0
  192. package/modules/rag-fundamentals/quiz.md +75 -0
  193. package/modules/rag-fundamentals/resources.md +34 -0
  194. package/modules/rag-fundamentals/walkthrough.md +75 -0
  195. package/modules/react-fundamentals/content.md +140 -0
  196. package/modules/react-fundamentals/exercises.md +81 -0
  197. package/modules/react-fundamentals/game.yaml +145 -0
  198. package/modules/react-fundamentals/module.yaml +45 -0
  199. package/modules/react-fundamentals/quick-ref.md +62 -0
  200. package/modules/react-fundamentals/quiz.md +106 -0
  201. package/modules/react-fundamentals/resources.md +42 -0
  202. package/modules/react-fundamentals/walkthrough.md +89 -0
  203. package/modules/react-fundamentals/workshop.yaml +112 -0
  204. package/modules/react-native-fundamentals/content.md +141 -0
  205. package/modules/react-native-fundamentals/exercises.md +79 -0
  206. package/modules/react-native-fundamentals/module.yaml +42 -0
  207. package/modules/react-native-fundamentals/quick-ref.md +60 -0
  208. package/modules/react-native-fundamentals/quiz.md +61 -0
  209. package/modules/react-native-fundamentals/resources.md +24 -0
  210. package/modules/react-native-fundamentals/walkthrough.md +84 -0
  211. package/modules/registry.yaml +1650 -0
  212. package/modules/risk-management/content.md +162 -0
  213. package/modules/risk-management/exercises.md +86 -0
  214. package/modules/risk-management/module.yaml +41 -0
  215. package/modules/risk-management/quick-ref.md +82 -0
  216. package/modules/risk-management/quiz.md +73 -0
  217. package/modules/risk-management/resources.md +40 -0
  218. package/modules/risk-management/walkthrough.md +67 -0
  219. package/modules/running-effective-standups/content.md +119 -0
  220. package/modules/running-effective-standups/exercises.md +79 -0
  221. package/modules/running-effective-standups/module.yaml +40 -0
  222. package/modules/running-effective-standups/quick-ref.md +61 -0
  223. package/modules/running-effective-standups/quiz.md +73 -0
  224. package/modules/running-effective-standups/resources.md +36 -0
  225. package/modules/running-effective-standups/walkthrough.md +76 -0
  226. package/modules/solid-principles/content.md +154 -0
  227. package/modules/solid-principles/exercises.md +107 -0
  228. package/modules/solid-principles/module.yaml +42 -0
  229. package/modules/solid-principles/quick-ref.md +50 -0
  230. package/modules/solid-principles/quiz.md +102 -0
  231. package/modules/solid-principles/resources.md +39 -0
  232. package/modules/solid-principles/walkthrough.md +84 -0
  233. package/modules/sprint-planning/content.md +142 -0
  234. package/modules/sprint-planning/exercises.md +79 -0
  235. package/modules/sprint-planning/game.yaml +84 -0
  236. package/modules/sprint-planning/module.yaml +44 -0
  237. package/modules/sprint-planning/quick-ref.md +76 -0
  238. package/modules/sprint-planning/quiz.md +102 -0
  239. package/modules/sprint-planning/resources.md +39 -0
  240. package/modules/sprint-planning/walkthrough.md +75 -0
  241. package/modules/sql-fundamentals/content.md +160 -0
  242. package/modules/sql-fundamentals/exercises.md +87 -0
  243. package/modules/sql-fundamentals/game.yaml +105 -0
  244. package/modules/sql-fundamentals/module.yaml +45 -0
  245. package/modules/sql-fundamentals/quick-ref.md +53 -0
  246. package/modules/sql-fundamentals/quiz.md +103 -0
  247. package/modules/sql-fundamentals/resources.md +42 -0
  248. package/modules/sql-fundamentals/walkthrough.md +92 -0
  249. package/modules/sql-fundamentals/workshop.yaml +109 -0
  250. package/modules/stakeholder-communication/content.md +186 -0
  251. package/modules/stakeholder-communication/exercises.md +87 -0
  252. package/modules/stakeholder-communication/module.yaml +38 -0
  253. package/modules/stakeholder-communication/quick-ref.md +89 -0
  254. package/modules/stakeholder-communication/quiz.md +73 -0
  255. package/modules/stakeholder-communication/resources.md +41 -0
  256. package/modules/stakeholder-communication/walkthrough.md +74 -0
  257. package/modules/system-design/content.md +149 -0
  258. package/modules/system-design/exercises.md +83 -0
  259. package/modules/system-design/game.yaml +95 -0
  260. package/modules/system-design/module.yaml +46 -0
  261. package/modules/system-design/quick-ref.md +59 -0
  262. package/modules/system-design/quiz.md +102 -0
  263. package/modules/system-design/resources.md +46 -0
  264. package/modules/system-design/walkthrough.md +90 -0
  265. package/modules/team-topologies/content.md +166 -0
  266. package/modules/team-topologies/exercises.md +85 -0
  267. package/modules/team-topologies/module.yaml +41 -0
  268. package/modules/team-topologies/quick-ref.md +61 -0
  269. package/modules/team-topologies/quiz.md +101 -0
  270. package/modules/team-topologies/resources.md +37 -0
  271. package/modules/team-topologies/walkthrough.md +76 -0
  272. package/modules/technical-debt/content.md +111 -0
  273. package/modules/technical-debt/exercises.md +92 -0
  274. package/modules/technical-debt/module.yaml +39 -0
  275. package/modules/technical-debt/quick-ref.md +60 -0
  276. package/modules/technical-debt/quiz.md +73 -0
  277. package/modules/technical-debt/resources.md +25 -0
  278. package/modules/technical-debt/walkthrough.md +94 -0
  279. package/modules/technical-mentoring/content.md +128 -0
  280. package/modules/technical-mentoring/exercises.md +84 -0
  281. package/modules/technical-mentoring/module.yaml +41 -0
  282. package/modules/technical-mentoring/quick-ref.md +74 -0
  283. package/modules/technical-mentoring/quiz.md +73 -0
  284. package/modules/technical-mentoring/resources.md +33 -0
  285. package/modules/technical-mentoring/walkthrough.md +65 -0
  286. package/modules/test-strategy/content.md +136 -0
  287. package/modules/test-strategy/exercises.md +84 -0
  288. package/modules/test-strategy/game.yaml +99 -0
  289. package/modules/test-strategy/module.yaml +45 -0
  290. package/modules/test-strategy/quick-ref.md +66 -0
  291. package/modules/test-strategy/quiz.md +99 -0
  292. package/modules/test-strategy/resources.md +60 -0
  293. package/modules/test-strategy/walkthrough.md +97 -0
  294. package/modules/test-strategy/workshop.yaml +96 -0
  295. package/modules/typescript-fundamentals/content.md +127 -0
  296. package/modules/typescript-fundamentals/exercises.md +79 -0
  297. package/modules/typescript-fundamentals/game.yaml +111 -0
  298. package/modules/typescript-fundamentals/module.yaml +45 -0
  299. package/modules/typescript-fundamentals/quick-ref.md +55 -0
  300. package/modules/typescript-fundamentals/quiz.md +104 -0
  301. package/modules/typescript-fundamentals/resources.md +42 -0
  302. package/modules/typescript-fundamentals/walkthrough.md +71 -0
  303. package/modules/typescript-fundamentals/workshop.yaml +146 -0
  304. package/modules/user-story-mapping/content.md +123 -0
  305. package/modules/user-story-mapping/exercises.md +87 -0
  306. package/modules/user-story-mapping/module.yaml +41 -0
  307. package/modules/user-story-mapping/quick-ref.md +64 -0
  308. package/modules/user-story-mapping/quiz.md +73 -0
  309. package/modules/user-story-mapping/resources.md +29 -0
  310. package/modules/user-story-mapping/walkthrough.md +86 -0
  311. package/modules/writing-prds/content.md +133 -0
  312. package/modules/writing-prds/exercises.md +93 -0
  313. package/modules/writing-prds/game.yaml +83 -0
  314. package/modules/writing-prds/module.yaml +44 -0
  315. package/modules/writing-prds/quick-ref.md +77 -0
  316. package/modules/writing-prds/quiz.md +103 -0
  317. package/modules/writing-prds/resources.md +30 -0
  318. package/modules/writing-prds/walkthrough.md +87 -0
  319. package/package.json +5 -3
  320. package/src/server.js +17 -7
@@ -0,0 +1,50 @@
1
+ # SOLID Quick Reference
2
+
3
+ ## The Five Principles
4
+
5
+ | Letter | Principle | One-Liner |
6
+ |--------|-----------|-----------|
7
+ | S | Single Responsibility | One reason to change |
8
+ | O | Open/Closed | Extend, don't modify |
9
+ | L | Liskov Substitution | Subtypes replace base types |
10
+ | I | Interface Segregation | Small, focused interfaces |
11
+ | D | Dependency Inversion | Depend on abstractions |
12
+
13
+ ## SRP — How to Split
14
+
15
+ | Signal | Action |
16
+ |--------|--------|
17
+ | "And" in class description | Split by responsibility |
18
+ | Multiple axes of change | Separate modules |
19
+ | Unrelated tests | Different concerns |
20
+
21
+ ## OCP — Extension Patterns
22
+
23
+ | Pattern | Use When |
24
+ |---------|----------|
25
+ | Strategy | Pluggable algorithms |
26
+ | Template Method | Skeleton with hooks |
27
+ | Plugin/Registry | Runtime-extensible |
28
+
29
+ ## LSP — Substitution Checklist
30
+
31
+ - [ ] Subtype honors base type's contract
32
+ - [ ] No stronger preconditions
33
+ - [ ] No weaker postconditions
34
+ - [ ] No surprising side effects
35
+
36
+ ## ISP — Interface Design
37
+
38
+ | Bad | Good |
39
+ |-----|------|
40
+ | One big interface | Multiple small interfaces |
41
+ | Implementers add no-ops | Clients depend only on what they use |
42
+ | God interface | Role-specific interfaces |
43
+
44
+ ## DIP — Dependency Direction
45
+
46
+ ```
47
+ High-level ──depends on──> Abstraction <──implements── Low-level
48
+ ```
49
+
50
+ Inject abstractions via constructor; avoid `new` for collaborators.
@@ -0,0 +1,102 @@
1
+ # SOLID Quiz
2
+
3
+ ## Question 1
4
+
5
+ What does the Single Responsibility Principle state?
6
+
7
+ A) Every function should have one line
8
+ B) A class should have only one reason to change
9
+ C) Every project should have one main file
10
+ D) A module should export one thing
11
+
12
+ <!-- ANSWER: B -->
13
+ <!-- EXPLANATION: SRP means each class/module should have one axis of change — one reason why it might need to be modified. This keeps changes localized and reduces coupling. -->
14
+
15
+ ## Question 2
16
+
17
+ How does the Open/Closed Principle suggest adding new behavior?
18
+
19
+ A) By editing existing code
20
+ B) By extending (new classes, plugins) without modifying existing code
21
+ C) By copying the entire module
22
+ D) By using configuration only
23
+
24
+ <!-- ANSWER: B -->
25
+ <!-- EXPLANATION: OCP says software should be open for extension, closed for modification. Add new behavior via new code (inheritance, composition, plugins) rather than editing working code. -->
26
+
27
+ ## Question 3
28
+
29
+ A Square class extends Rectangle but overrides setWidth to set both width and height. Why is this a Liskov violation?
30
+
31
+ A) Squares are not rectangles
32
+ B) Code that expects Rectangle's setWidth to only change width will get unexpected behavior
33
+ C) Square is slower
34
+ D) It uses more memory
35
+
36
+ <!-- ANSWER: B -->
37
+ <!-- EXPLANATION: LSP requires subtypes to be substitutable. Callers of Rectangle.setWidth expect only width to change. Square breaks that contract by also changing height, causing subtle bugs. -->
38
+
39
+ ## Question 4
40
+
41
+ What problem does Interface Segregation address?
42
+
43
+ A) Too many small interfaces
44
+ B) Clients forced to depend on methods they don't use
45
+ C) Interfaces that are too generic
46
+ D) Slow interface resolution
47
+
48
+ <!-- ANSWER: B -->
49
+ <!-- EXPLANATION: ISP says clients shouldn't depend on interfaces they don't use. Fat interfaces force implementers to add no-op methods and create unnecessary coupling. -->
50
+
51
+ ## Question 5
52
+
53
+ In Dependency Inversion, what should high-level modules depend on?
54
+
55
+ A) Low-level modules directly
56
+ B) Abstractions (interfaces)
57
+ C) Concrete implementations
58
+ D) Global singletons
59
+
60
+ <!-- ANSWER: B -->
61
+ <!-- EXPLANATION: DIP says both high-level and low-level modules should depend on abstractions. High-level modules define interfaces; low-level modules implement them. This enables swapping implementations and testing. -->
62
+
63
+ ## Question 6
64
+
65
+ Which principle most directly enables easy unit testing with mocks?
66
+
67
+ A) SRP
68
+ B) OCP
69
+ C) LSP
70
+ D) DIP
71
+
72
+ <!-- ANSWER: D -->
73
+ <!-- EXPLANATION: DIP enables dependency injection. When a class receives its dependencies (e.g., a database or logger) via constructor, you can inject mocks in tests. Without DIP, hard-coded dependencies make testing hard. -->
74
+
75
+ ## Question 7
76
+
77
+ <!-- VISUAL: matching -->
78
+
79
+ Match each SOLID letter to its principle name:
80
+
81
+ A) S → 1) Open/Closed Principle
82
+ B) O → 2) Dependency Inversion Principle
83
+ C) L → 3) Single Responsibility Principle
84
+ D) I → 4) Liskov Substitution Principle
85
+ E) D → 5) Interface Segregation Principle
86
+
87
+ <!-- ANSWER: A3,B1,C4,D5,E2 -->
88
+ <!-- EXPLANATION: S = Single Responsibility, O = Open/Closed, L = Liskov Substitution, I = Interface Segregation, D = Dependency Inversion. -->
89
+
90
+ ## Question 8
91
+
92
+ <!-- VISUAL: matching -->
93
+
94
+ Match each principle to a code example that violates it:
95
+
96
+ A) SRP violated → 1) A class that both sends emails and formats PDFs
97
+ B) OCP violated → 2) Adding a new payment method by editing the PaymentProcessor class
98
+ C) LSP violated → 3) A Bird subclass that overrides fly() to throw (penguin can't fly)
99
+ D) ISP violated → 4) A Worker interface with eat(), sleep(), and work() — Robot implements work() but must implement no-op eat() and sleep()
100
+
101
+ <!-- ANSWER: A1,B2,C3,D4 -->
102
+ <!-- EXPLANATION: SRP: one class with multiple unrelated responsibilities (1). OCP: modifying existing class instead of extending (2). LSP: subtype not substitutable (3). ISP: client forced to implement unused methods (4). -->
@@ -0,0 +1,39 @@
1
+ # SOLID — Resources
2
+
3
+ ## Videos
4
+
5
+ - [SOLID Principles in 5 Minutes](https://www.youtube.com/watch?v=rtmFCcjEgEw) — Web Dev Simplified. Quick overview.
6
+ - [SOLID Principles — Uncle Bob](https://www.youtube.com/watch?v=TMuno5RZNeE) — Robert Martin explains each principle.
7
+ - [Clean Architecture](https://www.youtube.com/watch?v=o_TH-Y78e4s) — Uncle Bob. SOLID in architecture context.
8
+
9
+ ## Articles and Readings
10
+
11
+ - [SOLID — Wikipedia](https://en.wikipedia.org/wiki/SOLID) — Overview and history.
12
+ - [Martin Fowler — Refactoring](https://refactoring.com/) — Patterns that align with SOLID.
13
+ - [Dependency Injection Principles](https://martinfowler.com/articles/injection.html) — Fowler on DI and DIP.
14
+
15
+ ## Books
16
+
17
+ - **Clean Code** by Robert C. Martin — SRP, naming, and more.
18
+ - **Clean Architecture** by Robert C. Martin — SOLID in architecture.
19
+ - **Design Patterns** by Gang of Four — Patterns that support SOLID.
20
+
21
+ ## Tools
22
+
23
+ - [Dependency injection (TypeScript)](https://www.npmjs.com/package/tsyringe) — Lightweight DI container.
24
+ - [Testing with mocks](https://jestjs.io/docs/mock-functions) — Jest mocks enabled by DIP.
25
+
26
+ ## Podcasts
27
+
28
+ - [Coding Blocks — SOLID Principles](https://www.codingblocks.net/) — Multi-episode breakdown of each SOLID principle with real code examples.
29
+ - [Software Engineering Radio — SOLID](https://www.se-radio.net/) — Deep discussions on applying SOLID in enterprise codebases.
30
+
31
+ ## Interactive and Visual
32
+
33
+ - [Refactoring Guru — SOLID](https://refactoring.guru/design-patterns) — Visual examples showing how patterns implement SOLID principles.
34
+ - [SOLID Principles Illustrated](https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898) — Comic-style illustrations of each principle with before/after code.
35
+
36
+ ## Courses
37
+
38
+ - [Coursera — SOLID Principles (University of Alberta)](https://www.coursera.org/learn/design-patterns) — Free to audit course, first modules cover SOLID foundations.
39
+ - [freeCodeCamp — SOLID Principles Explained](https://www.freecodecamp.org/news/solid-principles-explained-in-plain-english/) — Free article with practical JavaScript/TypeScript examples.
@@ -0,0 +1,84 @@
1
+ # SOLID Walkthrough — Learn by Doing
2
+
3
+ ## Before We Begin
4
+
5
+ <!-- hint:slides topic="The five SOLID principles: SRP, OCP, LSP, ISP, DIP — what each means, when to apply, and real-world examples" slides="6" -->
6
+
7
+ SOLID is an acronym for five principles that help design maintainable, flexible systems: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion. They're guides, not laws—understanding when to apply them matters more than rigid adherence.
8
+
9
+ **Diagnostic question:** Think of a class or module you've had to change recently. Did you modify it to add one thing or many? What would have made that change easier or safer?
10
+
11
+ **Checkpoint:** You can name at least one SOLID principle you've heard of and one situation where design made changes harder.
12
+
13
+ ---
14
+
15
+ ## Step 1: Identifying Responsibility Violations
16
+
17
+ <!-- hint:diagram mermaid-type="flowchart" topic="Single Responsibility Principle" -->
18
+ <!-- hint:card type="concept" title="SRP: One reason to change" -->
19
+
20
+ **Task:** Find a class or module in your codebase that does more than one kind of thing (e.g., fetches data, formats it, and sends emails). List each distinct responsibility.
21
+
22
+ **Question:** What would happen if the email provider API changed? Would you have to touch code that fetches data? What does that tell you about responsibility boundaries?
23
+
24
+ **Checkpoint:** The user can identify multiple responsibilities and explain why separating them helps.
25
+
26
+ ---
27
+
28
+ ## Step 2: Extracting by SRP
29
+
30
+ <!-- hint:code language="javascript" highlight="1,5" -->
31
+
32
+ **Task:** Take the module from Step 1 (or a simplified version). Extract one responsibility into a separate class or module. Ensure the original delegates to it.
33
+
34
+ **Question:** How did you decide the boundary? Could you have split differently? What would "too granular" look like?
35
+
36
+ **Checkpoint:** The user has at least one extracted component with a single, clear responsibility.
37
+
38
+ ---
39
+
40
+ ## Step 3: Open/Closed in Practice
41
+
42
+ <!-- hint:card type="concept" title="Open/Closed: Open for extension, closed for modification" -->
43
+
44
+ **Task:** Design a small discount calculator. Instead of a big if/else for each discount type, use a strategy-like approach: each discount type is a separate implementation that can be added without editing existing code.
45
+
46
+ **Question:** What would you need to change to add a "buy 2 get 1 free" discount? Would you edit old code or add new code?
47
+
48
+ **Checkpoint:** The user has a design where new behavior is added by extension, not modification.
49
+
50
+ ---
51
+
52
+ ## Step 4: Interface Segregation
53
+
54
+ <!-- hint:card type="concept" title="ISP: Clients shouldn't depend on methods they don't use" -->
55
+
56
+ **Task:** Imagine an interface with 5 methods. Two different clients each need only 2 of those methods. Split the interface so each client depends only on what it uses.
57
+
58
+ **Question:** What problems arise when a client is forced to depend on methods it never calls?
59
+
60
+ **Checkpoint:** The user understands ISP and has created smaller, focused interfaces.
61
+
62
+ ---
63
+
64
+ ## Step 5: Dependency Inversion
65
+
66
+ <!-- hint:card type="concept" title="DIP: Depend on abstractions, not concretions" -->
67
+
68
+ **Task:** Take a class that directly instantiates a dependency (e.g., `new HttpClient()`). Refactor so the dependency is injected via the constructor. The class should depend on an interface, not a concrete implementation.
69
+
70
+ **Question:** How does injection make testing easier? What would you pass in a unit test?
71
+
72
+ **Checkpoint:** The user can apply DIP with constructor injection and explain testability benefits.
73
+
74
+ ---
75
+
76
+ ## Step 6: Applying Multiple Principles
77
+
78
+ **Task:** Review a small feature you've built. Apply at least 2 SOLID principles: perhaps SRP (split a mixed class) and DIP (inject a dependency). Describe the before/after.
79
+
80
+ **Question:** When might strict SOLID adherence be overkill? How do you balance principles with pragmatism?
81
+
82
+ **Checkpoint:** The user can articulate tradeoffs and apply principles selectively.
83
+
84
+ <!-- hint:celebrate -->
@@ -0,0 +1,142 @@
1
+ # Sprint Planning — Estimation, Capacity, and Commitment
2
+
3
+ <!-- hint:slides topic="Sprint planning: two parts, estimation techniques, velocity vs capacity, Definition of Ready, and common pitfalls" slides="5" -->
4
+
5
+ ## What Is Sprint Planning?
6
+
7
+ **Sprint planning** is the Scrum ceremony where the team decides what work to do in the upcoming sprint and how to do it. It's a timeboxed event (typically 2–4 hours for a 2-week sprint) that produces two outcomes: a **sprint goal** and a **sprint backlog**.
8
+
9
+ Scrum defines sprint planning as having two parts:
10
+
11
+ 1. **What** — What can we achieve this sprint? (Product Owner presents the goal; team selects work.)
12
+ 2. **How** — How will we build it? (Team plans tasks and approach.)
13
+
14
+ ## The Two Parts of Sprint Planning
15
+
16
+ | Part | Who Leads | Output |
17
+ |------|-----------|--------|
18
+ | **What** | Product Owner | Sprint goal, selected backlog items |
19
+ | **How** | Development Team | Tasks, breakdown, approach |
20
+
21
+ The Product Owner explains the objective and proposed backlog items. The Development Team estimates capacity, selects items, and defines how they'll deliver them. The Scrum Master facilitates but doesn't make content decisions.
22
+
23
+ ## The Sprint Goal
24
+
25
+ A sprint goal is a **single, cohesive objective** for the sprint. It answers: "Why are we doing this work together?"
26
+
27
+ **Weak:** "Complete user stories from the backlog."
28
+
29
+ **Strong:** "Enable users to reset their password without calling support."
30
+
31
+ The sprint goal creates focus. When trade-offs arise during the sprint, the team asks: "Does this support the goal?"
32
+
33
+ ## Estimation Techniques
34
+
35
+ ### Story Points
36
+
37
+ Story points measure **relative complexity**, not hours. A 3-point story is roughly 1.5× a 2-point story. Teams calibrate over time.
38
+
39
+ **Fibonacci sequence (common):** 1, 2, 3, 5, 8, 13, 21
40
+
41
+ Larger numbers = more uncertainty. If a story feels bigger than 13, split it.
42
+
43
+ ### T-Shirt Sizing
44
+
45
+ Fast, non-numeric: **XS, S, M, L, XL**. Good for backlogs where precise points aren't needed. Map to points later if required (e.g., S=1, M=3, L=5, XL=8).
46
+
47
+ ### Planning Poker
48
+
49
+ 1. Product Owner reads the story.
50
+ 2. Everyone privately picks a card (story point value).
51
+ 3. Reveal simultaneously.
52
+ 4. Discuss outliers—why did someone pick 2 and someone 8?
53
+ 5. Re-vote until consensus.
54
+
55
+ Planning poker surfaces assumptions and promotes conversation. The estimate is a byproduct; the discussion is the value.
56
+
57
+ ## Velocity vs Capacity
58
+
59
+ | Term | Meaning |
60
+ |------|---------|
61
+ | **Velocity** | Historical throughput—how many points the team typically completes per sprint. Measured *after* the sprint. |
62
+ | **Capacity** | Available person-hours (or person-days) for the sprint. Planned *before* the sprint. |
63
+
64
+ **Capacity** = Team size × Working days × Hours per day × (1 − % meetings/admin)
65
+
66
+ **Velocity** = Average points completed over last 2–3 sprints (or team's best guess for new teams).
67
+
68
+ Use velocity to **forecast** how much work *might* get done. Use capacity to sanity-check that you haven't over-committed.
69
+
70
+ ## Commitment vs Forecast
71
+
72
+ - **Commitment** — The team commits to the sprint goal. They'll do everything in their power to achieve it. Scope may be adjusted if the goal changes or becomes invalid.
73
+ - **Forecast** — The selected backlog items are a *forecast*, not a promise. The team will rebalance as they learn.
74
+
75
+ In practice: commit to the *goal*; treat the *product backlog items* as a best-effort forecast.
76
+
77
+ ## Definition of Ready
78
+
79
+ Items must be **ready** before sprint planning. Definition of Ready (DoR) might include:
80
+
81
+ - [ ] Clear acceptance criteria
82
+ - [ ] Sized (or at least discussed)
83
+ - [ ] Dependencies identified
84
+ - [ ] Technical feasibility understood
85
+
86
+ If items aren't ready, the team spends planning time clarifying instead of committing. Define your DoR as a team.
87
+
88
+ ## Sprint Planning Flow
89
+
90
+ ```mermaid
91
+ flowchart TD
92
+ A[Product Owner presents goal + proposed items] --> B[Team discusses capacity]
93
+ B --> C[Team selects items for sprint]
94
+ C --> D[Team breaks down into tasks]
95
+ D --> E[Sprint goal agreed]
96
+ E --> F[Sprint backlog complete]
97
+ F --> G[Sprint starts]
98
+ ```
99
+
100
+ ## Common Anti-Patterns
101
+
102
+ 1. **Over-commitment** — Loading the sprint to 100%+ of velocity. Leave buffer for unknowns; 80–90% is often healthier.
103
+ 2. **No sprint goal** — A list of unrelated stories with no unifying purpose.
104
+ 3. **Estimating in hours** — Hours are precise but mislead; complexity and uncertainty matter more. Story points keep the focus on relative effort.
105
+ 4. **Skipping the "how"** — Only selecting stories without tasking. The team discovers blockers mid-sprint.
106
+ 5. **Stakeholders dictating scope** — Sprint planning is a team decision. External pressure to "fit more in" undermines ownership.
107
+
108
+ ## Tips for Remote Sprint Planning
109
+
110
+ - **Async prep:** Share proposed items and context 24–48 hours before. Let people read ahead.
111
+ - **Break into two sessions:** Part 1 (what) and Part 2 (how) on different days if attention wanes.
112
+ - **Use shared boards:** Miro, FigJam, or Jira/Linear so everyone can see and edit.
113
+ - **Timebox rigorously:** 15-min chunks per topic; move on even if not "perfect."
114
+ - **Cameras on for key decisions:** When voting or agreeing the goal, visibility helps.
115
+ - **Document decisions:** Capture sprint goal and key assumptions in a shared doc immediately.
116
+
117
+ ## Sprint Goal Template
118
+
119
+ ```markdown
120
+ ## Sprint Goal
121
+
122
+ **Sprint:** [Sprint X — dates]
123
+
124
+ **Goal:** [One sentence: what outcome we're aiming for]
125
+
126
+ **Success looks like:** [2–3 concrete outcomes or demos]
127
+
128
+ **Out of scope this sprint:** [What we're explicitly NOT doing]
129
+ ```
130
+
131
+ ## Capacity Calculation Example
132
+
133
+ ```markdown
134
+ Team: 5 developers, 2-week sprint
135
+ Working days: 10
136
+ Hours per developer per day: 6 (after meetings)
137
+ Meeting/admin overhead: ~15%
138
+
139
+ Capacity = 5 × 10 × 6 × 0.85 ≈ 255 developer-hours
140
+ ```
141
+
142
+ Use velocity (e.g., 45 points last sprint) to forecast how many points to pull. If capacity is lower (holidays, PTO), pull fewer points.
@@ -0,0 +1,79 @@
1
+ # Sprint Planning — Exercises
2
+
3
+ ## Exercise 1: Write a Sprint Goal
4
+
5
+ **Task:** Your team is working on a "v2 search" release. The backlog has: basic keyword search, filters, search suggestions, export results, save searches. Write a sprint goal that focuses on one outcome (e.g., "Users can find products by keyword and filter by category") and explicitly excludes 1–2 items.
6
+
7
+ **Validation:**
8
+ - [ ] Goal is one sentence, outcome-focused
9
+ - [ ] At least one item is explicitly out of scope
10
+ - [ ] Success could be demoed or measured
11
+
12
+ **Hints:**
13
+ 1. "Enable users to..." or "Reduce time to..." are good openings
14
+ 2. "Complete X, Y, Z features" is output—rewrite as outcome
15
+ 3. Out-of-scope prevents "why didn't we do export?" surprises
16
+
17
+ ---
18
+
19
+ ## Exercise 2: Story Point Calibration
20
+
21
+ **Task:** You have a "baseline" story: "Add a 'Forgot password' link to the login screen" = 2 points. Estimate these relative to it: (A) "Implement OAuth login with Google," (B) "Add form validation to 5 fields," (C) "Replace legacy auth service with new API." Assign points and explain the ratios.
22
+
23
+ **Validation:**
24
+ - [ ] Each story has a point value
25
+ - [ ] Ratio to baseline is explained (e.g., "3× the complexity")
26
+ - [ ] Uncertainty is reflected (larger = more unknown)
27
+
28
+ **Hints:**
29
+ 1. OAuth = new integration, multiple flows → 5 or 8
30
+ 2. Form validation = repetitive but known → 2 or 3
31
+ 3. Replace legacy = high risk, unknowns → 8 or 13
32
+
33
+ ---
34
+
35
+ ## Exercise 3: Capacity vs Velocity
36
+
37
+ **Task:** Team of 4, 2-week sprint. Each person has 6 productive hours/day. Last 3 sprints: 32, 28, 35 points. Calculate capacity in person-hours. What's average velocity? How many points would you forecast, and why?
38
+
39
+ **Validation:**
40
+ - [ ] Capacity = 4 × 10 × 6 = 240 person-hours (or similar)
41
+ - [ ] Velocity ≈ 31–32 points
42
+ - [ ] Forecast is justified (e.g., "slightly under velocity for buffer")
43
+
44
+ **Hints:**
45
+ 1. Don't assume 100% utilization
46
+ 2. Velocity varies—use average or trend
47
+ 3. Consider pulling 85–90% of velocity for safety
48
+
49
+ ---
50
+
51
+ ## Exercise 4: Planning Poker Scenario
52
+
53
+ **Task:** Run a "mental" planning poker for "Add real-time notifications when a teammate comments on your PR." List 3 reasons someone might vote 2, and 3 reasons someone might vote 8. What discussion would resolve the gap?
54
+
55
+ **Validation:**
56
+ - [ ] Reasons for low estimate (simplicity, existing infra)
57
+ - [ ] Reasons for high estimate (integration, edge cases, unknowns)
58
+ - [ ] Discussion topics that would align the team
59
+
60
+ **Hints:**
61
+ 1. Low: "We have a notification service already"
62
+ 2. High: "Real-time means WebSockets, testing, browser support"
63
+ 3. Resolve by: defining "real-time," checking existing systems, splitting scope
64
+
65
+ ---
66
+
67
+ ## Exercise 5: Definition of Ready Checklist
68
+
69
+ **Task:** Create a 4-item Definition of Ready. Apply it to: "As a user, I want to see my order history, so I can track past purchases." Score each criterion (ready / not ready) and list what's missing.
70
+
71
+ **Validation:**
72
+ - [ ] DoR has 4 concrete, testable criteria
73
+ - [ ] Each criterion is scored for the story
74
+ - [ ] Gaps are listed with specific next steps
75
+
76
+ **Hints:**
77
+ 1. Example criteria: acceptance criteria, dependencies identified, sized, technically feasible
78
+ 2. "Order history" might need: API exists? UI design? Pagination?
79
+ 3. Missing = "Need to confirm API contract," "Design not final"
@@ -0,0 +1,84 @@
1
+ games:
2
+ - type: speed-round
3
+ title: "Story Point Sprint"
4
+ rounds:
5
+ - question: "As a user, I can log in with email and password. (Existing auth; simple form.)"
6
+ options:
7
+ - "1"
8
+ - "2"
9
+ - "3"
10
+ - "5"
11
+ answer: 0
12
+ timeLimit: 14
13
+ - question: "As a user, I can export my data to CSV. (New feature; one API, one UI button.)"
14
+ options:
15
+ - "1"
16
+ - "2"
17
+ - "3"
18
+ - "5"
19
+ answer: 1
20
+ timeLimit: 16
21
+ - question: "As a user, I can see a dashboard with 5 charts. (New charts; integrate with existing APIs; some UI work.)"
22
+ options:
23
+ - "2"
24
+ - "3"
25
+ - "5"
26
+ - "8"
27
+ answer: 2
28
+ timeLimit: 16
29
+ - question: "As a user, I can pay with credit card. (New payment provider integration; PCI considerations; error handling.)"
30
+ options:
31
+ - "3"
32
+ - "5"
33
+ - "8"
34
+ - "13"
35
+ answer: 1
36
+ timeLimit: 18
37
+ - question: "As a user, I can reset my password via email. (Standard flow; email service exists.)"
38
+ options:
39
+ - "1"
40
+ - "2"
41
+ - "3"
42
+ - "5"
43
+ answer: 1
44
+ timeLimit: 14
45
+ - question: "As a user, I can invite teammates and manage permissions. (New permission model; UI; edge cases.)"
46
+ options:
47
+ - "3"
48
+ - "5"
49
+ - "8"
50
+ - "13"
51
+ answer: 1
52
+ timeLimit: 18
53
+ - question: "As a developer, we need to add unit tests for the checkout module. (Module has 8 functions; no tests yet.)"
54
+ options:
55
+ - "2"
56
+ - "3"
57
+ - "5"
58
+ - "8"
59
+ answer: 2
60
+ timeLimit: 16
61
+ - question: "As a user, I can search products by name, category, and price range. (New search; backend + filter UI.)"
62
+ options:
63
+ - "3"
64
+ - "5"
65
+ - "8"
66
+ - "13"
67
+ answer: 2
68
+ timeLimit: 18
69
+ - question: "As a user, I can change my profile picture. (Image upload; resize; storage integration.)"
70
+ options:
71
+ - "2"
72
+ - "3"
73
+ - "5"
74
+ - "8"
75
+ answer: 1
76
+ timeLimit: 16
77
+ - question: "As an admin, I can view audit logs for all user actions with filters and export. (New feature; logging infra exists but not for this.)"
78
+ options:
79
+ - "5"
80
+ - "8"
81
+ - "13"
82
+ - "21"
83
+ answer: 1
84
+ timeLimit: 18
@@ -0,0 +1,44 @@
1
+ slug: sprint-planning
2
+ title: "Sprint Planning — Estimation, Capacity, and Commitment"
3
+ version: 1.0.0
4
+ description: "Master sprint planning: estimation techniques, velocity vs capacity, commitment vs forecast, and common anti-patterns."
5
+ category: project-management
6
+ tags: [sprint-planning, agile, scrum, estimation, story-points, capacity]
7
+ difficulty: beginner
8
+
9
+ xp:
10
+ read: 10
11
+ walkthrough: 30
12
+ exercise: 20
13
+ quiz: 15
14
+ quiz-perfect-bonus: 10
15
+ game: 20
16
+ game-perfect-bonus: 10
17
+
18
+ time:
19
+ quick: 5
20
+ read: 15
21
+ guided: 45
22
+
23
+ prerequisites: []
24
+ related: [prioritization-frameworks, risk-management]
25
+
26
+ triggers:
27
+ - "How do I run sprint planning?"
28
+ - "How do I estimate story points?"
29
+ - "How much work should we commit to in a sprint?"
30
+ - "What's the difference between velocity and capacity?"
31
+
32
+ visuals:
33
+ diagrams: [diagram-flow, diagram-mermaid]
34
+ quiz-types: [quiz-drag-order, quiz-timed-choice]
35
+ game-types: [speed-round]
36
+ slides: true
37
+
38
+ sources:
39
+ - url: "https://scrumguides.org"
40
+ label: "Scrum Guide"
41
+ type: docs
42
+ - url: "https://www.mountaingoatsoftware.com"
43
+ label: "Mountain Goat Software"
44
+ type: site