Sprint Review — WK22
Cycle 2026-05-25 → 05-31 · Recorded in Plane as BANA-1219. Numbers below are the end-of-cycle snapshot, after a code audit corrected 5 mislabeled items.
Executive Summary
Leadership takeaway
This past week (25/05 – 01/06) the team focused on two fronts: security & access (role/store-based RBAC) and a new payment-integration system — while also opening up revenue reporting, HQ→store product sync, and offline POS selling.
- Security & Access — Finished the role-management screen (added a cashier role), per-feature permissions (e.g. invoices), automatic login recovery on both apps, staff-group management + availability schedules.
- Reporting & Analytics — Launched revenue reporting (charts + configurable filters, defaults to today); reports now run on the offline build too.
- Payments — New payment-integration system: auto-confirmation, auto-redirect on success; transaction summaries shown even offline.
- Products, Inventory & Pricing — Bulk variant creation with stock checks; system-issued unique product IDs; inventory search; price-group updates.
- Product Sync — Automatic product sync from headquarters (HQ) down to multiple stores, with cloud file storage (S3).
- Restaurant / Tables — New table setup per store, optional guest name/phone capture, fixes to order-cancel sync & room navigation.
- Offline POS — Restructured the desktop app; added reservations, cash book, and revenue reporting that work offline.
- Finance & E-invoice — Cleaned up transaction vouchers, void banner, tax-method validation on invoices.
Health Score: 36/100 — Intervention required
| Dimension | Score | Weight | Contribution |
|---|---|---|---|
| Completion (50% vs 85% target) | 58.8 | 30% | 17.6 |
| Predictability | 30 | 25% | 7.5 |
| Workload balance (max 24 / min 1) | 4.2 | 20% | 0.8 |
| Flow (carry-over 48%) | 4 | 15% | 0.6 |
| Quality (cancel 2%) | 94 | 10% | 9.4 |
| Total | 36 |
Key Accomplishments
- Per-merchant Casbin authorization + alpha PG-HA / CDC infra — Phat
- commerce/sale/identity stabilization — onboarding backfill, combo snapshot, pricing-per-SaleOrderItem, JWT role domain — Hai Cao
- FE auth-recovery + merchant-scope + product sync + i18n — Khoa
- Inventory cost/COGS + tax-info / Vietnam-address via API + Citizen-ID (CCCD) validation — Viet Vo
- Inventory Typesense search + CDC cascades — Phuc Duong
- Product sync event bus + BullMQ workers — Huy Pham
- Ledger job-status + websocket + UTC fix — Phat Chung
- POS Tauri: native print, ReservationService, cancel order + kitchen ticket — Kien
Urgent Attention
Items carried into WK23 that need immediate action — all verified incomplete in the code audit below.
| Group | Items | Issue |
|---|---|---|
| Menu setup (POS) | BANA-902…907 | Not started — full feature group carried |
| Excel import | BANA-890…894 | Not started — full feature group carried |
| Tax book S1a (Path A) | BANA-1107 | BE done, UI design not finalized — blocks UAT |
| Store user mgmt / RBAC tree | BANA-677, 1164, 1140 | Permission-tree UI incomplete |
| Partial-scope carry | BANA-729, 750, 730, 932, 759, 509, 512 | Core shipped, gaps remain |
7 members over the 5-item ceiling
Hai Cao (24), Khoa (18), Phuc Duong (10), Phat (9), Duc Bach (7), Viet Vo (6) all exceeded the sustainable load. Redistribution was required before WK23 — see Action Triggers.
Delivery
| Metric | WK22 (corrected) | WK21 (frozen) | Target | Status |
|---|---|---|---|---|
| Committed | 100 | 123 | — | — |
| Completed | 50 | 68 | — | — |
| Completion % | 50% | 55% | 85% | Miss |
| Cancelled | 2 (2%) | 11 (9%) | <7% | OK |
| Carried over | 48 (48%) | 44 (36%) | <10% | Miss |
| Throughput/member (~16) | 3.1 | 4.3 | 2.0 | OK |
Misses:
- Completion 50% vs 85% target — root cause: committed 100 items against a sustainable ~32 (16 members × 2).
- Carry-over 48% — overcommitment cascaded; 48 items moved to WK23.
Snapshot, not live
These are the end-of-cycle numbers as reviewed. The cycle now shows only 52 Done + 2 Cancelled because the 48 incomplete items were moved to WK23 after this review. Compare WK22 ↔ WK21 only (older closed cycles have no frozen snapshot → n/a).
Team Breakdown
| Member | Committed | Done | Done% | Load (/5) | Flag |
|---|---|---|---|---|---|
| Hai Cao | 24 | 3 | 13% | 4.8x | OVERLOADED · LOW-COMPLETION |
| Khoa Nguyen | 18 | 15 | 83% | 3.6x | OVERLOADED |
| Phuc Duong | 10 | 7 | 70% | 2.0x | OVERLOADED |
| Phat (PM) | 9 | 5 | 56% | 1.8x | OVERLOADED · LOW-COMPLETION |
| Duc Bach | 7 | 3 | 43% | 1.4x | OVERLOADED · LOW-COMPLETION |
| Viet Vo | 6 | 2 | 33% | 1.2x | OVERLOADED · LOW-COMPLETION |
| Phat Chung / Kien / Huy | 3 each | 2 / 2 / 1 | — | 0.6x | LOW-COMPLETION |
Low Done% ≠ low output
Low Done% on senior BE is a ticket-hygiene signal, not performance — git shows large merged volumes. The audit alone lifted Hai Cao 1→3, Phuc Duong 6→7, Duc Bach 0→3.
Carry-Over Analysis
48 items moved to WK23. Categorized by the code audit:
| Category | Items | Age | Recommendation |
|---|---|---|---|
| NOT-DONE — Menu setup | BANA-902…907 | 1 wk | Transfer to WK23, keep assignee |
| NOT-DONE — Excel import | BANA-890…894 | 1 wk | Transfer to WK23, keep assignee |
| NOT-DONE — RBAC tree / store user | BANA-677, 1164, 1140 | 1–2 wk | Review with assignee; split if >50% remains |
| NOT-DONE — Tax S1a UI | BANA-1107 | 1 wk | Transfer — UAT-blocking, prioritize |
| PARTIAL — core shipped, gaps | BANA-729, 750, 730, 932, 759, 509, 512 | 1 wk | Transfer with reduced scope |
No zombie items yet — but the chain is forming
WK21 carried 44, WK22 carried 48. None individually >2 weeks yet, but the rising chain is the early signal of zombie carry-over. Split or cancel at WK23 planning before any item ages past 2 weeks.
By Label
Of the 54 items still in the cycle (52 Done + 2 Cancelled, post-carry-over):
| Label | In cycle | Done | Cancelled |
|---|---|---|---|
| Task | 50 | 48 | 2 |
| Bug | 4 | 4 | 0 |
Label split of the full 100 committed isn't reconstructable post-carry-over (the 48 moved items took their labels to WK23). Figures above are the verifiable remainder.
Blockers & Risks
DoD still open for early-June UAT
KDS (send-to-kitchen) · POS shift open/close + cash reconciliation · X/Z-report · instant e-invoice issuance at POS (UI) · all-system revenue dashboard · supplier payables. Shift-management refactor is need-review (blocks open/close shift). Alpha final deploy pending.
| Risk | Impact | Mitigation | Owner |
|---|---|---|---|
| Overcommitment 2 cycles running | High | Cap WK23 at ~32 items; cut 15% | Phat (PM) |
| Hai Cao 24 items / 13% done | High | Redistribute BE load before WK23 | Phat (PM) |
| Tax S1a UI (BANA-1107) UAT-blocking | High | Prioritize in WK23 | Tax squad |
Shift refactor need-review | Med | Land feat/shift-variant-2 in Phase 2 | POS squad |
4-Cycle Trend
| Metric | WK19 | WK20 | WK21 | WK22 | Direction |
|---|---|---|---|---|---|
| Items completed | 35 | 40 | 68 | 50 | ■ stable-ish |
| Committed | 35* | 41* | 123 | 100 | ▲ rising (bad) |
| Completion % | n/a* | n/a* | 55% | 50% | ▼ declining |
| Carry-over | n/a* | n/a* | 44 | 48 | ▼ worsening |
| Health Score | n/a* | n/a* | n/a* | 36 | — first scored |
* WK19/20 have empty snapshots → completion/carry marked n/a, not fabricated. Pattern: completion collapses when committed size is large (100–123 vs sustainable ~32 = 16 members × 2).
Forecast
Monte Carlo forecast needs ≥3 cycles of trustworthy throughput; only WK21 + WK22 have reliable counts (WK19/20 snapshots empty). Deferred until WK23–WK24 give a stable 3-cycle base. Naive throughput so far ≈ 50–68 items/cycle, but completion-rate volatility (55% → 50%) makes any date projection low-confidence today.
Code-audit correction log
Board said incomplete; code proved Done (corrected 45 → 50):
| Item | Was | Now | Evidence |
|---|---|---|---|
| BANA-1143 Inventory Typesense collection | In-progress | Done | inventory.collection.ts + mapper + CDC enrichment |
| BANA-1175 Ledger websocket status job | In-progress | Done | websocket.component.ts + notification service + worker emit |
| BANA-516 Integrate invoice for sale | Upcoming | Done | PAYMENT_SUCCESS → handlePaymentSuccess() full path |
| BANA-933 Product Variant Option (BE) | Upcoming | Done | product-option schema + service + controller |
| BANA-935 Map variant↔option combo | Upcoming | Done | product-variant-option schema + repo + controller |
Coverage: ~25 of 50 high-risk items audited by hand → 50% completion is a verified floor, not a ceiling. The 2 cancelled items: BANA-764 (reporting payments endpoint), BANA-838 (POS no-promo flow).
Action triggers fired
| Trigger | Detail | Action |
|---|---|---|
| Overcommitment (<75% × 2 cycles) | WK21 55%, WK22 50% | Reduce next sprint by 15% |
| Overload (>5 items) | Hai Cao 24, Khoa 18, Phuc Duong 10, Phat 9, Duc Bach 7, Viet Vo 6 | Redistribute before WK23 |
| Workload imbalance (>3x) | 24 : 1 | Rebalance |
| Zombie carry-over (chain forming) | WK21(44) → WK22(48) | Split or cancel at planning |
| Health < 60 | 36/100 | Dedicated retrospective |
| Board ≠ reality | 5 mislabeled, found by code audit | Move ticket to Done on PR merge |
Related Pages
- Sprint Reviews · Roadmap · Changelog · Traceability Matrix
- Plane: BANA-1219 — Sprint review 2026_WK22 (Report) · WK22 roll-ups BANA-1213…1218