Сложность программного проекта является комбинацией его системной (essential, имманентной) и случайной (accidental, ненужной) сложности.
Системная сложность проистекает из самой природы решаемой проблемы и не может быть уменьшена применением каких-либо методов или практик. Из-за нее сложность разрабатываемого приложения будет пропорциональна сложности моделируемой предметной области. Например, в системе, осуществляющей продажи, будет обязательно присутствовать функция биллинга, что составляет имманентную сложность, тогда как конкретное решение и возникающие проблемы с его реализацией и поддержкой — случайная сложность.