Saya pikir ini sebenarnya dua pertanyaan dalam satu - saya akan mencoba menjawab keduanya.
1) Bagaimana kita mengurangi kode duplikat dalam basis kode.
Ini membantu untuk mengingatkan diri kita sendiri tentang manfaat melakukan hal ini: ini menghasilkan bug lebih sedikit karena duplikat logika bisnis dan lebih sedikit kode yang perlu dipertahankan. Cara terbaik untuk mengurangi hal ini terjadi adalah melalui komunikasi - sebagaimana disebutkan dalam jawaban lain. Saya sangat setuju dengan rekomendasi untuk menggunakan ulasan kode dengan peringatan tambahan bahwa Anda harus berbagi tanggung jawab meninjau kode secara adil untuk menyebarkan pengetahuan. Anda juga harus menggunakan stand-up harian sehingga pengembang akan sering mengenali ketika seseorang mencoba memecahkan masalah yang ada kode berguna yang ada. Anda juga harus mempertimbangkan pemasangan kode karena meningkatkan berbagi pengetahuan dan membantu menjaga programer disiplin.
Saya juga merekomendasikan agar pengembang Anda sedekat mungkin, lebih disukai di ruangan yang sama. Dengan banyak whiteboard dan ruang bersama. Kemudian kirim mereka untuk makan bersama. Semakin banyak "ikatan" pengembang Anda, semakin baik mereka berkomunikasi satu sama lain.
Saya tidak setuju dengan rekomendasi untuk menggunakan wiki atau mirip dengan kode dokumen. Tidak peduli seberapa disiplin pengembang mencoba menjadi dokumentasi akan melayang dari kode asli. Pendekatan yang lebih efektif adalah penggunaan spesifikasi dengan uji gaya contoh. Ini mendokumentasikan kode dengan cara yang membuatnya jelas bagaimana harus digunakan dan tes Anda akan gagal jika seseorang mengubah kode tanpa mengubah contoh.
Anda sudah memiliki basis kode besar dengan banyak kode duplikat sehingga Anda mungkin harus bekerja pada refactoring ini. Mungkin sulit menemukan kode duplikat yang tidak dipotong dan disisipkan. Jadi daripada melakukannya saya sarankan Anda menganalisis riwayat perubahan Anda. Cari file yang sering berubah secara bersamaan. Ini mungkin akan menunjukkan masalah dengan enkapsulasi jika tidak menunjukkan kode duplikat yang sebenarnya dan tetap layak untuk dibersihkan. Jika Anda juga dapat menganalisis riwayat perbaikan bug terhadap perubahan kode Anda, Anda mungkin menemukan hotspot tertentu di mana perbaikan sering diperlukan. Analisis hotspot ini dan Anda mungkin akan menemukan banyak di antaranya karena duplikat logika bisnis yang hanya diubah oleh pengembang di satu tempat yang tidak disadari perlu diubah dua kali.
2) Bagaimana kita mendekati membuat widget bersama, komponen, perpustakaan, dll yang kemudian dapat digunakan dalam proyek lain .
Dalam hal ini Anda tidak boleh mencoba untuk membungkus logika bisnis tetapi berbagi kode kerangka yang berguna. Ini bisa menjadi keseimbangan yang rumit karena biaya pembuatan dan pemeliharaan satu set komponen bersama bisa sangat besar dan bisa sulit untuk diprediksi dalam hal mana hal itu layak dilakukan. Pendekatan yang saya sarankan di sini adalah aturan tiga pukulan. Jangan khawatir tentang penulisan kode yang serupa dua kali, tetapi ketika Anda harus melakukannya, refactor ketiga kalinya menjadi komponen bersama. Pada titik ini Anda dapat yakin itu akan berguna dan Anda memiliki ide bagus tentang persyaratan yang lebih luas untuk komponen. Jelas, komunikasi antara pengembang sangat penting di sini.
Pertimbangkan membuat sebanyak mungkin open source komponen bersama Anda. Ini bukan logika bisnis sehingga tidak akan memberi banyak keuntungan bagi pesaing Anda, tetapi itu berarti Anda akan mendapatkan pengulas dan pengelola tambahan secara gratis.