Trong phần lớn các trường hợp, các cải tiến về thuật toán tạo ra sự khác biệt lớn hơn so với cải tiến về tối ưu hóa. Các thuật toán cũng dễ mang theo hơn các tối ưu hóa ở mức độ thấp. Lời khuyên của tôi là tuân theo các thực tiễn tốt nhất chung về cách bố trí bộ nhớ để sử dụng lại bộ đệm, tránh sao chép hoặc giao tiếp quá mức, xử lý hệ thống tệp theo cách lành mạnh và làm cho các hạt nhân dấu phẩy động có đủ độ chi tiết để vector hóa. Đôi khi điều này là đủ để đạt được một phần "đỉnh" cao chấp nhận được (đối với thao tác này).
Luôn phác thảo một mô hình hiệu suất cho các hoạt động mà bạn nghĩ là quan trọng (hoặc bạn khám phá là quan trọng bằng cách định hình). Sau đó, bạn có thể sử dụng mô hình hiệu suất để ước tính những gì một triển khai được điều chỉnh cao có thể mang lại. Nếu bạn quyết định rằng speedup là xứng đáng (so với những thứ khác bạn có thể làm), thì hãy tối ưu hóa.
Có lẽ thách thức khó khăn nhất là thiết kế mức cao, quan trọng (theo nghĩa là rất nhiều mã sẽ phụ thuộc vào các lựa chọn này) giao diện và cấu trúc dữ liệu để bạn có thể tối ưu hóa sau này mà không cần thay đổi API. Ngược lại với tối ưu hóa cụ thể và hướng dẫn chung, tôi không biết cách dạy điều này ngoại trừ thông qua kinh nghiệm. Làm việc với phần mềm nguồn mở nhạy cảm với hiệu suất. Như với bất kỳ quyết định API nào, điều quan trọng là phải hiểu không gian vấn đề.