Sprint Review — WK21
Cycle 2026-05-18 → 05-24 · Recorded in Plane as BANA-1168. The Executive Summary is sourced from git; the metrics below mirror the Plane review.
Executive Summary
Leadership takeaway
This week (18/05 – 24/05) the team posted its highest output of any recent cycle while pushing two foundations — a smarter inventory & stock system and the new admin UI for products, merchants and finance — plus kitchen-grade search reliability, staff PIN sign-in / multi-employee shifts, and a wave of back-office screens.
- Inventory & Stock — New stock-list and location-overview screens backed by fresh APIs: low-stock thresholds, "needs-attention" flags per item, per-location stock posture, and average cost / COGS for variants and combos.
- New Admin UI (client) — Rebuilt product edit, merchant create/edit, organization creation, the launchpad, tax-group management, the stock screen, the sales dashboard, and the new ledger (list, detail, PDF export).
- Search Reliability — Hardened the live search pipeline: a circuit breaker, transient-vs-permanent error classification, database-driven pipeline config, and quieter heartbeat logging.
- Staff Access & Shifts — Unified the staff PIN sign-in into one clean design, per-action attribution, multi-employee shift support, and per-merchant rollout flag.
- Back Office — Operator screens built out: device, location and unit-of-measure list/create/edit, plus SLA-policy management with escalation rules.
- Helpdesk & Notifications — Permissions across SLA / agents / tickets, plus a new notification system over Kafka + WebSocket.
- Finance & POS — Finance vouchers and account↔payment links, finance forwarded to payments at checkout; on POS, combos display correctly with realistic VND cash quick-amounts.
- Foundations — Multi-tenancy isolation research (PRD + ADR-0001) and Vault-based secrets management groundwork.
Health Score: 41/100 — Intervention required
| Dimension | Score | Weight | Contribution |
|---|---|---|---|
| Completion (67/122 = 54.9%) | 64.6/100 | 30% | 19.38 |
| Predictability (|54.9−85|×2) | 39.8/100 | 25% | 9.95 |
| Workload Balance (max/min 59/2) | 3.4/100 | 20% | 0.68 |
| Flow (44/122 = 36.1% carry-over) | 27.9/100 | 15% | 4.19 |
| Quality (11/122 = 9.0% cancel) | 72.9/100 | 10% | 7.29 |
| Total | 41.5 → 41 | 100% | — |
Rating bands: 90-100 Excellent · 75-89 Good · 60-74 Needs attention · <60 Intervention required.
Headline
67 items completed — the highest absolute throughput of any recent cycle (WK18:12, WK19:35, WK20:40, WK21:67) — but completion landed at 55% because the cycle was over-loaded to 122 (56 of those were incomplete WK20 items transferred in on 2026-05-18). This is a planning / commitment-discipline problem, not a delivery problem.
Key Accomplishments
- PIN auth redesign cluster (Phuc Duong) — BANA-1100–1106 done; major identity delivery
- Search / CDC pipeline (Phuc Duong) — BANA-1062–1068, 1142–1144
- Inventory stock + location suite (Phat) — BANA-1123 / 1124 / 1132 / 1153 / 1154
- Sale + finance (Phat) — BANA-1155 / 1156 / 1157
- FE client screens (Khoa, Duc Bach) — BANA-1125 / 1129 / 1130 / 1138 / 1145 / 1146 / 1147 / 1148
- BO device + UoM (Pham Thoi) — BANA-1110 / 1115 / 1116 / 1126 / 1127 / 1128 / 1133 (100%)
- BO location pages (Van Nguyen) — BANA-1111 / 1112 / 1113 (100%)
- Notification + sales report + helpdesk perms (Pham Huy) — BANA-1150 / 1151 / 1152
- Multi-tenancy research + IGNIS Vault (Phat) — BANA-1158 / 1159
Urgent Attention
| Item | Identifier | Assignee | State | Age (wk) | Issue |
|---|---|---|---|---|---|
| Dynamic filter for other pages | BANA-344 | khoa.nguyen | On-hold | ~22 | Zombie — must cancel |
| Promotion/Voucher module | BANA-509 | hai.cao | On-hold | ~12 | Zombie |
| FE CRUD Promotion | BANA-512 | tai.nguyen | On-hold | ~11 | Zombie |
| Realtime Sale + Payment | BANA-538 | hai.cao, tai.nguyen | On-hold | ~11 | Zombie |
| Admin UI Kit → Base UI | BANA-628 | khoa.nguyen | On-hold | ~8 | Zombie |
| Invoice VAT scheduler | BANA-750 | viet.vo | In-progress | ~6 | URGENT priority, aged, solo |
| Invoice flow / UI | BANA-516/729/730 | viet.vo, duc.bach | IP/Upcoming | ~6 | Invoice thread stalled, solo |
| Excel import cluster | BANA-890–894 | hai.cao | Upcoming | ~4 | No movement; owner over capacity |
| Menu cluster | BANA-902–907 | hai.cao | Upcoming | ~4 | No movement; owner over capacity |
| Hai Cao workload | (43 assigned) | hai.cao | — | — | 39 of 43 pending (9% done) — single biggest bottleneck |
Delivery
| Metric | WK21 | WK20 | 4-Cycle Avg | Target | Status |
|---|---|---|---|---|---|
| Committed | 122 | 97 (at close) | ~67 | — | ~2× the WK18-20 avg |
| Completed | 67 | 40 | 38.5 | — | record high |
| Completion % | 54.9% | 41% (real) | 72%* | 85% | Miss |
| Cancelled | 11 (9.0%) | 1 | ~3 | <7% | Over — deliberate cleanup |
| Carried over | 44 (36.1%) | 56 | ~25 | <10% | Miss |
| Throughput/member | ~4.2 | 2.5 | ~3.0 | 2.0 | Above target |
* 4-cycle completion avg uses WK20's real 41%, not its post-transfer 97.6%.
Misses: Completion 54.9% (over-commitment, not delivery shortfall) · Carry-over 36.1% (inflated by un-triaged backlog) · Cancellation 9.0% (all 11 were deliberate stale-bug cleanup for re-test on the new release).
Team Breakdown
Numbers are person-assignments (multi-assignee items counted per assignee — totals sum to ~267 across 122 items, ~2.2 assignees/item, because the PM is co-assigned widely). "Carry" = pending; per-member cancelled is not split out by the snapshot.
| Member | Assigned | Done | Carry (pending) | Done% | Load | Flag |
|---|---|---|---|---|---|---|
| phat.nguyen | 59 | 21 | 38 | 36% | 59/5 | OVERLOADED · LOW |
| hai.cao | 43 | 4 | 39 | 9% | 43/5 | OVERLOADED · LOW |
| khoa.nguyen | 38 | 14 | 24 | 37% | 38/5 | OVERLOADED · LOW |
| phuc.duong | 25 | 17 | 8 | 68% | 25/5 | OVERLOADED · LOW |
| duc.bach | 17 | 8 | 9 | 47% | 17/5 | OVERLOADED · LOW |
| tai.nguyen | 14 | 3 | 11 | 21% | 14/5 | OVERLOADED · LOW |
| thoi.pham | 10 | 10 | 0 | 100% | 10/5 | OVERLOADED · clean |
| thuong.nguyen | 9 | 6 | 3 | 67% | 9/5 | OVERLOADED · LOW |
| huy.pham | 8 | 5 | 3 | 63% | 8/5 | OVERLOADED · LOW |
| kien.truong | 7 | 4 | 3 | 57% | 7/5 | OVERLOADED · LOW |
| viet.vo | 7 | 2 | 5 | 29% | 7/5 | OVERLOADED · LOW |
| van.nguyen | 5 | 5 | 0 | 100% | 5/5 | clean |
| phat.chung | 4 | 3 | 1 | 75% | 4/5 | OK |
| toan.tran | 4 | 3 | 1 | 75% | 4/5 | OK |
| Lê Hoàng Anh | 4 | 4 | 0 | 100% | 4/5 | OK |
| ngoc.bui | 3 | 2 | 1 | 67% | 3/5 | LOW |
| anh.do / khoi.nguyen / linh.le / nguyen.nguyen / uyen.nguyen | 2 each | 2 each | 0 | 100% | 2/5 | OK |
Workload max/min = 59/2 = 29.5× (target <3×). Top 3 (Phat/Hai/Khoa) hold 140 of 267 person-assignments = 52%. Hai Cao is the critical bottleneck: 43 assigned, only 4 done (9%), 39 pending.
Carry-Over Analysis (44 items → transferred to WK22)
Age rule: ≥3 weeks MUST split or cancel; 2 weeks review/split; 1 week transfer.
| Cluster / Item | Identifier | Assignee | Age (wk) | Recommendation |
|---|---|---|---|---|
| Ancient zombies | BANA-344, 509, 512, 538, 628 | khoa/hai/tai | 8-22 | CANCEL (≥3wk rule; triage BANA-1119 never ran) |
| Hai Excel import | BANA-890–894 | hai.cao | ~4 | DEFER / reassign — Hai at 9% |
| Hai Menu cluster | BANA-902, 904–907 (903 in WK22) | hai.cao | ~4 | DEFER / reassign |
| Variant Option cluster | BANA-933, 935–938 | hai.cao, duc.bach | ~4 | Bundle + transfer |
| Invoice thread | BANA-516, 729, 730, 750 | viet.vo, duc.bach | ~6 | SPLIT + pair viet.vo |
| In-progress active | BANA-756, 759, 932, 972, 973, 1052, 1091, 1099, 1149 | various | <3 | Transfer, keep assignee |
| Other upcoming/draft/on-hold | BANA-677, 704, 872, 970, 987, 1107, 764, 770, 772, 928, 1167 | various | mixed | Triage at WK22 planning |
Reconciles to 44 (11 in-progress + 23 upcoming + 6 on-hold + 4 draft). ~19 are age ≥3 weeks and must be split/cancelled, not blindly carried.
By Module
Per-module counts are not machine-readable (the snapshot carries label + assignee distributions but not module). The split below is estimated from item title prefixes — indicative, not authoritative.
| Module | Items (est) | Notes |
|---|---|---|
| nx-packages (BE) | ~60 | identity/PIN, search/CDC, inventory, sale, finance, ledger, notification |
| nx-apps (FE) | ~50 | client screens, BO device/UoM/location, sale-renderer |
| ignis | 1 | BANA-1159 Vault |
| nx-operation / other | ~10 | PM/ops/docs items |
By Label
From the cycle progress_snapshot (authoritative; sums to 123 incl. the review item).
| Label | Items | Done | Pending |
|---|---|---|---|
| Task | 97 | 55 | 42 |
| Bug | 19 | 6 | 13 |
| Report | 2 | 2 | 0 |
| (no label) | 5 | 5 | 0 |
Bug completion is low (6/19 = 32%) — but most open bugs are queued for the cancel-and-retest-on-release decision.
Blockers & Risks
| Risk | Impact | Mitigation | Owner |
|---|---|---|---|
| WK22 over-loaded (72 after carry-over transfer) — 3rd cycle of over-commit-and-dump | High | Right-size to ~45-55: cancel zombies, defer Hai clusters | Phat |
| Hai Cao bottleneck — 43 assigned, 9% done, 39 pending | High | Reassign/defer Excel + Menu clusters; cap his WK22 load | Phat + Hai |
| Invoice thread stalled (516/729/730/750), 6+ wks, viet.vo solo at 29% | High | Pair a 2nd engineer or split | Phat |
| Workload imbalance 29.5× (max/min) | Med | Rebalance before WK22 commit | Phat |
| 5 ancient zombies dragged across cycles | Med | Cancel now (≥3wk rule) | Phat |
| WK20 retro (BANA-1121) overdue; Health <60 makes it mandatory | Med | Run before WK22 planning | Phat |
4-Cycle Trend
| Metric | WK18 | WK19 | WK20 | WK21 | Direction |
|---|---|---|---|---|---|
| Items completed | 12 | 35 | 40 | 67 | ▲ rising (record) |
| Completion % | 92.3% | 100% | 41% (real) | 54.9% | partial recovery |
| Committed | 13 | 35 | 97 | 122 | ▼ over-commit worsening |
| Carry-overs | 0 | 0 | 56 | 44 | far over tolerance |
| Health Score | 76* | 74* | 28 | 41 | recovering, still <60 |
* WK18/WK19 health are estimates carried from the prior review.
Forecast (Monte Carlo, simple)
Throughput last 4 cycles = (12+35+40+67)/4 ≈ 38.5 done/cycle (trending up to 67). Right-sized WK22 commitment ≈ 45-55 items.
| Workstream | Remaining | 50% conf | 85% conf |
|---|---|---|---|
| PIN auth (BANA-1107 left) | 1 | WK22 | WK22 |
| Invoice thread (516/729/730/750) | 4 | needs pair-up — else WK24+ | undefined solo |
| Hai Excel + Menu clusters | 10 | needs owner change | undefined under Hai |
| Variant Option cluster | 5 | WK22-23 | WK23 |
| Zombies (5) | 5 | cancel | — |
Action Triggers Fired
| Trigger | Fired | Action |
|---|---|---|
| Completion < 75% for 2 consecutive cycles | YES (WK20 real 41% + WK21 54.9%) | Reduce next sprint 15% — cap WK22 at ~45-55 |
| Any member > 5 items | YES — 11 members over cap (Phat 59, Hai 43, Khoa 38…) | Redistribute before WK22 |
| Any member < 70% done for 2 cycles | LIKELY — 11 members <70% this cycle | Pair/reduce load for Hai, tai, viet |
| Carry-over age > 2 weeks | YES — zombies + Hai clusters + invoice | Split or cancel |
| Cancellation > 15% | NO (9.0%) | — (deliberate cleanup) |
| Workload max/min > 3× | YES — 29.5× | Rebalance; Hai is single point of failure |
| Health Score < 60 | YES (41) | Dedicated retrospective (BANA-1121, overdue) |
Data Integrity Notes
- State counts authoritative (retrieve_cycle): 67+11+11+29+4 = 122; rates sum to 100%.
- Team Breakdown + By-Label are from the cycle progress_snapshot (person-assignments, multi-assignee inflated). By-Module is an estimate (module-per-item not machine-readable).
- WK20's displayed 97.6% is post-transfer; real at-close 41% (see WK20 review) — used in trend + trigger.
- Health verdict (41, Intervention required) is robust across the full plausible Balance range.
Related Pages
- Sprint Reviews · Roadmap · Changelog · Traceability Matrix
- Plane: BANA-1168 — Sprint review 2026_WK21 (Report)
- Next: WK22 review