Product Backend at Scale — 0 to 10,000 Users
Mission
Build and own the complete backend for a fast-scaling product, while preserving reliability through major architectural change and continuous feature delivery.
The Challenge
The system had to absorb hyper-growth immediately, support heavy day-to-day traffic, and integrate with external platforms (CRM and video) without slowing the user experience. Midstream, business requirements forced a cloud and runtime migration from Go on AWS to C#/.NET on Azure, but service continuity still had to remain uninterrupted.
Architecture
- Initial production backend delivered in Go on AWS for rapid launch and early scale.
- Migrated core services to C#/.NET on Azure with a zero-downtime migration plan.
- Introduced asynchronous processing with Azure Service Bus (queues + DLQ) to remove heavy work from synchronous API paths.
- Added Redis-backed caching for high-frequency read paths and integration metadata.
- Strengthened observability with Application Insights, structured logs, correlation IDs, dashboards, and alerts.
- Improved SQL performance via targeted indexing and query tuning.
Key Integrations
HubSpot CRM
Implemented OAuth2 (authorization code + refresh token) and webhook-based synchronization for contacts and deals, with reconciliation logic to keep data aligned.
Vimeo Integration
Built metadata sync, Redis-backed read acceleration, and reconciliation jobs for upload/status drift handling across provider and internal state.
Outcomes
- Scaled 0 → 10,000+ users in weeks.
- Sustained ~35,000 API requests/day.
- Maintained 99.9% uptime throughout.
- Reduced p95 latency from 1,200ms → 280ms.
- Reduced MTTR from ~3 hours → ~25 minutes.
- Improved report generation from 45 seconds → 6 seconds.
- Reduced CRM data mismatch by ~45%.
- Improved Vimeo processing success rate from 92% → 99.5%.
- Achieved cost savings of ~£320/month.
- Completed zero-downtime migration (Go on AWS → C#/.NET on Azure).
Trade-offs & Decisions
The migration traded short-term delivery speed for long-term ecosystem fit and operational consistency with Azure. Moving heavy work to asynchronous workflows increased architectural complexity, but delivered lower latency, better resilience, and clearer recovery paths under failure.