Apa yang harus dilakukan ketika fungsionalitas kritis ketergantungan rusak dan menghambat pengembangan?

12

Kemarin saya sedang mengerjakan proyek API Rails 5 yang menggunakan perpustakaan tindakan-sebagai-taggable-on untuk memungkinkan hal-hal untuk memiliki tag (seperti pertanyaan pada SE). Rails 5 saat ini dalam dukungan alpha. Saat ini ada PR untuk memperbaiki bug yang menunggu untuk digabungkan menjadi master; bug menyebabkan cabang fitur saya terhenti setengah jalan sampai selesai - saya tidak bisa mengimplementasikan fungsi perpustakaan karena memuat rusak.

Sebagai perbaikan cepat, saya cukup mengkloning repo, memperbaiki masalah dengan kode yang sama dengan yang dimiliki PR, dan mengarahkan Gemfile (file kontrol versi ketergantungan) ke garpu Github saya sendiri, hingga perbaikan bug akhirnya digabungkan kembali menjadi master.

Saya beruntung bahwa perbaikannya sederhana ( dan seseorang telah melakukannya ), jadi saya dapat mengatasi masalah tersebut. Tetapi bagaimana jika perpustakaan ini sangat penting untuk pengembangan aplikasi saya? Bagaimana jika perbaikan bug yang menghentikan perkembangan saya bukanlah masalah yang tersebar luas untuk orang lain , jadi perbaikannya tidak terjadi dengan cepat seperti yang terjadi saat ini?

Bayangkan bahwa fitur ini perlu diselesaikan sebelum pengembangan fitur - fitur dependen lainnya - apa yang Anda lakukan dalam situasi itu? Bagaimana jika, bagi saya, penandaan benar - benar penting untuk frasa pengembangan berikutnya, di mana segala sesuatu bergantung padanya - tetapi ketergantungan penandaan disadap untuk konfigurasi saya? Apa yang dilakukan seseorang ketika fungsionalitas kritis suatu dependensi menghambat pengembangan (a) fitur?

Dan, tentu saja, pertarungan pedang di kursi kantor selama berjam-jam atau berhari-hari bukanlah pilihan ...

Chris Cirefice
sumber

Jawaban:

19

Ini adalah salah satu alasan Anda menggunakan perangkat lunak sumber terbuka, bukan?

Anda dapat mengajukan argumen yang sama untuk "apa yang terjadi jika pustaka sumber tertutup saya yang sangat mahal, berpemilik, tiba-tiba jatuh? Apakah akan ada seseorang di [perusahaan perangkat lunak monolitik] yang besar untuk memperbaikinya bagi saya?" Dengan perangkat lunak sumber terbuka, setidaknya Anda memiliki kesempatan untuk memperbaiki bug itu sendiri.

Jika perangkat lunak Anda sangat bergantung pada perpustakaan sumber terbuka, ada tiga hal yang dapat Anda lakukan untuk mengurangi risiko:

  1. Biasakan diri dengan basis kode, bahkan mungkin membuat kontribusi sendiri. Ini adalah alasan lain mengapa Anda memilih open-source, kan?

  2. Miliki perpustakaan cadangan jika perpustakaan pertama jatuh. Inilah sebabnya mengapa Anda memprogram ke antarmuka; sehingga Anda dapat mengubah implementasi jika perlu, bukan?

  3. Seimbangkan keinginan Anda untuk melakukan pendarahan terhadap kebutuhan Anda akan stabilitas (yaitu jangan menggunakan perangkat lunak alfa). Anda tahu apa yang Anda hadapi, bukan?

Robert Harvey
sumber
Terima kasih atas jawaban Anda, Robert; ya saya memutuskan untuk menggunakan Rails 5 untuk fitur-fitur barunya, dan belum sepenuhnya merencanakan proyek dan tidak tahu bahwa perpustakaan ini akan memiliki masalah kompatibilitas dengan Rails 5. Tidak apa-apa, saya hanya meninggalkan cabang itu sebagai WIP dan Saya sedang memantau repo Github untuk memperbaikinya. Saya kira salah satu pelajaran utama di sini adalah merencanakan dengan baik . Jika saya telah melakukan penelitian lebih bernilai satu jam sebelum memulai pengembangan, saya akan melihat masalahnya!
Chris Cirefice
11

Solusi untuk mengembangkan aplikasi di mana bug atau kurangnya fitur memiliki risiko tinggi menyebabkan pekerjaan Anda berhenti adalah dengan tidak menggunakan perpustakaan berisiko tinggi. Membosankan dan timpang, saya tahu ..

Anda mengatakan ini adalah rilis alpha. Jangan gunakan rilis alpha untuk proyek-proyek penting. Ini bahkan bukan rilis beta, apalagi 1.0 jadi hal seperti ini diharapkan. Inti dari tahap ini dalam suatu proyek adalah untuk menemukan masalah dan mengeraskan proyek.

Jika Anda menemukan diri Anda dalam situasi ini, pada dasarnya Anda harus melakukan apa yang Anda lakukan (kami telah melakukan hal yang persis sama). Perbaiki dan PR proyek.

Tetapi solusinya menggunakan pustaka yang lebih stabil dengan fungsi dan API yang dipahami atau setidaknya mempertahankan kompatibilitas ke belakang ke versi stabil. Anda harus waspada tergantung 100% pada sesuatu yang tidak dapat Anda kendalikan dan butuhkan untuk berhasil.

enderland
sumber
1

Biasanya disarankan untuk menyembunyikan perpustakaan pihak ketiga di belakang adaptor atau pembungkus yang Anda tulis sendiri. Ini memiliki dua keuntungan:

  • Anda dapat menukar perpustakaan pihak ketiga dengan yang lain tanpa mengubah kode Anda
  • Anda dapat memprogram sisa kode Anda terhadap antarmuka adaptor Anda sendiri. Jika terjadi masalah sementara dengan perpustakaan, cukup colokkan stub / palsu Anda sendiri atau versi fungsionalitas perpustakaan yang disederhanakan. Dengan cara itu pengembangan dan pengujian fitur hilir Anda tidak diblokir (meskipun penyebaran program lengkap masih).
jhyot
sumber