Team Capacity & Load Model
Execution-layer artifact. Companion to ROADMAP.md. Defines team composition, critical-path teams, and parallelization per milestone.
1. Starting Assumptions
- Sprint length: 2 weeks
- Sprints per milestone: 6 (3 months)
- Velocity baseline: 8–13 story points per developer per sprint (varies by seniority)
- Overhead: 20% (code review, meetings, incident response, documentation)
- Hiring ramp: New hires reach full velocity after 1 sprint ramp-up
- Team topology: Stream-aligned teams + platform team + enabling teams (SRE, security, AI)
2. Team Definitions
| Team | Focus | Core Skills |
|---|---|---|
| Platform | iam, tenant, hierarchy, licensing, access-policy, audit, config-resolver, fhir-gateway, platform-admin, terminology | NestJS, TypeORM, PostgreSQL, NATS, Keycloak, FHIR R4 |
| Clinical | registration, scheduling, provider-directory, facility-management, patient-chart, clinical-notes, vitals, problem-list, allergies, medication-management | NestJS, FHIR R4, clinical domain expertise |
| Diagnostics | orders-cpoe, results, laboratory-lis, radiology-pacs | NestJS, HL7, DICOM, LIS/PACS domain |
| Finance | billing, insurance, claims | NestJS, financial domain, multi-currency |
| Engagement | patient-portal-api, digital-communication | NestJS, React, real-time messaging, Jitsi |
| Pharmacy | pharmacy, ghasi-e-prescribing-gateway | NestJS, FHIR R4, pharmacy domain |
| PopHealth | health-population, immunizations, care-plans | NestJS, epidemiology, HMIS |
| Desktop | desktop-electron (all DESK-EPICs) | Electron, SQLite, React, sync engine |
| AI | ai-orchestrator | NestJS, LLM APIs, ONNX, ML ops |
| Interop | fhir-gateway (depth), hl7v2-interop, SMART on FHIR, Bulk Data | FHIR R4, HL7v2, SMART, IHE |
| Mobile | Expo React Native app | React Native, OIDC/PKCE, offline |
| DevOps/SRE | Kong, Keycloak, infrastructure, CI/CD, observability | Docker, K8s, Prometheus, Grafana, NATS ops |
| Security | Audit, pen-testing, compliance, encryption | Security engineering, HIPAA/GDPR |
| QA | Testing strategy, E2E, load testing, clinical validation | Playwright, k6, clinical testing |
| Clinical SME | Domain validation, workflow review, FHIR profiles | Clinical informatics, EHR workflows |
3. Headcount Table
| Team | M0 | M1 | M2 | M3 | M4 | M5 |
|---|---|---|---|---|---|---|
| Platform | 6 | 4 | 3 | 2 | 2 | 3 |
| Clinical | 2 | 8 | 6 | 4 | 3 | 2 |
| Diagnostics | — | — | 4 | 4 | 6 | 3 |
| Finance | — | — | 3 | 3 | 4 | 2 |
| Engagement | — | — | — | 4 | 3 | 2 |
| Pharmacy | — | — | — | 3 | 2 | 1 |
| PopHealth | — | — | — | — | 4 | 3 |
| Desktop | 4 | 4 | 3 | 3 | 3 | 2 |
| AI | 2 | 2 | 2 | 2 | 3 | 3 |
| Interop | — | — | — | 2 | 3 | 3 |
| Mobile | — | — | — | — | — | 3 |
| DevOps/SRE | 3 | 3 | 3 | 3 | 3 | 4 |
| Security | 2 | 2 | 2 | 2 | 2 | 2 |
| QA | 2 | 3 | 3 | 3 | 4 | 3 |
| Clinical SME | 1 | 2 | 2 | 2 | 2 | 1 |
| Total | 22 | 28 | 31 | 37 | 44 | 37 |
4. Critical-Path Teams Per Milestone
| Milestone | Critical-path teams | Blocking deliverable |
|---|---|---|
| M0 | Platform, Desktop, DevOps | Tenant isolation, sync engine, Kong/Keycloak |
| M1 | Clinical, Desktop | Core EHR workflows, offline patient intake |
| M2 | Diagnostics, Finance, Clinical | Orders/CPOE, billing, results |
| M3 | Diagnostics (LIS), Pharmacy, Engagement | LIS integration, e-prescribing, patient portal |
| M4 | Diagnostics (PACS), Finance, PopHealth | Radiology, claims, population health |
| M5 | Interop, Mobile, DevOps | SMART on FHIR, mobile app, multi-region |
5. Parallel Workstreams
| Stream | Teams | Start | Peak | Description |
|---|---|---|---|---|
| A — Platform Foundation | Platform, DevOps, Security | M0 | M0 | iam, tenant, hierarchy, licensing, audit, kong, keycloak |
| B — Desktop Foundation | Desktop | M0 | M0–M1 | Electron shell, SQLite, sync engine |
| C — AI Foundation | AI | M0 | M1–M2 | AI orchestrator, prompt registry, safety |
| D — Clinical Core | Clinical, Clinical SME | M1 | M1 | Registration through medication management |
| E — Orders & Results | Diagnostics, Clinical | M2 | M2 | CPOE, results, terminology depth |
| F — Financial | Finance | M2 | M2–M4 | Billing → insurance → claims |
| G — Laboratory | Diagnostics | M3 | M3 | LIS: specimens, worklists, instruments |
| H — Pharmacy & E-Rx | Pharmacy | M3 | M3 | Dispensing, e-prescribing gateway |
| I — Engagement | Engagement | M3 | M3 | Patient portal, digital communication |
| J — Imaging | Diagnostics | M4 | M4 | PACS, DICOM, viewer |
| K — Population Health | PopHealth | M4 | M4 | Cohorts, registries, HMIS |
| L — Mobile & Interop | Mobile, Interop | M5 | M5 | Expo app, SMART on FHIR, bulk data |
6. Hiring Plan
| Period | Hires | Focus |
|---|---|---|
| M0 start | 22 (founding team) | Platform (6), Desktop (4), AI (2), DevOps (3), Security (2), QA (2), Clinical (2), Clinical SME (1) |
| M1 start (+6) | +6 → 28 | Clinical (+6 for core EHR), QA (+1) |
| M2 start (+3) | +3 → 31 | Diagnostics (+4 new), Finance (+3 new), Clinical (-4 rebalanced) |
| M3 start (+6) | +6 → 37 | Engagement (+4 new), Pharmacy (+3 new), Interop (+2 new), Clinical SME (+0), rebalance from Platform (-2) |
| M4 start (+7) | +7 → 44 | Diagnostics (+2 PACS), Finance (+1), PopHealth (+4 new), QA (+1), AI (+1) |
| M5 start (-7) | -7 → 37 | Mobile (+3 new), Interop (+1), DevOps (+1); Pharmacy (-1), Clinical (-1), Diagnostics (-3), Finance (-2), Engagement (-1), Desktop (-1), rebalance |
7. Load Heatmap
Team │ M0 M1 M2 M3 M4 M5
────────────────┼─────────────────────────────────────────────
Platform │ ██████ ████ ███ ██ ██ ███
Clinical │ ██ ████████ ██████ ████ ███ ██
Diagnostics │ ░ ████ ████ ██████ ███
Finance │ ░ ███ ███ ████ ██
Engagement │ ░ ░ ████ ███ ██
Pharmacy │ ░ ░ ███ ██ █
PopHealth │ ░ ░ ░ ████ ███
Desktop │ ████ ████ ███ ███ ███ ██
AI │ ██ ██ ██ ██ ███ ███
Interop │ ░ ░ ██ ███ ███
Mobile │ ░ ░ ░ ░ ███
DevOps/SRE │ ███ ███ ███ ███ ███ ████
Security │ ██ ██ ██ ██ ██ ██
QA │ ██ ███ ███ ███ ████ ███
Clinical SME │ █ ██ ██ ██ ██ █
────────────────┼─────────────────────────────────────────────
Legend: █ = high load ██ = medium ███ = peak ░ = idle/not started
8. Velocity Assumptions
| Metric | Value |
|---|---|
| Sprint length | 2 weeks |
| Story points per dev per sprint | 8–13 (avg 10) |
| Overhead factor | 20% (effective: 8 pts/dev/sprint) |
| New hire ramp-up | 1 sprint at 50% velocity |
| Bug fix allocation | 15% of sprint capacity after M1 |
| Tech debt allocation | 10% of sprint capacity after M2 |
9. Allocation Priority Rules
When staffing is constrained:
- Critical-path blocker — highest priority; redirect from non-critical stream
- Security/compliance issue — second priority; never defer
- Offline/sync bug — third priority (moat feature)
- AI feature — fourth priority (differentiator but medium priority)
- Enhancement/polish — lowest priority; defer to next milestone
10. Governance
- Quarterly review: Headcount and allocation reviewed at each milestone gate.
- Owner of record: VP Engineering owns the capacity model.
- On-call rotation: After M1, each stream-aligned team provides 1 on-call engineer (rotated weekly).
- Cross-team dependencies: Escalated via weekly architecture sync; blocked items get 48h response SLA.