Webskyne
Webskyne
LOGIN
← Back to journal

15 June 2026 • 7 min read

Scaling a SaaS Platform from 1,000 to 100,000 Users: A Cloud-Native Microservices Transformation at Scale

In 2024, Webskyne partnered with a fast-growing SaaS startup to transform their monolithic application into a cloud-native, microservices-based platform capable of supporting 100x user growth. This case study details the architectural decisions, migration strategy, and measurable outcomes that enabled the platform to handle peak traffic of 12,000 concurrent requests while reducing operational costs by 40%.

Case Studymicroservicescloud migrationAWSscalabilitySaaSperformance optimizationdevopssystem design
Scaling a SaaS Platform from 1,000 to 100,000 Users: A Cloud-Native Microservices Transformation at Scale

Overview

In early 2024, a Series B SaaS startup approached Webskyne with a critical infrastructure challenge. Their customer-facing platform—originally built as a monolithic Node.js application—was struggling under the weight of rapid user adoption. What began as a lean MVP serving 1,000 monthly active users had organically grown to 45,000 users, and the existing architecture was hitting its limits.

Over the course of eight months, the Webskyne engineering team designed and executed a full transformation: decomposing the monolith into 16 independent microservices, implementing a comprehensive CI/CD pipeline, migrating from a single-region deployment to a multi-region, active-active architecture on AWS and Azure, and introducing modern observability practices that turned firefighting into proactive engineering.

The result was a platform that not only handled the projected 100,000-user target but did so with improved resilience, faster feature velocity, and a 40% reduction in infrastructure costs.

The Challenge

The client's challenges were multifaceted and interconnected:

  • Performance degradation at scale: API response times had climbed from an average of 120ms to over 2,800ms during peak hours. Database connection pools were exhausted, and the single PostgreSQL instance had become a hard bottleneck.
  • Deployment fragility: Every release required a full application restart. There were 3-4 production incidents per month directly attributed to deployment failures. Rollback procedures took 45 minutes on average.
  • Vendor lock-in and resilience concerns: The entire stack ran on a single cloud provider with no disaster recovery plan. A single region outage would mean total service disruption.
  • Team velocity collapse: With 18 engineers touching the same codebase, merge conflicts and integration issues had slowed feature delivery from weekly releases to monthly, and sometimes longer.
  • Technical debt that was compounding: The absence of automated testing was making refactoring risky. Code coverage sat at 12%, and there were no integration tests for critical user flows.

The executive team had set a hard deadline: the new architecture had to be production-ready before the annual enterprise sales conference in November, when they expected a 3x spike in signups.

Project Goals

We established clear, measurable goals to guide the transformation:

  1. Performance: Reduce P95 API response time to under 300ms under normal load, and under 1,200ms under 3x peak load.
  2. Availability: Achieve 99.95% uptime with automatic failover across regions.
  3. Scalability: Support horizontal scaling to handle 100,000 monthly active users and 12,000 concurrent requests without degradation.
  4. Development velocity: Restore weekly release cycles with zero-downtime deployments.
  5. Cost efficiency: Reduce monthly cloud infrastructure costs by at least 20% through right-sizing and elimination of overprovisioned resources.
  6. Observability: Implement full observability with mean time to detection (MTTD) under 2 minutes and mean time to recovery (MTTR) under 15 minutes.

Our Approach

Rather than a risky big-bang rewrite, Webskyne proposed and executed a strangler fig pattern—incrementally extracting functionality from the monolith while keeping the system fully operational. This minimized business risk while delivering value continuously.

Phase 1: Foundation (Weeks 1-4)

The first month focused on establishing guardrails. We set up:

  • A multi-account AWS organization with isolated environments for development, staging, and production.
  • Infrastructure as Code using Terraform, with every component version-controlled and peer-reviewed.
  • A comprehensive observability stack: Prometheus for metrics, Grafana for dashboards, Jaeger for distributed tracing, Loki for logs, and PagerDuty for on-call routing.
  • Automated canary deployments with automated rollback using Argo Rollouts.
We also established the team's engineering workflow: trunk-based development, mandatory code review gates, and a quality bar requiring 80% unit test coverage for all new code.

Phase 2: Strangler Fig Extraction (Weeks 5-20)

We identified the highest-traffic, most volatile domains and extracted them first: customer authentication, billing, and the core API layer. Each extraction followed a disciplined pattern:

  1. Establish an anti-corruption layer at the monolith boundary.
  2. Build the new service with its own database and domain model.
  3. Route traffic incrementally using feature flags, starting at 1% and gradually increasing.
  4. Decommission the monolith module only after the new service was stable for two weeks at 100% traffic.
By the end of this phase, we had released 12 microservices. The monolith's request volume had dropped by 65%, and its resource consumption had fallen proportionally.

Phase 3: Resilience and Multi-Region (Weeks 21-28)

With the core services decomposed, we turned our attention to resilience patterns. We introduced:

  • Circuit breakers using Resilience4j on all inter-service calls.
  • Bulkhead isolation to prevent cascading failures.
  • Rate limiting and adaptive throttling at the API gateway (Kong).
  • Cross-region replication using AWS Global Accelerator and Azure Front Door, routing users to the nearest healthy endpoint.

This phase also included load testing. We used k6 to simulate the expected November traffic patterns and discovered bottlenecks in the session management layer. A targeted optimization reduced session lookup times by 85%.

Phase 4: Optimization and Knowledge Transfer (Weeks 29-32)

The final month was dedicated to fine-tuning: database query optimization via indexing strategies and read replicas, container image size reduction, and cost optimization through spot instance usage for non-critical workloads. We also ran extensive training sessions for the client's engineering team, ensuring they could operate and extend the new platform independently.

Implementation Details

The technical implementation combined proven patterns with modern tooling. The microservices were built in NestJS, chosen for its opinionated structure, built-in dependency injection, and excellent TypeScript support. The frontend—a React-based dashboard—remained on Next.js, but was now decoupled from the backend and communicating exclusively via REST APIs and, for real-time features, WebSockets through a dedicated notification service.

Data persistence was carefully assigned per service: relational databases (AWS RDS PostgreSQL) for transactional services, DynamoDB for high-throughput read-heavy workloads like session management, and Redis ElastiCache for caching and rate limiting state. The event bus used Amazon EventBridge for cross-service communication, enabling eventual consistency where appropriate and eliminating tight coupling.

Results

The transformation delivered quantifiable results across every dimension:

  • User growth without architecture panic: The platform reached 105,000 monthly active users by the end of Q4—ahead of projections—with zero downtime during the November enterprise conference spike.
  • Performance at scale: P95 API latency dropped to 210ms under normal load and peaked at 890ms during the Black Friday traffic surge, well within the 1,200ms target.
  • Reliability: Uptime improved to 99.97% for the calendar year. No single-region failure caused service disruption; cross-region failover was automatic and typically completed within 30 seconds.
  • Velocity restored: The engineering team returned to a weekly release rhythm with zero unplanned rollbacks. Feature branches merged in an average of 4 hours, down from 2.5 days.
  • Cost reduction: Monthly cloud spend decreased by 42%, primarily through right-sizing EC2 instances, purchasing reserved capacity, and eliminating idle resources. Annual savings exceeded $180,000.
  • Team confidence: Post-implementation surveys showed a 70% improvement in developer confidence and a 60% reduction in on-call stress, directly attributable to better observability and clearer ownership boundaries.

Key Metrics

MetricBeforeAfterChange
Monthly Active Users45,000105,000+133%
P95 Response Time2,800ms210ms-92.5%
Uptime SLA97.2%99.97%+2.77pp
Monthly Cloud Cost$42,000$24,000-42.9%
Release CadenceMonthlyWeekly4x faster
Code Coverage12%78%+66pp
MTTR45 min8 min-82%
On-call Incidents3.4/month0.6/month-82%

Lessons Learned

1. Incremental migration wins. A direct rewrite would have taken 12-18 months and introduced unacceptable business risk. The strangler fig pattern allowed us to deliver value continuously and maintain system stability throughout the transition.

2. Observability is not optional. We made observability a first-class requirement from day one, not an afterthought. This fundamentally changed the team's relationship with production—from fearful to confident.

3. Database design is architecture. The biggest performance wins didn't come from caching layers or code optimizations. They came from assigning the right database technology to the right workload and optimizing schema and indexing strategies.

4. Organizational design follows technical design. Microservices only deliver their promised benefits when teams have clear domain boundaries and service ownership. We invested as much in team alignment as we did in code.

5. Cost optimization requires continuous attention. The 42% cost reduction was not a one-time exercise. We built cost visibility into our dashboards, so every team could see the financial impact of their resource decisions in real time.

Looking Ahead

The platform is now well-positioned for the next phase of growth. The client is exploring serverless functions for batch processing workloads, and we are piloting AI-assisted anomaly detection to further reduce MTTD. The journey from fragile monolith to resilient, scalable platform took eight months and required disciplined execution—but it created a foundation that will serve the business for years to come.

Related Posts

From Zero to 50K Users: How We Built a Cross-Platform Mobile App for Smart Nutrition Tracking
Case Study

From Zero to 50K Users: How We Built a Cross-Platform Mobile App for Smart Nutrition Tracking

When a wellness startup approached us with the idea of building a cross-platform smart nutrition tracker, they needed something fast, affordable, and genuinely usable. What followed was a 12-week sprint using Flutter, Node.js, and a privacy-first architecture that resulted in 52,000 downloads and a 4.7-star rating within three months of launch. This case study breaks down the complete journey — from discovery to deployment — including the architecture decisions, UX research that shaped the app, the on-device ML pipeline we implemented for food recognition, and the exact metrics that proved the model worked.

From Legacy Monolith to Cloud-Native Microservices: A 2026 Case Study
Case Study

From Legacy Monolith to Cloud-Native Microservices: A 2026 Case Study

This study walks through a full-scale migration of a legacy on-premises monolith into a cloud-native microservices architecture. We cover the strategic rationale, phased migration approach, tooling choices, and the measurable business uplift achieved by the team — from 45-minute deploys to sub-minute rollouts and a 20-point reliability gain.

From Monolith to Micro-FaaS: How We Rebuilt a Legacy Payment Platform to Handle 12 Million Transactions
Case Study

From Monolith to Micro-FaaS: How We Rebuilt a Legacy Payment Platform to Handle 12 Million Transactions

A year-long engineering transformation turned a fragile, single-server payment processor into a distributed, event-driven system resilient to a 10x traffic spike. This case study traces the planning, the painful migrations, and the architecture decisions that cut failure rate from 4.2% to 0.03% while cutting infrastructure costs by 40%.