Rất nhiều điều chúng ta đã học được trong thực hành kỹ thuật phần mềm trong hơn 30 năm qua là ở dạng "công nghệ X có thể tăng tốc độ phát triển ban đầu của phần mềm mới, nhưng nếu bạn không dành nhiều hoặc nhiều thời gian để suy nghĩ về cách thức và Khi nào nên sử dụng nó khi bạn tiết kiệm bằng cách sử dụng nó, về lâu dài, nó sẽ biến ứng dụng của bạn thành một vũng nợ kỹ thuật, khiến bạn mất nhiều thời gian và công sức để bảo trì. "
Các công nghệ thuộc loại dao cạo này bao gồm: ngôn ngữ lắp ráp được mã hóa bằng tay, trình biên dịch, trình thông dịch, thư viện thủ tục, lập trình mệnh lệnh, lập trình chức năng, lập trình hướng đối tượng, cấp phát bộ nhớ thủ công, thu gom rác, loại tĩnh, loại động, phạm vi từ vựng, phạm vi động , Con trỏ "an toàn", con trỏ "không an toàn", không có con trỏ như một khái niệm ngôn ngữ, định dạng tệp nhị phân, định dạng tệp đánh dấu cấu trúc, macro, mẫu, tránh macro và mẫu, bộ nhớ chia sẻ, chuyển tin nhắn, luồng, coroutines, các vòng lặp sự kiện không đồng bộ, các dịch vụ từ xa tập trung, dịch vụ phân tán, phần mềm được cài đặt cục bộ, mảng, danh sách được liên kết, bảng băm và cây.
Thực tế là nhiều mục trong danh sách trên xuất hiện trong các nhóm cùng nhau làm cạn kiệt không gian giải pháp đã biết là rất có chủ ý, và chính nó sẽ cho bạn biết điều gì đó. Người ta có thể lập luận rằng những cải tiến rõ ràng, duy nhất trong các bảng quảng cáo mà chúng tôi đã có kể từ khi lần đầu tiên bật Z3 là lập trình có cấu trúc khối (trái ngược với mã spaghetti) và bảo vệ bộ nhớ (tôi không bao giờ bỏ lỡ những ngày mà một lỗi đánh máy có thể làm hỏng toàn bộ máy tính của tôi).