Saya telah bekerja di perusahaan perangkat lunak yang sama selama lebih dari sepuluh tahun. Sebagai hasilnya, saya telah mengimplementasikan basis kode besar menggunakan berbagai bahasa pemrograman berorientasi objek. Saya adalah seorang programmer pemula ketika saya pertama kali memulai karir saya dan saya tidak tahu banyak tentang antarmuka yang baik dan prinsip-prinsip desain kelas. Saya ingin berpikir bahwa keterampilan desain saya telah meningkat dari waktu ke waktu, tetapi sekarang saya menghadapi lebih banyak kesulitan dalam meningkatkan kode saya sebelumnya karena masalah kompatibilitas ke belakang. Kode saya digunakan oleh sejumlah besar pelanggan sebagai bagian dari produk yang dijual perusahaan saya.
Pertanyaan saya adalah: kapan harus berhenti mencoba untuk menjaga kompatibilitas antarmuka lama dan menggigit peluru dalam mendukung penerapan desain baru?
Saya pikir ada titik di mana menjaga kompatibilitas menjadi beban besar sehingga perubahan yang berguna untuk antarmuka menjadi tidak mungkin. Adakah yang mengalami masalah serupa, yang dapat memberikan umpan balik?
sumber
I think there comes a point where keeping backward compatibility becomes such a big burden that useful changes to interfaces become impossible.
- Dan saya pikir Anda menjawab pertanyaan Anda sendiri di sana ...Jawaban:
Sementara 'kapan' adalah pertanyaan yang bagus, saya pikir 'bagaimana' bahkan lebih relevan. Mungkin sulit untuk membuat transisi yang melanggar dengan cara yang tidak membuat pengguna frustrasi atau tidak bahagia. Beberapa item untuk dipertimbangkan:
Adapun 'kapan', Anda mungkin akan memiliki ide yang lebih baik untuk aplikasi Anda daripada orang lain. Namun, secara umum, mungkin ini saatnya untuk istirahat bersih ketika utang teknis dan arsitektur Anda benar-benar menghambat stabilitas, mencegah kinerja yang wajar, dan membuat pengembangan fitur baru luar biasa sulit atau tidak perlu.
Semua yang dikatakan, jangan mengambil langkah ini dengan ringan. Bahkan jika dilakukan dengan benar, melanggar kompatibilitas ke belakang adalah masalah besar. Anda harus sangat mempertimbangkan untuk meningkatkan cakupan tes dan refactoring Anda terlebih dahulu dan jika mungkin sebelum mempertimbangkan istirahat.
sumber
Secara umum saya setuju dengan James Anderson. Namun, dalam pengalaman saya, ada aspek-aspek tambahan yang mungkin memerlukan pertimbangan dan yang mengarah pada opsi yang memang memungkinkan antarmuka yang berkembang.
Contoh ini dari salah satu tim yang bekerja dengan saya. Mereka mengirimkan produk secara teratur, setidaknya sekali sebulan kadang-kadang bahkan setiap minggu. Pelanggan didorong untuk meningkatkan karena fitur baru dan platform baru hanya didukung pada versi yang lebih baru. Memutakhirkan itu mudah dan pelanggan bahkan dapat melewati versi di antaranya. Penurunan versi tidak didukung. Selain itu versi hanya didukung selama 3 tahun. Setelah itu ada masa tenggang satu tahun ketika biaya perawatan berlipat ganda.
Sebagai hasilnya, sebagian besar - sekitar 95% pelanggan - melakukan peningkatan secara teratur, setidaknya setahun sekali. Ini juga berarti bahwa Anda dapat secara bertahap memperkenalkan antarmuka baru.
Bagaimana dengan antarmuka lama? Teknik yang digunakan tim ini adalah mendeklarasikan antarmuka lama sebagai 'end-of-life'. Lalu ada periode 12 bulan di mana antarmuka baru tersedia dan antarmuka lama belum pensiun. Antarmuka baru menawarkan fitur yang lebih baik daripada antarmuka lama sehingga ada dua insentif: Antarmuka lama akhir dan antarmuka baru menjadi jauh lebih baik.
Antarmuka lama yang konkret dalam hal ini adalah teknologi platform spesifik yang sedang dalam proses digantikan secara bertahap oleh antarmuka layanan berdasarkan teknologi arus utama standar.
Tentu saja perubahan ini tidak terjadi dalam semalam dan butuh bertahun-tahun sampai selesai. Tetapi itu memungkinkan menghentikan investasi dalam teknologi lama dan bukannya berinvestasi ke dalam teknologi baru. Pelanggan diberi bantuan dan memiliki jalur ke depan. Sebagian besar dari mereka juga menyambut baik langkah menuju teknologi yang lebih baru.
Perlu diingat, bahwa pendekatan khusus ini mungkin tidak berfungsi dalam skenario Anda. Ini tentu saja bekerja untuk tim yang bekerja sama dengan saya.
sumber
Anda sudah mendapatkan jawaban yang bagus di sini, jadi saya hanya ingin menambahkan pointer ke artikel yang sangat bagus dari Joel Spolsky mengenai topik ini. Dia sedang mendiskusikan rencana menyerah kompatibilitas di IE 8, yang pada dasarnya sama dengan masalah Anda:
http://www.joelonsoftware.com/items/2008/03/17.html
sumber
Jawaban singkatnya adalah Never!
Pengalaman menunjukkan bahwa menjatuhkan kompatibilitas ke belakang paling tidak mengganggu pelanggan dan pengguna, dan, lebih buruk kehilangan mereka sepenuhnya.
Jika Anda meminta pengguna Anda untuk menulis ulang kode, setelah mereka selesai mengutuk Anda dan semua keturunan Anda, mereka akan berpikir "Jika saya harus menulis ulang, mungkin saya harus beralih ke perpustakaan ACME yang bagus yang telah saya baca. begitu banyak tentang? "
Caranya adalah dengan meningkatkan antarmuka saat ini sedemikian rupa sehingga tidak merusak kompatibilitas, atau, untuk menawarkan antarmuka yang benar-benar baru mengkilap dan jelas unggul sambil mempertahankan antarmuka yang lebih lama. Pada titik tertentu akan ada fitur di antarmuka baru yang tidak akan mungkin di antarmuka yang lebih lama, tetapi, ini hanya memberi orang insentif untuk pindah, tanpa memaksakan masalah.
Edit untuk memperjelas ini lebih lanjut.
Apa yang Anda sebagai programmer pikirkan adalah -
"Saya akan meningkatkan API ini dan membuat sistem sebaik mungkin dan semua orang akan mengagumi saya".
Apa yang dipikirkan oleh pengguna API Anda -
"A * * * e dia pikir waktu dan jadwalku tidak penting. Aku harus menghentikan apa yang aku lakukan dan memperbaiki semua kode saya tanpa alasan lain selain untuk memuaskan egonya. Jika aku harus refactor maka aku akan beralih ke API lain hanya untuk tetap menggunakannya juga. "
sumber
Ini benar-benar lebih dari keputusan bisnis daripada yang teknis. Biasanya, ini dilakukan sebagai bagian dari rilis utama (mis. Beralih dari versi 3.5 ke versi 4.0), dan seringkali kedua versi didukung secara paralel untuk sementara. Ini berarti Anda akan melakukan pemeliharaan pada versi lama tetapi semua fitur baru hanya akan muncul di versi baru. Versi lama didukung selama perusahaan menghasilkan uang darinya, atau setidaknya cukup untuk mengimbangi biaya pemeliharaan. Bersiaplah untuk menyampaikan ini kepada manajemen.
sumber
Saya sudah berada di sisi pelanggan yang satu ini jadi saya akan mengatakan bahwa itu benar-benar tergantung pada apa yang Anda rencanakan untuk dilakukan tentang transisi.
Kami sedang meningkatkan sistem akun kami. Perusahaan yang melakukan peningkatan juga mendukung versi yang tidak kompatibel sebelumnya. Mereka berencana untuk mengambil data dan memindahkannya ke sistem baru sehingga (secara teori) semua data lama akan ada di sana. Kami akan membayar beberapa ratus pound untuk konversi data. Tidak masalah.
Bandingkan dengan situasi sebelumnya di perusahaan lain di mana saya bekerja. Pemasok tidak memiliki cara untuk beralih dari sistem lama ke sistem baru. Ini menempatkan mereka dalam situasi yang sama dengan setiap pemasok lainnya. Sebenarnya situasi mereka lebih buruk karena kami tahu bahwa mereka tidak berkomitmen untuk membantu kami dengan peningkatan. Mereka tidak mendapatkan kontrak baru.
Anda telah melakukan kerja keras dalam mendapatkan dan mempertahankan pelanggan, bagaimana Anda dapat memudahkan transisi?
sumber