Files
Sharepoint-Toolbox/.planning/RETROSPECTIVE.md
Dev 724fdc550d chore: complete v1.0 milestone
Archive 5 phases (36 plans) to milestones/v1.0-phases/.
Archive roadmap, requirements, and audit to milestones/.
Evolve PROJECT.md with shipped state and validated requirements.
Collapse ROADMAP.md to one-line milestone summary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:19:03 +02:00

2.9 KiB

Retrospective

Milestone: v1.0 — MVP

Shipped: 2026-04-07 Phases: 5 | Plans: 36 | Commits: 164 | LOC: 10,071

What Was Built

  • Complete C#/WPF rewrite replacing 6,400-line PowerShell monolith
  • 10 feature tabs: Permissions, Storage, Search, Duplicates, Transfer, Bulk Members, Bulk Sites, Folder Structure, Templates, Settings
  • Multi-tenant MSAL authentication with per-tenant token caching
  • CSV and interactive HTML export across all scan features
  • Bulk operations with continue-on-error, per-item reporting, retry, and cancellation
  • Self-contained 200 MB EXE with full EN/FR localization (199 keys)

What Worked

  • Wave 0 scaffold pattern: Creating models, interfaces, and test stubs before implementation gave every phase testable targets from day 1
  • FeatureViewModelBase contract: Establishing the async/cancel/progress pattern in Phase 1 meant Phases 2-4 had zero friction adding new features
  • BulkOperationRunner abstraction: One shared helper gave consistent error semantics across 4 different bulk operations
  • Phase dependency ordering: Foundation → Permissions → Storage → Bulk → Hardening prevented rework
  • Atomic commits per task: Each plan produced clear, reviewable commit history

What Was Inefficient

  • Phase 03 missing verification: The only phase without a VERIFICATION.md — caught during milestone audit, but should have been produced during execution
  • Stale audit notes: Phase 2 verification reported export buttons as hardcoded English, but they were actually already localized by the time of the audit — suggests verification reads code at a point-in-time snapshot that may not reflect later fixes
  • Cancel test locale mismatch: The French locale test failure was flagged in Phase 3 plan 08 summary but deferred until post-milestone cleanup — should have been fixed inline

Patterns Established

  • Write-then-replace JSON persistence with SemaphoreSlim for thread safety
  • TranslationSource singleton with PropertyChanged(string.Empty) for runtime culture switching
  • ExecuteQueryRetryHelper for throttle-aware CSOM calls (429/503 detection)
  • SharePointPaginationHelper with ListItemCollectionPosition for 5,000+ item lists
  • CsvValidationService with auto-delimiter detection (comma/semicolon) and BOM handling
  • DataGrid RowStyle DataTrigger for invalid-row visual highlighting

Key Lessons

  • Establish shared infrastructure patterns (auth, retry, pagination, progress) in Phase 1 — every subsequent phase benefits
  • Test scaffolds (Wave 0) eliminate the "no tests until the end" anti-pattern
  • Phase verifications should be mandatory during execution, not optional — catching Phase 03's gap at audit time is late
  • Localization tests (key parity + diacritic spot-checks) are cheap and catch real bugs

Metric v1.0
Phases 5
Plans 36
LOC 10,071
Tests 134 pass / 22 skip
Timeline 28 days
Commits 164