Builders Academy
Études de Cas System Design
1 of 3

Chapitre 1 · Leçon 1

Framework System Design

4 étapes pour structurer n'importe quelle conception

Section 1

Le framework en 4 étapes

Step 1

Étapes 1 & 2 — Clarifier et Estimer

Ne jamais commencer à dessiner avant de clarifier les requirements. Une erreur de compréhension invalidera tout le design. Puis estimer les capacités pour dimensionner le système.

snippet.typescript

typescript
1/*
2 * FRAMEWORK SYSTEM DESIGN — 4 étapes (45 min d'interview)
3 *
4 * ══════════════════════════════════════════════════════════════
5 * ÉTAPE 1 : CLARIFIER LES REQUIREMENTS (5 min)
6 * ══════════════════════════════════════════════════════════════
7 *
8 * Questions fonctionnelles :
9 * - Quelles features exactement ? (MVP ou tout ?)
10 * - Qui sont les utilisateurs ? (B2C, B2B, développeurs ?)
11 * - Mobile + Web ou seulement un ?
12 *
13 * Questions non-fonctionnelles :
14 * - Combien d'utilisateurs ? Croissance prévue ?
15 * - Ratio lecture/écriture ? (80/20 pour un blog, 50/50 pour un chat)
16 * - Latence acceptable ? (100ms pour le search, 1s pour l'upload ?)
17 * - Disponibilité requise ? (99.9% = 8.7h/an, 99.99% = 52min/an)
18 * - Cohérence forte ou éventuelle ? (posts vs compteurs de likes)
19 * - Régions géographiques ? (global vs local)
20 *
21 *
22 * ══════════════════════════════════════════════════════════════
23 * ÉTAPE 2 : ESTIMATION DE CAPACITÉ (5 min)
24 * ══════════════════════════════════════════════════════════════
25 *
26 * Back-of-envelope calculations — exemple pour Usher Platform :
27 */
28
29const capacity = {
30  // Utilisateurs
31  totalUsers: 1_000_000,        // 1M inscrits
32  dailyActiveUsers: 100_000,    // 10% DAU
33  peakConcurrent: 10_000,       // 10% des DAU en même temps
34
35  // Trafic
36  // 100k DAU × 20 req/session = 2M req/jour
37  requestsPerDay: 2_000_000,
38  // 2M / 86400s = ~23 req/s en moyenne
39  avgRequestsPerSecond: 23,
40  // ×10 pour le pic (matin et soir)
41  peakRequestsPerSecond: 230,
42
43  // Stockage
44  // 1000 tutoriels × 50KB de contenu = 50MB
45  tutorialContentStorage: "50 MB",
46  // 1M users × 1KB profil = 1 GB
47  userDataStorage: "1 GB",
48  // Vidéos : 500 vidéos × 500MB = 250 GB
49  videoStorage: "250 GB",
50
51  // Bandwidth
52  // 230 req/s × 5KB/réponse = 1.15 MB/s = ~10 Mbps moyen
53  avgBandwidth: "10 Mbps",
54  // Vidéos : 1000 streams simultanés × 1Mbps = 1 Gbps
55  videoBandwidth: "1 Gbps → CDN obligatoire",
56};

Step 2

Étapes 3 & 4 — Design et Deep Dive

Partir du design haut niveau (composants principaux) puis plonger dans les parties les plus critiques ou complexes.

snippet.typescript

typescript
1/*
2 * FRAMEWORK SYSTEM DESIGN — 4 étapes (45 min d'interview)
3 *
4 * ══════════════════════════════════════════════════════════════
5 * ÉTAPE 1 : CLARIFIER LES REQUIREMENTS (5 min)
6 * ══════════════════════════════════════════════════════════════
7 *
8 * Questions fonctionnelles :
9 * - Quelles features exactement ? (MVP ou tout ?)
10 * - Qui sont les utilisateurs ? (B2C, B2B, développeurs ?)
11 * - Mobile + Web ou seulement un ?
12 *
13 * Questions non-fonctionnelles :
14 * - Combien d'utilisateurs ? Croissance prévue ?
15 * - Ratio lecture/écriture ? (80/20 pour un blog, 50/50 pour un chat)
16 * - Latence acceptable ? (100ms pour le search, 1s pour l'upload ?)
17 * - Disponibilité requise ? (99.9% = 8.7h/an, 99.99% = 52min/an)
18 * - Cohérence forte ou éventuelle ? (posts vs compteurs de likes)
19 * - Régions géographiques ? (global vs local)
20 *
21 *
22 * ══════════════════════════════════════════════════════════════
23 * ÉTAPE 2 : ESTIMATION DE CAPACITÉ (5 min)
24 * ══════════════════════════════════════════════════════════════
25 *
26 * Back-of-envelope calculations — exemple pour Usher Platform :
27 */
28
29const capacity = {
30  // Utilisateurs
31  totalUsers: 1_000_000,        // 1M inscrits
32  dailyActiveUsers: 100_000,    // 10% DAU
33  peakConcurrent: 10_000,       // 10% des DAU en même temps
34
35  // Trafic
36  // 100k DAU × 20 req/session = 2M req/jour
37  requestsPerDay: 2_000_000,
38  // 2M / 86400s = ~23 req/s en moyenne
39  avgRequestsPerSecond: 23,
40  // ×10 pour le pic (matin et soir)
41  peakRequestsPerSecond: 230,
42
43  // Stockage
44  // 1000 tutoriels × 50KB de contenu = 50MB
45  tutorialContentStorage: "50 MB",
46  // 1M users × 1KB profil = 1 GB
47  userDataStorage: "1 GB",
48  // Vidéos : 500 vidéos × 500MB = 250 GB
49  videoStorage: "250 GB",
50
51  // Bandwidth
52  // 230 req/s × 5KB/réponse = 1.15 MB/s = ~10 Mbps moyen
53  avgBandwidth: "10 Mbps",
54  // Vidéos : 1000 streams simultanés × 1Mbps = 1 Gbps
55  videoBandwidth: "1 Gbps → CDN obligatoire",
56};

Topics and skills covered

  • System Design
  • Interview
  • Estimation
  • Architecture