Sprint Review — WK13
Cycle 2026-03-23 → 03-29 · Recorded in Plane as BANA-688. The Executive Summary is sourced from git; the metrics below mirror the Plane review.
Executive Summary
Leadership takeaway
This week (23/03 – 29/03) the team stood up the full staging environment on VNPAY Cloud K8s with the search & CDC pipeline deployed end-to-end, while landing a wave of POS, sale-renderer and table-allocation delivery plus the public landing & legal pages.
- Staging on K8s — Full PMBH staging environment provisioned on VNPAY Cloud Kubernetes, with network policies, egress for the internal load balancer, and a migrate image to bootstrap the database.
- Search & CDC pipeline — Debezium CDC stack and Kafka topic-init job deployed, Typesense tuned for multilingual / embedding search, and the commerce search-and-CDC component enabled.
- Resilient messaging — Background retry loop and reconnect handling for Kafka consumers across finance, inventory, pricing and ledger, hardening against all-broker disconnects.
- Table allocation & sale — AllocationUsage for table management, socket events on order/order-item mutation, and customer loyalty points earned after a paid sale order.
- POS hardware & printing — TCP printer connect, cash-drawer open, codepage select, bill-template save and order-item printing on the device.
- Fare system & sale-renderer — Fare group management UI with a three-column panel and inline rules editor, plus sale-renderer socket wiring and cash-numpad fixes.
- Public site & loyalty — Bilingual privacy and terms-of-service pages, the customer Sale-Customer show screen, and the design-system library scaffold.
Health Score: 48/100 — Intervention Required
| Dimension | Score | Weight | Contribution |
|---|---|---|---|
| Completion | 70.9/100 | 30% | 21.3 |
| Predictability | 50.5/100 | 25% | 12.6 |
| Workload Balance | 5.6/100 | 20% | 1.1 |
| Flow (no carry-over) | 26.0/100 | 15% | 3.9 |
| Quality (no cancel) | 91.8/100 | 10% | 9.2 |
Key Accomplishments
- Full staging environment on VNPAY Cloud K8s (phat.nguyen) — investigated K8s architecture (NXET-596) and completed the entire PMBH staging preparation (NXET-644). Also co-delivered pos365 support, phone number fix, merchant dates fix. Identified and triaged 12 BE/commerce bugs (NXET-666–678) for systematic hardening.
- Search & CDC pipeline fully deployed (phuc.duong) — learned K8s fundamentals, documented staging architecture, deployed Debezium CDC stack, built and deployed search service + semantic search. 6/6 items completed, 100% delivery.
- Khoa Nguyen's FE blitz — sale-renderer overhaul (fontScale, route refactor, dashboard refactor, WebSocket for Sale), plus FE client delivery (payment settings, bo boilerplate, Customer Paid fix, sales order sync), bug fixes (PRD-001 slug, PRD-003 Vietnamese đ, PRD-004 error code). 16 items done.
- Allocation/floor plan backend complete (Hai Cao) — AllocationLayout restructured, AllocationUsage entity + migration + service, SaleOrderEventActions. Also delivered pricing bug fix, dev infra migration, and co-delivered K8s investigation. 14 items done.
- Landing page shipped (tai.nguyen) — created PMBH landing page, implemented full UI from mockups. Also delivered customer loyalty features (detail screen, points column, transaction history), form refactors. 10 items done.
- Ledger service finalized and handed over (phat.chung, viet.vo) — pos365 ledger refactored and delivered to VNPAY tester team. phat.chung also rewrote ledger schemas.
- POS hardware & distribution (kien.truong) — Google Play distribution, coffee shop POS setup, cash drawer integration. 4/4 items.
Urgent Attention
| Item | ID | Assignee(s) | State | Age (wks) | Issue |
|---|---|---|---|---|---|
| Refactor invoices + VNPAY API | NXET-419 | viet.vo | In Progress | 11 | ZOMBIE — must split or cancel |
| Implement Invoice Page | NXET-449 | tai.nguyen | In Progress | 10 | ZOMBIE — must split or cancel |
| CRUD Promotion | NXET-512 | tai.nguyen | In Progress | 4 | ZOMBIE — must split or cancel |
| Integrate invoice for sale | NXET-516 | tai.nguyen, viet.vo | In Progress | 4 | ZOMBIE — must split or cancel |
| Verify product/inventory/tax | NXET-532 | Hai Cao, Khoa Nguyen | Upcoming | 4 | ZOMBIE — must split or cancel |
| Design POS layouts | NXET-562 | thuong.nguyen | In Progress | 2.5 | Review with assignee, split if >50% remaining |
Delivery
| Metric | WK13 | WK12 | WK11 | WK10 | 4-Cycle Avg | Target |
|---|---|---|---|---|---|---|
| Committed | 73 | 32 | 27 | 29 | 40.3 | — |
| Completed | 44 | 30 | 24 | 24 | 30.5 | — |
| Completion % | 60.3% | 93.8% | 88.9% | 82.8% | 81.4% | 85% |
| Cancelled | 2 (2.7%) | 2 (6.3%) | 3 (11.1%) | 5 (17.2%) | 3.0 (9.3%) | <7% |
| Carried over | 27 (37.0%) | 0 | 0 | 0 | 6.75 | <10% |
| Throughput/member | 4.0 | 3.75 | 3.0 | 3.0 | 3.4 | 2.0 |
Misses:
- Completion at 60.3% — target was 85%. Sprint overloaded at 73 items (2.3x the 4-cycle avg of 40). 12 BE/commerce items bulk-added on 2026-03-26 (3 days before sprint end) inflated committed count.
- Carry-over at 37.0% — target was <10%. Driven by late additions + 5 zombie items (age >= 3 weeks) that should have been split earlier.
Team Breakdown
Note: items with multiple assignees are counted for each member.
| Member | Committed | Done | Cancel | Carry | Done% | Flag |
|---|---|---|---|---|---|---|
| Khoa Nguyen | 32 | 16 | 1 | 15 | 50% | [LOW COMPLETION] |
| Hai Cao | 22 | 14 | 1 | 7 | 64% | [LOW COMPLETION] |
| phat.nguyen | 18 | 5 | 1 | 12 | 28% | [LOW COMPLETION] |
| tai.nguyen | 18 | 10 | 1 | 7 | 56% | [LOW COMPLETION] |
| phuc.duong | 7 | 7 | 0 | 0 | 100% | |
| kien.truong | 4 | 4 | 0 | 0 | 100% | |
| phat.chung | 4 | 4 | 0 | 0 | 100% | |
| thuong.nguyen | 3 | 1 | 0 | 2 | 33% | [LOW COMPLETION] |
| viet.vo | 3 | 1 | 0 | 2 | 33% | [LOW COMPLETION] |
| duc.bach | 2 | 1 | 0 | 1 | 50% | [LOW COMPLETION] |
| toan.tran | 1 | 1 | 0 | 0 | 100% | |
| uyen.nguyen | 1 | 1 | 0 | 0 | 100% |
Context: Top 4 members are heavily co-assigned, inflating committed counts. phat.nguyen's contribution is underrepresented by item count — the K8s staging setup (NXET-644) and architecture investigation (NXET-596) were high-effort items, plus he identified and triaged 12 commerce bugs forming the WK14 pipeline.
Carry-Over Analysis
| Item | ID | Assignee(s) | Age (wks) | Recommendation |
|---|---|---|---|---|
| Refactor invoices + VNPAY API | NXET-419 | viet.vo | 11 | MUST split or cancel |
| Implement Invoice Page | NXET-449 | tai.nguyen | 10 | MUST split or cancel — blocked by NXET-419 |
| CRUD Promotion | NXET-512 | tai.nguyen | 4 | MUST split |
| Integrate invoice for sale | NXET-516 | tai.nguyen, viet.vo | 4 | MUST split — blocked by NXET-419 |
| Verify product/inventory/tax | NXET-532 | Hai Cao, Khoa Nguyen | 4 | MUST split — never started |
| Design POS layouts | NXET-562 | thuong.nguyen | 2.5 | Review with assignee, split if >50% remaining |
| Config fare system | NXET-615 | duc.bach | 1 | Transfer to WK14 |
| Fix translations | NXET-626 | tai.nguyen | <1 | Transfer |
| Sub-category tags + scrolling | NXET-634 | tai.nguyen | <1 | Transfer |
| Build pricing page | NXET-649 | phat.nguyen, tai.nguyen | <1 | Transfer |
| Update mockup images | NXET-664 | tai.nguyen, thuong.nguyen | <1 | Transfer |
| 3x BUG-PRD (002,005,006) | NXET-638,641,642 | Hai Cao, Khoa Nguyen | <1 | Transfer |
| AllocationUsage FE (2 items) | NXET-660,661 | Hai Cao | <1 | Transfer |
| 12x BE/commerce fixes | NXET-666–678 | phat.nguyen, Khoa Nguyen | <1 | Transfer — bulk-added late sprint |
By Module
| Module | Items | Done | Done% | Carry |
|---|---|---|---|---|
| nx-apps | 30 | 19 | 63% | 10 |
| nx-packages | 30 | 15 | 50% | 15 |
| nx-operation | 4 | 4 | 100% | 0 |
| pos365 | 3 | 3 | 100% | 0 |
| nx-design | 2 | 1 | 50% | 1 |
| nx-qc | 2 | 0 | 0% | 1 |
By Label
| Label | Items | Done | Carry |
|---|---|---|---|
| Task | 40 | 30 | 8 |
| Bug | 24 | 7 | 17 |
| Report | 1 | 1 | 0 |
Blockers & Risks
| Risk | Impact | Mitigation | Owner |
|---|---|---|---|
| Invoice refactor (NXET-419) 11 weeks, blocks NXET-449 and NXET-516 | High | Split into smaller deliverables; reassign if viet.vo unavailable | phat.nguyen |
| 12 BE/commerce items added 03-26 inflated sprint committed count | Medium | Add to next cycle directly instead of current sprint | phat.nguyen |
| Bug completion: 7/24 (29%) — most bugs co-assigned but not yet started | Medium | Prioritize bug batch in WK14, assign clear ownership per bug | Team |
| thuong.nguyen POS design (NXET-562) at 2.5 weeks with no clear progress | Medium | Review scope, split WebPOS and HandheldPOS into separate items | thuong.nguyen |
4-Cycle Trend
| Metric | WK10 | WK11 | WK12 | WK13 | Direction |
|---|---|---|---|---|---|
| Items completed | 24 | 24 | 30 | 44 | ▲ |
| Completion % | 82.8% | 88.9% | 93.8% | 60.3% | ▼ |
| Carry-overs | 0 | 0 | 0 | 27 | ▼ |
| Cancellations | 5 | 3 | 2 | 2 | ▲ |
| Health Score | 75.5 | 76.7 | 75.7 | 48.1 | ▼ |
The team delivered a record 44 items (vs avg 26) — actual throughput is increasing. But the sprint was loaded with 73 items, making the completion rate appear poor. Cancellation trend is improving (17% → 3%).
Forecast (Monte Carlo)
| Scope | Remaining | 50% confidence | 85% confidence |
|---|---|---|---|
| WK13 carry-over | 27 | WK14 (2026-04-05) | WK15 (2026-04-12) |
| Invoice track (419/449/516) | 3 (needs splitting) | WK15 (2026-04-12) | WK16 (2026-04-19) |
| BE/commerce bug batch | 12 | WK14 (2026-04-05) | WK14 (2026-04-05) |
Action Triggers Fired
| Condition | Trigger | Recommended Action |
|---|---|---|
| 6 carry-over items age > 2 weeks | Zombie | NXET-419, 449, 512, 516, 532 MUST be split or cancelled. NXET-562 review. |
| Workload max/min ratio = 18:1 | Imbalance | Rebalance — avoid bulk co-assignment, assign clear primary owner per item |
| Health Score 48 < 60 | System issue | Dedicated retrospective required |
Recommendations
- Cap WK14 at ~40 items — 73 was a 2.3x overcommit. Team's proven throughput is ~30-44 items/cycle.
- Stop mid-sprint bulk additions — the 12 BE/commerce items added on 03-26 should go to the next cycle.
- Split the 5 zombie items immediately — NXET-419 (11wk), NXET-449 (10wk), NXET-512 (4wk), NXET-516 (4wk), NXET-532 (4wk).
- Assign clear primary owners — co-assignment inflates workload metrics and obscures accountability. Use 1 primary + reviewers.
- Hold a brief retrospective — health dropped from ~76 to 48. Main driver is sprint sizing, not team performance (throughput is actually up).
Related Pages
- Sprint Reviews · Roadmap · Changelog · Traceability Matrix
- Plane: BANA-688 — Sprint review 2026_WK13 (Report)