فرض کن میخواهی یک فروشگاه آنلاین بسازی. قبل از اینکه کد بزنی، باید چند تصمیم بزرگ بگیری: عکس کالاها کجا ذخیره شوند؟ اگر یک سرور خوابید، خرید مردم قطع میشود؟ فردا که بهجای صد نفر، صد هزار نفر آمدند، سیستم میترکد یا تحمل میکند؟
طراحی سیستم یعنی همین تصمیمها. تو قطعههای یک نرمافزار را انتخاب میکنی — Server، دیتابیس، Queue، Cache — و معلوم میکنی این قطعهها چطور با هم حرف بزنند. هدف ساده است: نیاز محصول برآورده شود، بدون اینکه پول و پیچیدگی الکی خرج کنیم.
هیچ جواب «همیشه درست» وجود ندارد. هر انتخابی یک چیز به تو میدهد و یک چیز میگیرد. به این معامله میگویند Trade-off. مثال: همه چیز را روی یک سرور بگذاری، ساختن خیلی ساده است؛ ولی همان یک سرور که خراب شود، کل سایت میخوابد. هنر تو این است که این معامله را با چشم باز انجام بدهی، نه اینکه معماری شرکتهای بزرگ را چشمبسته کپی کنی.

دو سطح طراحی
وقتی میگوییم «طراحی»، معمولاً دو طبقه جدا را قاطی میکنیم. اگر قاطیشان کنی، یا در جزئیات کد غرق میشوی، یا یک نقشه زیبا میکشی که نمیشود پیادهاش کرد.
این دوره درباره HLD است: تصویر بزرگ. اول جای ساختمانها را روی نقشه شهر مشخص میکنیم؛ بعداً میشود رفت سراغ چیدمان داخل هر اتاق.
سه ستون هر سیستم خوب
قبل از اینکه ابزار انتخاب کنی، سه سؤال از خودت بپرس. سیستم خوب معمولاً در هر سه، نمره قبولی میگیرد. اگر یکی را کامل فدا کنی، دیر یا زود دردش را میبینی.
در مصاحبه و سر کار، سؤال چیست؟
سؤال هیچوقت «بهترین معماری دنیا چیست؟» نیست. سؤال این است: با این نیازمندی، این بودجه و این تیم، کدام Trade-off را میتوانی دفاع کنی؟ گاهی سرعت را به دقت داده ترجیح میدهی، گاهی هزینه کم را به Latency خیلی پایین، گاهی سادگی را به انعطاف زیاد.
به زبان ساده
طراحی سیستم یعنی قبل از ساختن، با زبان آدمیزاد بفهمیم به چه قطعههایی نیاز داریم و هر انتخاب چه قیمتی دارد.
مثال واقعی
مثل رستوران: برای بیست مشتری یک آشپزخانه کوچک کافی است. برای بیست هزار سفارش در روز باید صف، انبار و چند آشپزخانه داشته باشی — و هر کدام از اینها یک Trade-off است.