Apa yang terjadi jika fitur yang digabungkan ke dalam pengembangan ditunda oleh manajemen?

53

Kami baru-baru ini memiliki masalah di mana fitur untuk aplikasi web kami (pendaftaran otomatis) ditunda oleh manajemen karena mereka merasa permulaannya terlalu "dingin" tetapi mereka menginginkan semua fitur lain yang telah kami kerjakan untuk ditayangkan.

Masalahnya adalah bahwa fungsionalitas ini telah digabungkan menjadi pengembangan ketika selesai bersama dengan semua fitur lain yang kami harapkan akan diluncurkan secara langsung pada rilis berikutnya sehingga kami tidak bisa hanya menggabungkan dev -> test -> master seperti yang biasa kami lakukan.

Bagaimana kita bisa menghindari masalah ini?

Steve
sumber
Tergantung pada sudut pandang Anda tentang bagaimana Anda ingin menyelesaikannya, pertanyaan ini lebih cocok untuk tempat kerja, jika Anda tidak mencari solusi teknis.
Malavos

Jawaban:

74

Salah satu pendekatan adalah fitur menandai itu. Itu bisa hidup di basis kode tetapi dinonaktifkan oleh konfigurasi.

Pilihan lain untuk membuat komit revert yang mengembalikan gabungan fitur sehingga tidak dalam pengembangan lagi. Cabang baru dapat dibuat yang membalikkan pengembalian, dan dibiarkan menunggu untuk bergabung nanti. Jika Anda menggunakan permintaan tarik Github, Anda dapat melakukannya dengan mudah dengan tombol "kembalikan gabungan" pada permintaan tarik yang digabungkan.

Daenyth
sumber
9
Bukankah penandaan konfigurasi menyiratkan penggandaan upaya pengujian untuk kode itu? Anda harus menguji kedua jalur.
16
Dalam hal ini, karena Anda tidak akan mengaktifkan bendera itu dalam produksi, Anda dapat menguji kasing sekarang untuk rilis, lalu menguji kasing ketika siap untuk pergi ke prod. Itu harus kira-kira sama dengan menguji coba revert dan recommit.
Alan Shutko
4
Istilah umum adalah Fitur Toggle . Jika ada "titik masuk fitur" kecil, ini mungkin dapat dilakukan setelah keputusan manajemen. Jika tidak, seseorang akan mendapatkan masalah dengan metode ini juga dengan metode apa pun juga.
Doc Brown
3
Kami memiliki fitur yang dalam pengembangan selama 6+ bulan yang disembunyikan oleh Feature Toggling, sebagaimana Doc Brown menyebutnya. Ini juga memungkinkan kami untuk menguji fitur (atau ketiadaan) di lingkungan non-produksi. Kadang-kadang fitur-fitur ini menambah fitur yang ada, dalam hal ini kita harus memiliki unit test untuk set fitur lama dan baru. Setiap tes unit hanya akan mengatur bendera untuk apa pun yang perlu dilakukan tes saat ini.
ps2goat
25

Bagaimana kita bisa menghindari masalah ini?

Dari perspektif proses, cari tahu:

  • Siapa pembuat keputusan untuk memulai pekerjaan ini?
  • Mengapa keputusan untuk melepaskan fitur ini berubah?
    • Harapan yang terlewat?
    • Miskomunikasi?
    • Dukungan bisnis yang tidak memadai?
    • Tidak ada keterlibatan pelanggan?

Kemungkinan besar ada penurunan dalam komunikasi di sepanjang jalan. Ini penting untuk dimiliki karena ketika tidak berhasil, proses pengembangan Anda akan didasarkan pada pemahaman yang salah dan salah tentang persyaratan bisnis.

enderland
sumber
9
+10. Segera setelah manajemen mulai meragukan pelepasan fitur, mereka harus memberi tahu pengembang, sehingga kemungkinan penghapusan bisa diperhitungkan ketika memutuskan untuk menggabungkan fitur menjadi pengembangan.
Bart van Ingen Schenau 2-15
14
Ini bukan jawaban yang sangat konstruktif - terkadang semuanya berjalan miring karena berbagai alasan. Tentu, mengetahui bahwa itu tidak boleh digabungkan lebih cepat daripada nanti itu penting, tetapi itu tidak berarti suatu fitur akan ditarik pada menit terakhir. Mungkin perubahan kontrak, mungkin pelanggan Anda tidak membayar, mungkin masalah hukum muncul .. Anda masih harus mengelola masalah alih-alih menunjukkan kesalahan
gbjbaanb
11
Jika ada orang-orang di organisasi Anda yang cukup kuat untuk menolak mengakui kesalahan, dan juga kekanak-kanakan tidak ingin menghindari kesalahan, maka Anda masih harus menghadapi masalah mayat untuk informasi Anda sendiri. Anda hanya tidak ingin memberi tahu mereka (atau menuliskannya terlalu eksplisit). Yang mengatakan, enderland tidak menggunakan kata "menyalahkan", dan jika organisasi menafsirkan saran ini sebagai "mencari tahu siapa yang harus disalahkan" maka itu sendiri merupakan masalah bagi organisasi untuk bekerja. Semua ini mengatakan "pahami mengapa masalah terjadi", yang penting untuk menghindarinya di masa depan.
Steve Jessop
2
Saya sepenuhnya setuju, ini adalah kekacauan manajemen, bukan pengembang.
durron597
3
@enderland maksud saya adalah Anda tidak dapat menghindari beberapa masalah, jadi Anda harus mempertimbangkan cara memperbaiki situasi. Mudah-mudahan Anda tidak akan sampai sejauh itu terlalu sering, tetapi pasti akan terjadi cepat atau lambat jadi rencanakan dengan tepat.
gbjbaanb
19

Lupakan sejenak masalah dengan manajemen Anda, dan bayangkan Anda sudah memiliki "fitur pendaftaran otomatis" yang sudah ada dalam rilis produksi terbaru Anda, sangat terintegrasi ke dalam basis kode Anda. Sekarang Anda mendapatkan persyaratan baru untuk menambahkan "off-switch" untuk "pendaftaran otomatis". Bagaimana Anda menangani ini dalam alur kerja Git Anda?

Saya kira Anda akan mendeklarasikan "penonaktifan pendaftaran otomatis dengan konfigurasi" hanya sebagai fitur tambahan (itu hanya bentuk Fitur Toggle ), jadi ini harus diintegrasikan dengan lancar ke dalam alur kerja Anda. Anda dapat memperkirakan upaya, jika suka, Anda dapat menggunakan cabang fitur untuk itu (atau tidak, jika Anda tidak menggunakan cabang fitur untuk masalah seperti itu). Dan Anda pasti dapat menggunakan aliran "uji gabungan - uji -> master" biasa yang Anda gambarkan.

Dan itu sebenarnya cara Anda dapat menangani ini dalam situasi Anda saat ini. Dari sudut pandang alur kerja git, tidak masalah jika permintaan perubahan berasal dari manajemen untuk rilis 1.0, atau jika permintaan perubahan adalah keinginan pelanggan baru untuk rilis 2.0.

Doc Brown
sumber
Fowler memiliki keluaran yang sangat bagus, tetapi saya tidak dapat mendukung metode ini untuk pengenalan fitur. Upaya terkoordinasi untuk sakelar semacam itu sepertinya merupakan beban yang tidak perlu. Saya dapat mendukung fitur matikan fitur untuk menghapus fitur setelah bergabung, tetapi membangun sebagai bagian dari persyaratan membuat saya tidak nyaman.
Gusdor
@ Goddor: lihat edit saya.
Doc Brown
1

Ini adalah masalah persis yang saya miliki dengan aliran gitflow dan GitHub, dan tampaknya dengan aplikasi web ini sering terjadi - atau lebih seperti norma. Tampaknya Anda akan menyelesaikan masalah ini secara surut (disebutkan di atas) atau secara proaktif (contoh di bawah).

Saya telah membuat 'bundel cabang' di samping cabang gitflow standar. Bundel terdiri dari semua fitur yang siap untuk uat / qa. Daftar fitur uat / qa dibuat. Ini digabung ke dalam bundel sementara, dan bundel itu akan digunakan untuk uat / qa. Setiap perbaikan bug terjadi pada cabang fitur asli, dan itu akan dipasang kembali ke dalam bundel dan digunakan. Ini memisahkan rilis yang akan datang serta memungkinkan pengujian fitur-fitur tersebut bersama sebelum mereka menemukan jalan mereka ke cabang pengembangan. Cabang-cabang yang disetujui mendapatkan permintaan tarik untuk dikembangkan - mengikuti proses gitflow. Fitur siap uji dapat ditambahkan atau dihapus dari cabang bundel sementara dan digunakan kembali.

  • Master ini selalu mencerminkan kondisi siap-produksi (dapat diotomatisasi dengan kait)
  • Develop selalu mencerminkan kandidat rilis terbaru yang dikirim (dan diuji) berikutnya

Kontra mencakup mengelola daftar bundel dan menambahkan jenis cabang lainnya; Namun, selain perbaikan retro, yang saya pikir sudah terlambat, ini tampaknya menjadi solusi yang lebih layak.

Dengan addon GUI, mungkin optimal untuk menandai cabang fitur per penyebaran bundel - dengan otomatisasi dalam pikiran.

David Latty
sumber