Skip to content

Sprint Review — WK20

Cycle 2026-05-11 → 05-17 · Recorded in Plane as BANA-1117. The Executive Summary is sourced from git; the metrics below mirror the Plane review.

28/100 — Intervention
41%Completion (40/97)
56Carry-over (57.7%)
1%Cancelled (1)
97Committed (>2× avg)

Executive Summary

~234commits
13contributors
~33commits/day

Leadership takeaway

This week (11/05 – 17/05) the two biggest themes were a product / commerce v2 rebuild — multi-category multi-merchant mapping, option-based variants, combos and tax groups — and the staff-access foundation (PIN sign-in and multi-employee shifts) that seeds the WK21 redesign cluster.

  • Product & Commerce v2 — A new product creation flow with multi-category, multi-merchant mapping, option-based variant generation, combo/bundle support, and tax-group CRUD wired into the product module.
  • Inventory & Sale Channels — Sale-channel ↔ inventory-location relations, merchant ↔ location relations, combo-variant deduction on sale, and material/inventory stock overview endpoints.
  • Staff Access & Shifts — PIN authentication and authorization, a new OTP flow, and the multi-employee shift backend that anchors the WK21 access redesign.
  • Back Office & Helpdesk — Agent and agent-group management, ticket-category screens, and SLA policy with escalation-rule handling.
  • Roles & Permissions (client) — A role-management screen with a collapsible permission tree, priority input on the role form, and multi-language role descriptions.
  • Material Dashboard — A material overview dashboard with four widgets, plus merchant sync and preview.
  • Devices & Printing — Device, fingerprint and printer-state persistence shipped to develop (git only — not a Plane ticket).

Health Score: 28/100 — Intervention required

DimensionScoreWeightContribution
Completion (40/97 = 41.2%)48.5/10030%14.56
Predictability (|41.2−85|×2 penalty)12.5/10025%3.12
Workload Balance (max/min 41/1)2.4/10020%0.49
Flow (56/97 = 57.7% carry, clamped)0/10015%0.00
Quality (1/97 = 1.0% cancel)96.9/10010%9.69
Total27.86 → 28100%

Rating: <60 = Intervention required.

Read this caveat first

WK17/WK18/WK19 cycles in Plane today are post-VNPAY-prune snapshots — items that were deferred during the VNPAY onsite pivot were removed from those cycles, leaving only what closed. So the 100% / 92% / 94% completion rates shown for WK19/WK18/WK17 are NOT the real cycle health at the time. The real WK19 was 34/100 = 34% per the VNPAY memo. Interpretation: WK20's 41% is not "the team collapsed from healthy cycles" — it's "WK20 is the first cycle where the carry-over debt finally hit the completion %".

Key Accomplishments

  • BANA-1018 [BE/commerce] Multi-category, multi-merchant mapping + option-based variant generation (hai.cao) — unblocks Variant Option cluster
  • BANA-1085 [BE/ledger] Split ledger service into API + Worker containers (phat.chung) — operational separation
  • BANA-1077 [BE/inventory] Deduct inventory for combo product variants on sale (phat.nguyen)
  • BANA-1100/1101/1102 PIN auth v1 + Variant 2 multi-employee shift backend (phuc.duong) — foundation for WK21 redesign cluster
  • BANA-930 [FE/overture] Variant pricing capture blocker resolved (toan.tran)
  • BANA-216 [FE/client] Table feature (khoa.nguyen) — closed after 5+ months in flight
  • feat/material merged — material overview dashboard with 4 widgets (duc.bach)
  • Device + fingerprint + printer persistence shipped to develop (kien.truong, git only — not a Plane ticket)

Urgent Attention

ItemIDAssigneeStateAge (w)Issue
Dynamic filter for other pagesBANA-344khoa.nguyen101_ON_HOLD22.3Zombie — must split or cancel
Promotion/Voucher moduleBANA-509hai.cao101_ON_HOLD11.6Zombie
FE/client CRUD PromotionBANA-512tai.nguyen101_ON_HOLD11.4Zombie
Invoice for sale integrationBANA-516viet.vo, duc.bach100_UPCOMING11.3Zombie, invoice thread stalled
FE/bo Realtime Sale + PaymentBANA-538hai.cao, tai.nguyen101_ON_HOLD10.7Zombie
Docs Merchant Onboarding TESTBANA-620phat.nguyen+101_ON_HOLD7.9Zombie, from WK17 review
Docs Golive ProductsBANA-621phat.nguyen+101_ON_HOLD7.9Zombie
Admin UI Kit → Base UIBANA-628khoa.nguyen101_ON_HOLD7.7Zombie
BE archive variant validationBANA-677duc.bach100_UPCOMING7.4Aged
FE onboarding wizardBANA-704khoa.nguyen100_UPCOMING6.9Aged
DOC/wiki merchant onboarding runbookBANA-705phat.nguyen200_IN_PROGRESS6.9Aged, PM owns
BE/Invoice testing flowBANA-729viet.vo200_IN_PROGRESS6.3Aged invoice thread
BE/invoice VAT 2H/EOD schedulerBANA-750viet.vo200_IN_PROGRESS6.3URGENT priority, aged
BE/identity Refactor Employee APIsBANA-1073anh.le200_IN_PROGRESS0.7Past target 2026-05-17, new hire
FE/bo SLA Policy + EscalationBANA-1091tai.nguyen200_IN_PROGRESS0.3Past target 2026-05-17
FE/client Stock listBANA-1089duc.bach200_IN_PROGRESS0.3Past target 2026-05-15

Plus Hai Cao mass-create clusters that never moved: Excel-import (BANA-890→894, 5 items, all aged 4.3w) and Menu (BANA-902→907, 6 items, all aged 4.1w) — created 2026-04-26 with no apparent WK20 shipping intent.

Delivery

MetricWK20WK19 (Plane)4-Cycle Avg (Plane)TargetStatus
Committed973545.25WK20 over 2× avg
Completed403530.25
Completion %41.2%100%*82.0%*85%MISS
Cancelled1 (1.0%)00.75<7%OK
Carried over56 (57.7%)0*14.0*<10%MISS
Throughput/member2.53.2*2.9*2.0OK (per Plane)

* WK17/18/19 numbers reflect post-VNPAY-prune Plane snapshots, not committed reality at the time.

Misses:

  • Completion at 41.2% — target 85%. Driver = over-commit (97 vs 13/36/35 in pruned prior cycles), not capacity drop. Throughput/member of 2.5 is above the 2.0 sustainable target per Plane.
  • Carry-over at 57.7% — target <10%. All 56 transferred to WK21 on 2026-05-18 as part of this review.

Team Breakdown

Columns count multi-assignee items per assignee (so person-assignments, not unique items). Sum of "Committed" column = 145 person-assignments across 97 unique items (avg 1.49 assignees/item).

MemberCommittedDoneCancelledCarryDone%LoadFlag
hai.cao41803319.5%41/5[OVERLOADED] [LOW COMPLETION]
phat.nguyen28811928.6%28/5[OVERLOADED] [LOW COMPLETION]
khoa.nguyen20401620.0%20/5[OVERLOADED] [LOW COMPLETION]
duc.bach1230925.0%12/5[OVERLOADED] [LOW COMPLETION]
tai.nguyen830537.5%8/5[OVERLOADED] [LOW COMPLETION]
kien.truong6600100.0%6/5[OVERLOADED] but clean delivery
phuc.duong60060.0%6/5[OVERLOADED] [LOW COMPLETION] — pivoted to WK21 Search/PIN
toan.tran540180.0%5/5OK
viet.vo510420.0%5/5[LOW COMPLETION] — invoice thread stuck
thuong.nguyen420250.0%4/5[LOW COMPLETION]
phat.chung320166.7%3/5[LOW COMPLETION]
huy.pham320166.7%3/5[LOW COMPLETION]
thoi.pham1100100.0%1/5OK
van.nguyen1100100.0%1/5OK
uyen.nguyen1100100.0%1/5OK
anh.le10010.0%1/5[LOW COMPLETION] — new hire

Workload person-assignment max/min = 41/1 = 41×. Top 3 (Hai/Phat/Khoa) carry 89 of 145 person-assignments = 61.4% of person-load. (The unique-item count is somewhat lower due to shared tickets, but ≥60% concentration on three engineers is structurally fragile.)

Carry-Over Analysis (56 items, all transferred to WK21 on 2026-05-18)

Per template Step 3 age rules: ≥3 weeks → MUST split or cancel; 2 weeks → review and split if >50% remaining; 1 week → straight transfer.

By age bucket of the 56 items:

  • ≥6 weeks (true zombies, 18 items): BANA-344, 509, 512, 516, 538, 620, 621, 628, 677, 704, 705, 729, 730, 750, 759, 764, 770, 772
  • 3–6 weeks (must split/cancel per template, 33 items): BANA-789, 792, 793, 801, 803, 810, 855, 872, 890, 891, 892, 893, 894, 902, 903, 904, 905, 906, 907, 926, 928, 932, 933, 935, 936, 937, 938, 944, 945, 964, 967, 973, 974
  • 1–3 weeks (review/transfer, 1 item): BANA-987
  • <1 week (straight transfer, 4 items): BANA-1072, 1073, 1089, 1091

51 of 56 transferred items (91%) are age ≥3 weeks and per template MUST be split or cancelled — they should not have been transferred as-is. The transfer already happened (PM unblock to clear WK20); PM follow-up triage is required on Monday before WK21 daily work.

Per-item triage recommendations:

ItemIDAssigneeAge (w)Recommendation
Dynamic filter for other pagesBANA-344khoa.nguyen22.3CANCEL — abandoned 22w, BANA-792-855 cluster supersedes
Promotion/Voucher moduleBANA-509hai.cao11.6CANCEL or rescope into smaller deliverable
FE CRUD PromotionBANA-512tai.nguyen11.4CANCEL (depends on 509)
Invoice for sale integrationBANA-516viet.vo, duc.bach11.3SPLIT — invoice thread needs decomposition
Realtime Sale + PaymentBANA-538hai.cao, tai.nguyen10.7CANCEL or rescope
Docs Merchant OnboardingBANA-620phat.nguyen+7.9CANCEL — docs from WK17 review never started
Docs Golive ProductsBANA-621phat.nguyen+7.9CANCEL
Admin UI Kit → Base UIBANA-628khoa.nguyen7.7CANCEL — speculative migration
BE archive variant validationBANA-677duc.bach7.4SPLIT
Onboarding wizard legal/locationBANA-704khoa.nguyen6.9SPLIT
Merchant onboarding runbookBANA-705phat.nguyen6.9SPLIT
Invoice testing flowBANA-729viet.vo6.3SPLIT (pair Viet)
Invoice UI integrationBANA-730viet.vo6.3SPLIT (pair Viet)
Invoice VAT schedulerBANA-750viet.vo6.3SPLIT (URGENT priority, pair Viet)
Organization onboarding seedBANA-759hai.cao6.0SPLIT or CANCEL
GET /reports/payments/methodsBANA-764phat.chung+6.0SPLIT
Performance testing strategyBANA-770hai.cao6.0CANCEL — research ticket never moved
Design transfer order between tablesBANA-772thuong.nguyen6.0SPLIT
BO Xóa Sale ChannelBANA-789phat.nguyen, hai.cao5.6SPLIT
BO Filter Sale/Product/Category/Vendor/MerchantBANA-792/793/801/810/855hai.cao, phuc.duong, khoa.nguyen, phat.nguyen5.4–5.6BUNDLE then SPLIT — 5 sibling tickets are really one filter-form feature
BO Disable Product / Active VariantBANA-803phat.nguyen+5.4SPLIT
FE/overture Pagefind SEOBANA-872toan.tran4.4TRANSFER (only 0.4w over)
Excel bulk import (5 items)BANA-890→894hai.cao4.3DEFER to WK22+ or backlog — Hai over-loaded, no WK20 activity
Menu cluster (6 items)BANA-902→907hai.cao4.1DEFER to WK22+ or backlog — same reason
BO DeviceBANA-926phat.nguyen, tai.nguyen3.9CONSOLIDATE — may overlap BANA-1110/1115/1116 (Pham Thoi WK21 stack)
BO Thương mại > Sản phẩmBANA-928hai.cao, tai.nguyen3.9SPLIT
Search engine integrationBANA-932hai.cao, phuc.duong, khoa.nguyen3.7CONSOLIDATE with phuc.duong WK21 Search work (BANA-1062-1068)
Product Variant Option clusterBANA-933, 935-938hai.cao, duc.bach3.6BUNDLE as one feature, then SPLIT
BO Finance Category/Wallet bugsBANA-944, 945phat.nguyen, hai.cao3.4SPLIT
BO Merchant code persistenceBANA-967phat.nguyen, khoa.nguyen3.1SPLIT
FE description on productBANA-973phat.nguyen, khoa.nguyen, thuong.nguyen3.1SPLIT
POS VND quick-amountBANA-974phat.nguyen, khoa.nguyen3.1SPLIT
Force re-login JWT idleBANA-964phat.nguyen, khoa.nguyen3.1CONSOLIDATE with BANA-720 + BANA-965 (3 duplicates of the same JWT re-login bug)
Product variant delete cascadeBANA-987phat.nguyen2.7TRANSFER (in 2w window)
Product images not savingBANA-1072phat.nguyen, khoa.nguyen0.7TRANSFER
BE Refactor Employee APIsBANA-1073anh.le0.7TRANSFER (past target, pair anh.le)
FE Stock listBANA-1089duc.bach0.3TRANSFER (past target)
FE SLA Policy + EscalationBANA-1091tai.nguyen0.3TRANSFER (past target)

Note on age: ages use created_at as proxy for "first cycle add" (computing real cycle-first-add per item would require 97 activity-log calls). Ages are upper-bound; real cycle ages may be slightly lower.

By Module

ModuleCommittedDoneDone%Carry
nx-packages471940.4%27
nx-apps341955.9%15
(no module)1000.0%10
nx-operation300.0%3
nx-design3266.7%1

10 items have no module assigned (BANA-792, 793, 801, 803, 810, 855, 926, 944, 945, 1072). Backfill modules when triaging WK21.

By Label

LabelItemsDoneCarry
Task74~31~42
Bug21~9~12
(no label)2

Bug ratio = 22% (21/97). No obvious bug-bash signal — investigate whether bugs are accumulating as quality debt.

Blockers & Risks

RiskImpactMitigationOwner
WK21 over-loaded: 37 originally planned + 56 transferred + 1 review = 94 items vs ~35 sustainableHighTriage 56 transferred items — cancel 7 zombies, defer Excel + Menu clusters, consolidate 720/965/964Phat
Hai Cao at 41 committed (8.2× weekly cap)HighMove Menu (902-907) and Excel (890-894) out of his queue or to WK22+Phat + Hai
BANA-720 vs 965 vs 964 — three tickets for the same JWT re-login bugMediumPick one as canonical, close the other twoPhat
Invoice thread stalled — BANA-516/729/730/750 all aged 6+ weeks, single owner viet.vo at 20% completionHighPair Viet with a second engineer or split into smaller deliverablesPhat
10 WK20 items had no module — data hygiene gapLowBackfill modules on the 10 IDs listed abovePhat
51 of 56 transferred items violate template age rule (≥3w → split/cancel mandatory)HighForce triage pass before any WK21 daily work; use per-item recommendations table abovePhat
anh.le (Lê Hoàng Anh) new hire — first item BANA-1073 unfinished on critical identity pathMediumPair with senior identity engineer (phuc.duong)Phat

4-Cycle Trend

MetricWK17 (pruned)WK18 (pruned)WK19 (pruned)WK20Direction
Items committed36133597over-commit spike
Items completed34123540stable absolute throughput
Completion %94.4%*92.3%*100%*41.2%see caveat
Avg items/member3.8*2.0*3.2*2.5■ stable
Carry-overs0*0*0*56see caveat
Health Score75*76*74*28see caveat

* Marks WK17/18/19 metrics derived from POST-VNPAY-PRUNE Plane state. Per the VNPAY memo (project_vnpay_onsite_wk17_wk19), real-at-time numbers were: WK17 ≈ 34% (98-item plan abandoned mid-cycle), WK18 ≈ 92% of a mid-week-trimmed 13-item plan (real plan was 83 items), WK19 = 34/100 = 34%. Real consecutive low-completion: WK17→WK20 = 4 cycles in a row below 75% if you count the original commitments. Plane's "WK17–19 = healthy" framing is an artifact of how Plane stores cycles, not reality.

The absolute throughput line (40 done in WK20 vs 34/12/35 in prior cycles) is the most honest signal: the team consistently ships 30-40 items per cycle regardless of commitment size. WK20 didn't fail at delivery — it failed at planning the commitment to match capacity.

Forecast (Monte Carlo, simple)

Based on actual absolute throughput across the prior 4 cycles (34+12+35+40 = 121 done / 4 cycles) = ~30 items/cycle, ~16 active members = ~1.9 items/member/cycle. Same number whether you use pruned or unpruned commit baselines, since these are done items not committed.

WorkstreamRemaining50% confidence85% confidence
PIN auth redesign cluster (BANA-1103-1107)5end of WK22 (2026-05-31)mid-WK24 (~2026-06-14)
Hai Cao Excel-import cluster5requires owner outside Haiundefined until reassigned
Hai Cao Menu cluster6requires owner outside Haiundefined
Invoice thread (BANA-516/729/730/750)4undefined — Viet alone won't ship in 1 cycleneeds pair-up
Variant Option cluster (BANA-933, 935-938)5end of WK22mid-WK23
Zombies (BANA-344, 509, 512, 538, 620, 621, 628, 770)8won't ship — cancel

Caveat: forecast assumes prior-cycle throughput holds. If WK21 spends meaningful time on triage (recommended), shipping rate will be lower.

Action Triggers Fired

TriggerFiredRecommended Action
Completion < 75% for 2 consecutive cyclesConditional YES — only WK20 (41%) is below 75% per Plane snapshot; per VNPAY-adjusted history, 4 consecutive cycles WK17-WK20 are all below 75%Reduce next sprint commitment by 15% — but WK21 is already over-loaded, so this means EXTRACT items from WK21, not just cap next planning
Member > 5 items (overload)YES — 7 members: Hai 41, Phat 28, Khoa 20, Duc 12, Tai 8, Kien 6, Phuc 6Redistribute before WK21 daily work begins. Note: Kien at 6/6 done is "overloaded but delivering" — flag for capacity-planning input, not redistribution
Any member < 70% done for 2 cyclesNO per Plane (WK19 was 100% for most members); but WK20 alone shows 10 members below 70% — same conditional caveatWatch WK21 for sustained low-completion before pair-up
Carry-over age > 2 weeksYES — 51 items age ≥3 weeks; 18 of those are ≥6 weeks (true zombies)Per template MUST split or cancel all 51 — execute today before WK21 work begins
Cancellation > 15%NO (1.0%)
Workload max/min ratio > 3×YES (41×)Rebalance — Hai Cao is single point of failure on commerce
Health Score < 60YES (28)Dedicated retrospective required — schedule before WK22 planning
Completion > 95% for 2 cyclesNO

Recommendations (priority order, for Monday standup)

  1. 60-min triage on the 56 transferred items before any WK21 daily work. Outcome: cancel 8 zombies (BANA-344, 509, 512, 538, 620, 621, 628, 770), defer Excel + Menu clusters to WK22+ or backlog, consolidate BANA-720/965/964 to one ticket.
  2. Cap WK21 at ~40 active items. Currently 94 → remove ~54 via the triage above (most to WK22 or backlog).
  3. Pair anh.le with phuc.duong on identity work; BANA-1073 was past-due on day one of his first week.
  4. Pair viet.vo on invoice thread — 4 items, 6+ week age, 20% solo completion = stuck.
  5. Audit Hai Cao's load: 41 committed is structurally impossible. Move Menu (902-907) and Excel (890-894) out of his queue or reassign owner.
  6. Schedule WK20 retrospective — Health 28 triggers mandatory retro per template. Topic: "the team has been carrying 50-100 deferred items since WK17; WK20 was the first cycle where we counted them. What's the planning discipline we adopt for WK22+?"
  7. Backfill modules on the 10 module-less items (BANA-792, 793, 801, 803, 810, 855, 926, 944, 945, 1072) per project rules.

Note on context

Per project memory project_vnpay_onsite_wk17_wk19, WK17–WK19 saw 5 VNPAY POs onsite at NEXPANDO and team capacity was redirected to VNPAY MVP. The cycles were not re-planned at the start of the pivot, so 50-100 items per cycle were quietly deferred and later removed from Plane.

WK20 was meant to be the "restart" cycle but committed 97 items, which appears to include the accumulated VNPAY-deferred backlog. The team delivered 40 items (consistent with their actual ~30-40 items/cycle throughput across the entire period), but the 97-item commitment exposed the deferral debt as a single-cycle "miss".

The correct framing for the retrospective is not "WK20 failed" — it is "the WK17→WK20 deferral pattern surfaced in WK20". The action is planning discipline (commit only what we can do), not delivery improvement (the team is already shipping at sustainable pace).

Data Integrity Notes

  • WK20 cycle now contains 41 items (40 completed + 1 cancelled) — confirmed via retrieve_cycle
  • WK21 cycle now contains 94 items (13 done + 30 started + 42 unstarted + 9 backlog) — matches 37 originally planned + 56 transferred + 1 review item; confirmed via retrieve_cycle
  • Health score math re-derived: 0.30×48.5 + 0.25×12.5 + 0.20×2.4 + 0.15×0 + 0.10×96.9 = 27.86 → 28
  • Carry-over age buckets recounted: 18 zombies (≥6w) + 33 (3-6w) + 1 (1-3w) + 4 (<1w) = 56 ✓
  • Person-assignment math: 145 person-assignments across 97 items (avg 1.49 assignees/item); top-3 = 89 = 61.4% of person-load
  • 4-cycle trend caveat added — WK17-19 numbers are post-VNPAY-prune snapshots, not committed reality

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.