Hiện nay có rất nhiều hệ thống phần mềm được thực hiện quá phức tạp làm cho khả năng kiểm soát chúng trở nên hết sức khó khăn. Thách thức cho nhà quản trị Công nghệ Thông tin (CNTT) là phải quản lý công việc mới mà không được bổ sung nhân lực. Mặt khác vì quá phức tạp nên chi phí phát triển và bảo trì quá cao, đặc biệt với các hệ thống phần mềm cao cấp. Mục đích của việc xây dựng phần mềm không chỉ để chạy ổn định dài lâu mà còn có thể.