Legacy Modernization & Platform Engineering · Government / Federal Acquisition
Financial Reporting Platform Modernization for a Federal Acquisition Program
Industry
Government / Federal Acquisition
Engagement type
Legacy Modernization & Platform Engineering
Methodology
6-step approach
Capabilities
We designed and led the modernization of a federal contract management and financial reporting platform — migrating from 30+ isolated SSRS report pages, ASP.NET WebForms on .NET Framework 4.8, and session-based filter state to a unified React 18 + ASP.NET Core 9 analytical workspace. The new platform consolidated a fragmented reporting surface into a single tabbed environment with a persistent global filter bar, URL-driven state, and live financial dashboards backed by existing stored procedures via Dapper — with no stored procedure changes and no disruption to the running legacy application.
The challenge
The platform served a federal acquisition program tracking hundreds of contracts, task orders, periods of performance, and cost reports across multiple contractors and departments. Over years of incremental development, the reporting layer had fragmented into 30+ isolated pages — each with its own filter setup, no shared state, and no bookmarkable views. Users re-entered contractor, contract, and period-of-performance selections on every page. The embedded report server was a standalone infrastructure dependency requiring separate maintenance and licensing.
The application ran on ASP.NET WebForms — a stack with no upgrade path to .NET Core. Session keys were used to pass filter state between pages, making navigation context fragile and non-shareable. Authentication had accumulated multiple conflicting library versions across partial integration work over the years.
The organization needed a migration path that preserved the existing stored procedures — which contained production-validated government financial calculations — reduced the report server dependency, and delivered a measurably better user experience without a full-stop rewrite that risked service continuity.
The approach
We began with a structured pre-work phase: auditing all session state keys across the codebase, mapping each key to its producer and consumer pages, cataloguing stored procedure parameters that had been sourced from session state, and assessing the legacy data layer for overlap with the write-side domains scheduled for migration. This audit drove migration sequencing and prevented hidden session dependencies from surfacing mid-implementation.
The migration strategy was strangler fig — a new ASP.NET Core 9 API and React 18 SPA ran alongside the legacy system, sharing the same SQL Server database, consuming one domain at a time. The legacy application continued operating for all write operations and non-migrated reports throughout. The reporting workspace was redesigned from the ground up: a single 6-tab shell with a persistent global filter bar, full URL state encoding for every filter and tab combination, and live financial dashboard data from existing stored procedures called via Dapper with no proc changes.
Session State Audit
Mapped all session keys across the codebase to their producer and consumer pages before writing a line of new code. This drove migration sequencing and surfaced hidden navigation dependencies that would have blocked delivery mid-phase.
Strangler Fig Migration
New API and SPA deployed alongside the legacy app, sharing the database. Legacy handled writes and non-migrated reports throughout; the new app consumed one domain at a time with no disruption to live operations.
Permission Service Consolidation
Replaced ~100 scattered per-page permission checks with a single typed IPermissionService backed by the existing RBAC tables, with results cached per user per permission. One auditable code path replaced a sprawl of inconsistent checks.
URL-Driven Filter State
Replaced session-based filter passing with full URLSearchParams encoding. Every filter and tab combination is a unique, bookmarkable URL — shared links work without re-entry, and browser navigation works correctly for the first time.
Financial Dashboard
Existing stored procedures called via Dapper with no changes to proc code; burn rate calculation and summary aggregation moved to the C# service layer; React renders KPI cards, a budget-vs-actual grouped bar chart, and a sortable POP detail grid with Excel export.
Operational Workspace
Hierarchical drill-down (Contractor → Contract → Task Order → Period of Performance → Cost Reports) with inline CRUD replacing the legacy dashboard, connected directly to the reporting workspace via pre-populated deep links.
Why it matters
Government financial platforms accumulate architectural debt in distinct layers — conflicting auth libraries, session state woven through navigation, reports scattered across standalone pages with no shared context. Untangling it requires discipline at the seams: a session dependency map before any migration work begins, a permission consolidation strategy that replaces sprawl with a single auditable path, and a strangler fig approach that never breaks the running system. Done right, the new platform is measurably better for users and measurably cheaper to operate and extend.
Technologies & domains
Outcome
The financial reporting workspace consolidated 30+ isolated pages into a single tabbed environment where filter state persists across all report views and every combination is bookmarkable and shareable. The embedded report server dependency was eliminated for the financial reporting domain, with remaining tabs following in subsequent phases. The operations team gained a unified filter context rather than re-entering contractor and contract selections on every page.
Key results
8 documented- 30+ isolated report pages consolidated into a single 6-tab analytical workspace
- Report server dependency eliminated for the financial reporting domain
- Filter re-entry eliminated — global filter bar persists across all tabs with URL encoding
- Every filter and tab combination bookmarkable and shareable via URL
- ~100 scattered permission checks replaced by one typed, cached permission service
- Session-based state fully replaced by JWT claims and URL parameters
- Legacy application continued operating without disruption throughout migration
- Existing stored procedures preserved unchanged — production-validated financial calculations untouched
Capabilities applied
- Platform Modernization
- Architecture Leadership
- Regulated Environment Delivery
- Engineering Enablement
Related engagements
Government / Public Sector
Legacy Platform Modernization for a Regulated Public Sector Organization
We led the technical modernization of a mission-critical platform serving a regulated public sector organization — migrating from a fragile legacy codebase to a maintainable, API-first architecture while maintaining continuity of service throughout. The engagement combined direct architecture leadership with implementation work and structured knowledge transfer to the internal team.
Read case study →Healthcare / Regulatory Compliance
Structured Data Transformation and Compliance Reporting Automation
We designed and built a structured data transformation and reporting platform for a healthcare organization facing mandatory compliance reporting obligations — replacing manual extraction and formatting workflows with an automated, auditable pipeline that produced accurate regulatory submissions on demand and maintained a complete record of every reported value.
Read case study →Technology / SaaS
Cloud-Native Modernization and Delivery Enablement
We designed and led the implementation of a cloud-native platform architecture for a growing SaaS company whose infrastructure had outpaced the capabilities of its initial design — rebuilding the deployment model, introducing container orchestration and Infrastructure as Code, and establishing the operational observability needed to run a reliable production service at scale.
Read case study →Work with Protabyte
Ready to tackle a similar challenge?
Every engagement starts with a focused conversation. No obligation, no sales pitch. Just an honest assessment of where we can help.
Discuss a modernization engagement