Nếu bạn đang làm việc trong các lĩnh vực thực sự quan trọng về hiệu suất, thì bạn không thể giảm hiệu quả như một cách suy nghĩ. Đó là một trong những điều quan trọng nhất cần suy nghĩ khi thiết kế sớm trong những trường hợp đó và theo những cách liên quan đến khả năng duy trì của kết quả cuối cùng.
Bạn không thể thiết kế và triển khai một máy chủ quy mô lớn và chỉ cần bắt đầu viết mã dễ dàng, có tài liệu tốt, chỉ sử dụng các chức năng chặn cho mọi thứ bằng khóa luồng toàn cầu, khóa toàn bộ hệ thống để xử lý từng yêu cầu của từng khách hàng trong khi không đặt bất kỳ suy nghĩ bất cứ điều gì vào trạng thái chia sẻ, tranh chấp chủ đề, và sự không điển hình. Đó là một công thức cho thảm họa và cần phải thiết kế lại và viết lại phần lớn mã được viết tài liệu độc đáo mà bạn đã viết theo những cách có thể dẫn đến mã hóa khó bảo trì nhất, bị vướng vào các điều kiện chủng tộc và bế tắc do cố gắng để đạt được hiệu quả cần thiết trong nhận thức muộn, trái ngược với việc chỉ nghĩ về các thiết kế làm việc hiệu quả, đơn giản, hiệu quả.
Một nhóm phát triển trò chơi 8 tháng được sản xuất với một công cụ chỉ đạt 2 khung hình mỗi giây trên phần cứng mạnh nhất của họ với 32 lõi trong khi có xu hướng bị đình trệ trong 15 giây mỗi khi màn hình bận rộn không thể ngay lập tức có được một sản phẩm có thể sử dụng được sửa một điểm nóng cục bộ. Rất có thể là thiết kế của họ là FUBAR theo cách đảm bảo việc xem lại sử thi của bảng vẽ và thay đổi thiết kế có thể xếp tầng vào mọi góc của cơ sở mã.
Với John Carmack, anh đã nói một lần về cách một bản demo công nghệ phải chạy ở mức tối thiểu hàng trăm đến hàng nghìn khung hình mỗi giây để tích hợp nó vào sản xuất. Đó không phải là một nỗi ám ảnh không lành mạnh với hiệu quả. Anh ta biết trước rằng các trò chơi cần phải chạy, toàn bộ, ở mức 30+ FPS để khách hàng thấy nó có thể chấp nhận được. Kết quả là một khía cạnh nhỏ như hệ thống bóng mềm không thể chạy ở tốc độ 30 FPS, nếu không thì toàn bộ trò chơi không thể đủ nhanh để cung cấp phản hồi thời gian thực cần thiết. Nó không sử dụng được cho đến khi đạt được hiệu quả cần thiết. Trong các lĩnh vực quan trọng về hiệu suất như vậy, nơi có yêu cầu cơ bản về hiệu quả, một giải pháp không đạt được tốc độ phù hợp thực sự không tốt hơn một giải pháp hoàn toàn không hoạt động,. Và bạn không thể thiết kế một hệ thống bóng mềm hiệu quả, chạy ở tốc độ hàng trăm đến hàng nghìn khung hình mỗi giây theo yêu cầu cho một công cụ trò chơi thời gian thực trừ khi bạn đặt một lượng lớn suy nghĩ vượt trội về hiệu quả của nó. Trên thực tế, trong những trường hợp như vậy, 90 +% công việc được định hướng xoay quanh hiệu quả vì việc tạo ra một hệ thống bóng mềm chỉ hoạt động tốt ở mức 2 giờ trên mỗi khung hình bằng cách sử dụng theo dõi đường dẫn, nhưng bạn không thể điều chỉnh nó để chạy ở hàng trăm khung hình mỗi giây mà không có sự thay đổi hoàn toàn khác nhau trong cách tiếp cận.
Khi hiệu quả là một phần cơ bản trong thiết kế của ứng dụng, bạn không thể mong đợi đạt được hiệu quả trong nhận thức muộn mà không mất nhiều thời gian hơn bạn đã tiết kiệm bằng cách bỏ qua nó, vì bạn không thể mong đợi đạt được một thiết kế hoạt động trong tầm nhìn xa. Không ai nói, "tôi không thể ngừng suy nghĩ về thiết kế cho đến sau này. Chỉ cần ghi lại mã của bạn và bạn có thể đưa ra một thiết kế phù hợp sau này ." Nhưng trong các kiến trúc quan trọng về hiệu suất, đó là những gì bạn đang làm một cách hiệu quả nếu bạn không đặt nhiều sự quan tâm và suy nghĩ vào các thiết kế hiệu quả trước mắt.
Bây giờ điều đó không có nghĩa là bạn phải điều chỉnh các triển khai của mình ngay lập tức. Để biết chi tiết triển khai, có rất nhiều chỗ để lặp lại các giải pháp nhanh hơn sau khi đo lường với điều kiện là thiết kế sẽ không cần phải thay đổi và thường đó là cách hiệu quả nhất để thực hiện. Nhưng ở cấp độ thiết kế, điều đó có nghĩa là bạn phải suy nghĩ đầy đủ về cách thiết kế và kiến trúc sẽ liên quan đến hiệu quả ngay từ đầu.
Sự khác biệt chính ở đây là thiết kế. Không dễ để thực hiện các thay đổi lớn đối với các thiết kế trong nhận thức muộn vì các thiết kế tích lũy phụ thuộc và các phụ thuộc sẽ bị phá vỡ nếu thiết kế thay đổi. Và nếu một thiết kế có yêu cầu phải hiệu quả hợp lý hoặc, trong một số trường hợp, chất lượng của nó phần lớn được đo bằng hiệu quả của nó, thì bạn không nên mong đợi có thể đạt được một thiết kế phù hợp như một suy nghĩ sau. Với bất kỳ sản phẩm cạnh tranh nào mà hiệu quả là một khía cạnh lớn về chất lượng cho dù đó là hệ điều hành hay trình biên dịch hoặc bộ xử lý video hay công cụ trò chơi hoặc công cụ vật lý, thì những suy nghĩ về hiệu quả và biểu diễn dữ liệu đã được suy nghĩ tỉ mỉ ngay từ đầu. Và trong những trường hợp đó, không phải là tối ưu hóa sớm để đặt quá nhiều suy nghĩ vào hiệu quả. Đó là đặt suy nghĩ chính xác vào thời điểm hiệu quả nhất để làm điều đó,