1. System Design কী (Introduction to System Design)
System Design বলতে বোঝায় — একটি বড় সফটওয়্যার সিস্টেমকে এমনভাবে পরিকল্পনা ও গঠন করা, যাতে সেটি নির্দিষ্ট কাজ ভালোভাবে, দ্রুত এবং নির্ভরযোগ্যভাবে সম্পন্ন করতে পারে।
সহজভাবে বললে, এটি হলো সফটওয়্যার সিস্টেমের নকশা বা স্থাপত্য (architecture) —
যেখানে আমরা ঠিক করি:
- 
কীভাবে সিস্টেমটি কাজ করবে,
 - 
কোন কোন অংশ থাকবে (modules/components),
 - 
সেগুলোর মধ্যে যোগাযোগ কীভাবে হবে,
 - 
এবং সিস্টেম কীভাবে স্কেল (scale), পারফর্ম (perform) ও রিলায়েবল (reliable) থাকবে।
 
🎯 উদাহরণ:
ধরা যাক তুমি একটি E-Commerce System ডিজাইন করছো (যেমন Daraz)।
তাহলে system design-এর সময় ভাবতে হবে —
- 
User কীভাবে লগইন করবে
 - 
Product ডেটা কোথায় সংরক্ষণ হবে
 - 
Payment সিস্টেম কীভাবে যুক্ত হবে
 - 
Load বাড়লে সার্ভার কীভাবে সামলাবে
 - 
ডেটা নিরাপত্তা (security) কীভাবে বজায় থাকবে
 
এই সব বিষয় পরিকল্পনা করাই হলো System Design।
🏗️ System Design-এর ধরণ (Types)
১. High-Level Design (HLD)
- 
এখানে বড় কাঠামো বা আর্কিটেকচার ঠিক করা হয়।
 - 
যেমন: কোন কোন module থাকবে (User, Product, Order, Payment), ডাটাবেস কীভাবে সংযুক্ত হবে ইত্যাদি।
 
২. Low-Level Design (LLD)
- 
এখানে প্রতিটি module-এর ভেতরের কোড স্তরে কাজের ধরণ নির্ধারণ করা হয়।
 - 
যেমন: কোন ক্লাস কী কাজ করবে, কী কী ফাংশন লাগবে ইত্যাদি।
 
⚙️ Architectural Drivers কী (Introduction to Architectural Drivers)
Architectural Drivers হলো সেই গুরুত্বপূর্ণ বিষয়গুলো, যেগুলো একটি সফটওয়্যারের আর্কিটেকচার (স্থাপত্য) গঠন করার সময় সরাসরি প্রভাব ফেলে।
অর্থাৎ — এই বিষয়গুলোই ঠিক করে দেয় সিস্টেমের গঠন কেমন হবে।
🔑 প্রধান Architectural Drivers:
১. Functional Requirements (কার্যকরী চাহিদা)
এগুলো হলো সিস্টেমের মূল কাজ —
যেমন,
- 
একজন ব্যবহারকারী লগইন করতে পারবে
 - 
প্রোডাক্ট সার্চ করা যাবে
 - 
অর্ডার প্লেস করা যাবে
 
👉 এই কাজগুলো সিস্টেমের মূল উদ্দেশ্য নির্ধারণ করে।
২. Quality Attributes (সিস্টেমের গুণগত বৈশিষ্ট্য)
এগুলো হলো সিস্টেমের “কেমনভাবে” কাজ করবে সেই বিষয়।
যেমন —
- 
Performance: সিস্টেম কত দ্রুত কাজ করবে
 - 
Scalability: ব্যবহারকারী বাড়লে সিস্টেম টিকবে কিনা
 - 
Availability: সার্ভার সবসময় চালু থাকবে কিনা
 - 
Security: ডেটা নিরাপদ কিনা
 - 
Maintainability: ভবিষ্যতে পরিবর্তন করা কত সহজ
 
👉 এইগুলোই সবচেয়ে বেশি আর্কিটেকচারকে প্রভাবিত করে।
৩. Constraints (সীমাবদ্ধতা)
এগুলো হলো সেই নিয়ম বা সীমা যেগুলো তোমাকে মানতে হবে।
যেমন —
- 
শুধু Azure Cloud ব্যবহার করা যাবে
 - 
নির্দিষ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ (যেমন C# বা Java) ব্যবহার করতে হবে
 - 
বাজেট বা সময় সীমিত
 
👉 Constraints মানতে গিয়ে অনেক সময় আর্কিটেকচারে পরিবর্তন আনতে হয়।
৪. Business Goals (ব্যবসায়িক লক্ষ্য)
এগুলো হলো সেই কারণ, যার জন্য সিস্টেম তৈরি করা হচ্ছে।
যেমন —
- 
বিক্রয় বাড়ানো
 - 
ব্যবহারকারী ধরে রাখা
 - 
গ্রাহক সন্তুষ্টি বৃদ্ধি
 
👉 ব্যবসার লক্ষ্য অনুযায়ী প্রযুক্তিগত সিদ্ধান্ত নিতে হয়।
🧠 সহজ উদাহরণ:
তুমি যদি একটা Online Exam System বানাও,
তাহলে Architectural Drivers হবে —
| Driver Type | Example | 
|---|---|
| Functional | ব্যবহারকারী লগইন করতে পারবে, প্রশ্ন দেখতে পারবে, উত্তর দিতে পারবে | 
| Quality Attribute | একসাথে ১০,০০০ ছাত্র পরীক্ষা দিতে পারবে (Scalability) | 
| Constraint | শুধুমাত্র .NET এবং SQL Server ব্যবহার করতে হবে | 
| Business Goal | একটি দ্রুত ও নির্ভরযোগ্য অনলাইন পরীক্ষা সিস্টেম তৈরি করা | 
🔍 সংক্ষেপে বললে
| বিষয় | অর্থ | 
|---|---|
| System Design | সফটওয়্যার সিস্টেমের কাঠামো, কম্পোনেন্ট ও যোগাযোগের পরিকল্পনা | 
| Architectural Drivers | সেই মূল বিষয়গুলো যা সিস্টেমের আর্কিটেকচারের ওপর সরাসরি প্রভাব ফেলে — যেমন Functional চাহিদা, Quality Attributes, Constraints, ও Business Goals |