Chapitre 1 · Leçon 1
4 étapes pour structurer n'importe quelle conception
Section 1
Step 1
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
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
Partir du design haut niveau (composants principaux) puis plonger dans les parties les plus critiques ou complexes.