ডিজাইন ডিপ ডাইভ (Design deep dive) বা ডিজাইনের বিস্তারিত আলোচনা
এই ধাপে, আপনি এবং আপনার ইন্টারভিউয়ার এরই মধ্যে নিচের উদ্দেশ্যগুলো (objectives) অর্জন করে ফেলেছেন:
- সামগ্রিক লক্ষ্য (overall goals) এবং ফিচারের পরিধি (feature scope) সম্পর্কে একমত হয়েছেন।
- সামগ্রিক ডিজাইনের জন্য একটি হাই-লেভেল ব্লুপ্রিন্ট (high-level blueprint) তৈরি করেছেন।
- হাই-লেভেল ডিজাইনের ওপর আপনার ইন্টারভিউয়ারের ফিডব্যাক (feedback) বা মতামত পেয়েছেন।
- ইন্টারভিউয়ারের ফিডব্যাকের ওপর ভিত্তি করে ডিপ ডাইভ বা বিস্তারিত আলোচনার জন্য কোন বিষয়গুলোতে ফোকাস করতে হবে সে সম্পর্কে কিছু প্রাথমিক ধারণা (initial ideas) পেয়েছেন।
আর্কিটেকচারের (architecture) কোন কম্পোনেন্টগুলোকে (components) অগ্রাধিকার (prioritize) দিতে হবে তা নির্ধারণ করতে আপনি ইন্টারভিউয়ারের সাথে কাজ করবেন। এটি মনে রাখা জরুরি যে প্রতিটি ইন্টারভিউ আলাদা। কখনো কখনো ইন্টারভিউয়ার এমন ইঙ্গিত দিতে পারেন যে তিনি হাই-লেভেল ডিজাইনেই ফোকাস করতে পছন্দ করছেন। আবার কখনো, একজন সিনিয়র প্রার্থীর ইন্টারভিউয়ের ক্ষেত্রে, আলোচনাটি সিস্টেমের পারফরম্যান্স বৈশিষ্ট্যের (system performance characteristics) ওপর হতে পারে, যেখানে সম্ভবত বটলনেক (bottlenecks) বা পারফরম্যান্সের বাধাসমূহ এবং রিসোর্স এস্টিমেশনের (resource estimations) ওপর বেশি জোর দেওয়া হয়। বেশিরভাগ ক্ষেত্রেই, ইন্টারভিউয়ার হয়তো চাইবেন আপনি সিস্টেমের কিছু নির্দিষ্ট কম্পোনেন্টের বিস্তারিত বিষয়ে প্রবেশ করুন। ইউআরএল শর্টনারের (URL shortener) ক্ষেত্রে, কীভাবে একটি লম্বা ইউআরএল-কে ছোট করার হ্যাশ ফাংশন (hash function) ডিজাইন করতে হয় তা নিয়ে বিস্তারিত আলোচনা করাটা বেশ আকর্ষণীয়। একটি চ্যাট সিস্টেমের (chat system) ক্ষেত্রে, কীভাবে ল্যাটেন্সি (latency) কমানো যায় এবং কীভাবে অনলাইন/অফলাইন স্ট্যাটাস সাপোর্ট করা যায়—সেগুলো বেশ আকর্ষণীয় আলোচনার বিষয় হতে পারে।
সময় ব্যবস্থাপনা (Time management) অত্যন্ত গুরুত্বপূর্ণ, কারণ ছোটখাটো অপ্রয়োজনীয় বিষয়ের (minute details) গভীরে হারিয়ে যাওয়াটা খুব সহজ, যা আসলে আপনার মূল দক্ষতাগুলো প্রমাণ করে না। ইন্টারভিউয়ারকে দেখানোর জন্য আপনার কাছে সঠিক সিগন্যাল (signals) থাকতে হবে। অপ্রয়োজনীয় বিস্তারিত বিষয়ের মধ্যে না ঢোকার চেষ্টা করুন। উদাহরণস্বরূপ, একটি সিস্টেম ডিজাইন ইন্টারভিউয়ের সময় ফেসবুক ফিড র্যাঙ্কিংয়ের এজ-র্যাঙ্ক অ্যালগরিদম (EdgeRank algorithm) নিয়ে বিস্তারিত কথা বলাটা আদর্শ নয়, কারণ এতে অনেক মূল্যবান সময় নষ্ট হয় এবং এটি একটি স্কেলেবল সিস্টেম (scalable system) ডিজাইন করার ক্ষেত্রে আপনার দক্ষতা প্রমাণ করে না।
উদাহরণ (Example)
এতক্ষণে আমরা একটি নিউজ ফিড সিস্টেমের হাই-লেভেল ডিজাইন নিয়ে আলোচনা করেছি এবং ইন্টারভিউয়ার আপনার প্রস্তাবে সন্তুষ্ট হয়েছেন। এরপর, আমরা এর সবচেয়ে গুরুত্বপূর্ণ দুটি ইউজ কেস (use cases) নিয়ে বিস্তারিত অনুসন্ধান করব: ১. ফিড পাবলিশিং (Feed publishing) ২. নিউজ ফিড রিট্রিভাল (News feed retrieval - নিউজ ফিড ফিরিয়ে আনা বা লোড করা)
চিত্র ৩ (Figure 3) এবং চিত্র ৪ (Figure 4)-এ এই দুটি ইউজ কেসের বিস্তারিত ডিজাইন দেখানো হয়েছে, যা “Design A News Feed System” অধ্যায়ে আরও বিস্তারিতভাবে ব্যাখ্যা করা হবে।
চিত্র ৩ (Figure 3)