Modernization, performance, and reliability of a suite of order-management business applications (ASP.NET Core, Angular, SQL Server) in an organization of about fifteen developers. Beyond planned feature work, I took on, alone and on my own initiative, the foundational work that determines delivery reliability: front-end modernization, test and CI performance, visual-layer restructuring, and the design system.
Front-end modernization
On my own initiative, I led the Angular 17 to Angular 21 migration alone, from analysis to production. For transformations not covered by official tooling, I wrote AST codemods that automated the code rewrite. I then migrated the 900+ test suite from Jest to Vitest and parallelized it, reducing runtime from about 20 minutes to 30 seconds.
Continuous integration
I measured and optimized the front-end pipeline on my own, bringing it from 30 minutes down to 5 or 6. With about five runs per day and up to nineteen on peak days, this saves nearly two hours of waiting every day and nearly eight hours on busy days. I also helped reduce the back-end pipeline from 20 to 7 minutes as part of a shared effort (about nine runs per day).
Automatic changelog
I set up a delivery log generated by the CI/CD pipeline from Azure DevOps work items. It is append-only: the pipeline takes the changelog.json artifact of the previous version and adds the work items delivered since the last tagged version. The file is built into the application, so deliveries can be followed from the interface.
Application performance
I profiled a complex page, identified sequential loading cascades, and removed them, reducing its load time from about five seconds to one second.
Theme and design system
On my own initiative, I took over a chaotic visual layer: unstable or hard-to-integrate components and inconsistent colors from one screen to the next. I restructured it into a coherent theme built on shared variables. On that foundation, I extended and hardened the design-system components, each with a demo page, which speeds up development and keeps teams consistent.
Real-time feedback
I moved several submissions to real time, especially inter-application exchanges. Users now see the outcome immediately without refreshing the page. I also enriched error states so failures are understandable without going through support.
Agency search
I redesigned the agency-change workflow, which relied on an unreliable city-code search. I replaced it with instant fuzzy search (Fuse.js) across city, address, and other agency attributes.
Profiles and permissions
I co-designed a cross-cutting permission system, now in production in place of checks scattered across individual features. Permission calculation combines Active Directory groups, user data from the database, and session information, then matches them against hierarchical profiles and dynamic rules. The same result drives rendering in Angular and access control in the .NET APIs. The model is validated through numerous generated positive and negative cases and reviewed with product owners. I also helped standardize the authentication mechanisms.
External service integration
I integrated an order-item evaluation system through external providers' APIs: business rules, status tracking and display, error handling, and exchange logging.
.NET platform
On my own initiative, I centralized build rules in Directory.Build.props and locked dependencies. I also evaluated .NET 10 and Nix to prepare future changes without disrupting production.
Context
The suite exchanges data through JSON APIs, inter-application flows, and a service bus, with CQRS being introduced progressively. Several teams develop it, about fifteen developers and four to five product representatives, working in Agile with Azure DevOps. Without a dedicated QA team, developers own automated testing.
Stack : C#, .NET 7/8, ASP.NET Core, Angular 17–21, TypeScript, SQL Server, Azure App Service, Azure DevOps, Active Directory, Fuse.js, Jest, Vitest
