Tổng quan
Tối ưu quá sớm là việc trả giá bằng độ phức tạp trước khi biết điểm nghẽn thật ở đâu. Trọng tâm của luật này là ưu tiên thiết kế rõ ràng, đúng chức năng, rồi dùng đo đạc thực tế để quyết định phần nào cần tối ưu.
Ý chính
- Phần lớn code không nằm trên hot path, nên micro-optimization đại trà thường làm code khó đọc hơn mà không giúp hệ thống nhanh hơn rõ rệt.
- Tối ưu nên dựa trên profiling, benchmark hoặc tín hiệu vận hành, không dựa trên trực giác mơ hồ.
- Code đã tối ưu thường ít đơn giản hơn; nếu tối ưu sai chỗ, bạn gánh chi phí bảo trì mà không nhận lợi ích hiệu năng.
Ví dụ từ nguồn
Một routine C được viết bằng bit trick phức tạp có thể chỉ chạy một lần lúc khởi động, trong khi bottleneck thật nằm ở truy vấn dữ liệu lớn.
Một trang web được minify thủ công hoặc cache quá sớm có thể che lỗi thiết kế, trong khi vấn đề thật là N+1 query hoặc payload quá lớn.
Nguồn gốc
Donald Knuth phổ biến câu nói này trong bài "Structured Programming with Go To Statements" năm 1974, với ngữ cảnh là tránh các tối ưu nhỏ không đáng kể trong phần lớn trường hợp.
Lưu ý khi áp dụng
Đừng hiểu luật này là bỏ qua hiệu năng. Hãy giữ thiết kế đo được, rồi tối ưu đúng đoạn khi dữ liệu cho thấy nó đáng tối ưu.