Saya pikir hal pertama yang harus disadari adalah bahwa ada perbedaan antara menjadi gesit dan gesit. Perlahan-lahan meluncurkan teknik dan karakteristik lincah - tim lintas-fungsional, perencanaan adaptif, pengiriman evolusi / tambahan, iterasi kotak waktu, dan bahkan memperkenalkan konsep-konsep dari Lean sangat berbeda dari memperkenalkan Pemrograman Ekstrim, Scrum, atau Crystal.
Anda secara eksplisit menyebutkan keterlibatan pelanggan. Ya, banyak metodologi Agile meminta keterlibatan pelanggan, tetapi itu tidak dituntut untuk gesit. Di setiap program terkait pemerintah / pertahanan, saya selalu memiliki manajer program atau proyek yang merupakan titik kontak dengan pelanggan. Orang ini menjadi "suara pelanggan". Mungkin diperlambat ketika mereka melakukan teleconference atau mengirim email atau menelepon dan mengklarifikasi, tetapi Anda dapat memiliki satu orang (atau satu kelompok, jika Anda juga memiliki wakil PM) yang merupakan perwakilan pelanggan dari tim Anda. Memang, itu tidak persis sama. Tetapi bukankah menjadi gesit tentang menjadi fleksibel dan menanggapi perubahan?
Anda juga menyebutkan beberapa konsep utama: persyaratan yang telah ditentukan, memiliki permintaan fitur "terlempar ke tembok", kurangnya prioritas karena "mereka semua penting", dan proyek dengan biaya tetap dan / atau jadwal tetap. Masing-masing dapat diatasi dengan cara yang berbeda.
Jika Anda merasa memiliki semua persyaratan di muka, kemungkinan besar tidak. Persyaratan memang berubah. Hanya karena Anda memiliki spesifikasi "selesai dan ditandatangani", tidak berarti bahwa spesifikasi tersebut telah ditetapkan. Dengan dokumen persyaratan apa pun yang Anda miliki, tangkap mereka bagaimana Anda merasa nyaman dan / atau dengan cara yang ditentukan oleh kontrak dan berikan persyaratan, desain, dan arsitekturnya. Selain itu, lihat apakah Anda dapat memperlakukan ini dokumen hidup (dokumen desain yang saya lihat hari ini di tempat kerja dilabeli sebagai Revisi G, yang berarti sedang dalam pembaruan ke-8). Tanyakan tentang berapa banyak Anda dapat meninggalkan TBD dalam setiap iterasi yang diberikan dan berapa banyak yang perlu dikukuhkan sekarang - mungkin ada beberapa memberi dan menerima.
Cekatan dengan dokumentasi Anda. Jangan menduplikasi upaya antara "apa yang diinginkan tim Anda" dan "apa yang diinginkan pelanggan". Misalnya, jika pelanggan Anda menginginkan spesifikasi persyaratan perangkat lunak tradisional dan tim Anda ingin menggunakan cerita pengguna, cobalah untuk beradaptasi dengan SRS tradisional dan menggunakan item tindakan dan daftar item tindakan bergulir alih-alih cerita pengguna sehingga Anda tidak menghabiskan waktu merumuskan "sistem harus ..." dan "harus mampu karena". Namun, hal ini membutuhkan disiplin tim untuk beradaptasi dengan perbedaan di antara berbagai proyek. Tangkap masalah dalam refleksi.
Setelah Anda mengembangkan, Anda dapat menjalankan 5 atau 6 iterasi, dan kemudian mengundang pelanggan Anda ke fasilitas Anda untuk melihat subset dari implementasi Anda. Bilas dan ulangi proses ini. Ini bukan keterlibatan konstan yang diminta oleh beberapa metodologi, tetapi Anda memang memiliki keuntungan visibilitas tinggi. Jika pelanggan Anda mengatakan tidak, setidaknya Anda sudah mencoba. Jika mereka menjawab ya, Anda bisa memberi tahu mereka tentang kelincahan. Pada satu proyek saya, pelanggan mengunjungi situs setiap beberapa bulan (3-5 bulan, biasanya). Mereka akan mengawasi kita melalui pengujian QA, mereka akan membahas masalah dengan para insinyur, dan bisnis dengan kantor program / proyek. Itu adalah kesempatan bagi semua orang untuk masuk ke halaman yang sama.
Pengujian dan pemeliharaan terjadi sama seperti pada proyek tangkas lainnya. Buat prosedur pengujian dan kerusakan dokumen dengan cara yang sesuai, lacak metrik per kewajiban kontrak, dan dokumentasikan hasil pengujian. Jika Anda ingin mengikuti TDD, lakukan. Integrasi berkelanjutan adalah ide bagus lainnya. Selama pertemuan status proyek, manajer proyek Anda dapat menggunakan informasi ini untuk mengatakan "kami menerapkan persyaratan N, melakukan tes M, lulus tes X" dan memperbarui kesehatan proyek dan status kepada orang-orang yang memiliki uang.
Berbicara tentang uang, kita memiliki masalah biaya tetap dan / atau jadwal tetap.
Berurusan dengan jadwal tetap cukup mudah. Dengan persyaratan Anda, Anda tahu berapa banyak iterasi yang dapat Anda selesaikan. Beban kerja Anda untuk setiap iterasi diatur cukup banyak dalam hal fitur untuk mengimplementasikan, menguji, dan mengintegrasikan. Mungkin sulit, tetapi bukan tidak mungkin untuk memecah fitur dan menetapkannya ke iterasi terlebih dahulu. Ini kembali ke poin saya tentang mengundang pelanggan - jika Anda memiliki satu tahun dan menggunakan iterasi 2 minggu, mungkin mengundang pelanggan setiap tiga bulan (dan mengundang mereka setiap tiga bulan) dan menunjukkan kepada mereka hasil pekerjaan sebelumnya. Biarkan mereka melihat prioritas kebutuhan Anda, rencana masa depan Anda, dan bagaimana Anda akan menjadwalkan.
Berurusan dengan anggaran tetap serupa. Anda tahu berapa banyak waktu yang Anda miliki, berapa banyak sumber daya yang Anda miliki untuk proyek, berapa biayanya, dan oleh karena itu berapa jam setiap orang dapat bekerja per iterasi. Ini hanya masalah memastikan bahwa semua orang melacak hal ini dengan cermat. Jika perusahaan Anda dapat memakan biaya lembur, lakukan saja. Jika tidak, pastikan semua orang bekerja dalam jangka waktu yang sesuai dan gunakan keterampilan manajemen waktu yang baik dan tinju waktu untuk membuat semua orang produktif. Lebih banyak jam produktif adalah apa yang Anda butuhkan untuk menekan biaya - serahkan lebih banyak dokumen dan perangkat lunak bernilai tambah tanpa biaya pertemuan dan biaya overhead.
Pada akhirnya, ini bukan tentang selalu gesit, tetapi menerapkan hal-hal yang membuat tangkas baik dan tangkas. Mampu menanggapi perubahan dalam persyaratan, dapat memberikan perangkat lunak yang sering bahkan jika pelanggan tidak menginginkannya, hanya menghasilkan dokumentasi nilai tambah (bersama dengan apa pun yang secara kontrak Anda wajib untuk menghasilkan), dan sebagainya.