Kapan seseorang akan menyerah kompatibilitas mundur dalam mendukung implementasi antarmuka yang baru dan lebih baik? [Tutup]

11

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?

Kavka
sumber
3
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 ...
yannis
(1) Apakah ini komersial? (2) Apakah pelanggan membayar biaya dukungan terus menerus untuk menggunakan antarmuka / implementasi? (Versus pembayaran satu kali)
rwong
Saya bekerja pada perangkat lunak komersial yang pelanggan bayar untuk pembelian awal dan biaya jika mereka ingin tetap dalam pemeliharaan.
Kavka

Jawaban:

5

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:

  • Berkomunikasi dengan klien Anda / pelanggan jauh sebelum transisi. Jelaskan mengapa dan bagaimana itu akan diterapkan. Mengutip keamanan, kinerja, stabilitas, dan fleksibilitas masa depan karena alasan semuanya valid.
  • Jika Anda tetap melakukan istirahat bersih, mintalah umpan balik.
  • Jika ada pengembang pihak ke-3, pastikan bahwa Anda memasukkan inputnya juga sejauh masuk akal.
  • Jika memungkinkan, berikan lapisan kompatibilitas.
  • Berikan panduan peningkatan komprehensif.
  • Buat peningkatan semudah dan semudah mungkin. Minimalkan rasa sakit pengguna Anda, bahkan jika itu berarti sedikit lebih banyak pekerjaan untuk Anda.
  • Jika Anda menagih, tawarkan diskon untuk peningkatan ke versi baru.
  • Tambahkan setidaknya beberapa fitur baru dan berguna dalam versi baru untuk mendorong pembaruan. Ini sangat penting dalam membuat peningkatan lebih menarik bagi para manajer.
  • Jika Anda membuat istirahat, buatlah itu terakhir kali Anda membutuhkannya. Itu berarti beberapa perencanaan komprehensif di muka dan memastikan semuanya diatur dengan benar.
  • Jika Anda memiliki UI, lakukan perubahan dengan mudah. Pikirkan menyegarkan daripada mendesain ulang. Untuk pengguna non-teknis, perubahan UI yang drastis dari satu versi ke versi lain dapat menjadi penyebab utama frustrasi.
  • Versi baru Anda akan terasa lebih stabil dan berkinerja daripada yang lama. Jangan beri alasan kepada pengguna Anda untuk membenci pembaruan. Jangan merilis versi baru tanpa pengujian ekstensif sebelumnya (unit, integrasi, dan pengujian beta).
  • Pertahankan versi lama secara bersamaan untuk periode waktu yang lama. Jika Anda memutuskan untuk menghentikannya dan menghentikan dukungan, berikan setidaknya 6-12 bulan pemberitahuan, lebih banyak jika Anda bisa.
  • Bisakah Anda mempertahankan dua versi sekaligus dalam hal keuangan dan tenaga kerja? (Juga, dari perspektif bisnis, Anda tidak boleh menghentikan dukungan dari versi lama sampai Anda mampu kehilangan klien yang tersisa yang melekat pada versi lama dan tidak ingin memutakhirkan. Poin itu seharusnya ketika biaya Anda dari mempertahankannya lebih besar dari keuntungan Anda.)
  • Berkomitmen untuk melakukan pembaruan keamanan untuk jangka waktu tertentu setelah versi lama dihentikan jika perlu.
  • Sekali lagi, komunikasi sangat besar di seluruh proses. Jangan biarkan pengguna / klien / pelanggan Anda merasa ditinggalkan pada suatu titik. Loyalitas dan gairah mereka adalah dasar dari bisnis Anda. Pastikan Anda menjawab pertanyaan mereka di blog atau di forum Anda. Faktor sosial tidak boleh diremehkan.

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.

VirtuosiMedia
sumber
1
+1: solusi pragmatis. Pertanyaannya, jelas sekali, "Saya pikir ada titik di mana menjaga kompatibilitas menjadi beban besar sehingga perubahan yang berguna untuk antarmuka menjadi tidak mungkin." Karena ini masalahnya, masuk akal untuk membahas ini dengan panduan khusus tentang bagaimana untuk maju.
S.Lott
2

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.

Manfred
sumber
1

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

Doc Brown
sumber
1

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. "

James Anderson
sumber
1
Menambahkan "berpikir" untuk menekankan betapa marahnya perubahan yang dipaksakan dapat membuat orang!
James Anderson
1
Tidak pernah? Astaga. Microsoft tampaknya melanggar prinsip ini dengan setiap rilis utama Windows. Saya akan berpikir bahwa "tidak pernah" tidak benar-benar diikuti dalam praktek sama sekali. Sepertinya "Jarang" atau "Hati-hati" atau "Dengan enggan" akan menjadi kata-kata yang jauh lebih baik daripada "Tidak pernah". Pertanyaannya memang mengatakan, "Saya pikir ada titik di mana menjaga kompatibilitas mundur menjadi beban besar sehingga perubahan yang berguna untuk antarmuka menjadi tidak mungkin." Bisakah Anda mengatasi masalah khusus ini?
S.Lott
@ S.Lott Menggunakan kata-kata kuat yang tidak perlu seperti Tidak pernah ketika Anda benar-benar jarang berarti adalah efek Joel Spolsky yang khas :)
maple_shaft
2
@ S.Lott: Apakah kita berbicara tentang Microsoft yang sama? Microsoft yang OS terbarunya masih dapat menjalankan sebagian besar program yang ditulis untuk yang pertama? Microsoft yang menambahkan kode ke OS baru untuk memastikan bahwa permainan populer yang bergantung pada perilaku yang tidak ditentukan di yang lama akan tetap berfungsi?
Michael Borgwardt
-1: Beberapa pelanggan lebih mahal daripada nilainya.
Jim G.
0

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.

TMN
sumber
0

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?

Jaydee
sumber