EasyStarter

Product Changelog / Release Notes

DatabasesAPI DesignCDN

Problem Statement

ShipLog is building a hosted changelog service for SaaS products. Features:

- Publish entries - product teams write changelog entries with title, date, body (markdown), category (New, Improved, Fixed, Removed), and optional screenshots.Public page - a branded public changelog page (e.g., `changelog.example.com`) with infinite scroll.Widget - an embeddable widget (popup or slide-in) for the product's dashboard that shows "What's New" with unread badges.Subscriptions - users subscribe via email to get notified of new releases.API - developers can fetch changelog entries programmatically (JSON/RSS).Reactions - users react to entries (👍 🎉 ❤️) to signal which features they value.

Targeting 1,000 product teams with 500,000 monthly widget impressions.

What You'll Learn

Design a hosted changelog service where product teams publish release notes and users subscribe to updates. Build this architecture under realistic production constraints, then validate tradeoffs in the design lab simulation.

DatabasesAPI DesignCDN

Constraints

Product teams~1,000
Entries per product/month~5
Widget impressions/month~500,000
Widget load time< 300 ms
Email notification delay< 30 minutes
Availability target99.5%
ApproachClick to expand

Interview-Ready Approach

1) Clarify Scope and SLOs

  • Problem statement: Design a hosted changelog service where product teams publish release notes and users subscribe to updates.
  • Design for a peak load target around 500 RPS (including burst headroom).
  • Product teams: ~1,000
  • Entries per product/month: ~5
  • Widget impressions/month: ~500,000
  • Widget load time: < 300 ms
  • Email notification delay: < 30 minutes

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.
  • CDN: Serve static and cacheable content from edge and keep origin strictly for misses and dynamic requests.

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.
  • Define cache keys and purge workflows before launch to avoid stale/global outages.

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.
  • CDN: Long TTL improves latency/cost; short TTL improves freshness.

Practical Notes

  • The changelog page is read-heavy and rarely changes - serve it as cached HTML from a CDN, invalidate on publish.
  • The widget is a lightweight JS script that fetches the latest 5 entries from an API endpoint. Cache aggressively.
  • Track 'last seen' timestamp per user to compute the unread badge count in the widget.

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 -> DNS -> CDN Edge -> API Gateway -> API Service -> Primary SQL DB

Design strengths

  • The architecture keeps synchronous paths short and isolates stateful dependencies behind clear boundaries.

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.