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

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