EasyStarter

Personal Blog Platform

DatabasesAPI DesignCaching

Problem Statement

WriteUp is building a simple blogging platform aimed at individual creators. Authors can:

- Write & publish posts - rich text editor with markdown support, image uploads, tags, and draft/published states.Comments - readers can leave comments on posts. Comments are threaded (replies to replies).Author dashboard - shows view counts per post, total subscribers, and recent comments.RSS feed - auto-generated RSS feed for subscribers.SEO - server-rendered HTML with proper meta tags, Open Graph, and structured data for search engines.

The platform targets hobby bloggers with modest traffic - about 5,000 daily visitors per blog.

What You'll Learn

Design a personal blogging platform where authors write posts and readers leave comments. ~5 k daily visitors. Build this architecture under realistic production constraints, then validate tradeoffs in the design lab simulation.

DatabasesAPI DesignCaching

Constraints

Daily visitors (per blog)~5,000
Posts per blog~200
Page load time< 400 ms
Image storage per blog~2 GB
Comments per post~50 avg
Availability target99.5%
ApproachClick to expand

Interview-Ready Approach

1) Clarify Scope and SLOs

  • Problem statement: Design a personal blogging platform where authors write posts and readers leave comments. ~5 k daily visitors.
  • Design for a peak load target around 100 RPS (including burst headroom).
  • Daily visitors (per blog): ~5,000
  • Posts per blog: ~200
  • Page load time: < 400 ms
  • Image storage per blog: ~2 GB
  • Comments per post: ~50 avg

2) Capacity Planning Method

  • Convert traffic and growth constraints into request rate, storage growth, and concurrency budgets.
  • Keep at least 2-3x safety margin per tier (ingress, compute, storage, async workers).
  • Reserve explicit latency budgets per hop so p95 can be defended in review.

3) Architecture Decisions

  • Databases: Define a clear system-of-record and design read/write paths separately before adding optimizations.
  • API Design: Standardize API boundaries, idempotency keys, pagination, and error contracts first.
  • Caching: Put cache on hot read paths first and pick cache-aside or write-through explicitly.

4) Reliability and Failure Strategy

  • Use strong write constraints (transactions or conditional writes) and explicit backup/restore strategy.
  • Apply strict input validation and backward-compatible versioning.
  • Bound staleness with TTL + invalidation hooks for critical entities.

5) Validation Plan

  • Run one peak-load test, one dependency-degradation test, and one failover test.
  • Verify idempotency for all retried writes and async consumers.
  • Track user-facing SLOs first: p95 latency, error rate, and successful throughput.

6) Trade-offs to Call Out in Interviews

  • Databases: SQL gives stronger transactional guarantees; NoSQL often gives better write scaling and flexibility.
  • API Design: Rich APIs improve developer speed but can create long-term compatibility burden.
  • Caching: Higher hit rate cuts latency/cost, but stale data and invalidation bugs become primary risks.

Practical Notes

  • A single relational database (PostgreSQL) is more than sufficient at this scale.
  • Static site generation (SSG) or server-side rendering (SSR) with caching can eliminate most database reads.
  • Store images in an object store (S3) with a CDN in front for fast delivery.

Learn the Concept

Practice Next

Reference SolutionClick to reveal

Why This Solution Works

Request path: The solution keeps ingress, service logic, and stateful dependencies separated so each layer can scale independently.

Reference flow: Web Clients -> API Gateway -> API Service -> Primary SQL DB -> Redis Cache

Design strengths

  • Cache sits on the read path to absorb repeated queries and keep DB pressure stable.

Interview defense

  • This design makes bottlenecks explicit (ingress, core compute, persistence, async workers).
  • It supports progressive scaling without re-architecting the core request path.
  • It keeps correctness-sensitive state changes in durable systems while offloading background work asynchronously.