Saya ingin tahu seberapa baik orang pada umumnya mendefinisikan produk perangkat lunak sebelum benar-benar mulai kode dan seberapa baik itu bekerja untuk mereka? Saya mengacu pada mendefinisikan kasus penggunaan, menganalisis risiko, menggambar diagram kelas, dll.
Saya tahu bahwa adalah ide yang baik untuk memiliki ide yang cukup baik tentang apa produk akhir akan dapat menghindari risiko di masa depan, tetapi juga penting untuk tidak mendefinisikan suatu produk dengan baik sehingga sulit untuk beradaptasi dengan perubahan.
Pertanyaan lain yang lebih spesifik mungkin adalah:
Berapa persentase waktu proyek yang biasanya dihabiskan pada tahap perencanaan sebelum pengembangan?
Apakah Anda memiliki kriteria terukur tertentu yang coba Anda penuhi sebelum mulai kode atau lebih merupakan intuisi?
Apakah Anda membuat diagram semua kelas sebelum mulai kode, atau sebagian besar mencoba membuat desain dinamis dari awal dengan harapan hal-hal akan berubah?
Setiap pengalaman yang Anda ingin bagikan akan luar biasa!
Jika klien Anda secara aktif bergabung dengan proyek sebagai anggota tim proyek, yang tersedia untuk pengembang untuk pertanyaan dan membuat keputusan cepat tentang fungsionalitas. Maka specnya bisa kurang detail.
Jika klien Anda jauh dan tidak tersedia untuk umpan balik dalam jangka waktu yang lama, maka spesifikasi Anda harus sangat rinci.
Di perusahaan kami, kami membuat kisah pengguna dan bermain Poker Perencanaan dengan pengembang di proyek tersebut. Itu memberi kami indikasi yang adil tentang jam yang akan dihabiskan untuk cerita pengguna.
sumber
Seberapa baik proyek yang didefinisikan perlu cukup baik untuk membantu Anda memulai dan tahu ke mana Anda akan pergi untuk dua minggu ke depan.
Sebagai Scrum Master, saya hanya akan mengatakan bahwa Anda perlu mendefinisikan fitur-fitur kotor produk Anda dalam lembar Excel atau di mana pun, hanya untuk melacak fitur-fitur Anda. Membuatnya User Stories banyak membantu memikirkan fitur apa yang Anda butuhkan selanjutnya. Kemudian, prioritaskan mereka: Fitur Paling Penting atau Imperatif ke Atas, dan Paling Tidak ke Bawah.
Setelah Anda mendaftar beberapa fitur yang paling penting, pilih fitur yang Anda pikir dapat Anda kembangkan menjadi status Selesai setelah periode dua minggu, atau periode sebulan jika Anda mau. Kemudian, ledakkan fitur yang dipilih ini sehingga Anda dapat mulai mengkodekan beberapa.
Saat melakukan pengkodean, Anda tentu akan memikirkan elemen lain yang perlu dikembangkan untuk menghadirkan fitur yang Anda pilih dalam status Selesai. Selesai berarti Anda tidak perlu melakukan apa-apa lagi, yaitu, pengujian, pengkodean, perakitan, dokumentasi Selesai!
Kapan saja daftar fitur yang Anda pilih dapat berkembang, selama Anda bertemu dengan tujuan, yaitu, Anda dapat mengembangkan semua yang Anda katakan selama periode tertentu.
Singkatnya, tidak ada yang sempurna. Lemparkan beberapa ide, bagikan dengan rekan Anda dan lihat apakah yang tertulis masuk akal untuk memenuhi persyaratan produk yang diminta. Jika demikian, maka Anda masuk! Untuk memperjelasnya, saya akan menggunakan produk Manajemen Pelanggan yang sederhana. Apa yang dibutuhkan?
Draf pertama Anda bisa sesederhana itu! Kemudian, kita dapat melihat bahwa keamanan adalah bagian penting dalam sistem kita, apakah cukup penting untuk membuat prioritas utama (Y / T)? Ini akan tergantung pada persyaratan yang harus Anda penuhi. Katakanlah Manajemen Pelanggan adalah hal yang paling penting di sini. Jadi, dalam Sprint berikutnya, kita harus dapat mengelola pelanggan dengan cara dasar tetapi dapat diterima. Apa itu Manajemen Pelanggan?
Ini sudah menggambarkan fungsi yang cukup untuk dapat mulai mengembangkan aplikasi. Jika programmer Anda memerlukan instruksi lebih lanjut, maka mungkin satu pengembang yang merasa nyaman dengan diagram kelas dapat merancang kelas Pelanggan dan properti serta metodenya! Tetapi sejauh yang saya ketahui, dengan sedikit ini saya telah menulis, saya akan memiliki cukup untuk memulai. Beberapa fitur dapat ditambahkan atau diubah di sepanjang jalan. Yang penting adalah fokus pada apa yang Anda katakan akan Selesai. Dalam contoh kami, ini adalah hal Manajemen Pelanggan. Kami tidak perlu peduli dengan otentikasi pengguna seperti sekarang. Ini akan datang nanti di Sprint berikutnya.
Saya harap ini membantu! =)
sumber
Nah, apa yang bekerja sangat baik bagi saya adalah memiliki fungsionalitas "cukup baik" ditentukan dan arsitektur perangkat lunak hanya sangat longgar.
Agar saya dapat mulai bekerja, saya perlu tahu apa yang sedang saya upayakan. Itu tidak berhasil bagi saya ketika saya hanya memahami kebutuhan pelanggan. Bahkan jika saya menulis alat untuk saya gunakan sendiri, saya menggambar layar, menjelaskan fungsionalitas, apa yang dilakukan setiap tombol, semuanya. Kalau tidak, saya menemukan saya tidak bisa memulai.
Di sisi lain, saya sudah menyerah untuk benar-benar menggambar persis bagaimana saya akan mengembangkan kode. Mungkin ini adalah praktik terburuk, tetapi itu berhasil untuk saya. Saya mungkin mendefinisikan satu set tabel database yang akan saya buat, tetapi tidak kolom apa di masing-masing. Saya mungkin berpikir tentang objek dan kelas apa yang saya butuhkan, tapi saya jelas tidak menggambar diagram.
Sial, kadang-kadang saya bahkan tidak tahu bagaimana melakukannya dengan benar sampai setelah saya melakukan kesalahan. Saya membangunnya sekali, merobohkannya, dan melakukannya lagi, sekarang saya tahu caranya. Pada titik ini saya dapat menggambar peta jalan yang cukup rinci dan memulai kembali.
sumber
Bahasa dan metodologi apa yang Anda gunakan?
Beberapa bahasa, seperti Java dan C ++, membutuhkan lebih banyak struktur awal daripada bahasa seperti Common Lisp atau Python (C ++ lebih dari Java, karena refactoring lebih mudah di Java). Leo Brodie (saya pikir dalam "Thinking Forth") memberikan dua nasihat tentang kapan memulai coding: lebih cepat daripada Anda merasa nyaman dengan Forth, lebih lambat daripada yang Anda inginkan dalam bahasa lain.
Metodologi air terjun (terutama ketika desain awal dapat disampaikan) akan membutuhkan pekerjaan di muka yang lebih tinggi daripada gesit (meskipun Anda juga tidak ingin mengabaikan perencanaan awal dalam metode tangkas). Memiliki serangkaian tes otomatis yang baik membuatnya lebih aman untuk mengubah hal-hal yang lebih besar, dan karena itu memungkinkan Anda bertahan dengan pekerjaan yang kurang di muka.
Juga, itu tergantung pada individu dan keakraban mereka dengan jenis perangkat lunak yang akan dibuat. Pada satu titik, ketika melakukan terutama aplikasi CRUD, saya bisa menulis seluruh program dimulai dengan beberapa spesifikasi dan selembar kertas kosong 3 "x5". Saya tidak dapat menulis hal-hal yang saya tulis sekarang seperti itu.
sumber
Dua istilah yang berguna di sini adalah MVP (Produk yang Layak Minimum) dan MMF (Fitur yang Dapat Dipasarkan Minimum). MMF adalah versi terkecil dari fitur yang memberikan nilai bisnis. MVP adalah MMF paling sedikit yang layak sebagai produk. Saat memulai proyek, hal terbaik yang harus dilakukan adalah mengidentifikasi MMF dan MVP dan mulai dari sana.
Lepaskan produk Anda segera setelah layak, lalu terus tingkatkan secara bertahap.
sumber