Yazılım tasarımı yapmanın iki yolu vardır: Birinci yol yazılımda hiçbir problem olmayacak kadar basit bir tasarım yapmaktır, ikinci yöntem ise görünürde hiçbir problem olmayacak kadar karmaşık bir tasarım yapmaktr. Birinci yöntem çok daha zordur.