Senior পদের interview-তে একটা প্রশ্ন প্রায় নিশ্চিত: 'একটা URL shortener বানান তো।' এখানে কেউ কোড চায় না - চায় আপনার ভাবনার গঠনটা। আপনি requirement জিজ্ঞেস করেন কিনা, অংশগুলো ভাগ করতে পারেন কিনা, আর প্রতিটা সিদ্ধান্তের দাম (tradeoff) বলতে পারেন কিনা। ভালো খবর: এই কোর্সে শেখা প্রায় প্রতিটা ধারণাই এখানে কাজে লাগে।
যেকোনো design-এর ছক - চার ধাপ
- Requirement পরিষ্কার করুন - কত user, পড়া বেশি না লেখা বেশি, কী কী feature অবশ্যই লাগবে। প্রশ্ন করা দুর্বলতা নয়, পেশাদারিত্ব।
- অংশগুলো ভাগ করুন - client, API server, database, cache, queue - কোনটা কীসের দায়িত্বে।
- Data-র সিদ্ধান্ত - SQL না NoSQL, কোথায় index, কোন অংশে cache।
- Tradeoff বলুন - কেন এই পছন্দ, তার বদলে কী ছাড় দিলেন। নিখুঁত উত্তর নেই, সচেতন সিদ্ধান্তই উত্তর।
উদাহরণ - URL shortener
লিখতে হয় কম, পড়তে (redirect) হয় অনেক বেশি - তাই পড়ার পথটা দ্রুত রাখাই মূল কাজ। ছোট code বানানো: লম্বা URL-এর id-কে base62-তে বদলে ছোট করা। জনপ্রিয় link-গুলো Redis cache-এ - বেশিরভাগ redirect database ছোঁবেই না। Database-এ শুধু code ও আসল URL-এর জোড়া - গঠন সরল বলে SQL-ই যথেষ্ট। দেখুন তো - cache-এর সিদ্ধান্তটা সপ্তাহ ৩-এর, database-এরটা সপ্তাহ ২-এর। System design আলাদা জাদু নয়, জানা ধারণাগুলোর সাজানো প্রয়োগ।
বাকি দুটোও একইভাবে ভাবুন। Notification system: পাঠানোর কাজ queue-তে (সপ্তাহ ৩), কোন মাধ্যমে যাবে তার আলাদা worker, ব্যর্থ হলে retry। Rate limiter: প্রতিটা user-এর গুনতি Redis-এ, কারণ গুনতিটা দ্রুত জায়গায় না থাকলে limiter নিজেই বোঝা হয়ে যাবে। প্রতিটা design আঁকতে ২০-২৫ মিনিট নিন - বাক্স আর তীরচিহ্নই যথেষ্ট, সুন্দর ছবি দরকার নেই।
সবাই যে ভুলটা করে
প্রশ্ন শুনেই আঁকতে শুরু করা - requirement না জিজ্ঞেস করে। আরেকটা ভুল: শুধু সুখের পথটা (সব ঠিকঠাক চললে) আঁকা। ভালো design-এ ব্যর্থতার কথাও থাকে - server পড়ে গেলে কী হবে, database ধীর হলে কী হবে।
আজকের Practice
তিনটা design-ই কাগজে আঁকুন - URL shortener, notification system, rate limiter। প্রতিটার নিচে দুটো tradeoff এক লাইনে করে লিখুন। আঁকা শেষ হলে যেকোনো একটা মুখে বুঝিয়ে বলুন, যেন সামনে interviewer বসে আছে।
Interview-এ কীভাবে বলবেন
নিজেকে যাচাই করুন: 'System design-এ আমি প্রথমে requirement আর অনুপাত (পড়া বনাম লেখা) পরিষ্কার করি, তারপর অংশ ভাগ করি, data আর cache-এর সিদ্ধান্ত নিই, আর প্রতিটা পছন্দের tradeoff বলি। যেমন URL shortener-এ পড়া বেশি বলে redirect-এর পথে Redis cache রেখেছি, database রেখেছি সরল SQL-এ।'