Skip to content

Commit 534de27

Browse files
authored
Merge pull request #1964 from rocketstack-matt/feat/advent-final-days
Advent of Code: End of Days
2 parents a81403f + 1735c4b commit 534de27

File tree

5 files changed

+1095
-4
lines changed

5 files changed

+1095
-4
lines changed

advent-of-calm/day-21.md

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
# Day 21: The Platform Team Challenge — Enterprise Architect
2+
3+
## Overview
4+
5+
Welcome to the final week of Advent of CALM! Over the past twenty days, you've built a comprehensive toolkit of architecture-as-code skills:
6+
7+
| Week | What You Learned |
8+
|------|------------------|
9+
| **Week 1** | Core building blocks — nodes, relationships, interfaces, metadata |
10+
| **Week 2** | Advanced features — controls, flows, ADRs, documentation, AI assistance |
11+
| **Week 3** | Governance — patterns, standards, multi-pattern validation |
12+
13+
Now it's time to put it all together.
14+
15+
Days 21-23 form a **three-day mini-project** that simulates real enterprise workflows. Instead of step-by-step instructions, you'll receive high-level requirements and apply everything you've learned. This is your chance to prove — to yourself — that you can use CALM independently.
16+
17+
## The Scenario: Acme Corp's Notification Service
18+
19+
**Background:** Acme Corp is building an internal Notification Service to handle alerts across the organization. Over the next three days, you'll experience how different personas collaborate using CALM:
20+
21+
| Day | Persona | Responsibility |
22+
|-----|---------|----------------|
23+
| **21** | Enterprise Architect | Define standards and patterns |
24+
| **22** | Product Developer | Build within guardrails |
25+
| **23** | Security SME | Review and approve |
26+
27+
This scenario is intentionally different from the e-commerce system you built earlier — proving you can apply CALM to any domain.
28+
29+
## Objective and Rationale
30+
- **Objective:** Create enterprise governance artifacts (standards and patterns) that the Notification Service team will use tomorrow
31+
- **Rationale:** In real enterprises, architects don't build individual systems — they define the guardrails that enable teams to build consistent, compliant systems. Your patterns and standards become the "paved road" that makes doing the right thing easy.
32+
33+
## Your Brief
34+
35+
**From the CTO:**
36+
> "We're launching a new Notification Service initiative. Before the product team starts, I need you to define how notification services should be built at Acme Corp. Create the governance framework they'll work within. Consider our enterprise needs: cost tracking, ownership clarity, and security classification on all data flows."
37+
38+
## Requirements
39+
40+
This day is intentionally **less prescriptive** than earlier days. You have the skills — now apply them.
41+
42+
### Your Secret Weapon: CALM Copilot
43+
44+
You're not alone in this challenge. CALM Copilot is your expert Architecture SME — use it throughout this mini-project to:
45+
46+
**Design your standards:**
47+
```text
48+
I'm creating node standards for Acme Corp. We need to track:
49+
- Cost allocation for FinOps
50+
- Ownership for incident response
51+
- Environment classification
52+
- Data sensitivity
53+
54+
Suggest what properties I should require and their appropriate types/enums.
55+
```
56+
57+
**Get your patterns critiqued:**
58+
```text
59+
Review standards/acme-node-standard.json.
60+
61+
As an experienced Enterprise Architect, critique this standard:
62+
- Are the required properties appropriate for enterprise governance?
63+
- What's missing that most organizations would need?
64+
- Is it too strict or too lenient?
65+
- How would this scale to 50+ teams?
66+
```
67+
68+
**Ask architecture questions:**
69+
```text
70+
I'm designing a notification service pattern. Help me think through:
71+
- What components are essential for any notification service?
72+
- Should I require specific delivery channels or leave that flexible?
73+
- How do I balance prescriptiveness with team autonomy?
74+
```
75+
76+
**Validate your thinking:**
77+
```text
78+
I've designed my standards with 5 required properties per node.
79+
Play devil's advocate — is this too many? Too few?
80+
What problems might teams encounter with these requirements?
81+
```
82+
83+
Think of CALM Copilot as a senior architect you can bounce ideas off at any time. It understands CALM deeply and can help you design better governance frameworks. **Use it liberally throughout Days 21-23.**
84+
85+
### 1. Design Acme Corp Node Standards
86+
87+
Create a standard that defines required properties for ALL nodes at Acme Corp.
88+
89+
**Consider:**
90+
- How will Finance track costs? (cost center allocation)
91+
- Who's responsible when something breaks? (ownership)
92+
- What environment is this? (dev/staging/prod)
93+
- Is there sensitive data? (data classification)
94+
- How do we contact the team? (Slack channel, PagerDuty, etc.)
95+
96+
**Deliverable:** `standards/acme-node-standard.json`
97+
98+
**Hints:**
99+
- Review your work from Day 18 for the structure
100+
- Use `allOf` to extend the base CALM node
101+
- Make sure required properties are actually required
102+
- Give it a proper `$id` URL (e.g., `https://acme.com/standards/...`)
103+
104+
### 2. Design Acme Corp Relationship Standards
105+
106+
Create a standard that defines required properties for ALL relationships at Acme Corp.
107+
108+
**Consider:**
109+
- Is data encrypted in transit?
110+
- What's the data classification of this connection?
111+
- What's the expected SLA?
112+
- Is this synchronous or asynchronous?
113+
114+
**Deliverable:** `standards/acme-relationship-standard.json`
115+
116+
### 3. Create the Notification Service Pattern
117+
118+
Design a pattern that defines the **required structure** for any notification service at Acme Corp.
119+
120+
**Think about what a notification service needs:**
121+
- How do external systems send notifications? (API layer)
122+
- How are messages processed? (processing layer)
123+
- Where are messages stored? (persistence)
124+
- How do notifications reach users? (delivery channels)
125+
126+
**Minimum required components:**
127+
- API Gateway or notification API endpoint
128+
- Message processor/queue handler
129+
- At least 2 delivery channels (email, SMS, push, webhook — pick two)
130+
- Message store for history/retry
131+
132+
**Deliverable:** `patterns/notification-service-pattern.json`
133+
134+
**Hints:**
135+
- Review Day 17 for pattern structure
136+
- Use `prefixItems` to require specific nodes
137+
- Use `const` for fixed values like `unique-id`
138+
- Don't include standard properties here — that's what multi-pattern validation is for!
139+
140+
### 4. Create the Base Standards Pattern
141+
142+
Create a pattern that enforces your Acme standards on any architecture (like `company-base-pattern.json` from earlier days).
143+
144+
**Deliverable:** `patterns/acme-base-pattern.json`
145+
146+
### 5. Update URL Mappings
147+
148+
Add all your new schemas to the URL mapping file so they can be resolved locally.
149+
150+
**Deliverable:** Updated `url-mapping.json`
151+
152+
### 6. Document the Governance Model
153+
154+
Create documentation explaining how product teams should use these artifacts.
155+
156+
**Include:**
157+
- What standards exist and what they require
158+
- What the notification service pattern enforces
159+
- How to validate compliance (both structural and standards)
160+
- The multi-pattern validation approach
161+
162+
**Deliverable:** `docs/acme-governance.md`
163+
164+
### 7. Test Your Governance Framework
165+
166+
Verify your patterns work correctly:
167+
168+
```bash
169+
# Generate a scaffold from your pattern
170+
calm generate -p patterns/notification-service-pattern.json -o /tmp/test-notification.json
171+
172+
# Structural validation should PASS
173+
calm validate -p patterns/notification-service-pattern.json -a /tmp/test-notification.json
174+
175+
# Standards validation should FAIL (scaffold has no standard properties yet)
176+
calm validate -p patterns/acme-base-pattern.json -a /tmp/test-notification.json -u url-mapping.json
177+
```
178+
179+
The last command **should fail** — this is correct! The generated scaffold won't have your standard properties until a team adds them.
180+
181+
### 8. Commit Your Work
182+
183+
```bash
184+
git add standards/ patterns/ url-mapping.json docs/acme-governance.md README.md
185+
git commit -m "Day 21: Enterprise Architect - Acme Corp governance framework"
186+
git tag day-21
187+
```
188+
189+
## Deliverables / Validation Criteria
190+
191+
Your Day 21 submission should include a commit tagged `day-21` containing:
192+
193+
**Required Files:**
194+
- `standards/acme-node-standard.json` — Node property requirements
195+
- `standards/acme-relationship-standard.json` — Relationship property requirements
196+
- `patterns/notification-service-pattern.json` — Structural pattern for notification services
197+
- `patterns/acme-base-pattern.json` — Standards enforcement pattern
198+
- Updated `url-mapping.json` — All new schemas mapped
199+
- `docs/acme-governance.md` — Governance documentation
200+
201+
**Validation:**
202+
```bash
203+
# Pattern generates successfully
204+
calm generate -p patterns/notification-service-pattern.json -o /tmp/test.json
205+
206+
# Generated scaffold passes structural validation
207+
calm validate -p patterns/notification-service-pattern.json -a /tmp/test.json
208+
209+
# Standards pattern exists and is valid JSON
210+
cat patterns/acme-base-pattern.json | jq .
211+
212+
# Check tag
213+
git tag | grep -q "day-21"
214+
```
215+
216+
## Tips
217+
218+
- **Think like an architect** — You're not building a system, you're enabling others to build consistent systems
219+
- **Balance flexibility and control** — Too many requirements slow teams down, too few lead to chaos
220+
- **Consider the audit question** — "Can we trace who owns this and what data it handles?"
221+
- **Reuse your learning** — Days 17-20 taught you everything you need
222+
- **Use CALM Chat** — Ask it to help design your standards and patterns
223+
224+
## Thinking Like an Enterprise Architect
225+
226+
```
227+
┌─────────────────────────────────────────────────────────────────────────────┐
228+
│ Enterprise Architect Mindset │
229+
├─────────────────────────────────────────────────────────────────────────────┤
230+
│ │
231+
│ ❌ DON'T think: "How do I build the notification service?" │
232+
│ │
233+
│ ✅ DO think: "What must ALL notification services have?" │
234+
│ "What properties enable cost tracking?" │
235+
│ "What properties enable incident response?" │
236+
│ "How do I make compliance easy, not painful?" │
237+
│ │
238+
│ Your artifacts become the "paved road" that teams follow. │
239+
│ │
240+
└─────────────────────────────────────────────────────────────────────────────┘
241+
```
242+
243+
## Reflection
244+
245+
- What's the right balance between governance and team autonomy?
246+
- How would you handle teams that need exceptions to your standards?
247+
- What happens when standards need to change?
248+
249+
## Next Steps
250+
251+
Tomorrow (Day 22) you'll switch personas to become a **Product Developer** on the Notification Service team. You'll use today's governance framework to build the actual service architecture!

0 commit comments

Comments
 (0)