@wazir-dev/cli 1.0.0

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 (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,460 @@
1
+ # Architectural Thinking — Architecture Expertise Module
2
+
3
+ > Architectural thinking is the discipline of making high-leverage decisions about software structure that are hard to reverse and affect the entire system's future. It differs from design thinking (which is tactical and reversible) by focusing on trade-offs, constraints, and long-term fitness.
4
+
5
+ > **Category:** Foundation
6
+ > **Complexity:** Simple
7
+ > **Applies when:** Any software project where structural decisions need to be made before or during implementation
8
+
9
+ **Cross-references:** [separation-of-concerns], [architecture-decision-records], [domain-driven-design], [coupling-and-cohesion]
10
+
11
+ ---
12
+
13
+ ## What This Is (and What It Isn't)
14
+
15
+ Architectural thinking is the cognitive discipline of reasoning about software at the level where decisions become difficult or impossible to reverse without significant cost. It is not a deliverable — not a diagram, not a document, not a phase of a project. It is a mode of reasoning that a practitioner applies continuously, asking at every significant decision point: "If we are wrong about this, how expensive is it to change?"
16
+
17
+ The clearest definition comes from the software architecture community itself: architecture encompasses the structure of a system (its elements and how they are related), the quality attributes the system must exhibit (performance, availability, security, modifiability), and the rationale for those structural choices. The rationale is the part most often omitted and most often regretted. An architecture without its reasoning is just a picture.
18
+
19
+ The distinction between architecture and design is not always clean, but the working definition that holds up under pressure is this: **architecture is the set of decisions that, once made, constrain all subsequent design decisions**. When Netflix chose to migrate from a monolith to microservices starting in 2008 after a database corruption outage halted DVD shipments, that was an architectural decision — it shaped team structure, deployment strategy, data ownership, and fault isolation for the next decade. When a Netflix engineer chose how to name a REST endpoint within one of those services, that was a design decision.
20
+
21
+ Architecture operates at three lenses simultaneously. The **technical lens** asks which structures best support the quality attributes the system requires — a system requiring five-nines availability will have a fundamentally different structure than one where downtime is tolerated. The **organizational lens** asks how the system's boundaries will interact with team boundaries; this is the domain of Conway's Law, which holds that organizations are constrained to produce system designs that mirror their own communication structures. Spotify's squad model — small cross-functional teams owning full services end-to-end — was not just an HR experiment; it was an architectural strategy using the Inverse Conway Maneuver to produce the loosely coupled, independently deployable services Spotify's scale required. The **business lens** asks which decisions are load-bearing for business outcomes — which quality attributes, if degraded, destroy the product's value proposition entirely.
22
+
23
+ Several misconceptions actively harm teams. The most common is "architecture is just diagrams." Diagrams are a communication tool; they are not architecture any more than a city map is the city. A team can have beautifully drawn C4 diagrams that document an architecture nobody actually follows. A second misconception is "senior developers automatically think architecturally." Seniority in implementation is not the same as training in trade-off analysis. Many excellent engineers have never been asked to reason explicitly about irreversibility, quality attribute trade-offs, or organizational coupling. Architectural thinking is a learnable, teachable discipline — not a trait that emerges automatically with experience. A third misconception is "we will sort out the architecture later." Some decisions can be deferred (the Last Responsible Moment principle encourages deferring decisions until the cost of not deciding exceeds the cost of deciding). But some decisions — the choice of database storage model, the placement of service boundaries, the data consistency model — become structurally embedded in the codebase within the first weeks. Deferring them is not neutrality; it is making an implicit architectural choice by default, usually the one that is hardest to change.
24
+
25
+ A final and damaging misconception is that architectural thinking belongs exclusively to a dedicated "architect" role. While formal architects exist and are valuable in certain organizational contexts, the thinking itself must be distributed. Every team member who makes a decision that constrains future decisions is doing architectural thinking, whether or not the organization labels it that way. Teams that reserve architectural thinking for a single role tend to produce architectures that are technically coherent but organizationally disconnected from the engineers who must implement and live with them.
26
+
27
+ ---
28
+
29
+ ## When to Use It
30
+
31
+ Architectural thinking is warranted whenever a decision meets at least one of the following criteria: it is difficult to reverse, it has system-wide effects, it directly impacts one or more quality attributes that matter to the business, or it influences how teams will communicate and collaborate.
32
+
33
+ **New systems from scratch.** Any greenfield system requires explicit architectural thinking before the first line of production code is written. The blank-slate moment is the highest-leverage point to make explicit choices about service boundaries, data ownership, consistency models, and deployment topology.
34
+
35
+ **Scaling inflection points.** Figma provides a canonical example. In 2020, Figma ran on a single Postgres database. By the end of 2022, they had moved to a distributed architecture with read replicas, caching, vertical partitioning, and eventually horizontal sharding with colocated shard groups. Each step was an architectural decision made at a scaling inflection point — not a design decision, because each one reshaped how engineers could write queries, how services could interact, and what consistency guarantees the application could make. Teams that delay this thinking until the system has already fallen over under load face the worst version of the problem: the architectural work must happen at maximum urgency, with minimum information clarity, and with a system that cannot be taken offline.
36
+
37
+ **Organizational change.** When teams split, merge, or have their ownership boundaries redrawn, the system architecture is being changed whether or not anyone is thinking about it explicitly. Amazon's two-pizza team rule — teams small enough to be fed by two pizzas — was an architectural instrument. The rule forced service boundary decisions because a team cannot own a service it cannot fully understand, deploy, and operate. Organizations that restructure teams without accompanying architectural redesign frequently produce architectures that encode the old communication patterns even after the org chart changes.
38
+
39
+ **Technology migration.** Moving from one database, message broker, or runtime environment to another is architectural. Netflix's 2008 decision to migrate from a vertically-scaled RDBMS to horizontally-scaled distributed data stores in AWS was not a "tech upgrade" — it was a structural transformation that required rethinking data ownership, caching strategy, and fault tolerance across the entire system.
40
+
41
+ **When quality attribute requirements change.** A system that was designed for internal use by 50 employees does not have the same architectural requirements as one that must serve 4 million concurrent external users. When the requirement changes, the architecture must be re-examined. Figma's real-time collaboration feature — using WebSockets, Conflict-free Replicated Data Types (CRDTs), and a custom multiplayer protocol built to avoid the complexity of Operational Transforms — was an architectural choice driven by a specific quality attribute requirement: low-latency, conflict-free concurrent editing at scale.
42
+
43
+ The threshold for team size is not fixed, but a practical heuristic is that any system with more than two teams contributing to it, or more than 12 months of expected active development, warrants explicit architectural thinking and documentation of the reasoning behind significant decisions.
44
+
45
+ ---
46
+
47
+ ## When NOT to Use It
48
+
49
+ Architectural thinking applied in the wrong contexts does as much damage as its absence in the right ones. The failure modes of over-architecture are real, documented, and have cost organizations significant time and competitive position.
50
+
51
+ **Single-person or very early-stage projects.** A developer building a weekend project or an MVP with a two-week runway should not be drawing C4 diagrams, writing Architecture Decision Records, or conducting Architecture Tradeoff Analysis Method (ATAM) sessions. The cost of architectural overhead — time, cognitive load, premature abstraction — exceeds the benefit when the system has no users, no proven product-market fit, and no team to coordinate. The right approach at this stage is to write the simplest thing that could possibly work, keep the code readable, and preserve optionality by not committing to infrastructure choices that are expensive to reverse. A working prototype in a monolith can be refactored; a beautifully designed microservices architecture for a product that nobody wants cannot be unsold.
52
+
53
+ **Decisions that are genuinely reversible.** Jeff Bezos's two-way door / one-way door framework is the right discriminator. Two-way doors — library choices, folder structure, API naming conventions, UI component organization — can be reopened if the decision turns out to be wrong. Making these slowly or with architectural ceremony is pure waste. One-way doors — the storage engine, the data consistency model, the inter-service communication protocol, the choice to embed a third-party vendor deeply into the data model — are decisions worth architectural investment because being wrong is genuinely expensive.
54
+
55
+ **Architecture astronautics.** Joel Spolsky coined the term "architecture astronaut" in 2001 to describe practitioners who ascend to such levels of abstraction that their work ceases to connect to actual system problems. The anti-pattern is recognizable: the architect produces elegant frameworks, platforms, and meta-systems that solve the most general possible version of a problem no one currently has. The pattern has appeared repeatedly in large organizations. XHTML 2.0, described by HTML5 evangelist Bruce Lawson as "a beautiful specification of philosophical purity that had absolutely no resemblance to the real world," was abandoned after years of work because it prioritized correctness in the abstract over compatibility with the actual web. John Carmack described Mark Zuckerberg's metaverse vision in 2021 as "a honeypot trap for architecture astronauts" — a system that absorbed thousands of engineering years building abstractions for a product category that had not yet validated its core premises with users.
56
+
57
+ **Analysis paralysis.** When a team treats every architectural decision as requiring exhaustive analysis before proceeding, the cost of the process itself becomes the bottleneck. Enterprise Architecture programs that never complete their analysis phase, platform teams that spend six months evaluating message broker options, or working groups that produce comprehensive comparison matrices for technology choices but never ship anything — these are analysis paralysis in action. The antidote is the Last Responsible Moment principle applied correctly: not "decide as late as possible" (which becomes an excuse for avoidance) but "decide at the point where the cost of not deciding exceeds the cost of deciding with the information currently available."
58
+
59
+ **Big Design Up Front (BDUF).** BDUF and its relatives — Big Modeling Up Front (BMUF), Big Requirements Up Front (BRUF) — represent the belief that sufficient upfront analysis can eliminate the need for architectural revision during implementation. This belief is empirically false in complex software systems. Requirements change. User behavior differs from predictions. Technology constraints surface during implementation that were invisible during design. The problem with BDUF is not that upfront thinking is bad; it is that BDUF assumes the design is complete when it is actually just a hypothesis. Treating an architectural hypothesis as a commitment before it has been tested against reality is the most common root cause of expensive architectural rework.
60
+
61
+ ---
62
+
63
+ ## How It Works
64
+
65
+ ### Trade-Off Analysis as the Core Activity
66
+
67
+ The First Law of Software Architecture, as articulated by Mark Richards, is: "Everything in software architecture is a trade-off." No architectural decision grants all desired properties simultaneously. Every choice that improves one quality attribute degrades another or increases some cost. The architect's job is not to find the perfect design — there is none — but to make the trade-offs explicit, understand their consequences, and choose with awareness of what is being gained and what is being paid.
68
+
69
+ The Architecture Tradeoff Analysis Method (ATAM) formalizes this process. ATAM evaluates a proposed architecture against a set of quality attribute requirements (called "scenarios"), identifies sensitivity points (where a single architectural decision strongly affects a quality attribute), and surfaces trade-off points (where two quality attributes pull in opposite directions). Its primary value is that it makes implicit trade-offs explicit before they become structural commitments in the codebase.
70
+
71
+ ### The Reversibility Spectrum
72
+
73
+ Not all architectural decisions are equally difficult to change. Thinking about decisions on a reversibility spectrum — from "change in minutes" to "requires multi-year migration" — helps allocate analytical effort appropriately. A useful model:
74
+
75
+ - **Highly reversible (two-way doors):** Dependency library choices (swap with a day's work), naming conventions, folder structure, UI component library selection, feature flag configuration.
76
+ - **Moderately reversible:** API contract shape (requires coordinated consumer changes), database schema (requires migrations and potentially downtime), authentication mechanism.
77
+ - **Difficult to reverse:** Storage engine choice (requires full data migration), service boundary placement (requires decomposing or merging services), inter-service communication protocol (gRPC vs. REST vs. message queues affects every service interface).
78
+ - **Effectively irreversible:** Data consistency model (switching from eventual consistency to strong consistency requires architectural reconstruction), fundamental deployment topology (migration from a monolith to microservices at Netflix took years and required org restructuring to parallel it).
79
+
80
+ When uncertain about where a decision falls on this spectrum, the correct question is: "If we discover in six months that this was wrong, what does 'fixing it' look like?" Answering that question honestly usually places the decision in the right zone.
81
+
82
+ ### Fitness Functions
83
+
84
+ A fitness function, as defined by Neal Ford, Rebecca Parsons, and Patrick Kua in "Building Evolutionary Architectures," is any mechanism that provides an objective integrity assessment of one or more architectural characteristics. The term is borrowed from evolutionary computation, where a fitness function evaluates how close a candidate solution is to a desired outcome.
85
+
86
+ In practice, fitness functions are automated checks that enforce architectural constraints continuously. Examples:
87
+
88
+ - **ArchUnit (Java):** A library for writing unit tests that verify architectural structure. `layeredArchitecture().consideringAllDependencies().layer("Controller").definedBy("..controller..").layer("Service").definedBy("..service..").whereLayer("Controller").mayNotBeAccessedByAnyLayer()` — this test will fail if any non-controller package imports from the controller layer, enforcing layered architecture as a continuous automated constraint rather than a convention that erodes over time.
89
+ - **Dependency direction tests:** Tests that assert no circular dependencies exist between modules, or that a domain module contains no references to infrastructure packages.
90
+ - **Performance fitness functions:** Tests that run against a staging environment and fail the build if p99 latency for critical paths exceeds a defined threshold.
91
+ - **Security fitness functions:** Static analysis rules that fail the build if any endpoint is not covered by an authorization check.
92
+
93
+ The power of fitness functions is that they convert architectural intentions into executable constraints. An architecture that has no fitness functions is enforced only through code review and convention — both of which erode under delivery pressure. Fitness functions are the architectural equivalent of unit tests: they do not prove correctness, but they prevent known failure modes from being silently reintroduced.
94
+
95
+ ### Architectural Drivers (Quality Attributes)
96
+
97
+ Quality attributes — sometimes called "architectural characteristics" or "-ilities" — are the non-functional requirements that most directly shape structural decisions. The key ones and their structural implications:
98
+
99
+ - **Availability:** Drives redundancy, failover, circuit breakers, and health-check mechanisms. A system requiring 99.99% availability cannot be single-region; it requires active-active or active-passive multi-region deployment.
100
+ - **Scalability:** Drives horizontal partitioning, stateless service design, and caching strategy. A system that must scale horizontally cannot have services that share mutable in-process state.
101
+ - **Security:** Drives authentication and authorization models, network segmentation, encryption at rest and in transit, and audit logging. Security requirements frequently conflict with performance and operational simplicity.
102
+ - **Modifiability (Maintainability):** Drives separation of concerns, [coupling-and-cohesion] decisions, and module boundary placement. The [domain-driven-design] bounded context pattern exists primarily to improve modifiability by co-locating code that changes together and separating code that changes for different reasons.
103
+ - **Testability:** Drives dependency inversion, seam placement, and interface design. Systems that are not designed for testability typically have high coupling and low cohesion — the same structural properties that reduce modifiability.
104
+ - **Performance (Latency/Throughput):** Drives caching, data locality, service collocation, and sometimes consistency trade-offs. The CAP theorem formalizes the hardest version of this: in a distributed system under network partition, you cannot simultaneously guarantee consistency and availability.
105
+
106
+ Quality attributes are not independent. Improving security typically degrades performance (encryption is expensive). Improving availability typically increases cost (redundancy requires more infrastructure). Improving modifiability typically introduces abstraction layers that reduce raw performance. The architect's task is to understand which quality attributes are primary — meaning, which ones, if degraded below a threshold, destroy the product's value proposition — and design the architecture to protect those first.
107
+
108
+ ### Conway's Law
109
+
110
+ Melvin Conway's observation from 1967 remains one of the most empirically robust insights in software architecture: "Organizations which design systems are constrained to produce designs which are copies of the communication structures of those organizations."
111
+
112
+ The implications are structural, not motivational. A team with three layers of management will tend to produce three-tier systems. A system built by two teams that do not communicate will tend to have a hard interface boundary exactly where the teams' responsibilities divide. This is not a failure of character; it is a consequence of the information flow constraints under which teams operate.
113
+
114
+ The actionable implication is the **Inverse Conway Maneuver**: if you want a particular system architecture, deliberately structure your teams to mirror that architecture. Spotify did not organize into squads by accident — squads were the instrument through which Spotify produced independently deployable services. Amazon's two-pizza team rule forces the small-team-small-service correspondence. If an organization wants a microservices architecture but has a monolithic team structure, it will produce a distributed monolith: a system with microservice aesthetics (separate deployables, network calls between services) but monolith coupling (shared databases, synchronized deployments, cascading failures).
115
+
116
+ ### The Last Responsible Moment
117
+
118
+ The Last Responsible Moment (LRM) is a principle from Lean Construction, applied to software architecture by Mary Poppendieck. The LRM is the point at which failing to make a decision eliminates an important alternative. Decisions made before the LRM are made with less information than will be available later, increasing the probability of being wrong. Decisions made after the LRM foreclose options that could have been preserved.
119
+
120
+ The principle does not justify avoiding decisions — "decide as late as possible" is a misreading that produces exactly the analysis paralysis it was meant to prevent. The correct application is: identify which decisions, if deferred, preserve valuable optionality, and which decisions, if deferred, eliminate important alternatives. Defer the former; act on the latter now.
121
+
122
+ An example: the choice between SQL and NoSQL storage for a new service can often be deferred if the service is initially deployed with an abstraction layer (a repository interface) that does not leak storage-specific semantics into the business logic. The LRM for that decision is when the performance characteristics of the system under production load reveal which storage model is required. A team that makes that decision in week one — before any production data — is guessing. A team that defers it through the abstraction layer, collects real data, and decides at month three has materially better information.
123
+
124
+ ### Architectural Documentation: Making Thinking Durable
125
+
126
+ Architectural thinking that lives only in practitioners' heads is organizational debt. When those practitioners leave, the reasoning behind structural decisions leaves with them. New team members encounter the system's structure without its rationale, make locally sensible changes that violate architectural constraints they did not know existed, and introduce exactly the coupling or consistency violations that the original structure was designed to prevent.
127
+
128
+ [Architecture-decision-records] (ADRs) are the primary tool for making architectural thinking durable. An ADR is a short document — typically one page — that records a single architectural decision: the context that made the decision necessary, the options considered, the decision made, and the consequences (both positive and negative) expected from it. ADRs are immutable after acceptance; if a decision is reversed, a new ADR records the reversal and its rationale. The cumulative ADR log is a navigable history of the system's architectural evolution.
129
+
130
+ The C4 model (Context, Container, Component, Code) provides a hierarchy of structural diagrams at four levels of zoom. The Context diagram (Level 1) shows the system and its external actors — the view that most stakeholders need. The Container diagram (Level 2) shows the deployable units (services, databases, frontends) and their relationships. The Component diagram (Level 3) shows the major components within a container. The Code diagram (Level 4) is rarely drawn, as IDEs provide this view on demand. C4's value is in the explicit hierarchy: each level of zoom answers a different question for a different audience.
131
+
132
+ The arc42 template is a comprehensive architecture documentation structure with 12 sections covering goals, constraints, context, solution strategy, building blocks, runtime behavior, deployment, cross-cutting concepts, architecture decisions, quality requirements, risks, and glossary. It can be used in combination with C4 for the structural diagrams and ADRs for the decision history.
133
+
134
+ ---
135
+
136
+ ## Trade-Offs Matrix
137
+
138
+ | You Get | You Pay |
139
+ |---------|---------|
140
+ | **Explicit trade-off analysis** — decisions made with awareness of consequences | **Upfront time cost** — analysis takes time that could be spent on implementation |
141
+ | **Reversibility awareness** — knowing which decisions are expensive to change before making them | **Cognitive overhead** — practitioners must maintain mental models of the whole system, not just their component |
142
+ | **Fitness function enforcement** — architectural constraints that survive code review pressure | **Test maintenance** — fitness functions must be updated when architectural decisions intentionally change |
143
+ | **Conway's Law alignment** — team structure designed to produce the desired system structure | **Organizational change cost** — restructuring teams is expensive, disruptive, and politically difficult |
144
+ | **Quality attribute protection** — architecture designed around the specific properties that matter | **Trade-off pain** — protecting the primary quality attribute actively degrades competing attributes |
145
+ | **ADR history** — future maintainers understand why the system has the shape it does | **Documentation discipline** — ADRs must be written at decision time; retroactive documentation is lower quality |
146
+ | **Deferred decisions (LRM)** — better information at decision time, preserved optionality | **Abstraction cost** — deferral requires abstraction layers that add complexity and may never be leveraged |
147
+ | **Evolutionary architecture** — system can adapt to changing requirements without full reconstruction | **Incremental migration complexity** — evolving a live system is harder than building a new one; strangler fig patterns require sustained discipline |
148
+ | **Microservices deployment independence** — teams can deploy without coordinating with other teams | **Distributed systems complexity** — observability, distributed tracing, service discovery, and partial failure modes must be solved |
149
+ | **Monolith simplicity** — single deployment unit, in-process calls, shared transaction boundaries | **Scaling ceiling** — a monolith has a finite scaling ceiling that is hit before microservices would be appropriate |
150
+
151
+ ---
152
+
153
+ ## Evolution Path
154
+
155
+ ### Stage 1: Sketch (Days 1–7)
156
+
157
+ At inception, the goal is not to commit to an architecture but to develop enough shared understanding to avoid the worst structural mistakes. The deliverable is a whiteboard sketch or a C4 Context diagram — not a detailed blueprint. Key questions to answer: What are the system's primary quality attribute requirements? What are the explicit constraints (budget, timeline, team skills, existing infrastructure)? Which decisions, if made now, would be most difficult to reverse?
158
+
159
+ The sketch phase should surface the top two or three architectural risks: the assumptions about the system's requirements that, if wrong, would require the most expensive architectural change. These risks should be the input to the spike phase.
160
+
161
+ ### Stage 2: Spike (Weeks 1–4)
162
+
163
+ A spike is a time-boxed technical investigation designed to reduce uncertainty about a specific architectural decision. It is not a prototype intended for production; it is an experiment designed to answer a specific question. "Can we achieve p99 latency under 200ms with the proposed database choice under realistic query patterns?" is an answerable question. A spike runs the experiment with real data shapes and real query patterns, and returns a concrete answer.
164
+
165
+ Spikes should target the decisions identified as highest-risk in the sketch phase. They are the architectural equivalent of the lean build-measure-learn cycle: treat the architectural hypothesis as a hypothesis, design a minimal experiment, and let the result inform the decision.
166
+
167
+ ### Stage 3: Commit (After spike evidence)
168
+
169
+ After spikes have reduced the uncertainty around high-risk decisions, commit to the decisions that have enough evidence. Write ADRs for each committed decision. Set up fitness functions for the constraints those decisions imply. Document the architecture in a C4 Container diagram so the team has a shared structural model.
170
+
171
+ Commit does not mean "never revisit." It means "the hypothesis has been tested to sufficient confidence to build on it." The ADR records the context and evidence; if that context changes materially, the ADR becomes the basis for an architectural revision conversation.
172
+
173
+ ### Stage 4: Continuous Re-evaluation
174
+
175
+ Architecture is not a phase; it is a continuous practice. As the system grows, quality attribute requirements change, team structure evolves, and technology options improve. Schedule regular architectural review cadences — quarterly for fast-moving systems, annually for stable ones — that revisit the ADR log and ask: "Which decisions are still valid? Which decisions were made in a context that no longer applies?"
176
+
177
+ Fitness functions automate the continuous enforcement of structural constraints. The review cadence addresses the strategic-level question of whether the constraints themselves are still the right ones.
178
+
179
+ ---
180
+
181
+ ## Failure Modes
182
+
183
+ ### Analysis Paralysis
184
+
185
+ The most common failure mode in teams with strong architectural thinking capabilities but weak decision-making discipline. The team understands trade-offs well enough to identify risks in every option, but lacks a framework for deciding when "good enough" information justifies commitment. The result is extended evaluation cycles, growing comparison matrices, and a system that exists only in documents while competitors ship.
186
+
187
+ The diagnostic signal: architectural work products that grow in detail without converging on decisions. The intervention: forcing the LRM analysis explicitly. "What alternatives are we foreclosing if we do not decide this by [date]? What is the cost of being wrong? Can we build a reversibility escape hatch?" If the answer to all three is satisfactory, the decision is ready to make.
188
+
189
+ ### Ivory Tower Architect
190
+
191
+ The failure mode of architectural work that is technically coherent but organizationally disconnected. The architect produces designs without consulting the engineers who will implement them, without understanding the codebase's actual current state, and without building the organizational buy-in required for the design to be followed. The result is an architecture that exists in documents but not in the running system.
192
+
193
+ Charity Majors, CTO of Honeycomb, has written extensively on this failure mode: architects who cannot read the system's observability data, who do not participate in on-call rotations, and who are not held accountable for the operational consequences of their designs consistently produce architectures that fail in production in ways they did not anticipate.
194
+
195
+ The intervention: require architects to spend regular time in implementation, in code review, and in incident review. Architectural decisions that cannot survive contact with operational reality should not survive the design phase.
196
+
197
+ ### Big Design Up Front (BDUF)
198
+
199
+ The failure mode of treating the initial architectural design as a commitment rather than a hypothesis. Teams operating in BDUF mode resist change to the initial design even when implementation reveals that the original assumptions were wrong. The cost compounds: each piece of implementation built on a flawed architectural assumption must be rebuilt when the assumption is corrected.
200
+
201
+ Historically, BDUF was the default approach for large enterprise and government systems projects. The pattern of massive initial design phases followed by painful rework during implementation has been documented in public sector IT failures globally, where years of architectural planning preceded systems that failed to meet their requirements in production.
202
+
203
+ ### Distributed Monolith
204
+
205
+ The failure mode of teams that apply microservices aesthetics without microservices discipline. The result is a system with many separately deployable services that cannot actually be deployed independently, because they share databases, have synchronous call chains spanning 8+ services, and have no well-defined service boundaries. Debugging, deployment coordination, and failure isolation are all worse than in a well-structured monolith.
206
+
207
+ This failure mode most commonly appears when an organization adopts microservices as a technology fashion without first addressing the [coupling-and-cohesion] and [domain-driven-design] discipline required to define service boundaries that reflect genuine domain autonomy.
208
+
209
+ ### Premature Optimization of Architecture
210
+
211
+ Optimizing for a scale or complexity that does not yet exist. A two-person startup that designs a globally distributed, multi-region, event-sourced, CQRS-based microservices architecture before having a single paying customer has front-loaded enormous complexity for a problem they do not yet have. If the product fails to find market fit (the most common startup failure mode), none of that architectural work has value. If the product succeeds, the architecture will likely need to be redesigned anyway because the actual scaling constraints differ from the assumed ones.
212
+
213
+ ---
214
+
215
+ ## Technology Landscape
216
+
217
+ ### Architecture Decision Records (ADRs)
218
+
219
+ The ADR format was proposed by Michael Nygard and has become the de facto standard for lightweight architectural decision documentation. The Markdown Architectural Decision Records (MADR) variant adds a more structured template. The `adr` CLI tool automates ADR file creation and maintains an index. The adr.github.io community maintains a comprehensive tooling list including adr-log (generates a decision log from MADRs), ADMentor (integration with Sparx Enterprise Architect), and Structurizr DSL (architecture-as-code with embedded ADR support).
220
+
221
+ ### C4 Model
222
+
223
+ Created by Simon Brown, the C4 model is a hierarchy of four diagram types: Context, Container, Component, and Code. The primary tooling is Structurizr, which supports a DSL for defining C4 models as code, generating multiple diagram types from a single model, and embedding the model in documentation systems. PlantUML and Mermaid both have C4 extensions. The C4 model is designed to be tool-agnostic; the diagram types are defined by what they show, not by which notation is used.
224
+
225
+ ### arc42
226
+
227
+ arc42 is a comprehensive architecture documentation template with 12 sections. It is widely adopted in German-speaking enterprise environments and has strong tooling integration with AsciiDoc, Confluence, and Docusaurus. arc42 section 9 is explicitly for architecture decisions and recommends ADRs as the documentation format for individual decisions.
228
+
229
+ ### Fitness Function Frameworks
230
+
231
+ - **ArchUnit (Java/JVM):** Unit-test-style assertions about package dependencies, class naming conventions, annotation presence, and layered architecture compliance. Integrates with JUnit and standard CI pipelines.
232
+ - **NetArchTest (.NET):** The .NET equivalent of ArchUnit. Fluent API for defining architecture rules as C# test methods.
233
+ - **Dependency-cruiser (JavaScript/TypeScript):** Validates and visualizes module dependencies. Can enforce that certain modules do not import from certain other modules, detecting architectural boundary violations in JavaScript codebases.
234
+ - **jMolecules:** A library for DDD building blocks in Java that integrates with ArchUnit to verify that tactical DDD patterns ([domain-driven-design] entities, value objects, aggregates, repositories) are used consistently.
235
+ - **Custom performance fitness functions:** Integration tests using tools like Gatling or k6, run in CI against a staging environment, configured to fail the build if latency or throughput thresholds are violated.
236
+
237
+ ### Architecture Tradeoff Analysis Method (ATAM)
238
+
239
+ A structured evaluation method developed at Carnegie Mellon's Software Engineering Institute. ATAM involves creating utility trees (hierarchical decompositions of quality attribute requirements), evaluating the architecture against them, and identifying sensitivity points and trade-off points. Most applicable for large, long-lived systems with complex quality attribute requirements, and for systems where multiple stakeholder groups have competing priorities.
240
+
241
+ ---
242
+
243
+ ## Decision Tree
244
+
245
+ Use the following criteria to determine the depth of architectural thinking warranted for a given decision or project context.
246
+
247
+ ```
248
+ START
249
+ |
250
+ v
251
+ Is this a new system or a significant change to an existing one?
252
+ |
253
+ +-- NO --> Is this a localized, reversible change (two-way door)?
254
+ | |
255
+ | +-- YES --> Make the decision now. No architectural process needed.
256
+ | |
257
+ | +-- NO --> Is the change affecting service boundaries, data model,
258
+ | or inter-system communication?
259
+ | |
260
+ | +-- YES --> Write an ADR. Consult with affected team leads.
261
+ | | Run a spike if uncertainty is high.
262
+ | |
263
+ | +-- NO --> Code review is sufficient. Document in commit message.
264
+ |
265
+ +-- YES --> Is the team size fewer than 3 people AND runway fewer than 3 months?
266
+ |
267
+ +-- YES --> Build the simplest thing. Keep code clean. Defer architectural
268
+ | ceremony. Revisit when team grows or system has users.
269
+ |
270
+ +-- NO --> Proceed with structured architectural thinking:
271
+ |
272
+ v
273
+ IDENTIFY quality attribute requirements (top 3 that, if degraded,
274
+ destroy business value).
275
+ |
276
+ v
277
+ IDENTIFY decisions that are difficult to reverse (one-way doors).
278
+ List the top 5.
279
+ |
280
+ v
281
+ For each one-way door decision:
282
+ Has a spike been run to reduce uncertainty?
283
+ |
284
+ +-- NO --> Is the decision needed in the next 2 sprints?
285
+ | |
286
+ | +-- NO --> Defer. Build abstraction layer.
287
+ | +-- YES --> Run a spike NOW (time-box to 3 days max).
288
+ |
289
+ +-- YES --> Write an ADR. Commit to the decision.
290
+ Add a fitness function to enforce the constraint.
291
+ |
292
+ v
293
+ Conway's Law check: Does the team structure mirror the desired
294
+ system structure?
295
+ |
296
+ +-- NO --> Flag as organizational risk. Discuss team topology
297
+ alignment before committing to service boundaries.
298
+ |
299
+ +-- YES --> Proceed. Draw a C4 Container diagram.
300
+ Schedule quarterly architectural review.
301
+ ```
302
+
303
+ **Concrete thresholds for escalation:**
304
+ - Team size >= 5 engineers contributing to the same system: require C4 Container diagram and ADR log.
305
+ - System expected lifespan >= 12 months: require ADR log.
306
+ - System serving external users at any scale: require at least one performance fitness function in CI.
307
+ - More than one team touching the same deployable: require explicit [separation-of-concerns] boundary documented as a C4 Container boundary.
308
+ - Any decision affecting data model of a service other than your own: require ADR reviewed by both team leads.
309
+
310
+ ---
311
+
312
+ ## Implementation Sketch
313
+
314
+ ### Example: Architecture Decision Record
315
+
316
+ The following is a concrete ADR for a service storage decision, following the MADR format:
317
+
318
+ ```markdown
319
+ # ADR-007: Use PostgreSQL for the Orders Service
320
+
321
+ ## Status
322
+ Accepted — 2026-02-14
323
+
324
+ ## Context
325
+ The Orders service must persist order state with ACID transaction guarantees across
326
+ order creation, payment capture, and inventory reservation. We evaluated PostgreSQL,
327
+ MongoDB, and DynamoDB.
328
+
329
+ Requirements:
330
+ - Strict consistency: partial order creation (order created, payment failed, inventory
331
+ not reserved) must be rolled back atomically.
332
+ - Query patterns: complex joins across orders, line items, and fulfillment records.
333
+ - Operational familiarity: current team has strong PostgreSQL expertise; none have
334
+ operated MongoDB or DynamoDB in production.
335
+
336
+ ## Decision
337
+ Use PostgreSQL 16 with the pgpool-II connection pooler.
338
+
339
+ ## Consequences
340
+ Positive:
341
+ - ACID transactions eliminate partial-state bugs at the application layer.
342
+ - Team can operate it without new skills investment.
343
+ - Complex join queries are straightforward.
344
+
345
+ Negative:
346
+ - Horizontal scaling requires sharding strategy if order volume exceeds ~50k writes/min.
347
+ (Current projected peak: 2k writes/min. Revisit at 20k writes/min.)
348
+ - Schema migrations require coordination; NoSQL would allow more flexible schema evolution.
349
+
350
+ ## Alternatives Considered
351
+ - **MongoDB**: Flexible schema, but multi-document transactions are more complex to reason
352
+ about. Ruled out due to consistency requirements and team unfamiliarity.
353
+ - **DynamoDB**: Excellent horizontal scaling, but single-table design requires significant
354
+ data modeling investment and would couple our query patterns to DynamoDB's access patterns
355
+ permanently (one-way door risk).
356
+
357
+ ## Fitness Function
358
+ See `src/test/architecture/OrdersServiceArchTest.java`: test asserts that no class in
359
+ `com.example.orders` imports from `com.example.inventory` directly (enforcing
360
+ service boundary).
361
+ ```
362
+
363
+ ### Example: Fitness Function (ArchUnit, Java)
364
+
365
+ ```java
366
+ @AnalyzeClasses(packages = "com.example")
367
+ public class ServiceBoundaryArchTest {
368
+
369
+ @ArchTest
370
+ static final ArchRule orders_must_not_depend_on_inventory =
371
+ noClasses()
372
+ .that().resideInAPackage("..orders..")
373
+ .should().dependOnClassesThat()
374
+ .resideInAPackage("..inventory..")
375
+ .because("Orders and Inventory are separate bounded contexts. " +
376
+ "Communication must go through the event bus, not direct imports. " +
377
+ "See ADR-007 and ADR-012.");
378
+
379
+ @ArchTest
380
+ static final ArchRule domain_must_not_depend_on_infrastructure =
381
+ noClasses()
382
+ .that().resideInAPackage("..domain..")
383
+ .should().dependOnClassesThat()
384
+ .resideInAPackage("..infrastructure..")
385
+ .because("Domain logic must remain independent of infrastructure details. " +
386
+ "See separation-of-concerns module.");
387
+ }
388
+ ```
389
+
390
+ ### Example: C4 Context Diagram Description (Structurizr DSL)
391
+
392
+ ```
393
+ workspace {
394
+ model {
395
+ customer = person "Customer" "Places and tracks orders via web or mobile app."
396
+ orders_system = softwareSystem "Orders Platform" "Handles order lifecycle from placement to fulfillment."
397
+ payment_gateway = softwareSystem "Payment Gateway" "External: Stripe. Processes payment captures and refunds."
398
+ inventory_system = softwareSystem "Inventory System" "Internal legacy system. Manages warehouse stock levels."
399
+ notification_service = softwareSystem "Notification Service" "Sends email/SMS confirmations and status updates."
400
+
401
+ customer -> orders_system "Places orders, tracks status"
402
+ orders_system -> payment_gateway "Captures payment [HTTPS/REST]"
403
+ orders_system -> inventory_system "Reserves and releases inventory [internal event bus]"
404
+ orders_system -> notification_service "Publishes order events [async, message queue]"
405
+ }
406
+
407
+ views {
408
+ systemContext orders_system "SystemContext" {
409
+ include *
410
+ autolayout lr
411
+ }
412
+ }
413
+ }
414
+ ```
415
+
416
+ This Context diagram answers the question: "What is this system, who uses it, and what external systems does it depend on?" It is the entry point for any architectural conversation with non-technical stakeholders. The Container diagram (Level 2) would zoom into the Orders Platform to show the API gateway, order service, event bus, and database as separate containers with their communication protocols.
417
+
418
+ ---
419
+
420
+ ## Summary
421
+
422
+ Architectural thinking is not a role, a phase, or a deliverable. It is the discipline of making structural decisions with explicit awareness of their reversibility, their quality attribute consequences, and their organizational implications. Applied well, it produces systems that can evolve without reconstruction. Applied poorly — through analysis paralysis, architectural astronautics, or BDUF — it consumes time without producing value.
423
+
424
+ The minimum viable practice is:
425
+ 1. Write an ADR for every decision that is difficult to reverse.
426
+ 2. Add at least one fitness function to CI that enforces the most critical structural constraint.
427
+ 3. Draw a C4 Context diagram so all stakeholders share a structural vocabulary.
428
+ 4. Apply the Conway's Law check before finalizing service boundaries.
429
+ 5. Schedule a quarterly architectural review to ask which ADRs are still valid.
430
+
431
+ Everything else in this module is elaboration of those five practices.
432
+
433
+ ---
434
+
435
+ *Researched: 2026-03-08 | Sources:*
436
+ - *[The First Law of Software Architecture: Understanding Trade-offs — DEV Community](https://dev.to/devcorner/the-first-law-of-software-architecture-understanding-trade-offs-2bef)*
437
+ - *[Architectural Trade-Offs: the Art of Minimizing Unhappiness — InfoQ](https://www.infoq.com/articles/trade-offs-minimizing-unhappiness/)*
438
+ - *[Architecture Tradeoff Analysis Method — Wikipedia](https://en.wikipedia.org/wiki/Architecture_tradeoff_analysis_method)*
439
+ - *[Adopting Microservices at Netflix: Lessons for Architectural Design — F5/NGINX](https://www.f5.com/company/blog/nginx/microservices-at-netflix-architectural-best-practices)*
440
+ - *[Netflix Architecture Case Study — Clustox](https://www.clustox.com/blog/netflix-case-study/)*
441
+ - *[Scaling Microservices: Lessons from Netflix, Uber, Amazon, and Spotify — Netguru](https://www.netguru.com/blog/scaling-microservices)*
442
+ - *[The Architecture Decision That Let Figma Scale to 4M Users — Medium](https://medium.com/@thekareneme/the-architecture-decision-that-let-figma-scale-to-4m-users-without-rewriting-97d07c25eb9e)*
443
+ - *[How Figma's Databases Team Lived to Tell the Scale — Figma Blog](https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale/)*
444
+ - *[How Figma's Multiplayer Technology Works — Figma Blog](https://www.figma.com/blog/how-figmas-multiplayer-technology-works/)*
445
+ - *[Conway's Law — Martin Fowler](https://martinfowler.com/bliki/ConwaysLaw.html)*
446
+ - *[Conway's Law in Practice: Why Your Microservices Mirror Your Org Chart — Java Code Geeks](https://www.javacodegeeks.com/2026/01/conways-law-in-practice-why-your-microservices-mirror-your-org-chart.html)*
447
+ - *[Don't Let Architecture Astronauts Scare You — Joel on Software](https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/)*
448
+ - *[Architecture Astronaut — Wikipedia](https://en.wikipedia.org/wiki/Architecture_astronaut)*
449
+ - *[Architects, Anti-Patterns, and Organizational Fuckery — charity.wtf](https://charity.wtf/2023/03/09/architects-anti-patterns-and-organizational-fuckery/)*
450
+ - *[Big Design Up Front — Wikipedia](https://en.wikipedia.org/wiki/Big_design_up_front)*
451
+ - *[Lean development's "last responsible moment" — Ben Morris](https://www.ben-morris.com/lean-developments-last-responsible-moment-should-address-uncertainty-not-justify-procrastination/)*
452
+ - *[The Last Responsible Moment — Coding Horror](https://blog.codinghorror.com/the-last-responsible-moment/)*
453
+ - *[Architectural Fitness Functions: An Intro — Medium/Yonder TechBlog](https://medium.com/yonder-techblog/architectural-fitness-functions-an-intro-to-building-evolutionary-architectures-dc529ac76351)*
454
+ - *[Fitness Functions for Your Architecture — InfoQ](https://www.infoq.com/articles/fitness-functions-architecture/)*
455
+ - *[Building Evolutionary Architectures — evolutionaryarchitecture.com](https://evolutionaryarchitecture.com/resources/)*
456
+ - *[Architectural Decision Records — adr.github.io](https://adr.github.io/)*
457
+ - *[C4 Model Architecture and ADR Integration — visual-c4.com](https://visual-c4.com/blog/c4-model-architecture-adr-integration)*
458
+ - *[arc42 Documentation — docs.arc42.org](https://docs.arc42.org/section-9/)*
459
+ - *[Software Architecture vs Software Design — DZone](https://dzone.com/articles/differences-between-software-design-and-software-architecture)*
460
+ - *[Quality Attributes in Software Architecture — 3Pillar Global](https://www.3pillarglobal.com/insights/blog/the-importance-of-quality-attributes-in-software-architecture/)*