Devlog: 2026-03-16 — Project Kickoff
What Happened
Today was the first working session on the PowerSeller SaaS App project. The CTO (Product Owner) and an AI development agent (Cursor) worked through the entire discovery, documentation, and strategic alignment process in a single extended session.
Work Completed
Phase 1: PowerBuilder Codebase Analysis
- Cloned the PowerSeller80 repository from GitHub
- Performed comprehensive analysis of ~2,100 PowerBuilder source files across 25+ PBL libraries
- Extracted ~170 database table names with read/write access patterns per module
- Mapped all table relationships (80+ JOINs extracted from DataWindow SQL)
- Identified key column structures from maintenance DataWindows
Phase 2: Documentation Produced
Created 13 comprehensive documentation files plus interactive mockups:
- Entity-Relationship Model — Complete table inventory with Mermaid ER diagrams for core, risk, pricing, and system tables
- Workflow Map — Every menu item traced to its window, NVO, and database tables, with process flow diagrams for all major modules
- Module Dependency Graph — Cross-module reference analysis showing which of the 25 modules depend on each other
- Integration Inventory — All 8 external integrations documented (DDE, Eikon, Workspace, Mortech, plugins, import/export, ULDD/XML)
- Domain Glossary — 100+ terms organized by business area, plus abbreviations and table prefix conventions
- Pipeline Deep Dive — Loan lifecycle state machine, underwriting stages, fallout processing, best efforts
- Pricing Deep Dive — 24-step BestEx process, par rate formula, DPC calculations, feature adjustment logic, total price calculation, scenario ranking
- Trading Deep Dive — Trade lifecycle, 6 trade types, designation rules, cascade algorithm, settlement process, tolerance calculations
- Pooling Deep Dive — 12-step pooling engine, 12 syntax sources, 3-pass allocation, 24-path fee strategy, constraint satisfaction
- Risk Deep Dive — 55+ analysis steps, three-scenario model, position reconciliation, SFAS 133 hedge effectiveness
- Remaining Modules — Document tracking, bid packaging, import/export, archive, security, macros, reports
- SaaS Architecture Design — Stack recommendation, bounded contexts, API surface, data migration plan, multi-tenancy, auth migration, plugin architecture, 22-month roadmap
- UI/UX Analysis — Window hierarchy, three core UI patterns, color system, edit controls, screen density assessment
- Interactive HTML Mockups — 6 interactive screens (MDI frame, pick/search, trade maintenance, pool maintenance, run pools, pricing grid)
Phase 3: Strategic Alignment
Extended discussion covering:
- Full ecosystem mapping (4 products: Desktop App, SaaS App, PowerSeller X, MBS Access)
- Odoo as the business operating system
- Team structure, roles, and product ownership
- MWFI Holdings as design partner and first adopter
- Infrastructure topology (Azure, IBM Softlayer, Odoo.sh, local Docker)
- Customer migration path (3 hops: on-prem → hosted → PowerServer → SaaS)
- Database isolation strategy (database-per-tenant on SQL MI)
- 15 architectural decisions documented as draft ADRs
Decisions Made
See docs/14-strategic-context.md section 6 for the full list of 15 ADRs. Key decisions:
- .NET 8 / C# backend, React + TypeScript frontend
- Azure-preferred, vendor-agnostic at the application layer
- Modular monolith architecture
- Database-per-tenant on Azure SQL MI
- New customers first for UX design
- Docusaurus for documentation (containerized)
- Arc42 + ADRs + specs before code
- Odoo as commercial/business operations layer
What Surprised Us
- The PowerBuilder source files are remarkably readable for UI extraction — coordinates, control types, colors, fonts, and edit styles are all in plain text
- The pricing module's BestEx engine has 24 orchestrated steps with injectable stored procedures at each step — more extensible than expected
- The pooling engine's fee allocation has 24 possible paths driven by three strategy flags — genuinely complex optimization
- The MBS tick pricing UI (Handle + 32nds + 64ths + 128ths) is a domain-specific control worth preserving in the SaaS UI
- The PowerSeller X project already has a validated pricing engine — the SaaS App's BestEx and PSX's stacking algorithm serve different but complementary purposes
Open Questions
- Loan table customization — Needs Jay's input. How much do customers customize the loan table schema?
- PowerServer transaction semantics — Needs research. Does PowerServer preserve manual commit/rollback behavior?
- Identity federation — Needs architecture spike. How to unify Odoo (SAML), Keycloak (OIDC), and Azure AD.
- Risk module validation — Needs Greg's review of the risk deep-dive documentation.
- V1 feature surface — Needs Lisa's input on which modules are in the initial SaaS release.
Next Steps
- Set up Docusaurus with Docker (Arc42 structure, ADR templates, devlog section)
- Migrate all 15+ docs into the Docusaurus structure
- Formalize ADRs
- Connect to SQL MI and pull real schema
- Write BestEx specification
- Begin porting BestEx engine to .NET 8
Reflection
The approach of deep documentation before code is paying dividends already. By spending a full session understanding the PowerBuilder codebase, the ecosystem, and the organizational context, we avoided the classic trap of "just start coding" without understanding the full picture. The documentation now serves as a shared reference that anyone on the team can read to understand what we're building and why.
The Product Owner's deep knowledge of the business, the team, and the infrastructure constraints dramatically accelerated alignment. This isn't a typical consulting engagement where discovery takes weeks — the CTO knows the domain, the customers, the code, and the strategy. The AI agent's role is to extract, organize, analyze, and produce at speed, guided by the PO's judgment.
Total output today: ~15 documents, ~2,500 lines of documentation, 4 Mermaid diagrams per document on average, 6 interactive HTML mockups, and a complete strategic context record. All produced without writing a single line of application code — which is exactly right for day one.