Sprint Review - WK23
Cycle 2026-06-01 → 06-07 · Recorded in Plane as BANA-1286. Scored with the delivery-first scorecard (throughput & flow, not commitment-accuracy). Board reconciled against code first (22 mislabeled → Done).
Why 73 now, not 35
The old score weighted Done/Committed ~70% (counted 3×), so a high-output team that over-committed looked like a failure. The new scorecard rewards absolute throughput and isolates flow/aging; over-commitment is a separate planning flag, not a health penalty. WK23's real story: strong delivery, weak work-item-age hygiene.
Executive Summary
Leadership takeaway
This past week (01/06 - 07/06) the team pushed hardest on multi-merchant operation and search going live, while shipping large slices of finance, e-invoicing, helpdesk and the POS app. A very high-output week - the constraint is not speed, it's old carried work piling up and over-loaded individuals.
- Multi-merchant - every service scopes by merchant; merchant management + switcher in BO; per-merchant authorization re-enabled on the new scoped engine.
- Search - Typesense live across the catalog + relevance tuning + Kafka topic registry.
- Finance & Reporting - finance accounts/categories/vouchers inside each merchant; revenue-by-time report; return payment vouchers.
- E-invoicing (VAT) - automatic post-sale VAT issuance (immediate + EOD) + merchant invoice flow.
- Helpdesk - assignment rules, SLA & escalation, agent-group member management.
- POS - product/variant catalog, bundler badges, table reservations, session handling; app rebranded "BANA POS".
- Help Center - content pipeline + getting-started / finance / reporting articles (EN+VI).
Delivery Scorecard
Multi-dimensional by design (SPACE) - not collapsed to one number. Each dimension measures delivery/flow, not how well the sprint size was guessed.
| Dimension | Score | Trend | What it says |
|---|---|---|---|
| Throughput | 95 | ■ | 45 done ≈ the 4-cycle median (~47) - normal output volume |
| Flow & Aging | 28 | ▼ | 33 of 46 carried items (72%) are aged > 2 weeks - the real problem |
| Predictability | 76 | ■ | throughput CoV 0.24 over 5 cycles - fairly consistent delivery |
| Quality | 86 | ■ | 0 cancelled; 13 bug-labelled items, no major reopen signal |
| Sustainability | 95 | ▲ | top-2 committed share ~41%; completed work spread well |
| Delivery Health (roll-up) | 73 - Good | ▲ | up from the old mis-scored 35 |
Planning signals (reported separately - NOT in Health):
- Commitment ratio 2.8× - committed 91 vs sustainable ~32 (16 × 2). Over-committed; the fix is re-sizing WK24, not a low health grade.
- Completion 49.5% (45/91) - a consequence of over-commit, not low output.
Value Delivered (EBM)
| Key Value Area | What landed this cycle |
|---|---|
| Current Value (usable now) | Search live; per-merchant scoping; finance accounts/category/voucher UI; VAT e-invoice issuance; SLA/helpdesk; POS catalog + reservations; revenue-by-time report |
| Time-to-Market (speed to ship/learn) | IGNIS releases core v0.0.9-15 → -18 (+boot/helpers/docs-mcp); Phase-1 deployment prep (alpha topology) |
| Ability-to-Innovate (future speed) | IGNIS Drizzle Casbin adapter + policy/permission builder + sequential queue helper; commerce/product-service refactor; package/script standardization - all reduce future delivery cost |
| Unrealized Value (opportunity ahead) | Phase 2 backlog: HKD 1-3B tax · retail/grocery · KHDN-MST; Menu domain & Excel import queued |
Effort & Contribution
Context, not a leaderboard. Commits/LOC are misleading proxies - debugging, refactor, review, deletion and mentoring are high-value and low-commit. Activity is shown next to outcomes; non-coding work is listed explicitly.
| Member | Commits | Areas touched | Done (board) | What they built / invisible work |
|---|---|---|---|---|
| Khoa Nguyen | 56 | bo · client · sale-renderer | 5 | Merchant mgmt + switcher, sale channel, realtime txn/order, shared filters; heavy cross-app refactor |
| Duc Bach | 53 | client · bo · core | 3 | Generalized table filters, finance UI, fare-system rules, revenue report, core i18n |
| Tai Nguyen | 42 | bo · core | 8 | Helpdesk assignment rules, SLA & escalation, agent-group member mgmt |
| Kien Truong | 42 | sale-renderer · sale-main | 2 | Product/variant catalog, bundler badges, app rebrand, locale/UX |
| Hai Cao | 41 | sale · commerce · identity · all | 10 | x-merchant-id rollout, pricing context, entitlement, OTP, commerce hotfixes, package refactor |
| Phuc Duong | 28 | search | 2 | Typesense integration, hybrid tuning, CDC version-stamping, Kafka topic registry |
| Phat Nguyen | 20 (+IGNIS) | identity · core · IGNIS | 14 | Scoped Casbin (IGNIS + BANA), permission migration/seed, PRDs, sprint-review framework |
| Huy Pham | 18 | helpdesk | 1 | Agent-group member mgmt with organizer scoping |
| Toan Tran | 17 | overture | 4 | Help-center pipeline + getting-started/finance/reporting articles (EN+VI) |
| Phat Chung | 11 | client · ledger | 1 | Error badge, locale/dayjs, s2a ledger (WIP) |
| Viet Vo | 9 | invoice · finance | 4 | VAT invoice flow, finance provider field, return vouchers |
| Thoi Pham | 6 | bo | 3 | BO product category handling |
| Le Linh | 3 | docs | 1 | Revenue-by-time report PRD |
Non-coding contribution (real value, not in git): Anh Do & Uyen Nguyen - QA verifications (6+ done); Thuong Nguyen - design; Nguyen Nguyen - PM/onboarding.
What Shipped - Detailed Work Log
- Multi-merchant & authorization - x-merchant-id across all services (Hai Cao); scoped Casbin migration + permission lattice seed (Phat); BO merchant table + multi-merchant switcher (Khoa).
- Search - Typesense integration across core entities; hybrid-search tuning + tests; ProductIdentifier + version-stamped CDC; Kafka topic registry + Debezium heartbeat (Phuc Duong).
- Finance & reporting - finance account list/create/edit (Van Nguyen); finance category/voucher UI (Duc Bach); revenue-by-time report (Le Linh + Duc Bach); return-flow payment vouchers + provider field (Viet Vo).
- E-invoicing - post-sale VAT issuance + 2H/EOD BullMQ scheduler + FE invoice flow (Viet Vo).
- Helpdesk - assignment rules, SLA & escalation, ticket categories, agent-group member mgmt (Tai · Huy).
- POS - product/variant catalog, bundler badges, table reservations, session-expiry recovery, app rebrand to BANA POS (Kien · Khoa).
- Commerce - product cascade-delete + order guards, service-product hotfix, product-service refactor (Hai Cao).
- Help center - content pipeline, screenshot capture, getting-started/finance/reporting articles EN+VI (Toan).
- Platform/IGNIS - Drizzle Casbin adapter enhancement, policy/permission builder, sequential queue helper, releases core v0.0.9-15→-18 (Phat · Hai Cao).
Project & Phase Progress
- Phase 1 - complete. Much of WK23 went into task allocation (board reconciliation, per-member work records BANA-1258…1285, this review) and preparing the Phase 1 deployment (alpha topology).
- Phase 2 - planning. 7 code-audited epics (Jun-Sep 2026): HKD 1-3B tax + retail/grocery; 3 net-new (tax 1-3B · retail-grocery · KHDN-MST); QR/offline/loyalty/webshop deferred to Phase 3. See Phase 2 Plan.
- Burnup signal: of the Phase 2 scope, ~0 started - the WK23 backend backlog (Menu, Excel import) is the on-ramp and is not yet underway. Forecast below.
Bottlenecks & Flow
| Signal | Reading |
|---|---|
| Stage accumulation | 49 UPCOMING + 7 IN_PROGRESS vs 45 Done - a large unstarted backlog (over-commit), few items actually in flight |
| Aging WIP | 33 items aged > 2 weeks; oldest: 509/512 (14 wk), 532 (13 wk), Menu 902-907 & Excel 890-894 (7 wk) |
| Concentration | Hai Cao holds 18 carried items, Phat 12 - backend is a single point of flow |
| Blocked / stalled | ledger s2a on fixture data (1225); acting-user middleware commits not on HEAD (1140) |
The constraint is age + concentration, not throughput. Cap WIP, drain the oldest items, and spread backend ownership.
Carry-Over Analysis
46 items moved to WK24. Age rules: ≥3 wk → split/cancel · 2 wk → review · 1 wk → transfer.
| Category | Items | Age | Recommendation |
|---|---|---|---|
| Zombie | BANA-509, 512 (Promotion) | 14 wk | CANCEL or rewrite |
| Zombie | BANA-532, 677, 628, 620 | 10-13 wk | Split / re-scope / cancel |
| Not started - Menu | BANA-902…907 | 7 wk | One epic, one owner |
| Not started - Excel import | BANA-890…894 | 7 wk | Commit in WK24 or de-scope |
| Not started - onboarding | BANA-759, 704 | 9 wk | Split / transfer |
| In progress | BANA-1099, 1107, 1140, 1225 | 2-3 wk | Transfer, reduced scope |
| Recent (≤1 wk) | BANA-1183/1184/1234-1236/1241/1254/1257/1229 | 0-1 wk | Transfer to WK24 |
By Module (estimated)
Estimated from title prefixes ([BE/]/[BO] → packages·operation, [FE/]/[POS]/[DES] → apps).
| Module | Items | Done | Done% | Carry |
|---|---|---|---|---|
| nx-apps (FE/POS/DES) | 50 | 33 | 66% | 17 |
| nx-packages + nx-operation (BE/BO/OPS/DOC) | 41 | 12 | 29% | 29 |
Frontend closed out well; backend carry-over dominates and is concentrated on one person.
By Label
| Label | Items | Done | Carry |
|---|---|---|---|
| Task | 75 | 38 | 37 |
| Bug | 13 | 6 | 7 |
| Report | 1 | 1 | 0 |
Risks & Blockers
| Risk | Impact | Mitigation | Owner |
|---|---|---|---|
| Menu domain (902-907) not started | High | One epic, one owner; WK24/25 | Hai Cao / commerce |
| Excel import (890-894) not started | High | Commit WK24 or de-scope from MVP | BE |
| Ledger s2a on fixture data (1225) | Med | Real data fetcher before HKD tax | Phat Chung |
| Backend load on Hai Cao (28) & Phat (26) | High | Redistribute before WK24 | Phat (PM) |
| Over-commit 3 cycles (ratio 2.8×) | High | Cap WK24 ≈60, drain carry-over first | Phat (PM) |
Trends (5-cycle)
| Metric | WK19 | WK20 | WK21 | WK22 | WK23 | Dir |
|---|---|---|---|---|---|---|
| Throughput (done) | 35* | 40* | 68 | 50 | 45 | ■ at median |
| Completion % | n/a* | n/a* | 55% | 50% | 49.5% | ▼ (overcommit) |
| Carry-over | n/a* | n/a* | 44 | 48 | 46 | ■ stuck high |
| Avg carried age | - | - | - | - | high (72% >2wk) | ▼ worsening |
| Delivery Health (new scale) | - | - | - | - | 73 | first scored |
* WK19/20 snapshots empty → completion/carry n/a. Old health scale (WK21 41 / WK22 36) is not comparable - it used the retired completion-weighted formula.
Forecast (Monte Carlo)
Throughput ~45-54 done/cycle (WK21-23).
| Milestone | Remaining | 50% | 85% |
|---|---|---|---|
| Drain WK23 carry-over (if WK24 capped & prioritized) | 46 | WK24 (Jun 14) | WK25 (Jun 21) |
| Menu domain (902…907) | 6 | WK25 (Jun 21) | WK26 (Jun 28) |
| Excel import (890…894) | 5 | WK25 (Jun 21) | WK26 (Jun 28) |
| Onboarding seeding (759/704) | 2 | WK24 (Jun 14) | WK25 (Jun 21) |
Assumes carry-over is prioritized and WK24 isn't re-overloaded; otherwise dates slip ~1 cycle.
Action Items
- ⬜ Cap WK24 at ~capacity (≈60) and drain carry-over first - Phat (PM)
- ⬜ Split or cancel all items aged > 2 weeks (509/512/532, Menu, Excel) - Phat (PM)
- ⬜ Redistribute backend load off Hai Cao & Phat - Phat (PM)
- ⬜ Move ticket to Done on PR merge (22 mislabeled this cycle) - all devs
- ⬜ Re-plan Menu as one epic, one owner - Hai Cao
- ⬜ NX_HRM: freeze end-of-cycle snapshots - ops
Code-audit correction log
Board said incomplete; code proved Done (22 items, 23 → 45). 66 code-relevant incomplete items audited by 6 parallel agents → 49.5% is a verified floor.
| Item | Was | Now | Evidence |
|---|---|---|---|
| 932 Typesense | In-progress | Done | packages/search engine + CDC + collections |
| 729/730/750 Invoice + VAT scheduler | In-prog/Up | Done | packages/invoice worker + controllers + scheduled-issuance + BullMQ |
| 1256/987 Product cascade delete | Upcoming | Done | commerce deletion-policy.service |
| 1091 SLA & escalation | In-progress | Done | apps/bo sla-policy CRUD |
| 1220/1221/1222 Finance-account screens | In-progress | Done | apps/bo finance-account list/create/edit |
| 538 Realtime sale & payment | On-hold | Done | apps/bo socket handlers |
| 870/871/920 Help center | Upcoming | Done | apps/overture content + pages + first-sale |
| 344 Dynamic filters | On-hold | Done | apps/client buildFilterMeta (8+ pages) |
| 756 Reservation UI | In-progress | Done | apps/sale-renderer reservation dialog/sheet |
| 937/938 Product-option UI | Upcoming | Done | apps/client option + variant combination |
| 1162 Session-expiry re-login | Upcoming | Done | apps/sale-renderer useAuthRecovery |
| 1233/1249 Password recovery / session notice | Upcoming | Done | apps/client recovery guard + notify |
| 1228 Supplier (NCC) create UI | Draft | Done | apps/bo + apps/client vendor create |
Kept open (verified): PARTIAL - 1225, 759, 1257, 1236, 1099, 872, 922, 972, 1183, 628. NOT-DONE - 677, 902-907, 936, 890-894, 1140, 1234, 1241, 1164, 704, 970, 973, 1184, 1235, 1254.
Related Pages
- Sprint Reviews · Roadmap · Phase 2 Plan · Traceability Matrix
- Plane: BANA-1286 (Report) · WK23 work roll-ups BANA-1258…1285 (in WK24, dated Jun 1-7)