پیچیدگی ضروری نشان‌دهنده‌ی دشواری ذاتیِ موجود در هر مسئله است. برای مثال، هماهنگ کردن ترافیک هوایی یک کشور، به‌خودی‌خود مسئله‌ای بسیار پیچیده است. موقعیت دقیق هر هواپیما (از جمله ارتفاع)، سرعت، جهت و مقصد آن باید در لحظه ردیابی شود تا از برخوردهای هوایی و زمینی جلوگیری شود. برنامه‌های پروازی هواپیماها باید به‌گونه‌ای مدیریت شود که ازدحام فرودگاهی پیش نیاید، آن هم در محیطی که دائماً در حال تغییر است—مثلاً یک تغییر شدید در آب‌وهوا می‌تواند کل برنامه‌ریزی را به هم بریزد.

در مقابل، پیچیدگی تصادفی از چیزهایی ناشی می‌شود که ما فکر می‌کنیم باید بسازیم تا پیچیدگی ضروری را کنترل کنیم. سیستم کنترل ترافیک هوایی فعلی مثالی از پیچیدگی تصادفی است. این سیستم برای حل پیچیدگی اصلی طراحی شده، اما خود سیستم به‌مرور پیچیدگی‌هایی ایجاد کرده است. در واقع، سیستم فعلی آن‌قدر پیچیده است که به‌روزرسانی‌اش دشوار یا حتی غیرممکن شده. در بسیاری از نقاط دنیا، هدایت ترافیک هوایی با فناوری‌هایی انجام می‌شود که بیش از ۳۰ سال عمر دارند.

بسیاری از فریم‌ورک‌ها و «راهکارهای» ارائه‌شده توسط فروشندگان، نشانه‌هایی از این بیماری پیچیدگی تصادفی‌اند. فریم‌ورک‌هایی که مشکل خاصی را حل می‌کنند، مفید هستند. اما فریم‌ورک‌های بیش‌ازحد مهندسی‌شده، پیچیدگی‌ای بیشتر از آنچه می‌خواهند حل کنند، به سیستم وارد می‌کنند.

برنامه‌نویس‌ها به‌طور طبیعی جذب پیچیدگی می‌شوند—درست مثل پروانه‌ای که به سمت نور می‌رود—و نتیجه هم اغلب یکی است. حل معما لذت‌بخش است و توسعه‌دهندگان، ذاتاً حل‌کننده‌ی مسئله‌اند.

چه کسی از هیجان حل یک مشکل پیچیده خوشش نمی‌آید؟ اما در مقیاس بزرگ نرم‌افزار، حذف پیچیدگی تصادفی در حالی که راه‌حل پیچیدگی ضروری حفظ می‌شود، چالش بزرگی است.

چگونه می‌توان این کار را انجام داد؟ فریم‌ورک‌هایی را ترجیح بده که از کدهای واقعی و کاربردی به دست آمده‌اند، نه آن‌هایی که در برج عاج طراحی شده‌اند. درصد کدی که واقعاً به حل مسئله‌ی تجاری می‌پردازد را در مقابل کدی که فقط درگیر تعامل بین اپلیکیشن و کاربر است، بررسی کن. به راهکارهای تجاری نگاه منتقدانه داشته باش؛ شاید ذاتاً بد نباشند، اما اغلب پیچیدگی تصادفی را با خود می‌آورند. مطمئن شو که راه‌حل واقعاً با مسئله هماهنگ است.

وظیفه‌ی معمار نرم‌افزار این است که مشکلات ذاتی در پیچیدگی ضروری را حل کند، بدون آن‌که پیچیدگی تصادفی ایجاد کند.

نویسنده: Neal Ford

نیل فورد یک معمار نرم‌افزار و گرداننده‌ی مفاهیم در شرکت ThoughtWorks است، یک شرکت مشاوره‌ای بین‌المللی در حوزه‌ی توسعه و ارائه‌ی نرم‌افزار. او طراح و توسعه‌دهنده‌ی اپلیکیشن‌ها، مطالب آموزشی، مقاله‌های مجله‌ای، دوره‌های آموزشی، و ارائه‌های ویدیویی است و نویسنده یا ویراستار پنج کتاب نیز بوده است. نیل همچنین سخنران دائمی در کنفرانس‌های فنی است. می‌توانید کنجکاوی‌تان درباره‌ی او را در سایت http://www.nealford.com رفع کنید.