Bagaimana saya menghindari creep fitur pada proyek solo?

12

Jadi saya punya program yang saya kerjakan pada tahun 2011 dan sepanjang tahun 2012, tetapi rilis terakhir adalah pada bulan Desember 2011 . Saya telah secara aktif mengerjakannya, tetapi fitur creep memikat kepalanya yang jelek dan sekarang diisi dengan banyak fitur yang belum selesai.

Bagian yang buruk adalah bahwa ketika saya mengimplementasikan fitur, yang baru merayap masuk. Apa yang bisa saya lakukan untuk menghindari merayap fitur di masa depan sehingga saya benar - benar bisa mendapatkan rilis lebih dari setahun ?

Proyek ini berbasis di sekitar iOS dan digunakan untuk memiliki rilis di sekitar setiap pembaruan versi iOS, tetapi yang terakhir kembali dengan 5.1 (2011). Saya ingin bisa mendapatkan siklus rilis yang stabil kembali, tetapi terbukti terlalu sulit.

Cole Johnson
sumber
8
Bisakah Anda lebih spesifik dalam pertanyaan Anda dari mana fitur berasal? Siapa yang bertanggung jawab atas creep fitur? Kamu? Analis Bisnis? Presiden perusahaan? Tuntutan pengguna? Sulit memberi saran tentang cara mengelola fitur creep tanpa mengetahui sumbernya. Juga, karena saya suka Dilbert: search.dilbert.com/comic/Feature%20Creep ;)
FrustratedWithFormsDesigner
1
Apakah Anda satu-satunya pengembang di proyek ini? Proyek tim besar merasa sangat diperlukan untuk memiliki tonggak untuk membuat jadwal pengiriman dapat dikelola, tetapi kita yang terbang sendiri juga dapat mengambil manfaat dari metodologi seperti pengembangan yang didorong oleh fitur .
hardmath
@FrustratedWithFormsDesigner Saya adalah satu-satunya pengembang
Cole Johnson
1
@FrustratedWithFormsDesigner no. Saya sendirian. Kecuali Anda menghitung pemalsuan sumber sebagai orang yang bekerja di proyek , saya satu-satunya.
Cole Johnson
4
Pengiriman juga merupakan fitur ... Kadang-kadang ada baiknya untuk mengingat hal itu ketika merenungkan (belum) fitur lain.
Marjan Venema

Jawaban:

21

Dalam pengalaman saya, itu paling mudah jika Anda dapat memiliki pengembangan dan melepaskan irama yang tidak menghalangi apa yang ingin Anda lakukan. Begini cara saya melakukannya:

  1. Tuliskan fitur-fiturnya, dan beri mereka peringkat yang mencerminkan seberapa banyak Anda ingin bekerja padanya dan seberapa banyak Anda pikir itu akan menguntungkan pengguna (mungkin dimungkinkan untuk melibatkan pengguna yang sebenarnya untuk ini). Kemudian tuliskan dalam urutan itu.
  2. Sebelum Anda masuk / mendorong fitur, pastikan Anda memiliki build yang stabil dan dapat digunakan (pertimbangkan sistem CI untuk memudahkannya).

Dengan cara ini, Anda bisa mendorong rilis setelah setiap fitur jika Anda mau ... atau menunggu rollup yang menawarkan nilai yang Anda inginkan untuk rilis.

catatan:

  • Suatu fitur tidak pernah dapat diberikan prioritas yang lebih tinggi daripada yang sedang Anda kerjakan (atau itu bisa, tetapi tidak dapat mengganggu yang sedang Anda kerjakan). Itu bisa datang berikutnya tetapi tidak pernah sekarang . Itu berarti bahwa ketika Anda beralih dari sekarang ke berikutnya, Anda akan memiliki kesempatan untuk memotong versi rilis jika Anda mau.
Steven Evers
sumber
Sangat membantu! Saya suka keketatan itu.
Cole Johnson
Saya akan menambahkan: Jangan memulai fitur baru sebelum Anda menyelesaikan yang baru. Kalau tidak, Anda akan berakhir dengan basis kode yang tidak dapat melakukan apa pun.
Tyanna
@Tyanna: Itulah yang saya maksudkan dengan "sebuah fitur yang tidak pernah dapat diberikan prioritas lebih tinggi daripada yang sedang Anda kerjakan ... itu tidak dapat mengganggu yang sedang Anda kerjakan ..."
Steven Evers
7

Jawabannya basi dan sering kali mustahil: menolak untuk menambahkan fitur tambahan.

Secara lebih mendalam, jawabannya benar-benar turun ke apa yang membuat fitur baru jatuh ke dalam fitur creep bin? Jika kita mengasumsikan bahwa fitur creep adalah yang ditambahkan ke proyek meskipun faktanya fungsionalitasnya hanya bersinggungan dengan tujuan penggunaan proyek dan bahwa fitur creeping berguna, tidak berlebihan, jawabannya adalah memindahkannya untuk memisahkan , tetapi alat terkait. Gunakan filosofi Unix untuk membangun alat ortogonal dan menempelkannya bersama-sama.

Dari sudut pandang manajemen proyek, jawabannya sebanding. Putuskan berapa banyak waktu yang bersedia Anda curahkan untuk rilis berikutnya dan tentukan tenggat waktu. Perkirakan fitur dan potong cukup untuk membuat tenggat waktu. Jika ada pemangku kepentingan yang terlibat selain diri Anda, buat mereka memilih yang paling penting bagi mereka.

Tinjauan yang baik tentang Penjadwalan dapat ditemukan di Joel on Software:

http://www.joelonsoftware.com/articles/fog0000000245.html

Michael
sumber
9
Karena dia benar-benar solo dalam proyek ini, dia mungkin perlu melakukan outsourcing pekerjaan menampar pemohon fitur.
Philip
2

Salah satu pelajaran terpenting dalam pembangunan adalah mengetahui kapan waktunya untuk berhenti.

Apa yang biasanya terjadi adalah pengembang menambahkan fitur. Itu pada gilirannya menginspirasi lebih banyak ide. Jadi lebih banyak fitur ditambahkan. Itulah, seperti yang Anda katakan, salah satu cara proyek menjadi vaporware. Pengembang tidak pernah melihat proyek sebagai 'selesai', sehingga tidak pernah dirilis.

Kebiasaan yang ingin Anda masuki adalah berhenti berpikir dalam hal rilis / versi sebagai proyek 'selesai'. Sebaliknya, lihat pembangunan sebagai proses jangka panjang. Pikirkan rilis sebagai tonggak di sepanjang jalan menuju apa yang Anda harap suatu hari program akan. Dengan demikian, rilis / versi hanyalah snapshot dari tempat Anda berada dalam proses jangka panjang ... sebuah snapshot yang telah dibulatkan dan diuji dengan baik.

Apa yang dapat Anda lakukan, di sisi praktis, adalah duduk dan tentukan rilis Anda berikutnya. Itu tidak harus sangat teliti. Tuliskan 3-5 fungsionalitas utama baru yang menurut Anda sangat penting untuk rilis berikutnya. ( jumlah fitur yang sebenarnya dapat bervariasi tergantung pada jenis aplikasi, tidak termasuk perbaikan bug atau perubahan minor gui ) Bekerja pada mereka. Jika Anda menemukan ide-ide lain, itu bagus ... buat saja catatan dan terapkan dalam rilis berikut. Ketika Anda menyelesaikan 3-5 item itu, rilis Anda siap untuk versi beta.

Ketika saya memulai aplikasi baru, saya biasanya memikirkan 'visi' akhir untuk aplikasi. Bagi saya, itulah yang saya inginkan dalam versi 3 aplikasi. Dengan tolok ukur itu, saya punya ide tentang apa yang akan membuat versi solid 1 - hanya dasar-dasarnya.

Ringkasan:

Setiap rilis tidak harus menjadi 'visi' proyek yang selesai. Hanya tonggak menuju visi itu.

GrandmasterB
sumber
2

Gunakan sistem kontrol versi yang murah untuk membuat cabang untuk beberapa ide, dan jauhkan dari jalur rilis Anda. Misalnya dalam git, Anda dapat "merambah" beberapa ide, dan kemudian git stashmembuangnya. Kemudian Anda dapat meninjau simpanan ini dan memetiknya dengan urutan apa pun yang tampaknya menarik.

Untuk fitur yang lebih besar, buat cabang nyata (sehingga Anda dapat melakukan banyak komit). Contoh kasus: ketika saya ingin menambahkan dukungan generasi ke pemulung, saya membuat cabang. Stash menangkap hal-hal kecil yang mengganggu dengan sangat baik. Fitur besar dapat mulai sebagai simpanan, kemudian berubah menjadi cabang, dan akhirnya bergabung ketika siap.

Dengan simpanan dan cabang, Anda dapat mencatat ide-ide Anda, memprioritaskannya, dan membangun ruang lingkup untuk rilis proyek solo Anda, seperti halnya proyek tim yang dikelola.

Lihat, ketika Anda mendapatkan ide, itu harus pergi ke suatu tempat , dan tempat terbaik adalah kode : repo. Merayap fitur lebih baik daripada melupakan ide bagus. Tapi tentu saja, jika Anda merayapi semua fitur Anda ke jalur utama yang sama, itu akan terus menunda rilis, kecuali jika Anda memotong rilis tidak rapi penuh dengan hal-hal setengah jadi bahwa pengguna harus diperingatkan untuk tidak menggunakan.

Kaz
sumber