Propose high-level design
একটি সিস্টেম ডিজাইন ইন্টারভিউয়ের ফ্রেমওয়ার্ক (A Framework For System Design Interviews)
আপনি হয়তো আপনার স্বপ্নের কোম্পানিতে একটি বহুল কাঙ্ক্ষিত অন-সাইট ইন্টারভিউয়ের সুযোগ পেয়েছেন। হায়ারিং কোঅর্ডিনেটর আপনাকে সেই দিনের শিডিউল পাঠালেন। লিস্টের দিকে তাকিয়ে আপনার বেশ ভালোই লাগছিল, যতক্ষণ না আপনার চোখ “সিস্টেম ডিজাইন ইন্টারভিউ” সেশনটির ওপর পড়ল।
সিস্টেম ডিজাইন ইন্টারভিউগুলো প্রায়শই বেশ ভীতিজনক (intimidating) হয়। প্রশ্নগুলো অনেক সময় এমন অস্পষ্ট হতে পারে যেমন, “একটি সুপরিচিত প্রোডাক্ট X ডিজাইন করুন”। প্রশ্নগুলো দ্ব্যর্থবোধক (ambiguous) এবং অযৌক্তিকভাবে ব্যাপক (broad) মনে হয়। আপনার এই ক্লান্তি বা ভয় পাওয়াটা খুব স্বাভাবিক। সর্বোপরি, যে জনপ্রিয় প্রোডাক্টটি তৈরি করতে শত শত বা হাজার হাজার ইঞ্জিনিয়ারের প্রয়োজন হয়েছে, সেটি একজন মানুষ কীভাবে মাত্র এক ঘণ্টায় ডিজাইন করতে পারে?
ভালো খবর হলো, কেউ আপনার কাছে এটি আশাও করে না। বাস্তব জীবনের সিস্টেম ডিজাইন অত্যন্ত জটিল। উদাহরণস্বরূপ, গুগল সার্চকে বাইরে থেকে খুব সহজ মনে হলেও, এই সরলতার পেছনে যে পরিমাণ প্রযুক্তি কাজ করে তা সত্যিই বিস্ময়কর। যদি কেউ আপনার কাছ থেকে এক ঘণ্টায় একটি রিয়েল-ওয়ার্ল্ড সিস্টেম ডিজাইন করার আশা না-ই করে, তবে এই সিস্টেম ডিজাইন ইন্টারভিউয়ের আসল সুবিধা কী?
সিস্টেম ডিজাইন ইন্টারভিউ মূলত বাস্তব জীবনের সমস্যা সমাধানের (real-life problem solving) একটি সিমুলেশন, যেখানে দুজন সহকর্মী একটি অস্পষ্ট সমস্যা নিয়ে একসাথে কাজ করেন এবং লক্ষ্য পূরণের জন্য একটি সমাধান বের করেন। সমস্যাটি ওপেন-এন্ডেড (open-ended) হয় এবং এর কোনো নিখুঁত উত্তর নেই। চূড়ান্ত ডিজাইনের চেয়ে আপনি ডিজাইন প্রক্রিয়ায় (design process) কীভাবে কাজ করছেন সেটি বেশি গুরুত্বপূর্ণ। এটি আপনাকে আপনার ডিজাইন স্কিল প্রদর্শন করতে, আপনার নেওয়া সিদ্ধান্তগুলোর পক্ষে যুক্তি দিতে এবং গঠনমূলকভাবে ফিডব্যাকের (feedback) উত্তর দিতে সাহায্য করে।
চলুন এবার উল্টো দিক থেকে চিন্তা করি। ইন্টারভিউয়ার যখন আপনার সাথে দেখা করতে কনফারেন্স রুমে ঢোকেন, তখন তার মাথায় কী ঘোরে? তার প্রধান লক্ষ্য থাকে আপনার দক্ষতাগুলো সঠিকভাবে মূল্যায়ন করা। তিনি কখনোই চান না যে সেশনটি খারাপ হোক এবং পর্যাপ্ত সিগন্যালের (signals) অভাবে একটি অমীমাংসিত মূল্যায়ন (inconclusive evaluation) করতে হোক। তাহলে একজন ইন্টারভিউয়ার একটি সিস্টেম ডিজাইন ইন্টারভিউতে ঠিক কী খোঁজেন?
অনেকেই মনে করেন যে সিস্টেম ডিজাইন ইন্টারভিউ শুধুমাত্র একজন ব্যক্তির টেকনিক্যাল ডিজাইন স্কিল যাচাই করার জন্য। আসলে এটি তার চেয়েও অনেক বেশি কিছু। একটি কার্যকর সিস্টেম ডিজাইন ইন্টারভিউ একজন প্রার্থীর অন্যদের সাথে কাজ করার (collaboration), চাপের মধ্যে কাজ করার (work under pressure) এবং অস্পষ্টতাকে (ambiguity) গঠনমূলকভাবে সমাধান করার ক্ষমতা সম্পর্কে জোরালো ধারণা বা সিগন্যাল দেয়। সঠিক ও ভালো প্রশ্ন করার ক্ষমতাও একটি অত্যন্ত প্রয়োজনীয় দক্ষতা, এবং অনেক ইন্টারভিউয়ার বিশেষভাবে এই দক্ষতাটিই খুঁজে থাকেন।
একজন ভালো ইন্টারভিউয়ার ‘রেড ফ্ল্যাগ’ (red flags) বা নেতিবাচক দিকগুলোও খেয়াল করেন। ওভার-ইঞ্জিনিয়ারিং (Over-engineering) অনেক ইঞ্জিনিয়ারের জন্য একটি বাস্তব ব্যাধি, কারণ তারা অনেক সময় ট্রেডঅফ (tradeoffs) উপেক্ষা করে নিখুঁত ডিজাইনের (design purity) পেছনে ছোটেন। তারা প্রায়শই ওভার-ইঞ্জিনিয়ার্ড সিস্টেমগুলোর ক্রমবর্ধমান খরচ সম্পর্কে অসচেতন থাকেন এবং এই অজ্ঞতার কারণে অনেক কোম্পানিকে চড়া মূল্য দিতে হয়। আপনি নিশ্চয়ই ইন্টারভিউ বোর্ডে এই প্রবণতাটি দেখাতে চাইবেন না। অন্যান্য রেড ফ্ল্যাগের মধ্যে রয়েছে সংকীর্ণ মানসিকতা (narrow mindedness), একগুঁয়েমি (stubbornness) ইত্যাদি।
এই অধ্যায়ে, আমরা সিস্টেম ডিজাইন ইন্টারভিউয়ের সমস্যাগুলো সমাধানের জন্য কিছু দরকারী টিপস নিয়ে আলোচনা করব এবং একটি সহজ ও কার্যকর ফ্রেমওয়ার্কের সাথে পরিচয় করিয়ে দেব।
একটি কার্যকর সিস্টেম ডিজাইন ইন্টারভিউয়ের জন্য ৪-ধাপের প্রক্রিয়া (A 4-step process for effective system design interview)
প্রতিটি সিস্টেম ডিজাইন ইন্টারভিউ আলাদা হয়। একটি ভালো সিস্টেম ডিজাইন ইন্টারভিউ ওপেন-এন্ডেড (open-ended) হয় এবং এর কোনো ‘ওয়ান-সাইজ-ফিটস-অল’ (সবকিছুর জন্য একটিই নির্দিষ্ট সমাধান) উত্তর নেই। তবে, প্রতিটি সিস্টেম ডিজাইন ইন্টারভিউতেই কিছু নির্দিষ্ট ধাপ এবং সাধারণ বিষয় (common ground) কভার করতে হয়।
ধাপ ১ - সমস্যাটি বোঝা এবং ডিজাইনের পরিধি নির্ধারণ করা (Understand the problem and establish design scope)
“বাঘ কেন গর্জন করেছিল?” ক্লাসের পেছন থেকে একটি হাত উঠে গেল। “হ্যাঁ জিমি, বলো?” শিক্ষক বললেন। “কারণ সে ক্ষুধার্ত ছিল।” “খুব ভালো জিমি।”
ছোটবেলা থেকেই জিমি ক্লাসে সবসময় সবার আগে প্রশ্নের উত্তর দিত। শিক্ষক যখনই কোনো প্রশ্ন করেন, ক্লাসে সবসময় এমন একটি বাচ্চা থাকে যে উত্তর জানুক বা না জানুক, সবার আগে উত্তর দেওয়ার চেষ্টা করে। জিমি হলো ঠিক তেমনই।
জিমি একজন মেধাবী ছাত্র। সব প্রশ্নের উত্তর দ্রুত দিতে পারায় সে খুব গর্ববোধ করে। পরীক্ষায় সাধারণত সে-ই সবার আগে লেখা শেষ করে। যেকোনো একাডেমিক প্রতিযোগিতায় শিক্ষকদের প্রথম পছন্দ সে।
জিমির মতো হবেন না (DON’T be like Jimmy)।
সিস্টেম ডিজাইন ইন্টারভিউতে কোনো চিন্তা না করে দ্রুত উত্তর দিলে আপনি কোনো বোনাস পয়েন্ট পাবেন না। রিকোয়ারমেন্টগুলো (requirements) বা মূল চাহিদাগুলো ভালোভাবে না বুঝে উত্তর দেওয়াটা একটি বড় রেড ফ্ল্যাগ (red flag), কারণ এই ইন্টারভিউ কোনো কুইজ প্রতিযোগিতা নয়। এখানে কোনো নির্দিষ্ট ‘সঠিক উত্তর’ বলে কিছু নেই।
তাই, শুরুতেই কোনো সমাধান দেওয়ার জন্য লাফিয়ে পড়বেন না। একটু সময় নিন। গভীরভাবে চিন্তা করুন এবং রিকোয়ারমেন্ট ও অনুমানগুলো (assumptions) পরিষ্কারভাবে বোঝার জন্য প্রশ্ন করুন। এটি অত্যন্ত গুরুত্বপূর্ণ।
একজন ইঞ্জিনিয়ার হিসেবে, আমরা কঠিন সমস্যা সমাধান করতে এবং সরাসরি চূড়ান্ত ডিজাইনে ঝাঁপিয়ে পড়তে পছন্দ করি; কিন্তু এই অ্যাপ্রোচটির কারণে আপনি ভুল একটি সিস্টেম ডিজাইন করে ফেলতে পারেন। একজন ইঞ্জিনিয়ারের সবচেয়ে গুরুত্বপূর্ণ দক্ষতাগুলোর মধ্যে একটি হলো—সঠিক প্রশ্ন করা, সঠিক অনুমান করা এবং একটি সিস্টেম তৈরি করার জন্য প্রয়োজনীয় সব তথ্য সংগ্রহ করা। তাই প্রশ্ন করতে ভয় পাবেন গঠনমূলকভাবে সমাধান করার জন্য।
আপনি যখন কোনো প্রশ্ন করেন, তখন ইন্টারভিউয়ার হয়তো সরাসরি আপনার প্রশ্নের উত্তর দেবেন অথবা আপনাকে নিজের মতো করে ধরে নিতে বা অনুমান করতে (make assumptions) বলবেন। যদি দ্বিতীয়টি ঘটে, তবে আপনার অনুমানগুলো হোয়াইটবোর্ড বা কাগজে লিখে রাখুন। পরে আপনার এগুলো কাজে লাগতে পারে।
কী ধরনের প্রশ্ন করবেন? একদম সঠিক রিকোয়ারমেন্ট বোঝার জন্য প্রশ্ন করুন। শুরু করার সুবিধার্থে নিচে কিছু প্রশ্নের একটি তালিকা দেওয়া হলো:
- আমরা নির্দিষ্ট করে কোন কোন ফিচার তৈরি করতে যাচ্ছি?
- প্রোডাক্টটির কতজন ব্যবহারকারী আছেন?
- কোম্পানি কত দ্রুত স্কেল আপ (scale up) বা বড় হওয়ার আশা করছে? আগামী ৩ মাস, ৬ মাস এবং ১ বছরে আনুমানিক স্কেল বা আকার কেমন হতে পারে?
- কোম্পানির টেকনোলজি স্ট্যাক (technology stack) কী? ডিজাইনটিকে সহজ করার জন্য আপনি বর্তমানের কোন সার্ভিসগুলো ব্যবহার করতে পারেন?
উদাহরণ (Example)
যদি আপনাকে একটি নিউজ ফিড সিস্টেম (news feed system) ডিজাইন করতে বলা হয়, তবে আপনি এমন সব প্রশ্ন করতে চাইবেন যেগুলো আপনাকে রিকোয়ারমেন্ট পরিষ্কারভাবে বুঝতে সাহায্য করবে। আপনার এবং ইন্টারভিউয়ারের মধ্যকার কথোপকথনটি হয়তো এমন হতে পারে:
প্রার্থী: এটি কি একটি মোবাইল অ্যাপ? নাকি ওয়েব অ্যাপ? নাকি দুটোই? ইন্টারভিউয়ার: দুটোই।
প্রার্থী: এই প্রোডাক্টের সবচেয়ে গুরুত্বপূর্ণ ফিচারগুলো কী কী? ইন্টারভিউয়ার: পোস্ট করার সুবিধা এবং বন্ধুদের নিউজ ফিড দেখার সুবিধা।
প্রার্থী: নিউজ ফিড কি রিভার্স ক্রনোলজিক্যাল অর্ডারে (reverse chronological order - অর্থাৎ নতুন পোস্ট আগে) সাজানো থাকবে নাকি অন্য কোনো নির্দিষ্ট নিয়মে (particular order)? নির্দিষ্ট নিয়ম বলতে বোঝায় প্রতিটি পোস্টকে আলাদা গুরুত্ব দেওয়া। উদাহরণস্বরূপ, কোনো গ্রুপ থেকে আসা পোস্টের চেয়ে আপনার কাছের বন্ধুদের পোস্ট বেশি গুরুত্বপূর্ণ। ইন্টারভিউয়ার: বিষয়টিকে সহজ রাখার জন্য, চলুন আমরা ধরে নিই যে ফিডটি রিভার্স ক্রনোলজিক্যাল অর্ডারে সাজানো থাকবে।
প্রার্থী: একজন ব্যবহারকারীর কতজন বন্ধু থাকতে পারে? ইন্টারভিউয়ার: ৫০০০।
প্রার্থী: ট্রাফিক ভলিউম (traffic volume) বা ডেটা আদান-প্রদানের পরিমাণ কেমন হবে? ইন্টারভিউয়ার: প্রতিদিন ১০ মিলিয়ন (১ কোটি) সক্রিয় ব্যবহারকারী (DAU)।
প্রার্থী: ফিডে কি ছবি, ভিডিও নাকি শুধুই টেক্সট থাকতে পারে? ইন্টারভিউয়ার: এতে ছবি এবং ভিডিও—উভয় ধরনের মিডিয়া ফাইলই থাকতে পারে।
ওপরে কিছু নমুনা প্রশ্ন দেওয়া হলো, যা আপনি আপনার ইন্টারভিউয়ারকে জিজ্ঞাসা করতে পারেন। রিকোয়ারমেন্টগুলো বোঝা এবং যেকোনো অস্পষ্টতা (ambiguities) দূর করা অত্যন্ত গুরুত্বপূর্ণ।