Skip to Content
Nextra 4.0 is released 🎉

āϧāĻžāĻĒ ā§¨ - āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āĻĄāĻŋāϜāĻžāχāύ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦ āĻ•āϰāĻž āĻāĻŦāĻ‚ āϏāĻŽā§āĻŽāϤāĻŋ (buy-in) āύ⧇āĻ“ā§ŸāĻž (Step 2 - Propose high-level design and get buy-in)

āĻāχ āϧāĻžāĻĒ⧇, āφāĻŽāĻžāĻĻ⧇āϰ āϞāĻ•ā§āĻˇā§āϝ āĻĨāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āĻĄāĻŋāϜāĻžāχāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĄāĻŋāϜāĻžāχāύāϟāĻŋāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āĻŽāϤ āĻšāĻ“ā§ŸāĻžāĨ¤ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋ⧟āĻžā§Ÿ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻšāϝ⧋āĻ—āĻŋāϤāĻž (collaborate) āĻ•āϰāĻžāϟāĻž āϖ⧁āĻŦ āĻ­āĻžāϞ⧋ āĻāĻ•āϟāĻŋ āφāχāĻĄāĻŋ⧟āĻžāĨ¤

  • āĻĄāĻŋāϜāĻžāχāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻŦā§āϞ⧁āĻĒā§āϰāĻŋāĻ¨ā§āϟ (blueprint) āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ āĻĢāĻŋāĻĄāĻŦā§āϝāĻžāĻ• (feedback) āĻŦāĻž āĻŽāϤāĻžāĻŽāϤ āϜāĻžāύāϤ⧇ āϚāĻžāύāĨ¤ āφāĻĒāύāĻžāϰ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰāϕ⧇ āĻāĻ•āϜāύ āϏāϤ⧀āĻ°ā§āĻĨ āĻŦāĻž āϟāĻŋāĻŽāĻŽā§‡āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻāĻ•āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰ⧁āύāĨ¤ āĻ…āύ⧇āĻ• āĻ­āĻžāϞ⧋ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰ āĻ•āĻĨāĻž āĻŦāϞāϤ⧇ āĻāĻŦāĻ‚ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋ⧟āĻžā§Ÿ āϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧇āύāĨ¤
  • āĻšā§‹ā§ŸāĻžāχāϟāĻŦā§‹āĻ°ā§āĻĄ āĻŦāĻž āĻ•āĻžāĻ—āĻœā§‡ āĻŽā§‚āϞ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞ⧋ (key components) āĻĻāĻŋā§Ÿā§‡ āĻŦāĻ•ā§āϏ āĻĄāĻžā§ŸāĻžāĻ—ā§āϰāĻžāĻŽ āφāρāϕ⧁āύāĨ¤ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ (āĻŽā§‹āĻŦāĻžāχāϞ/āĻ“ā§Ÿā§‡āĻŦ), āĻāĻĒāĻŋāφāχ (APIs), āĻ“ā§Ÿā§‡āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ, āĻĄā§‡āϟāĻžāĻ¸ā§āĻŸā§‹āϰ, āĻ•ā§āϝāĻžāĻļ (cache), āϏāĻŋāĻĄāĻŋāĻāύ (CDN), āĻŽā§‡āϏ⧇āϜ āĻ•āĻŋāω (message queue) āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āφāĻĒāύāĻžāϰ āĻŦā§āϞ⧁āĻĒā§āϰāĻŋāĻ¨ā§āϟāϟāĻŋ āĻ¸ā§āϕ⧇āϞ āĻŦāĻž āĻŦ⧜ āφāĻ•āĻžāϰ⧇āϰ āĻŦāĻžāϧāĻžāϗ⧁āϞ⧋ (scale constraints) āĻĒāĻžāϰ āĻšāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āĻ•āĻŋ āύāĻž āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāĻ•-āĻ…āĻĢ-āĻĻā§āϝ-āĻāύāϭ⧇āϞāĻĒ āĻ•ā§āϝāĻžāϞāϕ⧁āϞ⧇āĻļāύ (back-of-the-envelope calculations) āĻŦāĻž āĻ–āϏ⧜āĻž āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟ⧁ āĻļāĻŦā§āĻĻ āĻ•āϰ⧇ āĻŦāĻž āĻœā§‹āϰ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰ⧁āύ (Think out loud - āĻ…āĻ°ā§āĻĨāĻžā§Ž āφāĻĒāύāĻŋ āϕ⧀ āĻ­āĻžāĻŦāϛ⧇āύ āϤāĻž āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰāϕ⧇ āĻŦāϞ⧇ āĻŦāϞ⧇ āĻ­āĻžāĻŦāĻž)āĨ¤ āϏāϰāĻžāϏāϰāĻŋ āĻ–āϏ⧜āĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĄā§āĻŦ āĻĻ⧇āĻ“ā§ŸāĻžāϰ āφāϗ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇ āύāĻŋāύ āϝ⧇ āĻāχ āĻšāĻŋāϏāĻžāĻŦāϟāĻŋ āφāĻĻ⧌ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻ•āĻŋ āύāĻžāĨ¤
  • āϏāĻŽā§āĻ­āĻŦ āĻšāϞ⧇, āĻ•ā§Ÿā§‡āĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āχāωāϜ āϕ⧇āϏ (concrete use cases) āύāĻŋā§Ÿā§‡ āφāϞ⧋āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āĻĄāĻŋāϜāĻžāχāύ⧇āϰ āϰ⧂āĻĒāϰ⧇āĻ–āĻž āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇āĨ¤ āĻāĻŽāύāĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇ āĻāχ āχāωāϜ āϕ⧇āϏāϗ⧁āϞ⧋āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāύāĻŋ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āĻāϜ āϕ⧇āϏ (edge cases - āĻ…āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻŦāĻž āĻŦā§āϝāϤāĻŋāĻ•ā§āϰāĻŽā§€ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ) āφāĻŦāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰ⧇ āĻĢ⧇āϞāĻŦ⧇āύ āϝāĻž āφāĻĒāύāĻŋ āφāϗ⧇ āϚāĻŋāĻ¨ā§āϤāĻžāχ āĻ•āϰ⧇āύāύāĻŋāĨ¤
  • āĻāĻ–āĻžāύ⧇ āĻ•āĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻĒāĻŋāφāχ āĻāĻ¨ā§āĻĄāĻĒā§Ÿā§‡āĻ¨ā§āϟ (API endpoints) āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻžāĻŦ⧇āϏ āĻ¸ā§āĻ•āĻŋāĻŽāĻž (database schema) āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āωāϚāĻŋāϤ? āĻāϟāĻŋ āφāϏāϞ⧇ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤ “āϗ⧁āĻ—āϞ āϏāĻžāĻ°ā§āϚ āχāĻžā§āϜāĻŋāύ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰ⧁āĻ¨â€-āĻāϰ āĻŽāϤ⧋ āĻŦ⧜ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĄāĻŋāϜāĻžāχāύ⧇āϰ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāϗ⧁āϞ⧋ āĻ…āύ⧇āĻ• āύāĻŋāϚ⧁ āĻ¸ā§āϤāϰ⧇āϰ (too low level) āĻŦāĻŋāώ⧟ āĻšā§Ÿā§‡ āϝāĻžā§ŸāĨ¤ āφāĻŦāĻžāϰ āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻĒā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻĒā§‹āĻ•āĻžāϰ āϗ⧇āĻŽā§‡āϰ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāϗ⧁āϞ⧋ āύāĻŋā§Ÿā§‡ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻžāϟāĻž āϝ⧌āĻ•ā§āϤāĻŋāĻ• (fair game)āĨ¤ āĻāχ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧇ āφāĻĒāύāĻžāϰ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāĻ‰ā§ŸāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇ āύāĻŋāύāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ (Example)

āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āĻĄāĻŋāϜāĻžāχāύ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻāĻ—ā§‹āϤ⧇ āĻšā§Ÿ āϤāĻž āĻĻ⧇āĻ–āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϚāϞ⧁āύ “āĻāĻ•āϟāĻŋ āύāĻŋāωāϜ āĻĢāĻŋāĻĄ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰ⧁āĻ¨â€ (Design a news feed system) āωāĻĻāĻžāĻšāϰāĻŖāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋāĨ¤ āĻāĻ–āĻžāύ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻž āφāĻĒāύāĻžāϰ āĻŦā§‹āĻāĻžāϰ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχāĨ¤ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϏāĻŦāĻ•āĻŋāϛ⧁ “Design A News Feed System” āĻ…āĻ§ā§āϝāĻžā§Ÿā§‡ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤

āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ⧇āϰ āĻĻāĻŋāĻ• āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāϞ⧇, āĻāχ āĻĄāĻŋāϜāĻžāχāύāϟāĻŋ āĻĻ⧁āϟāĻŋ āĻĢā§āϞ⧋ (flows) āĻŦāĻž āĻĒā§āϰāĻŦāĻžāĻšā§‡ āĻŦāĻŋāĻ­āĻ•ā§āϤ: āĻĢāĻŋāĻĄ āĻĒāĻžāĻŦāϞāĻŋāĻļāĻŋāĻ‚ (feed publishing) āĻāĻŦāĻ‚ āύāĻŋāωāϜ āĻĢāĻŋāĻĄ āĻŦāĻŋāĻ˛ā§āĻĄāĻŋāĻ‚ (news feed building)āĨ¤

  • āĻĢāĻŋāĻĄ āĻĒāĻžāĻŦāϞāĻŋāĻļāĻŋāĻ‚: āϝāĻ–āύ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•āϟāĻŋ āĻĒā§‹āĻ¸ā§āϟ āĻĒāĻžāĻŦāϞāĻŋāĻļ āĻ•āϰ⧇āύ, āϤāĻ–āύ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻĄā§‡āϟāĻž āĻ•ā§āϝāĻžāĻļ/āĻĄā§‡āϟāĻžāĻŦ⧇āϏ⧇ (cache/database) āϞ⧇āĻ–āĻž āĻŦāĻž āϏ⧇āĻ­ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻĒā§‹āĻ¸ā§āϟāϟāĻŋ āϤāĻžāϰ āĻŦāĻ¨ā§āϧ⧁āĻĻ⧇āϰ āύāĻŋāωāϜ āĻĢāĻŋāĻĄā§‡ āϝ⧁āĻ•ā§āϤ (populated) āĻšā§Ÿā§‡ āϝāĻžā§ŸāĨ¤
  • āύāĻŋāωāϜ āĻĢāĻŋāĻĄ āĻŦāĻŋāĻ˛ā§āĻĄāĻŋāĻ‚: āĻŦāĻ¨ā§āϧ⧁āĻĻ⧇āϰ āĻĒā§‹āĻ¸ā§āϟāϗ⧁āϞ⧋ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻ•ā§āϰāύ⧋āϞāϜāĻŋāĻ•ā§āϝāĻžāϞ āĻ…āĻ°ā§āĻĄāĻžāϰ⧇ (reverse chronological order - āĻ…āĻ°ā§āĻĨāĻžā§Ž āύāϤ⧁āύ āĻĒā§‹āĻ¸ā§āϟ āφāϗ⧇) āĻāĻ•āĻ¤ā§āϰāĻŋāϤ (aggregating) āĻ•āϰ⧇ āύāĻŋāωāϜ āĻĢāĻŋāĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšā§ŸāĨ¤

āϚāĻŋāĻ¤ā§āϰ ā§§ (Figure 1) āĻāĻŦāĻ‚ āϚāĻŋāĻ¤ā§āϰ ⧍ (Figure 2)-āĻ āϝāĻĨāĻžāĻ•ā§āϰāĻŽā§‡ āĻĢāĻŋāĻĄ āĻĒāĻžāĻŦāϞāĻŋāĻļāĻŋāĻ‚ āĻāĻŦāĻ‚ āύāĻŋāωāϜ āĻĢāĻŋāĻĄ āĻŦāĻŋāĻ˛ā§āĻĄāĻŋāĻ‚ āĻĢā§āϞ⧋-āĻāϰ āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āĻĄāĻŋāϜāĻžāχāύāϗ⧁āϞ⧋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤

āϚāĻŋāĻ¤ā§āϰ ā§§ (Figure 1)