Karena orang biasanya sangat cepat untuk menunjukkan, salah satu manfaat dari perangkat lunak adalah bahwa itu seharusnya mudah dan relatif murah untuk diubah dibandingkan dengan perangkat keras. Ini sangat penting ketika Anda terlambat menyadari bahwa Anda mendapatkan sesuatu yang secara fundamental salah. Lakukan hal yang sama dengan perangkat keras, dan Anda kehilangan satu juta dolar, jadi seperti yang Anda katakan, Anda menggunakan simulator Anda dll, dan Anda menguji bazinga itu. Saya pikir ini adalah paradigma yang gagal ketika Anda beralih ke perangkat lunak.
Masuki kepala pengembang perangkat lunak biasa, dan yang Anda miliki adalah orang yang sangat sibuk dengan tenggat waktu yang sangat ketat. Manajernya mengatakan tidak masalah untuk meninggalkan beberapa bug karena Anda selalu dapat memperbaikinya nanti. Tes seringkali merupakan renungan, tetapi bahkan dalam skenario yang didorong oleh tes, tes tetap minimal dan kode ditulis seminimal mungkin, dan sering kali pintasan diambil sehingga banyak kasus batas mungkin terlewatkan. Sistem ini mungkin diuji secara menyeluruh namun jarang diuji secara ketat, dan jarang juga diuji stres pada tingkat yang besar. Tambahkan ke ini bahwa Anda menulis perangkat lunak dari awal, dan ada sedikit kesempatan untuk mensimulasikan perangkat lunak sebelum Anda berkomitmen untuk menulisnya, terutama karena kami jarang menulis perangkat lunak dari jenis yang sama dari blok bangunan berbutir halus yang akan Anda temukan di perangkat keras.
Kembali ke pertanyaan OP. Bisakah Anda mendefinisikan suatu sistem blok bangunan dari mana untuk memperoleh semua perangkat lunak Anda? Mungkin. Apakah ini sangat hemat biaya? Mungkin tidak, karena saat Anda mulai mengembangkan sistem komponen, pengujian, dan peralatan lain yang cukup kuat untuk mendukung cita-cita ini.sistem pemrograman, Anda akan menemukan bahwa pesaing Anda akan mengalahkan Anda ke pasar, dan lebih buruk lagi, dari perspektif programmer rata-rata Anda mungkin akan menemukan gaya "cookie-cutter" sistem pemrograman menjadi sangat membatasi dan lebih mungkin sangat membosankan. Saya pribadi bekerja pada API, di mana sebagian besar kode modul telah disempurnakan dan distandardisasi sepenuhnya, sehingga yang saya lakukan sekarang hanyalah membuat templat kode dan mengisi bagian yang kosong. Sebagian besar waktu saya dapat dihabiskan untuk menulis kode konektor sederhana, dan mengeluarkan modul secepat mungkin. Ini sangat mematikan pikiran. Ada sangat sedikit kesempatan untuk melakukan lebih dari sekedar kode hal-hal yang sama berulang-ulang, jadi ketika kesempatan proyek lain datang, saya melompat pada kesempatan untuk dapat melakukan APA SAJA yang lain.
Jadi bagaimana Anda bisa memberikan perangkat lunak yang berkualitas tinggi dan berfaktor dengan baik, namun tetap menikmati diri Anda melakukannya? Saya percaya ini tergantung pada pilihan alat dan metodologi Anda. Bagi saya jawabannya adalah menggunakan penggunaan API BDD yang baik, karena memungkinkan saya membuat kode yang mudah dibaca, namun sangat granular. Saya dapat membuat serangkaian tes dari sejumlah kecil metode yang dapat digunakan kembali, dan menjelaskan tes saya dalam bahasa spesifikasi. Dengan cara ini, saya mendekati pendekatan pengembangan yang lebih berbasis komponen, kecuali kenyataan bahwa saya bertanggung jawab untuk merancang dan memeriksa blok bangunan. Selain itu, hasil tes menunjukkan dengan tepat bagian dari tes di mana kegagalan terjadi, sehingga saya tidak perlu menebak apakah kegagalan ada di pengaturan atau pernyataan.
Menyetel metodologi Anda juga membantu. Saya seorang advokat besar untuk menerapkan prinsip-prinsip pembangunan lean, dan menggabungkannya dengan banyak teknik dan kepala sekolah lain yang telah digerakkan oleh gerakan Agile selama bertahun-tahun sekarang. Setelah menghilangkan sebagian besar praktik boros yang biasa saya temukan sehingga membuat frustrasi telah membantu banyak untuk membuat pengembangan menjadi kegiatan yang lebih menyenangkan. Saya masih menyisakan masalah yang kadang-kadang - tetapi mudah-mudahan tidak terlalu sering - bug akan muncul dalam kode saya, namun sekarang saya menemukan diri saya dengan lebih banyak waktu, dan bahkan lebih banyak insentif untuk menghabiskan lebih banyak waktu menulis tes yang lebih kuat, dan bertujuan untuk 100 % cakupan tes. Lebih baik lagi, rasanya sangat menyenangkan melihat semua lampu hijau itu muncul di penghujung hari saya,