System Design Interview Tips (সফল হওয়ার গাইডলাইন)
সিস্টেম ডিজাইন ইন্টারভিউ যতটা না আপনার নলেজ টেস্ট করে, তার চেয়ে বেশি আপনার চিন্তা করার পদ্ধতি (Thought Process) এবং ডিসিশন মেকিং ক্ষমতা দেখে। নিচে ইন্টারভিউতে সফল হওয়ার পূর্ণাঙ্গ গাইডলাইন দেওয়া হলো।
১. কীভাবে সিস্টেম ডিজাইন উত্তর শুরু করবেন? (Step-by-Step Framework)
যেকোনো জটিল সমস্যা সমাধানের জন্য নিচের ৪টি ধাপ অনুসরণ করা উচিত:
ধাপ ১: রিকয়ারমেন্টস ক্লারিফিকেশন (৫-১০ মিনিট)
- প্রশ্ন পাওয়ার সাথে সাথে ডিজাইন শুরু করবেন না। প্রশ্ন করুন: "কত ইউজার?", "রিড/রাইট রেশিও কত?", "গ্লোবাল না কি লোকাল?"।
- ফাংশনাল (কী কাজ করবে) এবং নন-ফাংশনাল (এভেইল্যাবিলিটি, কনসিস্টেন্সি) রিকয়ারমেন্টস আলাদা করুন।
ধাপ ২: হাই-লেভেল ডিজাইন (১০-১৫ মিনিট)
- মূল কম্পোনেন্টগুলো আঁকুন: API Gateway, Load Balancer, Databases, Caching, Message Queues।
- ডেটা ফ্লো দেখান।
ধাপ ৩: ডিপ-ডাইভ (১৫-২০ মিনিট)
- ইন্টারভিউয়ারের পছন্দের কোনো একটি মডিউলে গভীর আলোচনা করুন (উদা: ডাটাবেস শার্ডিং বা ক্যাশিং স্ট্যাটেজি)।
ধাপ ৪: র্যাপ-আপ ও ট্রেড-অফ (৫ মিনিট)
- আপনার ডিজাইনের সীমাবদ্ধতাগুলো বলুন এবং কীভাবে আরও উন্নত করা যায় তা আলোচনা করুন।
২. সিস্টেম ডিজাইনের ১৫টি গোল্ডেন টিপস (15 Golden Tips)
১. Don't jump into code: কখনোই সরাসরি কোড বা ডাটাবেস স্কিমা নিয়ে কথা শুরু করবেন না। ২. Ask questions: ইন্টারভিউয়ারের সাথে কথা বলুন, এটি একটি কোলাবোরেটিভ সেশন। ৩. Calculate Scale: ট্রাফিক এবং মেমরি এস্টিমেশন করার চেষ্টা করুন। ৪. Think about Failure: "এই সার্ভারটি ডাউন হলে কী হবে?"—এটি সবসময় মাথায় রাখুন। ৫. Abstract first: প্রথমে বড় ছবিটা দেখুন, তারপর ছোট ডিটেইলসে যান। ৬. Use standard tools: নতুন কিছু না বানিয়ে পরিচিত টুলস (Redis, Kafka) ব্যবহার করুন। ৭. Tradeoffs matter: কোনো সলিউশনই নিখুঁত নয়, স্যাক্রিফাইসগুলো পরিষ্কার করে বলুন। ৮. Consistency vs Availability: CAP থিওরেম ব্যবহার করে আপনার সিদ্ধান্ত জাস্টিফাই করুন। ৯. Keep it simple: প্রথমেই মাইক্রোসার্ভিস বা জটিল শার্ডিংয়ে যাবেন না। ১০. Listen to hints: ইন্টারভিউয়ার যদি কোনো দিকে যাওয়ার ইঙ্গিত দেয়, তবে সেটি ফলো করুন। ১১. Explain why: শুধু টুলসের নাম বলবেন না, কেন সেটি ব্যবহার করছেন তা ব্যাখ্যা করুন। ১২. State Assumptions: কোনো তথ্য না থাকলে নিজের মতো অনুমান করে নিন এবং ইন্টারভিউয়ারকে তা জানান। ১৩. Draw clearly: যদি সম্ভব হয়, ড্রয়িং বা ডায়াগ্রাম পরিষ্কার করার চেষ্টা করুন। ১৪. Stay calm: যদি কোনো জটিল প্রশ্ন আসে, সময় নিয়ে লজিক্যাল উত্তর দিন। ১৫. Review your design: শেষ করার আগে একবার পুরো সিস্টেমটি রিকয়ারমেন্টের সাথে মিলিয়ে নিন।
৩. সঠিক ডাটাবেস কীভাবে বেছে নেবেন? (Database Selection Guide)
ডাটাবেস নির্বাচন করার সময় নিচের ফ্লোচার্টটি মনে রাখতে পারেন:
Relational (SQL - Postgres, MySQL):
- যদি ডেটা স্ট্রাকচার্ড হয় এবং ACID ট্রানজ্যাকশন প্রয়োজন হয় (উদা: ব্যাংকিং, ই-কমার্স অর্ডার)।
- যদি জটিল JOIN কুয়েরি করার প্রয়োজন পড়ে।
NoSQL - Key-Value (Redis, Memcached):
- যদি অত্যন্ত দ্রুত রিড/রাইট এবং ক্যাশিং প্রয়োজন হয়।
NoSQL - Document (MongoDB, CouchDB):
- যদি ডেটা আনস্ট্রাকচার্ড হয় এবং স্কিমা বারবার চেঞ্জ হওয়ার সম্ভাবনা থাকে।
NoSQL - Wide-Column (Cassandra, HBase):
- যদি রাইট রিকোয়েস্ট অনেক বেশি হয় এবং গ্লোবালি স্কেল করতে হয়।
NoSQL - Graph (Neo4j):
- যদি ডেটার মধ্যে অনেক বেশি সম্পর্ক বা রিলেশন থাকে (উদা: সোশ্যাল মিডিয়া ফ্রেন্ড লিস্ট)।
TimeSeries (InfluxDB):
- যদি ডেটা ক্রমান্বয়ে সময়ের ওপর ভিত্তি করে আসে (উদা: মেট্রিক্স বা লগ)।
TIP
সিস্টেম ডিজাইন ইন্টারভিউতে কোনো "একটাই সঠিক উত্তর" নেই। ইন্টারভিউয়ার মূলত দেখতে চান আপনি বিভিন্ন অপশন বিবেচনা করে একটি যৌক্তিক সিদ্ধান্তে পৌঁছাতে পারেন কি না।