Jika Anda bekerja di bidang yang benar-benar kritis terhadap kinerja, maka Anda tidak dapat menunda efisiensi sebagai renungan. Ini adalah salah satu hal yang paling penting untuk dipikirkan ketika merancang sejak awal dalam kasus-kasus tersebut dan dengan cara yang berhubungan dengan pemeliharaan hasil akhir.
Anda tidak dapat mendesain dan mengimplementasikan server berskala besar dan mulai menulis kode yang mudah dan terdokumentasi dengan baik yang hanya menggunakan fungsi pemblokiran untuk semuanya dengan kunci utas global yang mengunci seluruh sistem untuk memproses setiap permintaan klien individu tanpa menempatkan berpikir apa pun ke keadaan bersama, pertikaian thread, dan asinkronisitas. Itulah resep untuk bencana dan kebutuhan untuk mendesain ulang dan menulis ulang sebagian besar kode yang didokumentasikan dengan baik yang Anda tulis dengan cara yang dapat mengarah pada basis kode yang paling sulit dipelihara yang dapat dibayangkan, diganggu oleh kondisi ras dan kebuntuan sebagai hasil dari mencoba untuk mencapai efisiensi yang diperlukan di belakang, bukan hanya memiliki pemikiran tentang efisien, sederhana, desain kerja di muka.
Tim pengembang game 8 bulan berproduksi dengan mesin yang hanya berjalan 2 frame per detik pada perangkat keras mereka yang paling besar dengan 32 core sementara memiliki kecenderungan untuk berhenti selama 15 detik setiap kali layar sibuk tidak mungkin untuk secara instan mendapatkan produk yang dapat digunakan hanya dengan memperbaiki satu hotspot lokal kecil. Kemungkinannya adalah bahwa desain mereka FUBAR dengan cara yang menjamin kunjungan epik papan gambar dan perubahan desain yang dapat mengalir ke setiap sudut basis kode.
Dengan John Carmack, dia berbicara sekali tentang bagaimana demo teknologi harus berjalan minimal ratusan hingga ribuan frame per detik untuk mengintegrasikannya ke dalam produksi. Itu bukan obsesi yang tidak sehat dengan efisiensi. Dia tahu di muka bahwa game harus dijalankan, secara keseluruhan, pada 30+ FPS agar pelanggan dapat menerimanya. Akibatnya satu aspek kecil seperti sistem soft shadow tidak dapat berjalan pada 30 FPS, atau permainan secara keseluruhan tidak mungkin cukup cepat untuk memberikan umpan balik realtime yang diperlukan. Ini tidak dapat digunakan sampai mencapai efisiensi yang diperlukan. Dalam area yang sangat kritis terhadap kinerja di mana ada persyaratan mendasar untuk efisiensi, solusi yang gagal mencapai kecepatan yang memadai sebenarnya tidak lebih baik daripada yang tidak berfungsi sama sekali,. Dan Anda tidak dapat merancang sistem bayangan lembut efisien yang berjalan pada ratusan hingga ribuan frame per detik seperti yang dibutuhkan untuk mesin gim realtime kecuali jika Anda mengedepankan pemikiran awal dalam hal efisiensi. Bahkan, dalam kasus seperti itu, 90 +% dari pekerjaan berorientasi pada efisiensi karena itu sepele untuk datang dengan sistem bayangan lembut yang bekerja dengan baik pada 2 jam per frame menggunakan penelusuran jalur, tetapi Anda tidak bisa berharap untuk menyetelnya untuk berjalan pada ratusan frame per detik tanpa perubahan pendekatan yang sama sekali berbeda.
Ketika efisiensi adalah bagian mendasar dari desain aplikasi, Anda tidak dapat berharap untuk mencapai efisiensi di belakang tanpa kehilangan secara dramatis lebih banyak waktu daripada Anda menghemat dengan mengabaikannya, karena Anda tidak bisa berharap untuk mencapai desain yang bekerja di belakang. Tidak ada yang mengatakan, "Tidak apa-apa untuk menunda berpikir tentang desain sampai nanti. Cukup mendokumentasikan kode Anda dengan baik dan Anda dapat menghasilkan desain yang tepat nanti ." Namun dalam arsitektur kinerja-kritis, itulah yang Anda lakukan secara efektif jika Anda tidak menaruh perhatian besar dan pemikiran ke dalam desain efisien di muka.
Sekarang itu tidak berarti Anda harus menyetel implementasi Anda secara langsung. Untuk detail implementasi, ada banyak ruang untuk beralih ke solusi yang lebih cepat setelah mengukur asalkan desain tidak perlu berubah, dan seringkali itulah cara paling produktif untuk melakukannya. Tetapi pada tingkat desain, itu berarti Anda harus memberikan pemikiran yang cukup tentang bagaimana desain dan arsitektur akan berhubungan dengan efisiensi sejak awal.
Perbedaan utama di sini adalah desain. Tidak mudah untuk membuat perubahan besar pada desain di belakang karena desain menumpuk dependensi, dan dependensi akan pecah jika desain berubah. Dan jika suatu desain memiliki persyaratan untuk menjadi cukup efisien atau, dalam beberapa kasus, bahwa kualitasnya sebagian besar diukur oleh efisiensinya, maka Anda tidak boleh berharap untuk dapat mencapai desain yang tepat sebagai renungan. Dengan setiap produk kompetitif di mana efisiensi merupakan aspek kualitas yang sangat besar baik itu sistem operasi atau kompiler atau prosesor video atau raytracer atau mesin game atau mesin fisika, pemikiran tentang efisiensi dan representasi data dipikirkan dengan cermat sejak awal. Dan dalam kasus-kasus itu bukan optimasi prematur untuk menaruh begitu banyak pemikiran ke depan efisiensi. Itu menempatkan pemikiran seperti itu tepat pada waktu paling produktif untuk melakukannya,