āϧāĻžāĻĒ ā§¨ - āĻšāĻžāĻ-āϞā§āĻā§āϞ āĻĄāĻŋāĻāĻžāĻāύ āĻĒā§āϰāϏā§āϤāĻžāĻŦ āĻāϰāĻž āĻāĻŦāĻ āϏāĻŽā§āĻŽāϤāĻŋ (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)