Программному обеспечению присуща эссенциальная и акцидентальная сложность. Эссенциальная сложность внутренне присуща решаемой задачи, это те части программы, которые призваны решить действительно сложные проблемы. Акцидентальная сложность — это вещи, которые могут и не относиться напрямую к решению, но без которых никуда не деться.