SaaS platform development
SaaS (Software as a Service) is a software delivery model where the application runs in cloud and users pay for access by subscription. Technically: multi-tenancy, billing management, self-service onboarding, automatic updates, and SLA.
Multi-tenancy architectural solutions
Pool model (shared everything): all tenants in one DB, isolated by tenant_id field. Risks data leak on query error, harder meeting customer isolation requirements.
Silo model (isolated): each tenant — separate DB or instance. Maximum isolation, expensive to scale to thousands.
Bridge model: shared infrastructure, separate PostgreSQL schema per tenant. Balance between isolation and cost.
Choice depends on market: enterprise-SaaS (banking, healthcare) requires silo, SMB-SaaS benefits from pool model.
Billing and subscription management
Implementing billing yourself is bad. Standard choice:
Stripe Billing: subscriptions, trials, usage-based billing, automatic failed payment handling (dunning), coupons, taxes (Stripe Tax).
// Create subscription
const subscription = await stripe.subscriptions.create({
customer: 'cus_xxx',
items: [{ price: 'price_pro_monthly' }],
trial_period_days: 14,
metadata: { tenant_id: 'tenant_123' }
});
Paddle: alternative with Merchant of Record function — Paddle handles VAT calculation and payment in different countries. Good for B2C SaaS going international.
Chargebee / Recurly: advanced tools for complex pricing (seats, usage, flat + overage).
Pricing models
| Model | Description | Examples |
|---|---|---|
| Flat rate | Fixed price per plan | Basecamp |
| Per seat | Price × user count | Notion, Figma |
| Usage-based | Pay for consumption | AWS, Twilio |
| Tiered | Different price blocks | Mailchimp |
| Freemium | Basic free plan | Slack, Zoom |
Hybrid model (base subscription + overage) is most popular for variable consumption SaaS.
Self-service onboarding
After signup, users must get value without salesperson. Typical onboarding:
- Signup → create workspace (tenant)
- Email verification
- Wizard: profile setup, first object (project/team/document)
- Feature discovery: tooltips, empty states with CTA
- Activation event: first key action, after which user is "activated"
Activation event determined by analytics: which action correlates with 30-day retention.
Feature Flags and plans
Functionality divided by plan via feature flags:
// Laravel example
if ($tenant->plan->hasFeature('advanced_analytics')) {
// show analytics section
}
Flags stored in plan_features table. Can also use LaunchDarkly or Unleash for A/B tests and gradual rollout.
SaaS Metrics
Key metrics to monitor:
- MRR / ARR — monthly/yearly recurring revenue
- Churn rate — % customers canceling subscription
- LTV / CAC ratio — lifetime value to customer acquisition cost
- NPS — Net Promoter Score
- Time to value — signup to activation event
Technical stack
| Component | Technologies |
|---|---|
| Backend | Laravel (PHP), Django (Python), Nest.js (Node.js) |
| Frontend | Next.js, Nuxt.js |
| Database | PostgreSQL with RLS / schema-per-tenant |
| Billing | Stripe Billing, Paddle |
| Feature flags | LaunchDarkly, Unleash, custom |
| Product analytics | Mixpanel, Amplitude, PostHog |
| Queues | Redis + Sidekiq/Horizon/BullMQ |
| Infrastructure | AWS / GCP + Terraform |
Timeline
MVP SaaS (auth, multi-tenancy, one core feature, Stripe subscriptions, self-service onboarding): 3–5 months. Full platform with usage-based billing, teams, advanced analytics, integrations API: 6–12 months.







