Độ phức tạp của hệ thống là nguyên nhân phát sinh lỗi quan trọng nhất nhưng rất khó đánh giá. Độ phức tạp càng cao thì càng dễ mắc sai sót. Có thể tiến hành một số phân tích về độ phức tạp dựa vào các khía cạnh khác nhau của độ phức tạp. Kích thước cũng có thể được sử dụng như là một chỉ báo về độ phức tạp. Kích thước thường được đo bằng số dòng mã (LOC) không kể các dòng chú thích và các dòng trống. Người ta thống nhất là chỉ đếm những
dòng mã có thể thực hiện được. Một nghiên cứu đã chỉ ra rằng có thể có một kích thước chương trình tối ưu mà có thể đưa tới một tỷ lệ sai sót thấp nhất.
Số lượng lỗi phát hiện được trong khi thanh tra hoặc trong các pha kiểm thử đầu tiên có thể cho biết nơi nào sau này có thể phát sinh nhiều lỗi. Sau khi biết được số lỗi, chúng ta có thể đánh giá chất lượng chương trình thông qua tỷ số giữa số lỗi và kích thước mã. Kích thước mã có thể là số dòng mã LOC hoặc các điểm chức năng (functional points), nếu các điểm này được tính và được sử dụng. Tùy thuộc vào tỷ lệ này lớn hay bé mà ta có thể biết được chất lượng của mã là xấu hay tốt.
Những bộ phận của hệ thống bị thay đổi nhiều trong khi phát triển có thể có nhiều khiếm khuyết hơn so với những bộ phận khác. Những gì được thay đổi thì dễ nhận ra nhưng thường được thực hiện trong một thời gian gấp gáp. Chúng thường gây ra rắc rối bởi vì không được phân tích kỹ càng. Những bộ phận bị thay đổi của hệ thống có thể có một thiết kế tồi ngay từ đầu hoặc những thay đổi này có thể đã phá hủy thiết kế gốc. Số lượng các thay đổi đã được thực hiện trong suốt quá trình phát triển cần phải được ghi lại. Amland [1] đã sử dụng chất lượng thiết kế làm một trong những nhân tố quan trọng thể hiện xác suất hỏng hóc trong phân tích rủi ro.