25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12KB

Sprint Retrospective

Sprint: 8 Date: 2026-10-26 Facilitated by: scrum-master, per process/05_sprint_retrospective.md Inputs used: backlog/sprints/sprint-8.md (Daily Scrum Log + Execution Order + Notes), backlog/backlog.md (Sprint 8 refinement, planning, and Review outcome notes), backlog/epics/08_composite_address_controls.md, logs/technical_debt_log.md, logs/impediment_log.md, logs/process_improvement_log.md, backlog/sprints/sprint-7-retrospective.md (for follow-through check). No live human team to poll in real time; subjective signals are synthesized from dev-team's daily-scrum notes and product-owner's independent review notes. This session (top-level, acting as product-owner during review) had direct shell/build access and ran dotnet test itself, confirming 433/433.

Signals

Objective:

  • 2/2 committed stories Done (13/13 points), sprint goal assessed “met in full” at Sprint Review (backlog/backlog.md, Sprint 8 Review outcome) — the human product owner's Sprint 6 Review reversal is delivered end-to-end.
  • Test suite grew from 422/422 (Batch 1) to 433/433 (Batch 2), independently re-confirmed by a direct dotnet test run during Sprint Review (326 desktop, 107 CLI) — matching dev-team's reported count exactly.
  • Zero new impediments; the two pre-existing open ones (asset path strategy, UNC timeout/retry) remain non-blocking and untouched, as expected since neither story touches image assets or network paths.
  • One new Low-impact technical debt item logged and reviewed (pre-existing Sprint 6 Address Control hit-test/move/resize logic remains WinForms-only and untestable by unit tests, unlike this sprint's own newly-extracted rotation math) — correctly scoped as a testability gap with no known behavioral defect, not swept under the rug.
  • Live verification: a reflection-driven built-.exe harness drove the real TemplateDesignerForm/TemplateCanvasControl/TemplatePreviewControl for both batches — real CLI PDF content-stream inspection proving actual rotation matrices, simulated real mouse clicks/drags through the actual event handlers, and fresh (not reused) full-form screenshots per batch.

Subjective:

  • Dev-team correctly identified, ahead of implementation, that the Address Control's box geometry (author-set Width, font-derived Height) is architecturally different from the standalone-element rotation defect fixed in Sprint 6 — avoiding porting an inapplicable anchor-pivot workaround into a story that didn't need it.
  • Dev-team deliberately did not retroactively refactor Sprint 6's older, smoke-tested-only Address Control interaction code while adding this sprint's new rotation math as unit-tested classes — a scoping call that was named and logged as debt rather than silently left inconsistent.
  • Product-owner's Sprint 8 review had real shell/build access this time and used it directly (a live dotnet test run plus reading the actual persistence/class code), rather than substituting a static count as Sprint 7's review had to.

What Went Well

  • Fresh full-form screenshot per batch, honored exactly. Sprint 7's retrospective named a near-miss (Batch 2 reusing Batch 1's screenshot after adding a new control). This sprint's Batch 2 explicitly captured a new screenshot set rather than reusing Batch 1's — direct, named follow-through on the prior sprint's own carry-in, not just a coincidence.
  • Deliberate, reasoned under-commit (13 points) paid off cleanly — the same posture Sprint 5 took around its own largest story. Sprint 8 finished both stories with no scope cut and no carry-over, and scrum-master's own planning note explicitly weighed and rejected the higher-risk 23-point alternative (pairing with epic 6's foundational selection-model rework) rather than defaulting to it for the sake of using proven-idle capacity.
  • Honest, scoped technical debt logging. Rather than either silently leaving Sprint 6's older Address Control code un-mentioned or overstating this sprint's own scope to “fix everything,” dev-team logged the testability gap precisely, named why it was out of scope for this story, and proposed a concrete future direction (AddressControlEditor mirroring CanvasElementEditor).
  • Product-owner's Sprint 8 review had shell/build access and used it for a live dotnet test run and direct reads of the actual persistence code and new test files, rather than trusting dev-team's report alone — full independent verification, not a rubber-stamp.

What Didn't Go Well

  • Nothing rises to a “didn't go well” item this sprint. One minor test-design note (not a product defect, named honestly in dev-team's own Batch 2 log): a later step in the same live-verification harness run clicked the control's body to test whole-unit move, which correctly re-picked the drilled-in line under that click point per pre-existing Sprint 6 design — unrelated to the rotate-drag itself, which was already separately confirmed mid-drag. Worth naming only because it shows the harness's own test design was scrutinized rather than glossed over.

Patterns / Insights (Prioritized)

  1. (Team-level) The discipline of extracting genuinely new math into framework-free, unit-tested Desktop.Core classes — while explicitly not retroactively refactoring older, still-working code in the same area — is now a repeated, named pattern (this sprint's PointRotation/AddressControlRotateHandle alongside the still-open Sprint 6 Address-Control-interaction debt item). This is a sound, proportional practice on its own, but it means Address-Control-specific interaction code now has two different testability tiers (new: unit tested; old: smoke tested only). Worth a deliberate look before or during whatever story next touches Address Control interaction machinery in earnest (candidate: epic 6's multi-select work, if it ever needs to select an Address Control as part of a multi-select group), rather than letting the gap grow a third and fourth time.
  2. (Process-level) The Sprint 7-logged “PO review tooling-access” watch item (logs/process_improvement_log.md, 2026-10-19) did not recur this sprint — this session's product-owner review had shell/build access and ran dotnet test directly. This is a useful first positive data point (the gap is intermittent/session-dependent, not a persistent structural issue), but one clean sprint doesn't yet prove it's resolved, since the underlying cause (session tooling availability) isn't under this team's control. Keep watching rather than closing outright.
  3. (Team-level, minor) Sprint 7's built-form-smoke carry-in item aimed at epic 6's multi-select/align pair never got triggered this sprint, since Sprint 8 committed epic 8's rotation pair instead. This isn't a drop — the action item simply didn't apply yet — but it needs to explicitly carry forward to whichever sprint actually pulls that pair (recommended Sprint 9), not be quietly treated as satisfied.

Action Items (Add These To Sprint 9's Plan)

  • Carry forward, unchanged, the still-untriggered Sprint 7 action: when epic 6's multi-select/align pair is pulled, apply the built-form-vs-canvas-only smoke rule explicitly per story (“Select multiple elements...” likely canvas-only; “Align and distribute...” likely needs a full smoke if it adds new toolbar/menu affordances) — owner: dev-team — due: whichever sprint commits that pair.
  • Continue the fresh-full-form-screenshot-per-batch discipline for any multi-batch sprint where a later batch changes a form an earlier batch already screenshotted — owner: dev-team — due: ongoing.
  • Before or during whatever story next has multi-select or other interaction logic touch Address Controls, evaluate whether to extract the pre-existing Sprint 6 hit-test/move/resize logic (TemplateCanvasControl) into a unit-tested AddressControlEditor-equivalent (per the 2026-10-26 technical debt entry's own candidate direction), rather than letting a third interaction feature build on top of untestable code — owner: dev-team / qa-tech-debt — due: Sprint 9 backlog refinement (evaluate, not necessarily implement).

Deferred / Lower-Priority Ideas

  • Address Control line-overlap-at-small-font-sizes (Low-impact, canvas/preview cosmetic only, 2026-10-19 entry) — unchanged this sprint, revisit only if reported as more than cosmetic.
  • The still-open product question on “Warn on text overflow before render” (epic 4) remains parked for the human product owner; not blocking Sprint 9.
  • The 1,000,000-record file-size risk (Medium-impact, 2026-09-21 entry) remains untouched; no story has committed to that scale.

Follow-Up On Previous Retro's Actions

All three of Sprint 7's retrospective action items, checked against backlog/sprints/sprint-8.md and backlog/backlog.md's Sprint 8 planning/review outcomes:

  1. Apply the built-form-vs-canvas-only smoke rule per story for epic 6's multi-select/align pair — Not applicable this sprint. Epic 6's pair was not pulled into Sprint 8 (scrum-master's planning note explicitly chose the epic 8 rotation pair alone over pairing with epic 6, for reasons unrelated to this action item). This is not a drop, but it must not be silently treated as satisfied — re-added above as an unchanged Sprint 9 action.
  2. Fresh full-form screenshot per batch, not reused from an earlier batch in the same sprint — Applied and directly confirmed. backlog/sprints/sprint-8.md's Batch 2 entry explicitly states “Took a fresh full-form screenshot for this batch (not reused from Batch 1)” — the exact discipline named after Sprint 7's near-miss, now demonstrated rather than merely stated as intent.
  3. If product-owner's Sprint 8 review again lacks shell/build access, disclose it and arrange an independent cross-check — Not triggered, in the team's favor. This sprint's product-owner review had shell/build access and used it directly for a live dotnet test run (433/433) and direct source reads, so there was no gap to disclose. The underlying intent of the action item (don't let reduced verification depth go unnoticed) is satisfied by the fact that full-depth verification actually happened.

Two of three items show genuine follow-through (one fully applied and confirmed, one non-applicable through no fault of the team); the third simply carries forward unchanged to whenever epic 6's pair is committed. No drops.

Kit-Level Decision

No kit edit proposed. The Sprint 7-logged PO-tooling-access watch item is updated in logs/process_improvement_log.md (see below) to reflect a clean sprint with no recurrence — reinforcing, not yet closing, the existing entry. Nothing new met AGENTS.md's bar for a kit-level change this sprint.

Anti-Patterns Checked

  • No follow-through on prior retro actions: Ruled out; see “Follow-Up” above — two of three items show genuine follow-through, the third is an honest non-applicability, not a drop.
  • Blame-focused discussion: Ruled out; the one named nuance (Batch 2's harness re-picking a drilled-in line during an unrelated move test) is described as an artifact of test design, not attributed to a person.
  • Hidden mini-waterfall within the sprint: Ruled out; both batches were designed, implemented, tested, documented, and live-verified within their own batch, consistent with every prior sprint.
  • Avoiding an obvious known problem: Ruled out; the Address-Control testability gap was named and logged rather than left implicit, and the still-open “text overflow” product question continues to be correctly flagged rather than guessed at.
  • Status-theater: Ruled out; evidence is concrete and independently checkable (exact test counts confirmed via a live dotnet test run, real PDF content-stream rotation matrices, real simulated mouse-drag angles, direct file/code inspection of claimed new classes).
  • Review rubber-stamping (Sprint 3-named, resolved Sprint 4, checked again here): Ruled out. Product-owner's Sprint 8 review independently re-ran the test suite, read the actual persistence code on both CLI and desktop sides, and confirmed the new unit-tested classes exist and do what's claimed, rather than accepting dev-team's narrative at face value.

Powered by TurnKey Linux.