Skip to main content

Jira Epic-Based Sprint Ruleset — Ghasi Melmastoon

Companion: Roadmap Index · jira-sprint-distribution-rules.md · team-capacity-model.md · service-readiness-gates.md · docs/standards/JIRA_PROJECT_SETUP.md · docs/07-epics-and-user-stories.md

This document defines how epics decompose into sprints for Ghasi Melmastoon. It is the rulebook used by the sprint planner — human or commands/jira-sprint-plan.md agent — to take the Refined backlog and assemble the next sprint without violating wave boundaries, service ownership, or readiness gates.

It works in concert with:

If this document and the live sprint disagree, fix the sprint.


1. Sprint cadence and naming

SettingValue
Sprint length2 weeks, Sun–Thu primary calendar (Afghanistan), Mon–Fri reference (international).
Sprint nameR<N>-S<NN> — wave + zero-padded sprint ordinal. Example: R1-S03.
Sprint goalOne sentence; references the wave outcome + the dominant epic(s). Posted in Jira sprint goal field.
Sprint reviewLast Wednesday of the sprint, 60 min, all components present.
Sprint retroThursday after review, 45 min, focus on flow + DoR/DoD violations.
Sprint planningSunday before sprint starts, 60 min, capacity-driven.
RefinementTuesday + Thursday, 30 min each, no exceptions.

No mid-sprint extensions. Slipped scope rolls to the next sprint with a comment on the ticket.


2. Epic-to-sprint decomposition principles

Each of the 20 EP-MEL-NN epics is too large to ship in a single sprint. The decomposition rules:

2.1 Vertical slicing (preferred)

Slice an epic into end-to-end vertical slices: each slice spans every layer (DB → service → BFF → frontend) and delivers one user-observable outcome.

Example for EP-MEL-04 (Reservation Lifecycle):

SprintSliceStories
R1-S02QuoteUS-MEL-0030 (generate price quote with TTL)
R1-S03HoldUS-MEL-0031 (place inventory hold for quote)
R1-S04ConfirmUS-MEL-0032 (confirm reservation with payment outcome)
R1-S05Modify + CancelUS-MEL-0033, US-MEL-0034
R1-S06Stay (check-in / mid-stay / checkout)US-MEL-0036, US-MEL-0037, US-MEL-0038
R1-S07Edge cases (walk-in / no-show / group)US-MEL-0039, US-MEL-0040, US-MEL-0041

Each sprint produces a demo-able outcome.

2.2 Horizontal slicing (only when forced)

Horizontal slicing — landing the DB and service layer first, then the API, then the UI — is allowed only when:

  • The data model alone delivers measurable value (e.g., enabling a backfill or analytics signal).
  • A vertical slice would exceed the sprint capacity even at the smallest meaningful outcome.
  • A cross-service prerequisite blocks the vertical slice (then the horizontal pieces become Tasks under the parent Story).

When horizontal, every horizontal story carries an Out of scope bullet stating which layer it does not ship, with a link to the follow-up story.

2.3 Cross-service stories

A story listed against multiple services either:

  1. Stays as a single Story with the primary owner driving and the participating services adding sub-tasks. Used when the change is small per service and parallel work is feasible.
  2. Decomposes into per-service Stories linked back to the parent Epic + a parent "umbrella" Task labeled umbrella. Used when each per-service slice is itself ≥ M complexity.

The decision is made at refinement and recorded as a comment on the parent.


3. Sprint composition rules

A sprint is valid if:

  1. Single wave — every story has the same Wave label as the sprint (R1-S03wave:r1).
  2. Refined-only — every pulled ticket is in state Refined (DoR met). Tickets in Backlog are forbidden in sprint plans.
  3. Capacity respected — total story points ≤ sprint capacity (per team-capacity-model.md).
  4. Distribution respected — per-component distribution ≤ caps in jira-sprint-distribution-rules.md.
  5. Readiness respected — every story whose service has a readiness prerequisite (per service-readiness-gates.md) must wait until the prerequisite is Done.
  6. Cohesive — at least 60 % of the story points roll up to the dominant epic for the sprint. The dominant epic is named in the sprint goal.
  7. At most 1 spike per service per sprint. Spikes do not exceed 20 % of a service's sprint capacity.
  8. Bug budget — at least 10 % of capacity reserved for bugs. Unused budget can be spent at sprint mid-point on a Task or descope to capacity-trim.
  9. No XL — XL complexity is forbidden anywhere in the system; if one slipped in, it must be split before sprint pull.
  10. Workflow-bridging stories closed first — if a sprint includes a story whose Linked Workflow ID matches an in-flight workflow E2E gate, it is sequenced ahead of stories that depend on it.

4. Sprint goal pattern

"Ship the of end-to-end so that can in the live R environment."

Examples:

  • R1-S04: "Ship the confirm slice of EP-MEL-04 (Reservation Lifecycle) end-to-end so that a Guest can confirm a tenant booking with payment in the live R1 environment."
  • R1-S05: "Ship the modify and cancel slices of EP-MEL-04 so a Guest can change or cancel within policy in the live R1 environment, while introducing the refund path for EP-MEL-05 (Payment Gateway)."

A goal that names two epics is fine if and only if the secondary epic's contribution is ≤ 30 % of capacity. Three-epic goals are forbidden.


5. Story sizing reference (for sprint math)

ComplexityStory pointsTime estimate (one engineer)Notes
S2≤ 2 dev-daysSingle-file change scope; one AC scenario; unit tests only or unit + one integration.
M5≤ 5 dev-daysMulti-file change; 2–3 AC scenarios; unit + integration + at least one contract test.
L8≤ 12 dev-daysMulti-service or full vertical slice; 3–5 AC scenarios; full test pyramid including E2E.

A sprint usually contains 4–8 stories per engineer at a 60–70 % focus factor (see team-capacity-model.md for the live model).


6. Decomposition templates per epic (R1-relevant)

Each epic gets a recommended decomposition into ≤ 4 sprint slices. These are templates — the Refinement crew can deviate with a recorded reason.

EP-MEL-01 — Tenant Onboarding & Configuration

SliceStories (excerpt)Sprints
Owner sign-up + email/SMS verifyUS-MEL-0001, US-MEL-00021
Property + rooms + staff inviteUS-MEL-0003, US-MEL-0004, US-MEL-00051
Theme + content + booking-flow configUS-MEL-0006…00081
Preview + publish + onboarding trackerUS-MEL-0009…00121
SliceStoriesSprints
Search + filter + mapUS-MEL-0013…00151
Compare + summary cardsUS-MEL-0016, US-MEL-00171
Handoff + RTL + favoritesUS-MEL-0018…00201

EP-MEL-03 — Tenant Booking Experience

SliceStoriesSprints
Browse rooms + adjust qty/datesUS-MEL-0021, US-MEL-00221
Special requests + payment selectionUS-MEL-0023, US-MEL-00241
Multi-currency + multi-languageUS-MEL-0025, US-MEL-00261
Confirmation + resend + telemetryUS-MEL-0027…00291

EP-MEL-04 — Reservation Lifecycle

SliceStoriesSprints
Quote + Hold + ConfirmUS-MEL-0030…00322
Modify + Cancel + UpsellUS-MEL-0033…00351
Check-in + Mid-stay + CheckoutUS-MEL-0036…00382
Walk-in + No-show + GroupUS-MEL-0039…00411

EP-MEL-05 — Payment Gateway

SliceStoriesSprints
Card + 3DSUS-MEL-00421
Cash-on-arrival + EOD reconciliationUS-MEL-0044, US-MEL-00491
MFS + Idempotent webhooksUS-MEL-0045, US-MEL-00481
Refund + ChargebackUS-MEL-0046, US-MEL-00471

(Continue similarly for EP-MEL-06 … EP-MEL-20; templates living in this file are updated as we learn.)


7. Cross-epic ordering (the "first 12 sprints of R1" plan)

This is the recommended order in which slices land for R1. The actual sprint plan deviates as risks emerge but the order is the default.

SprintDominant epic / sliceSecondary work
R1-S01EP-MEL-17 IAM (auth + RBAC + device-bind)EP-MEL-20 Observability (telemetry baseline)
R1-S02EP-MEL-01 Tenant onboarding (owner + property)EP-MEL-12 Theme primitives (tokens)
R1-S03EP-MEL-01 (theme + booking-flow config)EP-MEL-12 Theming preview
R1-S04EP-MEL-04 Reservation (quote + hold)EP-MEL-04 Inventory allocation
R1-S05EP-MEL-04 Reservation (confirm)EP-MEL-05 Card payment
R1-S06EP-MEL-04 Reservation (modify + cancel)EP-MEL-05 Refund
R1-S07EP-MEL-04 Reservation (check-in + checkout)EP-MEL-09 Lock issuance (TTLock)
R1-S08EP-MEL-06 Front-desk desktop (arrivals + walk-in)EP-MEL-09 Lock revoke
R1-S09EP-MEL-06 Front-desk desktop (folio + cash drawer)EP-MEL-13 Reporting baseline
R1-S10EP-MEL-10 Offline sync engineEP-MEL-15 Notifications
R1-S11EP-MEL-10 Offline sync (conflict + telemetry)EP-MEL-07 Housekeeping basics
R1-S12EP-MEL-13 Reports (financial + reg) + R1 hardeningEP-MEL-19 Compliance KYC

(R2 and R3 plans live as appendices to 02-release-2-scale-and-ai.md and 03-release-3-and-beyond.md respectively.)


8. The 60/30/10 split (rule of thumb per sprint)

When in doubt, allocate per-engineer capacity inside a sprint as:

  • 60 % dominant epic / dominant slice (where the wave goal is being earned).
  • 30 % participating epic (the other epic the sprint touches, or platform work that unblocks the next sprint).
  • 10 % bugs + unplanned + a thin slice of tech debt.

This is the planning ratio; actuals are tracked in retro. A team that systematically misses the dominant-epic ratio is signaling that the wave is under-resourced or the slice was oversized.


9. Multi-service slice handling

When a sprint pulls a story whose participating services span more than the dominant component:

  • The primary owner writes the spec-aligned acceptance and seeds the test scaffolding.
  • Each participating component lifts a sub-task (or a per-service Story under the umbrella Task) into the same sprint.
  • The integration scenario (the cross-service AC) is owned by the primary; participating services own per-service unit + integration coverage.
  • All sub-tasks must close in the same sprint as the parent. A parent that drags into the next sprint signals an oversized slice — split.

10. Definition of "Sprint Done"

A sprint is "done" if and only if:

  • Sprint goal is satisfied (the dominant slice is shipped to the live R environment).
  • Every committed Story is Done or, if Deferred, has a comment explaining why and a follow-up ticket linked.
  • Every committed Bug is Done or escalated to S1.
  • Sprint-bug budget was not blown by > 50 % (else trigger a quality retro).
  • No dor:incomplete ticket sneaked into the active sprint at any point.
  • No dod:waived ticket merged without an ADR.
  • Per-component caps in jira-sprint-distribution-rules.md were not exceeded.
  • Sprint health metrics (carry-over %, scope-add %, cycle time, PR cycle time, CI red %) recorded in retro.

11. Wave boundaries

  • A sprint never mixes wave labels. R1-S12 cannot pull wave:r2 work even if the engineer is idle.
  • The first sprint of a new wave (R2-S01) cannot start until the previous wave's exit gate (per service-readiness-gates.md + the wave file's "Definition of done" §12) is binary green.
  • A wave that overruns slips into a "stabilization sprint" (R1-S99-style) where the only allowed work is closing wave-exit gates. Stabilization sprints do not count toward velocity.

12. Anti-patterns (auto-flagged in retro)

  • A sprint with > 5 epics represented (planning incoherence).
  • A sprint with no E2E story but a frontend-heavy slice (likely missing acceptance).
  • A sprint where the dominant epic accounts for < 40 % of capacity (goal mismatch).
  • A sprint where bugs > 30 % of capacity (signal of recent quality regression).
  • A sprint with > 25 % carry-over (signals oversize stories or capacity miscount).
  • A story that bounced ≥ 3 times between Refined and Backlog (spec gap; escalate at refinement).
  • A sprint whose slice required a service whose readiness gate is not green (planning broke service-readiness-gates.md).

13. Cross-references


14. Versioning

Same governance as docs/standards/CODING_STANDARDS.md §19. Changes to caps, ratios, or the order in §7 require sign-off from each affected component lead.