معماری مونولیتیک همیشه به چند دلیل اولین انتخاب میتونه باشه: توسعه، تست، استقرار و رشد دادنش خیلی ساده است که این ویژگیها در مراحل اولیه ایده (early-stage) خیلی مفیده.

اما چطور معماری مونولیتیک میتونه تبدیل به جهنم بشه:
پیچیدگیهایی که برنامهنویس رو پیر میکنه: کد بیس اونقد بزرگ بشه که دیگه واقعا نشه یک برنامهنویس همهشو به طور کامل بفهمه. اون موقعاس که تغییرات کند و ریسکی میشه.
توسعه و استقرار کند بشه: اونقدر کدبیس بزرگ شده که، زمان توسعه و راهاندازی زیاد شده، در حدی که دیگه نسخههای جدید ماهانه بالا میان و خبری از استقرار مستمر (continuous deployment) نیست و تستهای دستی گلوگاه (bottleneck) شدن.
مشکلات رشد دادن پیش بیاد: درون یک کدبیس مونولیتیک، بین نیازهای منابع مثل CPU و RAM تداخل پیش بیاد.
اطمینان به سیستم کم بشه و مدیریت خطاها سخت بشه: یک باگ توی یک بخش میتونه کل سیستم رو مختل کنه.
قفل شدن به یک فناوری پیش میاد: اونقد کدبیس بزرگ شده که نمیشه به این سادگیها فریمورک آپدیت کرد یا از تکنولوژیهای جدید استفاده کرد.
توجه داشته باشیم که Microservicef با Service Oriented Architecture متفاوته، دیتابیسش مشترکه، پروتکل ارتباطیش متفاوته و سیستمهایی با سایز بزرگ هستن.
پیچیدگی سیستمهای توزیع شده: Network latency, eventual consistency, debugging
چالشِ تقسیمبندی سیستم: ریسک تولید سیستمهای مونولیتیکِ توزیع شده :))
سربار عملیاتی: DevOps automation (orchestration, monitoring)
پیچیدگی در تست: تست End-to-end سختتر خواهد شد