Skip to main content

Team Capacity Model — Ghasi Melmastoon

Companion: Roadmap Index · jira-epic-based-sprint-ruleset.md · jira-sprint-distribution-rules.md · service-readiness-gates.md

This document defines squads, ownership, headcount assumptions, and effective capacity for sprint planning. It is the single source for the planner — human or commands/jira-sprint-plan.md — when computing what "100 % of a sprint" actually means.

It is not an org chart. It is an operating model: roles exist whether or not they are filled by named people, and AI agents count as fractional capacity where they own a defined scope.


1. Squads (logical, not necessarily 1:1 with reporting lines)

Six squads, one platform team, one quality/release function, one product/UX function. Sized for R1; scales by adding seats inside an existing squad before splitting a squad.

1.1 Squads and primary components

SquadMissionPrimary componentsR1 sizeR2 size
Reservations & InventoryBooking flow truth: searches, holds, confirmations, cancellations, calendar correctness.reservation-service, inventory-service, pricing-service, tax-service, bff-tenant-booking-service (lead)1 EM + 4 SWE + 1 QA+ 1 SWE
Money & TrustPayments, refunds, payouts, fraud, ledger; lock integration.payment-gateway-service, lock-integration-service, audit-service, feature-flag-service1 EM + 3 SWE + 1 SecEng (shared)+ 1 SWE
OperationsFront-desk, housekeeping, maintenance, files, notifications.housekeeping-service, maintenance-service, notification-service, file-storage-service, staff-service, bff-backoffice-service (lead)1 EM + 4 SWE + 1 QA+ 1 SWE + 1 QA
SurfacesWeb meta, web tenant booking, desktop back-office, future kiosk + voice.app-web-meta, app-web-tenant-booking, app-desktop-backoffice, pkg-ui-melmastoon, pkg-i18n1 EM + 5 SWE + 1 Designer + 1 QA+ 2 SWE
MobileCross-OS staff/guest mobile + offline.app-mobile, pkg-ui-melmastoon (RN parts), pkg-mobile-runtime1 EM + 3 SWE + 1 QA+ 1 SWE
AI & AnalyticsAI gateway, anomaly detection, embeddings, BigQuery, dashboards.ai-orchestrator-service, analytics-service, theme-config-service (R2), pkg-ai-runtime1 EM + 2 SWE + 1 ML+ 2 SWE + 1 ML
Platform & SREMonorepo, CI/CD, infra, observability, security baseline, FinOps.infra-*, pkg-contracts, pkg-event-bus, pkg-observability, pkg-eslint-config, pkg-tsconfig, cross-cutting1 EM + 3 SWE/SRE + 1 SecEng (shared)+ 1 SRE
QA & Release (function, not squad)Test infra, contract tests, performance budgets, release captain rotation.Cross-cutting1 lead + embedded QAs above+ 1 lead-engineer
Product & UX (function)PRDs, journeys, design system curation, content.All1 PM + 1 Sr Designer + 1 Researcher+ 1 PM + 1 Designer

R1 total dev-hands: ~25 SWE + 4 QA + 1 ML + 1 SecEng + 6 EMs/leads + 3 product/design + 4 SRE/Platform = ~44 people, of which ~30 are direct sprint-capacity contributors.

1.2 Cross-cutting roles (shared across squads)

RoleScopeAllocation
Security EngineerReviews threat models, Money & Trust + Platform & SRE; pen-test triage; KMS/Secret Manager governance.1 FTE shared across all squads.
Release CaptainRotates weekly; owns the release train, deployment health, post-deploy comms.1 weekly rotation seat per squad.
On-call Primary / SecondaryPer service-line, weekly rotation.See §4.2.
AI Agent StewardOwns Cursor/Claude/Copilot rule changes, agent-prompt PR review, evaluates failure modes.0.5 FTE inside Platform & SRE.

2. Ownership matrix (component → squad)

The Jira component list in docs/standards/JIRA_PROJECT_SETUP.md §3 maps 1:1 to a squad below. Every component has exactly one owning squad (single accountability) and may have one or more collaborating squads (joint design, no joint accountability).

ComponentOwning squadCollaborating squads
reservation-serviceReservations & InventoryMoney & Trust (holds + payment intent), Surfaces (BFF contracts)
inventory-serviceReservations & InventoryOperations (housekeeping turns)
pricing-serviceReservations & InventoryAI & Analytics (forecasted demand)
payment-gateway-serviceMoney & TrustReservations & Inventory
lock-integration-serviceMoney & TrustOperations
audit-serviceMoney & TrustAll
housekeeping-serviceOperationsReservations & Inventory
maintenance-serviceOperationsOperations + Surfaces
notification-serviceOperationsAll
file-storage-serviceOperationsSurfaces (uploads)
staff-serviceOperationsAll (RBAC)
tax-serviceReservations & InventoryMoney & Trust
feature-flag-serviceMoney & TrustPlatform & SRE
theme-config-serviceAI & Analytics (R2; Surfaces in R1)Surfaces
analytics-serviceAI & AnalyticsAll
ai-orchestrator-serviceAI & AnalyticsOperations, Money & Trust
bff-consumer-serviceSurfacesReservations & Inventory
bff-tenant-booking-serviceReservations & InventorySurfaces
bff-backoffice-serviceOperationsSurfaces
app-web-metaSurfaces
app-web-tenant-bookingSurfacesReservations & Inventory
app-desktop-backofficeSurfacesOperations
app-mobileMobileOperations, Surfaces
pkg-ui-melmastoonSurfacesMobile
pkg-i18n, pkg-tokens, pkg-iconsSurfacesAll
pkg-contracts, pkg-event-busPlatform & SREAll
pkg-observability, pkg-eslint-config, pkg-tsconfigPlatform & SREAll
pkg-ai-runtimeAI & AnalyticsMobile, Surfaces
pkg-mobile-runtimeMobileSurfaces
infra-cloud-run, infra-cloud-sql, infra-pubsub, infra-redis, infra-secret-manager, infra-cloud-armor, infra-observabilityPlatform & SRE
cross-cuttingPlatform & SREAll

If the matrix shows a component with zero owning squad, that is a P0 staffing gap — flag it during this document's review.


3. Headcount staging

R1 starts with the headcount in §1.1 and grows along the curve below. A new hire's effective capacity is 50 % for sprint 1, 75 % for sprint 2, 100 % from sprint 3.

WaveSprint rangeTotal dev-hands targetHiring focus
R1S01–S1230 → 32Reservations & Inventory + Mobile (offline)
R2S13–S2432 → 42AI & Analytics, Surfaces (chain switcher), SRE (multi-region)
R3S25+42 → 50+White-label PMs, Reseller squad (new), Voice/kiosk specialists

Hiring tickets live in cross-cutting Tasks with label org:hiring and are not counted against sprint capacity.


4. Effective capacity model

4.1 Engineering focus factor

A 2-week sprint = 10 working days = 10 nominal dev-days per engineer.

The focus factor translates nominal days into effective dev-days that can be committed against backlog:

effective_days = nominal_days × focus_factor
RoleDefault focus factorNotes
Senior SWE (no on-call)0.6535 % overhead for code review, design, refinement, support, comms.
Senior SWE (on-call week)0.40 (week 1), 0.60 (week 2)Page handling + recovery.
Mid SWE0.60More mentoring received, slightly less effective.
Junior SWE / new hire0.40 → 0.60 over first 6 sprintsRamp curve.
QA0.65Same overhead pattern, plus test infra.
Designer0.50Significant time on research + critique.
EM (engineering manager)0.20Should not be on hands-on critical path.
ML engineer0.55Long experiments + training cycles.
SRE0.50Significant on-call + incident time.
AI agent (e.g., dev-pipeline runs)0.10–0.30 (per active scope)Counted only when the agent owns end-to-end story execution under HITL approval.

4.2 On-call rotations

Service linePrimary rotationSecondaryCadence
Reservations & Inventory1 of squad's 4 SWEEMWeekly
Money & Trust1 of squad's 3 SWESecEngWeekly
Operations1 of squad's 4 SWEEMWeekly
Surfaces1 of squad's 5 SWEEMWeekly (lighter pages)
Mobile1 of squad's 3 SWEEMWeekly
Platform & SRE1 SRE1 SREWeekly (24×7)
AI & Analytics1 of squad's 2 SWEML engWeekly (bus hours)

Pages > 5 in a week force an SRE-led incident review.

4.3 Worked example — Reservations & Inventory squad capacity (R1, sprint 5)

EngineerRoleOn-call this sprint?Nominal daysFocus factorEffective days
EMEM100.202.0
Sr SWE ASr SWEYes (week 1)100.40 / 0.60 avg = 0.505.0
Sr SWE BSr SWE100.656.5
Mid SWE CMid SWE100.606.0
Mid SWE DMid SWE100.606.0
QAQA100.656.5
Squad effective capacity6032 dev-days

At the project's sizing convention (S=2, M=5, L=8 points; 1 point ≈ 1 dev-day), this squad commits ~32 points in sprint 5.


5. AI-agent capacity accounting

AI agents (commands/dev-pipeline.md, commands/scaffold-service.md, etc.) are treated as fractional capacity contributors when they own end-to-end execution under HITL.

Rules:

  • Counted only when an agent is named Assignee on a Story or Task that fully autonomously produces a PR a human approves.
  • Not counted when an agent assists a human (those points stay with the human).
  • An agent's effective capacity is bounded by the human reviewer's review capacity (Rule from sprint distribution: review work counts against the human's overhead).
  • Treat each "autonomous slice" as 0.5 dev-days of human equivalent (review time, fix-loop, validation), regardless of how fast the agent ran.

This stops the team from over-committing because "AI is fast"; the bottleneck is human review and correctness verification, not generation.


6. Capacity-impacting events

The planner subtracts capacity for each event below, mid-sprint or in advance.

EventCapacity impactOwner of accounting
Public/regional holiday-1 nominal day per affected engineerEM
PTO / personal leave-N nominal days per engineerEngineer + EM
Conference / training-N nominal days; if knowledge-transfer expected, -0.5 day for the receiving sessionEM
Hiring loop participation-1.5 days per loop per interviewerEM
Production incident (P1/P2)Subtract postmortem time; usually 1–2 person-days for primaryRelease captain
Re-org / role changeTreat affected engineer as new-hire ramp for 1 sprintEM
Org-wide all-hands / off-site-0.5 day per engineerChief of staff (function)

Capacity-impacting events are entered in the team's capacity sheet (planning artifact, not a deliverable doc) before sprint planning starts.


7. Skill matrix and bottleneck management

7.1 Cross-skill targets (R1 end)

Skill clusterTarget coverage
NestJS service authoring≥ 70 % of SWE
Drizzle / migrations≥ 50 %
Next.js App Router100 % of Surfaces squad; ≥ 30 % overall
React Native + Expo100 % of Mobile squad; ≥ 20 % overall
Electron100 % of Surfaces squad's desktop sub-team; ≥ 15 % overall
Pub/Sub + outbox patterns≥ 60 %
TanStack Query / Zustand≥ 70 % of frontend SWE
i18n RTL/LTR≥ 80 % of frontend SWE
Testcontainers / Pact≥ 60 % of SWE; 100 % of QA
Playwright + Detox100 % of QA + ≥ 30 % of SWE
KMS / Secret Manager≥ 30 % of SWE; 100 % of Money & Trust
Vertex AI / RAG≥ 100 % of AI & Analytics; ≥ 10 % overall
Observability (OTel, Cloud Logging)≥ 80 % of SWE
Accessibility (WCAG 2.2 AA)≥ 60 % of frontend SWE; 100 % of Designer

Targets below threshold force a cross-cutting upskilling Task each sprint (≤ 1 day per engineer per sprint).

7.2 Single-points-of-failure (SPOF) register

A skill or component owned by a single engineer is a SPOF. The register must show every SPOF with mitigation status:

Component / skillSole ownerMitigationTarget date
lock-integration-service (vendor-A)TBD-1Pair-rotate 2nd engineer through 3 storiesR1-S08
payment-gateway-service 3DS flowTBD-2Cross-train Money & Trust + ReservationsR1-S07
Detox device farm configTBD-3Document in runbook + train Mobile QAR1-S05
Vertex AI infraTBD-4Pair with SRER2-S14

The register is reviewed every sprint planning and escalated at every wave checkpoint.


8. Velocity baselines and adjustment

WaveInitial velocity baselineAdjustment trigger
R1 (S01–S03)Use focus-factor estimate; no historical baseline yetAfter S03, switch to rolling 3-sprint avg
R1 (S04+)Rolling 3-sprint avg of completed pointsIf avg shifts > 15 %, recalculate focus factors
R2+Rolling 3-sprint avg, per squadSame

Velocity is per squad, not per engineer. Ranking engineers by points is an anti-pattern (see jira-epic-based-sprint-ruleset.md §10).


9. Anti-patterns

  • "We'll just hire when we miss the wave" — hiring takes ≥ 2 sprints to net positive; descope first.
  • Treating AI agents as 1.0 capacity multipliers — review remains the bottleneck.
  • Single-engineer ownership without a SPOF register entry.
  • Cross-squad floaters with no home — kills accountability.
  • 100 % focus factor assumptions — never realistic.
  • Counting EM time at engineer rates — distorts the plan.
  • Refusing to update the focus factor when retrospectives show systemic overrun.

10. Cross-references


11. Versioning

Same governance as docs/standards/CODING_STANDARDS.md §19. Changes that alter focus factors or squad ownership require sign-off from every affected EM.