Skip to main content

Bifrost — 26Q3 Sprint Allocation (forecast)

ARCHIVED 2026-07-12 — point-in-time forecast (as-of 2026-07-09), already stale against the board. This file was a hand-derived render no linter watches — exactly the orphan-mirror class the delivery doctrine forbids — and the live sprint has since diverged (issues pulled out, initiatives descoped; see the sprint doc's reconciliation rechecks). Do not update it in place. Its durable content lives in the canonical homes: multi-sprint sequencing → re-derive per window via initiative-timeline-mapper (which now sanity-checks against observed throughput); the second-FE-engineer escalation and FE overflow → the active sprint's ## Deviations + capacity.md; the Self-Subs commitment_date exposure → that initiative's README + a dated status/ risk when it materializes. If a standing multi-sprint allocation view is ever needed again, it must be a digest-derived render (readiness-style, tagged + linted), not freehand.

This is a forecast render, not a commitment and not a source of truth. It maps the ranked work in roadmap.md ## Priority onto the six 26Q3 sprint windows, load-balanced against capacity.md, so no single window (and no single person) is bloated the way Sprint 1 was. Priority, effort, and staffing are canonical in the roadmap / capacity / each initiative README — this file only sequences them into windows.

As of 2026-07-09. Re-derive at each sprint boundary (initiative-timeline-mapper or by hand) — priority and capacity move roughly weekly, and the delivery linter does not watch this file, so a stale copy drifts silently. Placement guides order; it never freezes work — anyone who empties their queue pulls the next-ranked item forward regardless of which sprint it was penciled into (goal-led Kanban; see goal-led-kanban-transition.md).

Assumption: 2-week cadence inferred from Sprint 1 (2026-07-06 → 07-17) + the five sprint ids created (S2–S6). Sprint ids are exact; the dates are inferred — correct any window that differs.

Sprint windows

SprintWindow (inferred)Jira sprint id
S12026-07-06 → 07-1721367 (Bifrost 26Q3 Sprint 1, active)
S22026-07-20 → 07-3121464
S32026-08-03 → 08-1421465
S42026-08-17 → 08-2821466
S52026-08-31 → 09-1121467
S62026-09-14 → 09-2521468

(Q3 is 13 weeks; the ~last week of Sep is buffer/carry.)

Two rules this forecast is built on

  1. QA follows the build. Each QA item is placed in the window where its BE/FE reaches ready-to-test — never earlier. This is the fix for the Sprint-1 bloat: dumping all ~14 of Yoddi's QA items into one sprint made his board impossible; sequenced behind each build, his load is ~one initiative-pair per window (see his row below).

  2. FE overflow to Q4 is shown, not hidden. Syafrizal M. (the only FE) is over capacity (1.21, 11 days over) on ranked FE alone, before the 7 adhoc FE stories. So a real slice of FE work cannot fit in Q3 regardless of how the sprints are sliced. This forecast parks that overflow explicitly in the Q4 / escalate column rather than distributing it into windows as if it fits — it is the second-FE-engineer decision the capacity doc already flags, made concrete.

Forecast: who works what, per window

Cells name the initiative(s) in flight; effort/load is context only (canonical in capacity.md). = continues into the next window.

Engineer (disc)S1S2S3S4S5S6Q4 / escalate
Hafriz (BE)Deduction V2 (P1)Deduction V2 → · Sales Invoice (P5)Billing Expired (P14)Postpaid Scheduler (P16)Postpaid → · adhoc A3/A8 BEbuffer / carry
Madani (BE)Meta Pricing (P2) — Phase-1 (1.1–1.5) + review · Self Top-up bugfix (P3)Meta Pricing Phase-2¹ · Downgrade Webhook (P8)Downgrade Webhook → · Quota Mgmt (P9)Quota Mgmt → · adhoc A5/A6/A10 BEMeta Pricing P2 tail¹ / slackslack / pull-in
Satya (BE)Lite Seats BE (P7) · adhoc A2 (PULL-TO-CLOSE)Lite Seats BE →Audit Logs BE (P15)Downgrade User BE (P10)²Downgrade User BE → · adhoc A1/A7 BEDowngrade User → · SSO BE (P12) if gate clearsSSO BE if still blocked
Grehasta (BE)Qontak One BE (P4)Qontak One → · Self-Subs BE (P6)Self-Subs → · Meta×Modpanel BE (P13)Meta×Modpanel → · One CID BE (P11)³One CID BE →One CID → · adhoc A4 BE
Syafrizal M. (FE) 🔴 over capSelf Top-up FE bugs (P3) · Qontak One FE (P4) · Sales Invoice FE (P5)Self-Subs FE (P6)Self-Subs → · Lite Seats FE (P7)Audit Logs FE (P15) · Billing Expired FE (P14)⁴Downgrade User FE (P10)² · Postpaid FE (P16)Postpaid → · One CID FE (start, P11)SSO FE (P12, 23 md) · One CID FE remainder · all 7 adhoc FE → needs 2nd FE engineer
Yoddi (QA)Deduction V2 · Self Top-up E2E (BIF-8382)Qontak One · Sales InvoiceSelf-Subs · Lite SeatsDowngrade Webhook · Meta×ModpanelQuota · Billing ExpiredPostpaid · Audit Logs · Meta Pricing¹SSO QA (P12, 10 md) → Q4
Izzul (QA, backup)Downgrade User QA prepDowngrade User QA (P10)²One CID QA (P11) → Q4

Notes

  • ¹ Meta Pricing (P2) — only Phase-1 tasks (1.1–1.5) are startable; Phase-2 data values are gated on the open PM pricing decision + hub_core access. Hard external date 2026-10-01 (Meta go-live); the risk is decision latency, not capacity. Fast-track the pricing call to keep Phase-2 inside S4–S5.
  • ² Madani leads with Meta Pricing (P2) — PM decision 2026-07-09. He drives Meta as far as its gate allows (Phase-1 is startable; Phase-2 waits on the pricing decision + hub_core), filling the gate-wait with Downgrade Webhook (P8) → Quota Mgmt (P9) across S2–S4. Consequence: those two land ~1 window later than a webhook-first plan, so Downgrade User (P10) — which needs both — starts ~S4 (Satya BE), FE ~S5 (Syafrizal), QA ~S6 (Izzul). Risk: if the Meta pricing gate drags, Downgrade Webhook/Quota slip further and the three dependent Downgrade User queues slip with them — escalate the pricing decision rather than letting the unblock slide silently.
  • ³ One CID (P11) — ⚠️ the Epic BIF-6428 shows status: Done in Jira (Sprint-1 reconciliation, unresolved). If it is genuinely finished, Grehasta's S4–S6 BE frees up and Izzul's One CID QA drops. Confirm with PM/TPM before scheduling any One CID work.
  • Billing Expired FE (P14) is a low-confidence stub — no FE RFC authored yet. PM to scope before an engineer builds it; don't have an agent invent the FE design from the BE RFC.
  • Self-Subs (P6) carries a hard commitment_date: 2026-08-31 — its build (Grehasta BE S2–S3, Syafrizal FE S2–S3) and QA (Yoddi S3) are placed to land before end of August. It is also the initiative most exposed to external contracts it doesn't own (Billing/Pay/moderator-be) — watch that gate.

Q4 / escalation overflow (does NOT fit Q3)

This is the honest output of the FE constraint — surface it, don't smooth it:

  • Centralized SSO Token (P12) — FE 23 md + BE 4.5 + QA 10. Deprioritized to P12 (tech-debt, no instant customer value) and externally blocked (Account & Launchpad SDK + infosec). Realistically Q4 absent both the external gate clearing and FE capacity.
  • One CID FE (P11) — 7 md with no queue slot on Syafrizal M. (see capacity over 1.21). Overflows to Q4 unless capacity is added (and pending the Done-in-Jira confirmation above).
  • All 7 adhoc FE stories (BIF-8695) — A1/A3/A4/A5/A6/A7/A9 FE halves. BE halves absorb on the deep-headroom BE engineers (A2 closes BE-only in S1; A8/A10 close in gaps), but every BE+FE adhoc cannot close while FE is over capacity. A1 + A3 (🔴 Expedite, customer/revenue-facing) are the concrete triggers for the second-FE-engineer decision.

The single most important escalation: add a second FE engineer (mirroring CDP's two-FE setup) or move ranked FE work off Syafrizal M. Without it, SSO FE, One CID FE, and all adhoc FE slip to Q4 — no sprint re-slicing changes that.

Applying this to Jira

The Sprint-1 bloat came from putting the whole quarter into sprint 21367. To fix it, treat 21367 as the current window and move everything else into its forecast sprint above:

  1. Right-size Sprint 1 (21367) to only S1 rows above — the near-term builds (Deduction V2, Qontak One, Sales Invoice, Lite Seats start, Self-Subs start, Self Top-up close) + their in-window QA (Deduction V2, Self Top-up E2E) + adhoc A2.
  2. Move each initiative's tasks into its forecast sprint id. e.g. Downgrade Webhook → S2–S3 (21464/65), Quota Mgmt → S3–S4 (21465/66), Billing Expired → S3/S5, Postpaid → S4/S6, etc. per the matrix.
  3. Redistribute Yoddi's QA tasks — the ~13 bulk-created QA tasks (BIF-8771–8783) should not all sit in 21367. Move each to the sprint where its initiative is built: Qontak One/Sales Invoice QA → S2, Self-Subs/Lite QA → S3, and so on. Several currently sit against Epics with zero implementation tasks (Sprint-1 reconciliation finding #2) — those especially belong in later windows, not S1.
  4. Park the Q4 overflow (SSO, One CID FE, adhoc FE) in the Jira backlog, not any Q3 sprint, so the board stops implying they'll ship this quarter.
  5. Keep using the manual Jira convention (jira-alignment-check for missing per-story wiring, then sprint-jira-sync for Tasks). Never trigger the automated per-AC jira-sync pipeline.

At each sprint close, actuals flow back the normal way (dated status/ progress_* → README/roadmap mirrors; a real reprioritization → a delivery/decisions/ ADR), and this file is re-derived for the next window.