Back-of-the-Envelope Estimation
খামের পেছনের হিসাব — box আঁকার আগে দুই লাইনের ভাগ-গুণে system-এর আকার বোঝা: data-size-এর মই, QPS-এর recipe, storage সময়ের সাথে কীভাবে বাড়ে, আর cache size করার 80/20 rule।
- •back-of-the-envelope estimation কী, আর design আঁকার আগে কেন এটা system-এর আকার ঠিক করে দেয় — বলতে পারা।
- •data-size-এর মই (KB → MB → GB → TB → PB) সাবলীলভাবে পড়া; একটা tweet/photo/video মোটামুটি কত — জানা।
- •aggressive rounding: 86,400 ≈ 10⁵ ধরে মাথায় এক লাইনে QPS কষা — exact নয়, order of magnitude।
- •QPS recipe: DAU × actions ÷ 86,400 → average; × peak factor → peak; read/write ratio দিয়ে আলাদা করা।
- •storage = write QPS × payload × time × replication, আর cache size করতে 80/20 rule (hot working set)।
- •Day 1 — system design কী, latency vs throughput, ৫-ধাপি framework (estimation ছিল ২ নম্বর ধাপ)।
- •Day 2 — requirements ও scope; DAU, read/write ratio-র ধারণা।
- •স্কুলের ভাগ-গুণ আর powers of ten (10³, 10⁶) চেনা — এর বেশি কোনো math লাগবে না।
Why Estimate First
design আঁকার আগে system-এর আকার জানা।
"একটা Twitter design করো" শুনে box আঁকা শুরু করার আগে একটা প্রশ্ন: system-টা আসলে কত বড়? এক machine-এ হবে, নাকি অনেক machine + cache + sharding লাগবে? উত্তরটা দেয় back-of-the-envelope estimation — দুই লাইনের ভাগ-গুণ।
ভয়ের কিছু নেই — এ কোনো কঠিন math নয়। আসল কৌশল হলো round aggressively: 86,400-কে 10⁵ ধরো, তাহলে মাথায় এক লাইনেই QPS বেরিয়ে আসে। estimation নিখুঁততার খেলা নয়, order of magnitude-এর খেলা।
আজ পাঁচটা জিনিস হাতে-কলমে: data-size-এর মই, rounding-এর অভ্যাস, QPS-এর recipe, storage সময়ের সাথে কীভাবে বাড়ে, আর cache size করার 80/20 rule।
estimationbefore you draw a single box
design আঁকার আগে দুই লাইনের ভাগ-গুণে system-এর আকার বের করা — এক machine-এ হবে, নাকি অনেক machine + cache + sharding লাগবে। এই order-of-magnitude-টাই পরের সব সিদ্ধান্ত ঠিক করে। under-estimate করলে outage, over-estimate করলে সারা বছরের সার্ভার-বিল গচ্চা।
৫০০ জনের বিয়ের রান্নায় বাবুর্চি আগে চাল-মাংস ওজন করে নেয় — হিসাব না করলে হয় কম পড়বে (অতিথি না খেয়ে ফিরবে), নয় দ্বিগুণ কিনে টাকা নষ্ট।
Size Language and Rounding
powers of two, আর aggressive rounding-এর অভ্যাস।
powers of twoKB · MB · GB · TB · PB
data-size-এর মই: প্রতি ধাপে প্রায় ×১০০০ — KB (~একটা tweet), MB (~একটা photo), GB (~১০০০ photo / সিনেমার অংশ), TB (~বড় database), PB (বিশাল)। এই sizes মাথায় থাকলে storage estimate চটজলদি হয়। (binary-তে ১০২৪, কিন্তু estimation-এ ~১০০০ ধরো।)
বাজারে গ্রাম-কিলো-মণ না জানলে যেমন হিসাব হয় না, byte → KB → MB → GB না জানলে storage estimate হয় না। আগে size-এর ভাষা শেখো।
order of magnituderound aggressively
মাথায় নিখুঁত গুণ (86,400 × 5,000,000) কষতে যেও না — আগে round করো: 86,400 ≈ 10⁵, এক বছরের সেকেন্ড 31,536,000 ≈ 3×10⁷। তারপর powers of ten মেলাও। estimation নিখুঁততার নয়, order of magnitude-এর খেলা।
"১৫০ kg চাল নাকি ১৪৭.৩ kg" — বিয়ের বাজারে কেউ জিজ্ঞেস করে না। কাছাকাছিটাই কাজ চালায়, আর মাথায় এক লাইনে কষা যায়।
The QPS Recipe
DAU → average → peak → read/write split।
QPSqueries per second
average QPS = DAU × actions/user ÷ 86,400। এটাই estimation-এর প্রথম সংখ্যা। মনে রাখার কৌশল: 86,400-কে 10⁵ ধরো, বাকিটা powers of ten-এ ভাঙো — calculator লাগবে না।
৫M DAU, জনপ্রতি ১০ action ⇒ 5×10⁷ ÷ 10⁵ = ~500 QPS — এক লাইনে। এই একটা সংখ্যা দিয়েই design-এর আকার আঁচ করা যায়।
peak factorread-to-write ratio
দুটো সংখ্যা পুরো design ঘোরায়। peak QPS = average × peak factor (সাধারণত 2–5×, sale/ঈদে ১০–২০×) — সবসময় peak ধরে provision করো, average ধরে নয়। আর read/write ratio: read-heavy → cache + read replica + CDN; write-heavy → queue/partition।
Daraz ১১.১১-তে স্বাভাবিকের ১০×+ traffic, আর ভীষণ read-heavy (দেখে অনেক, কেনে কম)। peak + read-heavy — এই দুটো জানলেই বোঝা যায় cache আর extra server লাগবে।
Storage Grows Over Time
payload × time × replication।
replication factorstorage over time
storage = write QPS × payload size × সময় × replication factor (সাধারণত ৩ কপি durability-র জন্য)। per-second সংখ্যাটা ছোট দেখায়, কিন্তু ১ বা ৫ বছরে গুণ করলে এটাই এক disk ছাড়িয়ে storage cluster বা sharding-এ ঠেলে দেয়।
দিনে ১ টাকা জমানো তুচ্ছ, কিন্তু ৫ বছরে ~১৮০০ টাকা। storage-ও তেমন — সময় আর ৩ কপি দিয়ে গুণ করলেই আসল আকার বেরোয়।
Cache Size — the 80/20 Rule
hot working set, আর কখন estimate skip করবে।
the 80/20 ruleworking set
পুরো data cache করার দরকার নেই: ২০% hot data সাধারণত ৮০% read সামলায় (Pareto)। শুধু সেই hot working set-টা RAM-এ cache করলে অল্প খরচে বড় লাভ — পুরোটা cache করা টাকা ও RAM-এর অপচয়।
দোকানের সামনের তাকে শুধু best-selling জিনিস রাখা হয়; সব stock সামনে রাখার দরকার নেই। যেগুলো বেশি বিকোয় (hot) সেগুলোই হাতের কাছে।
when to skipestimation as a tool
সব সময় estimate করতেই হবে না। সংখ্যাটা যদি কোনো সিদ্ধান্ত না বদলায় (এক node-এ হবে, নাকি shard লাগবে — উত্তর যাই হোক একই), তাহলে estimation শুধু সময় নষ্ট। যেখানে সংখ্যা design বদলায়, ঠিক সেখানেই কষো।
১০ জনের রান্নায় কেউ গ্রাম ধরে ওজন করে না — চোখের আন্দাজই যথেষ্ট। হিসাব তখনই দরকার, যখন সংখ্যাটা সিদ্ধান্ত পাল্টে দেয়।
Check Your Understanding
ভুল করলেও সমস্যা নেই — প্রতিটার ব্যাখ্যা আছে।
Estimation মানে নিখুঁত, সঠিক সংখ্যা বের করা।
মাথায় বড় গুণ (86,400 × 5,000,000) কষতে হবে।
Average QPS দিয়ে provision করলেই হবে।
Storage মানে শুধু payload × QPS।
ভালো performance-এর জন্য পুরো dataset cache করতে হবে।
Read আর write QPS এক, আলাদা করার দরকার নেই।
Interview-এ সবসময় estimation করতেই হবে।
৫ মিলিয়ন DAU, জনপ্রতি দিনে ১০ action — average QPS মোটামুটি কত (round করে)?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Estimation-এ "round aggressively" কেন?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
average QPS 500, peak factor 3× — কোন সংখ্যায় provision করবে?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Storage estimate-এ beginners কোন দুটো জিনিস ভুলে যায়?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
powers of two-র মই কীভাবে ওঠে, আর 1 GB ≈ কত MB?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
80/20 rule cache-এ কী বলে?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
read-to-write ratio estimate-এ কেন জরুরি?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
কখন estimation skip করা ঠিক?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
চারটে idea মনে রাখো — design আঁকার আগে দুই লাইনের ÷ আর × কষো, এটাই বলে এক machine না অনেক machine লাগবে; estimation order of magnitude-এর খেলা, precision-এর নয় — 86,400 ≈ 10⁵ ধরে round করে এক লাইনে কষো; সবসময় peak QPS (average × peak factor) ধরে provision করো, average ধরলে ভেঙে পড়বে; আর storage-এর আসল বিস্ফোরণ লুকিয়ে থাকে time horizon × replication factor-এ — per-second ছোট সংখ্যাই বছর আর ৩ কপি দিয়ে গুণ হয়ে sharding-forcing হয়ে যায়।
শব্দার্থ — পরে ফিরে দেখার জন্য
একনজরে সব key term। কোনো শব্দ ভুলে গেলে এখানে এসে খুঁজে নিও।
- 80/20 rule (Pareto)
- ~২০% hot data ~৮০% read সামলায়; cache size করার ভিত্তি।
- Average QPS
- DAU × actions/user ÷ 86,400 — গড় load।
- Back-of-the-envelope estimation
- design আঁকার আগে দুই লাইনের rough ভাগ-গুণে system-এর আকার বের করা।
- Bandwidth
- সময়ের একক প্রতি কত data যায় — QPS × response size দিয়ে আন্দাজ।
- Order of magnitude
- ১০-এর কোন ঘরে সংখ্যাটা (10², 10³…); estimation-এ exact digit নয়, এটাই আসল।
- Payload size
- একটা request/record-এর data আকার (bytes/KB)।
- Peak factor
- peak কত গুণ average (সাধারণত 2–5×, sale/ঈদে 10–20×)।
- Peak QPS
- average × peak factor — ব্যস্ততম মুহূর্তের load; এটা দিয়েই provision করো।
- Powers of two
- data-size-এর মই; প্রতি ধাপে ~×১০০০: KB → MB → GB → TB → PB।
- QPS / RPS
- Queries / Requests Per Second — সেকেন্ডে কতগুলো request।
- Read-to-write ratio
- কত read বনাম কত write; read-heavy → cache/replica, write-heavy → queue/partition।
- Replication factor
- data-র কত কপি রাখা হয় (durability-র জন্য সাধারণত ৩)।
- Round aggressively
- কষার আগে মোটাভাবে round করা (86,400 ≈ 10⁵) — মাথায় এক লাইনে কষতে।
- Seconds in a day
- 24 × 3600 = 86,400 ≈ 10⁵ — QPS কষার মূল ভাজক।
- Working set
- data-র যে অংশ আসলে নিয়মিত ব্যবহার হয় (hot data)।
Sources consulted to author this lesson. Citation style is informal — follow the links if you want to dig deeper.
- The System Design Primer — Back-of-the-envelope calculations & Appendix — Donne Martin (2023)
- Back-of-the-Envelope Estimation (System Design Interview, Ch. 2) — Alex Xu (ByteByteGo) (2023)
- System Design Delivery — when to estimate — Hello Interview (2024)
- Numbers Every Programmer Should Know (interactive) — Jeff Dean / Peter Norvig; Colin Scott (2020)
দুই বাক্যে নিজের ভাষায় লেখো
একটা photo-sharing app: 2M DAU, জনপ্রতি দিনে ~5টা upload, প্রতি photo ~1MB। দু'বাক্যে — (১) round করে peak write QPS-এর একটা আন্দাজ দাও, আর (২) ৫ বছরে storage মোটামুটি কোন order-of-magnitude-এ যাবে (replication ×3 ধরে)।