Minggu ini di tempat kerja saya merasa gelisah lagi. Setelah melalui kelincahan standar, TDD, kepemilikan bersama, metodologi pengembangan ad hoc untuk tidak pernah merencanakan apa pun di luar beberapa cerita pengguna pada selembar kartu, secara verbal mengunyah bungkam tentang teknikalitas dari integrasi pihak ketiga iklan mual tanpa pernah melakukan sesuatu yang nyata berpikir atau karena ketekunan dan secara arsitektural menggabungkan semua kode produksi dengan pengujian pertama yang muncul di benak siapa pun selama beberapa bulan terakhir kita mencapai akhir siklus rilis dan lihatlah fitur utama yang terlihat secara eksternal yang telah kita kembangkan terlalu lambat untuk gunakan, kereta, menjadi sangat rumit dan benar-benar tidak fleksibel.
Selama proses ini "paku" dilakukan tetapi tidak pernah didokumentasikan dan tidak ada desain arsitektur tunggal yang pernah diproduksi (tidak ada FS, jadi apa-apaan ya, jika Anda tidak tahu apa yang Anda kembangkan, bagaimana Anda bisa merencanakan atau merisetnya ?) - proyek diteruskan dari pasangan ke pasangan, masing-masing hanya berfokus pada satu cerita pengguna pada satu waktu dan hasilnya tidak dapat dihindari.
Untuk mengatasinya, saya pergi dari radar, pergi (yang ditakuti) air terjun, terencana, kode dan pada dasarnya tidak menukar pasangan dan mencoba sebanyak yang saya bisa untuk bekerja sendiri - berfokus pada arsitektur yang solid dan spesifikasi daripada unit test yang akan datang nanti setelah semuanya dijabarkan. Kode sekarang jauh lebih baik dan benar-benar dapat digunakan, fleksibel dan cepat. Orang-orang tertentu tampaknya benar-benar membenci saya melakukan ini dan telah keluar dari jalan mereka untuk menyabot upaya saya (mungkin secara tidak sadar) karena itu bertentangan dengan proses suci tangkas.
Jadi bagaimana Anda, sebagai pengembang, menjelaskan kepada tim bahwa tidak "tidak gesit" untuk merencanakan pekerjaan mereka, dan bagaimana Anda memasukkan perencanaan ke dalam proses tangkas? (Saya tidak berbicara tentang IPM; Saya sedang berbicara tentang duduk dengan masalah dan membuat sketsa desain ujung ke ujung yang mengatakan bagaimana masalah harus diselesaikan secara cukup rinci sehingga siapa pun yang bekerja pada masalah tahu apa arsitektur dan pola yang harus mereka gunakan dan di mana kode baru harus diintegrasikan ke dalam kode yang ada)
Jawaban:
Saya pikir (dan saya mungkin akan mengambil risiko di sini) bahwa SEMUA proyek harus memiliki sedikit air terjun klasik: Analisis awal dan fase spesifikasi sangat penting. Anda harus tahu apa yang Anda lakukan, dan Anda harus memilikinya secara tertulis. Mendapatkan persyaratan secara tertulis itu sulit dan memakan waktu, dan mudah dilakukan dengan buruk. Itulah mengapa begitu banyak orang melewatkannya - alasan apa pun akan berlaku: "Oh, kami gesit sehingga kami tidak perlu melakukan itu." Sekali waktu, sebelum gesit, itu adalah "oh saya benar-benar pintar dan tahu bagaimana menyelesaikan ini, jadi kita tidak perlu melakukan itu." Kata-katanya telah sedikit berubah tetapi lagu itu pada dasarnya sama.
Ini tentu saja semua omong kosong: Anda harus tahu apa yang harus Anda lakukan - dan spesifikasi adalah sarana yang digunakan pengembang dan klien untuk mengkomunikasikan apa yang dimaksudkan.
Setelah Anda tahu apa yang harus Anda lakukan - buat sketsa sebuah arsitektur. Ini adalah bagian "ambil gambar besar dengan benar". Tidak ada solusi ajaib di sini, tidak ada cara yang benar, dan tidak ada metodologi yang akan membantu Anda. Arsitektur adalah SINTESIS dari suatu solusi, dan mereka datang dari jenius yang sebagian diilhami, dan sebagian pengetahuan yang diperoleh dengan susah payah.
Pada setiap langkah ini akan ada iterasi: Anda menemukan sesuatu yang salah atau hilang, dan perbaiki. Itu debugging. Itu hanya dilakukan sebelum kode apa pun ditulis.
Beberapa melihat langkah-langkah ini membosankan, atau tidak diperlukan. Sebenarnya, kedua langkah ini adalah yang paling penting dari semuanya dalam menyelesaikan masalah apa pun - salah paham dan semua yang mengikuti akan salah. Langkah-langkah ini seperti fondasi bangunan: Lakukan kesalahan dan Anda memiliki Menara Miring Pisa.
Setelah Anda memiliki APA (itu spec Anda) dan BAGAIMANA (itulah arsitektur - yang merupakan desain tingkat tinggi) maka Anda memiliki tugas. Biasanya banyak sekali.
Hancurkan tugas-tugas sesuai keinginan Anda, alokasikan sesuai keinginan Anda. Gunakan metodologi apa pun dalam seminggu yang Anda sukai, atau yang cocok untuk Anda. Dan selesaikan tugas-tugas itu, mengetahui ke mana Anda menuju dan apa yang perlu Anda capai.
Sepanjang jalan akan ada jejak palsu, kesalahan, masalah yang ditemukan dengan spesifikasi dan arsitektur. Ini mendorong hal-hal seperti: "Yah, semua perencanaan itu hanya buang-buang waktu." Yang juga banteng. Itu hanya berarti Anda memiliki KURANG kotor untuk berurusan dengan nanti. Ketika Anda menemukan masalah dengan hal-hal awal hari tingkat tinggi, FIX THEM.
(Dan pada masalah sampingan di sini: Ada godaan besar yang telah saya lihat berulang kali untuk mencoba memenuhi spesifikasi yang mahal, sulit, atau bahkan tidak mungkin. Jawaban yang benar adalah dengan bertanya: "Apakah implementasi saya rusak, atau apakah specnya rusak? "Karena jika masalah dapat diselesaikan dengan cepat dan murah dengan mengubah spec, maka itulah yang harus Anda lakukan. Kadang-kadang ini bekerja dengan klien, kadang tidak. Tapi Anda tidak akan tahu apakah Anda jangan tanya.)
Akhirnya - Anda harus menguji. Anda dapat menggunakan TDD atau apa pun yang Anda suka tetapi ini bukan jaminan bahwa pada akhirnya, Anda melakukan apa yang Anda katakan akan Anda lakukan. Ini membantu, tetapi itu tidak menjamin. Jadi, Anda perlu melakukan tes akhir. Itulah sebabnya hal-hal seperti Verifikasi dan Validasi masih menjadi hal besar dalam sebagian besar pendekatan manajemen proyek - baik itu pengembangan perangkat lunak atau pembuatan buldoser.
Ringkasan: Anda membutuhkan semua hal membosankan di muka. Gunakan hal-hal seperti Agile sebagai sarana pengiriman, tetapi Anda tidak dapat menghilangkan pemikiran kuno, menentukan, dan desain arsitektur.
[Apakah Anda serius berharap untuk membangun gedung 25 lantai dengan menempatkan 1000 pekerja di lokasi dan menyuruh mereka membentuk tim untuk melakukan beberapa pekerjaan? Tanpa rencana. Tanpa perhitungan struktural. Tanpa desain atau visi bagaimana tampilan bangunan. Dan dengan hanya mengetahui bahwa itu adalah sebuah hotel. Tidak - tidak juga.]
sumber
Saya masih kagum bahwa banyak orang berpikir bahwa TDD berarti menulis unit test terlebih dahulu. Tidak, itu berarti menulis tes yang Anda perlukan sebelum menulis kode. Tes ini sebenarnya dapat berupa tes unit, uji integrasi, uji end-to-end dan tentu saja tes kinerja (well, Anda mungkin tidak akan menulis tes kinerja sebelum kode diuji tetapi itu tidak berarti Anda tidak boleh menulisnya sama sekali). Jenis tes yang dibutuhkan harus terlihat dari definisi yang dilakukan untuk cerita pengguna. Jika salah satu kriteria penerimaan untuk cerita pengguna mengatakan bahwa fitur harus memberikan hasil dalam 500ms dengan 50 pengguna bersamaan maka cerita pengguna tidak dapat dianggap selesai sampai Anda memiliki tes kinerja yang akan membuktikan bahwa kriteria penerimaan ini dipenuhi. Setelah Anda memiliki tes otomatis, Anda dapat memeriksa setiap hari bahwa itu lulus saat Anda menambahkan fitur lainnya.
Ini lebih terdengar seperti kriteria penerimaan Anda tidak didefinisikan dengan benar dan karena itu Anda tidak dapat menguji kinerja Anda. Masih bisa terjadi bahwa aplikasi berkinerja buruk setelah Anda menyebarkannya ke lingkungan nyata dan menggunakannya di bawah beban berat tetapi itu selalu dapat dianggap sebagai kegagalan persyaratan (jika persyaratan tidak didefinisikan, pengembang tidak mempertimbangkannya ketika bekerja pada kode) atau tim pengembangan (pengujian tidak memadai terhadap persyaratan yang ditentukan).
Hal lain yang menarik adalah bahwa pengembang di tim Anda berfokus pada cerita pengguna tunggal. Agile adalah tentang komunikasi sehingga pengembang harus mengomunikasikan apa yang dibutuhkan cerita pengguna dan bagaimana hal itu memengaruhi aplikasi lainnya - kolaborasi adalah suatu keharusan. Tes harus mencakup hal itu juga sehingga jika satu pengembang merusak fungsionalitas yang diperlukan untuk cerita pengguna lain, itu harus terlihat dalam pengujian otomatis. Jika Anda masih merasa itu tidak cukup atau tidak berhasil, Anda bisa memperkenalkan pertemuan arsitektur di mana seluruh tim bekerja sama dan membahas arsitektur aplikasi. Biasanya cukup untuk mengadakan pertemuan sekali seminggu.
Banyak hal dari proses air terjun diganti dengan komunikasi dan tes otomatis. Tidak ada yang mengatakan bahwa Anda tidak dapat menulis dokumentasi atau desain tingkat tinggi! Anda dapat dan banyak tim menggunakan misalnya Wiki untuk itu.
sumber
Itu tidak ada hubungannya dengan lincah, itu pertanda programmer tidak melakukan pekerjaan mereka dengan benar.
Satu ide dasar tangkas adalah bahwa tim memiliki kontrol penuh atas proses. Itu berarti mereka harus menyetujui jumlah perencanaan, dokumentasi, pengujian dan bagaimana mereka berurusan dengan refactoring. Semua kekuatan itu hebat, tetapi itu juga datang dengan tanggung jawab dan ini mungkin di mana tim Anda gagal. Mereka menerima kebebasan mereka, tetapi mengabaikan tanggung jawab mereka.
Pada akhirnya itu hanya masalah menjelaskan tentang kualitas kode dan mencoba menyepakati cara untuk meningkatkan dan mempertahankannya. Praktek pemrograman normal berlaku, sungguh.
Kiat pro: gunakan "Definisi Selesai" Anda untuk menegakkan ini. Pastikan semua orang menyetujuinya dan letakkan itu terlihat untuk semua orang. Gunakan itu sebagai penjaga gerbang yang ketat untuk memutuskan apakah sebuah cerita selesai atau tidak. Bahkan mungkin untuk menambahkan persyaratan non-fungsional (seperti kinerja) ke daftar itu juga.
sumber
Ya. Rekan tim Anda adalah idiot. Proyek Anda tersedot karena Agile. Merasa lebih baik? Oke, mari kita lanjutkan. : P
Saya pikir Anda dan tim Anda akan dapat berkomunikasi dengan lebih efektif tentang apa yang salah jika Anda kurang berkonsentrasi pada nama-nama Metodologi M Anda dan lebih banyak tentang mengapa perangkat lunak yang Anda tulis begitu lambat dan bermasalah. Jangan gunakan istilah Agile atau air terjun sama sekali. Mereka jelas dimuat secara emosional di kantor Anda.
Agile terkadang bekerja. Tidak berhasil untuk tim Anda saat ini. Beberapa orang akan mengatakan itu karena Anda salah Agile. Lagipula, Agile bekerja, jadi jika Anda melakukannya dengan benar itu akan berhasil, bukan? Masa bodo.
Kedengarannya tidak ada yang tidak setuju ada kegagalan, tetapi Anda tidak akan memenangkan teman, memengaruhi orang, atau melakukan yang lebih baik lain kali jika Anda menyalahkan metodologi. Itu mungkin tidak ada hubungannya dengan apa yang sebenarnya salah.
Alih-alih, berkonsentrasilah pada menjabarkan penyebab paling langsung dari kegagalan dan bekerja bersama tim untuk memastikan mereka tidak terjadi lagi. Ini akan membutuhkan keterampilan orang.
Berbicara tentang keterampilan orang, Anda tidak perlu terkejut bahwa tim Anda tidak menghargai Anda membuat mereka terlihat buruk dengan melakukan semua pekerjaan mereka dan melakukannya lebih baik daripada yang mereka lakukan. Dengan melakukan ini "di bawah radar" Anda mungkin telah merusak beberapa hubungan sekarang Anda harus membangun kembali untuk menjadi anggota tim yang efektif.
Saya pikir cara terbaik untuk melihat situasi seperti ini adalah dengan mempertimbangkan hasil total jangka panjang tim secara keseluruhan. Anda mungkin telah menghemat minggu ini, tetapi Anda mungkin telah melakukan yang lebih baik dalam jangka panjang untuk perusahaan Anda dengan membangun tim yang lebih baik .
Saya mengatakan semua hal ini kepada Anda, tetapi saya pikir Anda mungkin sudah tahu sebagian besar dari mereka dan bisa menjelaskannya kepada orang lain jika Anda tidak begitu dekat dengan situasi ini.
sumber
Jika Anda ingin menambahkan kutipan tipis ke diskusi Anda, Eisenhower punya yang bagus:
"Rencana bukan apa-apa; perencanaan adalah segalanya."
http://www.brainyquote.com/quotes/quotes/d/dwightdei149111.html
Maksudnya Anda harus berharap untuk mengubah rencana Anda, jadi jangan terlalu banyak memberi nilai pada rencana itu sebagaimana adanya, tetapi pada saat yang sama proses perencanaan akan dengan tajam memfokuskan energi Anda dengan cara yang krusial. Anda harus membuat rencana sebelum dapat mengujinya dan memperbaikinya.
sumber
+1 Ini adalah deskripsi terbaik tentang gesit perusahaan yang saya baca baru-baru ini.
Setiap orang yang bergaul dengan gesit menunjukkan bahwa hal itu tidak pernah dimaksudkan untuk ini, tetapi begitu semua orang terjebak dalam metrik, inilah yang Anda dapatkan dari tim yang tidak memiliki hasrat tentang kualitas produk dan keduanya terobsesi dengan menguji cakupan di atas segalanya atau dengan memenuhi tenggat waktu mingguan yang dapat diberikan, terlepas dari sudut mana mereka telah memasukkan orang lain karena hanya itu yang membuatnya hingga ke tingkat manajemen setiap minggu.
Saya belum pernah melihat ini diperbaiki dengan sesuatu yang kurang dari re-org. Jika Anda adalah perusahaan kelas menengah dengan tidak ada yang istimewa untuk menarik orang-orang yang sangat bersemangat maka bahkan itu tidak akan memperbaikinya kecuali manajemen berikutnya kadang-kadang mengubah metodologi.
Agile hanya bekerja dengan baik di organisasi org dimana tim pengembang cukup peduli untuk membuat produk yang bagus meskipun ada pekerjaan tambahan tanpa akreditasi yang diperlukan. Secara efektif mereka harus cukup peduli untuk menjadikannya baik pada waktu mereka sendiri, berjuang untuk perbaikan (dan bersedia membakar banyak waktu tambahan untuk mengulangi tes dalam beberapa kasus TDD)
Anda jelas-jelas peduli tentang pengiriman produk yang bagus, mereka jelas-jelas peduli untuk melakukan serangkaian gerakan dan menerima gaji untuk terus membersihkan kekacauan yang mereka buat.
Saya akan mencari pekerjaan yang kurang menjengkelkan di tempat lain apakah itu gesit atau tidak.
Jika Anda benar-benar terbakar pada gesit ada banyak tempat yang masih melakukan metodologi lain. Hampir semua yang ada dalam penawaran atau kontrak misalnya.
sumber
Saya cenderung menggunakan semacam hibrida. Rencana keseluruhan adalah air terjun, tetapi ada tangkas dalam eksekusi.
Dugaan saya adalah bahwa jika situasinya seburuk yang Anda katakan, tim Anda tidak benar-benar menggunakan gesit, mereka hanya menjadi malas atau tidak disiplin. Agile bukan tentang tidak merencanakan, ini hanya tentang menjadi fleksibel, dan, yah, tangkas.
sumber
Kami memiliki masalah yang sama dengan beberapa staf.
Pada dasarnya "Saya tidak tahu sampai saya menulisnya" adalah pernyataan favorit. Jadi kami pergi sebaliknya, kami bekerja dengan klien untuk menentukan kiriman dengan poin sign off. Yang terakhir adalah "sekarang tulis kode untuk melakukan X".
Jika kita memiliki "tulis desain / pengujian / rencana dll" dalam sprint yang sama seperti "lakukan kode yang menyenangkan dan menarik" maka bagian pertama tidak pernah terjadi ...
TETAPI jika saya menempatkan "Anda tidak bisa melakukan kode yang menyenangkan dan menarik sampai Anda mengatakan apa yang akan Anda buat dan klien telah keluar" kemudian
Bagian tangkas datang ketika klien kemudian berubah dari rencana dan Anda dapat beradaptasi dalam siklus 2 minggu TIDAK terbang di kursi celana Anda dan menebusnya sepanjang jalan.
Dalam kasus kami, "desain besar muka" dipecah menjadi 9 tahap (rilis produksi aktual) dengan rata-rata 5 subtasi. Para perancang dan pengembang berpacu satu sama lain, perancang menjadi 1-3 substage di depan para pengembang ... terlalu jauh dan penemuan dalam pengembangan terlalu banyak merusak desain, terlalu dekat dan menyesuaikan untuk mendesain biaya terlalu banyak seperti sebelumnya. sudah menerapkan "set in stone" dalam pengembangan. Setiap subtase bernilai 2-4 sprint untuk 1 pengembang.
Dalam proyek yang lebih kecil, kami hanya meminta pengembang yang sama mendesain terlebih dahulu> keluar> faktur> kembangkan> keluar> faktur ... dalam siklus.
Masalah penamaan tes
Pengujian memiliki banyak wajah, secara resmi ada sekitar 7 kategori tes masing-masing dengan sub bagian ... salah satunya adalah "menulis tes unit otomatis".
Itu nama yang buruk untuk memiliki "tes pengembangan pertama" murni karena pengembang memahami tentang apa "tes" artinya dalam konteks ini mereka melihat tes sebagai menulis kode aktual untuk pengujian terhadap antarmuka untuk implementasi. Ketika itu tidak benar-benar sama sekali ... Anda dapat melakukan ini ketika menulis kode tetapi benar-benar "memvalidasi desain terhadap kasus penggunaan dan cerita pengguna SEBELUM mulai menulis kode" ... dilakukan dengan benar ini menghapus banyak dari masalah yang biasanya ditemukan selama pengembangan sementara masih dalam versi "kertas yang dapat dibuang" jauh lebih murah.
sumber
Salah satu elemen kunci dari Agile adalah ide perbaikan berkelanjutan, dan gagasan bahwa seluruh tim memiliki proyek. Jadi pendekatan yang benar adalah dengan meninjau masalah dengan tim, dan meminta tim memutuskan bagaimana cara memperbaikinya.
Salah satu anggota tim pergi sendiri, mengabaikan semua prinsip Agile dan melakukan hal-hal dengan caranya sendiri dapat menghasilkan sejumlah kecil kode yang bekerja dengan baik tetapi tidak benar-benar memajukan seluruh proyek dengan cara yang positif.
sumber
Salah satu cara untuk membuatnya bekerja adalah dengan membuat T-Map yang mencakup semua sprint back-log Anda
Setiap tim memiliki utas, masing-masing sprint adalah titik. Itu semua terkait bersama (di situlah tim Anda tampaknya jatuh). Sematkan ini di suatu tempat, dan dapatkan magnet untuk mewakili pasangan / subteam. Mereka bahkan bisa 'berlomba'. Tetapi semua orang tahu di mana mereka dan tim lain berada. Letakkan dependancies di sini jika ada.
Intinya di sini adalah Anda menyampaikan proses total tetapi juga memecahnya menjadi sprint. Bahkan jika hanya sprint pertama yang diletakkan di sana, dan periode lainnya kosong, ini harus menjadi peta jalan yang sangat baik untuk menyelesaikan proyek.
sumber
Anda memiliki dua masalah: bentuk yang tidak memadai pada persyaratan dan arsitektur yang buruk.
Persyaratan
Anda membutuhkan tujuan akhir keseluruhan dan peta jalan terperinci tentang cara menuju ke sana.
Di dunia air terjun, tujuan akhirnya adalah spesifikasi fungsional, dan peta jalan bagaimana menuju ke sana adalah rencana proyek.
Dalam dunia gesit, salah satu caranya adalah menangkapnya dalam kisah pengguna epik. Kemudian roadmap adalah kisah pengguna yang mendetail yang menyempurnakan detail epik.
Saya tidak pernah benar-benar senang dengan cerita itu, karena kisah epik tidak pernah menangkap cukup daging untuk menyampaikan gagasan lengkap. Jadi apa yang saya cenderung gunakan adalah dokumen persyaratan sistem tingkat tinggi bersama dengan satu atau dua kisah pengguna epik. Setelah itu, roadmap adalah kisah pengguna yang terperinci.
Yang menyenangkan tentang memiliki dokumen persyaratan sistem adalah bahwa kemudian kriteria penerimaan untuk banyak cerita pengguna dapat ditarik keluar.
Pikirkan dokumen persyaratan sistem tingkat tinggi sebagai "lembar potong" yang mungkin digunakan pemasaran untuk menjual produk kepada pelanggan yang mengerti teknis.
Arsitektur
Salah satu hal yang "potong lembar" memberi Anda adalah itu menempatkan batas pada sistem yang Anda desain. Itu memungkinkan Anda membuat keputusan, sejak awal, tentang arsitektur yang akan digunakan.
Jika tim Anda memiliki dokumen seperti itu sejak awal, Anda tidak harus melalui kesulitan merancang ulang sistem nanti.
Sebenarnya, masalah ketiga yang Anda miliki adalah komunikasi yang buruk. Komunikasi adalah jalan dua arah (atau multi arah antara banyak orang). Namun, itu hanyalah kegagalan manusia dan (kadang-kadang) upaya manusia super untuk menjadi benar.
sumber