Upvoit SaaS re-architecture

5× backend throughput and 40% lower API latency after a 15-day Clean Architecture + CQRS cutover — with zero scheduled downtime.

  • Excelhunter Technologies
  • 2024
  • Field-management SaaS
  • Private repository (NDA)
Throughput
40%Latency cut
15Days
0Downtime

Context

Product
Multi-tenant field-force management SaaS in live customer testing — scheduling, reporting, and mobile workflows.
Constraint
Monolithic .NET codebase with daily feature pressure. Merge conflicts and deployment risk were blocking parallel development.
Requirement
Re-architect without a feature freeze or customer-facing outage.

Role & scope

Senior .NET developer and architecture lead on a squad of four.

  • Defined Clean Architecture layer boundaries and module ownership for parallel work
  • Split read/write paths with CQRS — reporting queries separated from write workflows
  • Owned migration sequencing and rollout plan alongside ongoing feature delivery
  • Coordinated daily with team leads on merge strategy and cutover criteria

Key decisions

Clean Architecture over incremental patches

Isolated domains and testable boundaries. Cost: a focused 15-day sprint instead of slow coupling drift.

Rejected: strangler migration over months · microservices (team size and ops overhead)

CQRS for read/write separation

Heavy reporting reads and complex writes had different query shapes. CQRS allowed independent optimization.

Rejected: single EF model everywhere · read replicas only

Parallel cutover — no feature freeze

Re-architecture ran alongside daily requirements. Higher short-term team load accepted to avoid business interruption.

Trade-off: sprint intensity vs. customer downtime

Architecture

┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ Web / API │────▶│ Application │────▶│ Domain │ │ (ASP.NET) │ │ (CQRS) │ │ Models │ └─────────────┘ └──────┬───────┘ └─────────────┘ │ ┌────────────┴────────────┐ ▼ ▼ ┌────────────┐ ┌────────────┐ │ Commands │ │ Queries │ │ (writes) │ │ (reads) │ └─────┬──────┘ └─────┬──────┘ └───────────┬───────────┘ ▼ ┌─────────────┐ │ MSSQL │ └─────────────┘
.NET 8 ASP.NET Core Clean Architecture CQRS MSSQL EF Core CI/CD

Results

Backend throughput after architecture cutover
40%Reduction in average API latency
15 daysFull re-architecture delivered on live platform
0Scheduled downtime during migration

Retrospective

  • Merge-conflict volume was the early signal of architecture debt — earlier boundary documentation would have reduced sprint pressure.
  • Would formalize module ownership on day one for any greenfield SaaS with multiple contributors.