Metodologi Pengembangan Terbaik untuk Satu Orang?

77

Saya menghabiskan banyak waktu mengerjakan proyek-proyek di mana saya satu-satunya pengembang, manajer proyek, perancang, orang QT (Ya, saya tahu ... Buruk!), Dan kadang-kadang saya bahkan menjadi klien.

Saya sudah mencoba hampir segalanya untuk merencanakan proyek dan mengelola diri saya sendiri, dari hanya duduk dan bekerja freestyle sampai proyek selesai berapa lama, untuk versi satu orang scrum di mana saya mengadakan pertemuan kemajuan dengan diri saya sendiri lebih dari satu - Pria membakar grafik setiap pagi (tidak bercanda).

Bagi Anda yang menghabiskan banyak waktu bekerja sendirian, apa cara terbaik untuk mengatur diri sendiri, mengelola proyek besar (untuk satu orang), dan menjaga produktivitas setinggi mungkin?

agas
sumber
Tes pertama dan lincah atau ramping, dan untuk tim kecil XP.
ctrl-alt-delor
14
Satu hal yang kami lakukan adalah pencarian. Ada banyak pertanyaan tentang topik ini. programmers.stackexchange.com/questions/50658/… misalnya. Semua ini. programmers.stackexchange.com/search?q=solo+programmer
S.Lott
3
Saya cenderung mengembangkan berharap saya memiliki setidaknya satu pengembang yang kompeten untuk bekerja sama.
ChaosPandion
Salah satu opsi yang mungkin adalah mencoba menemukan orang lain :) Saya tahu itu tidak menjawab pertanyaan, tetapi untuk aplikasi terakhir saya, saya melakukan semuanya sendiri, dan itu cukup sulit. Memiliki orang kedua hanya untuk memantulkan ide dan membuat Anda tetap fokus akan membuat perbedaan besar. Mereka tidak perlu kode, tetapi hanya menjadi papan suara dan membuat Anda jujur.
Rocklan

Jawaban:

28

Menyimpan daftar tujuan yang jelas sangat penting. Sangat mudah bagi fitur creep untuk mengambil alih proyek yang dikelola sendiri. Pendekatan TDD "selesai ketika berhasil" juga membantu. Ini mencegah Anda menjadi perfeksionis.

Satu hal yang sangat membantu saya adalah membayangkan apa yang dikatakan insinyur atau manajer proyek lain dalam situasi apa pun. Seringkali saya dapat "mempermalukan diri saya" keluar dari kode yang buruk, atau kembali ke jalurnya jika jadwalnya tergelincir.


sumber
2
Pendekatan TDD bukan "itu dilakukan ketika bekerja". Pendekatan TDD adalah "dilakukan ketika ia bekerja dan kodenya bersih "
Benjamin Hodgson
Pendekatan TDD adalah "itu dilakukan ketika ia bekerja dan telah dirilis ."
Mike Chamberlain
6
Ini SOFTware. Itu tidak pernah dilakukan. Pada titik tertentu Anda hanya berhenti mengerjakannya. Bahkan kemudian Anda mungkin mulai lagi.
candied_orange
23

Ini dia ... http://xp.c2.com/ExtremeProgrammingForOne.html

XP turun dengan baik karena optimal untuk tim kecil yang fokus.

  • Anda dapat membuat spreadsheet permintaan fitur, memprioritaskannya & memilih yang paling banyak.
  • tentukan kriteria penerimaan (seperti apa yang dilakukan) dan kode itu menjadi tes yang dapat dieksekusi
  • Selanjutnya, tentukan tugas rekayasa yang harus dilakukan
  • Tulis unit test, lakukan hal yang paling sederhana (YAGNI) dan refactor sepanjang waktu. Tujuannya adalah untuk membuat lulus tes penerimaan luar
  • Kotak waktu setiap sesi. Untuk manajemen waktu yang efektif, Anda juga bisa melihat teknik Pomodoro .
  • Gunakan kontrol versi & Setup server CI / file batch untuk membuat instalasi atau zip perangkat lunak Anda
  • Demo sering. Arahkan umpan balik ke spreadsheet asli dan prioritaskan kembali

Satu-satunya hal yang tidak dapat Anda lakukan dalam tim satu adalah PairProgramming.

Gishu
sumber
16

Jika Anda bekerja sendiri. Berikut sarannya:

  1. Lakukan sesedikit mungkin pekerjaan tingkat rendah. Gunakan sebanyak mungkin pustaka dan alat yang dapat Anda masukkan termasuk hal-hal yang menurut Anda dapat dikodekan dengan mudah (jangan lakukan itu, cukup gunakan pustaka).
  2. Ambil pendekatan top-down. Hanya kode hal-hal yang benar-benar Anda butuhkan.
  3. Ketika Anda melihat masalah dalam istilah abstrak, cari di google dan gunakan makalah penelitian dari komunitas akademik yang telah terbukti. Anda hanya perlu kode algoritma mereka.
  4. Rancang sistem Anda sehingga Anda dapat dengan bebas mengubah hal-hal sebanyak mungkin. (termasuk menyalin dan menempelkan beberapa kode dari sini ke sana). Tujuannya adalah untuk menghemat waktu Anda ketika Anda menyadari Anda melakukan kesalahan. Cobalah untuk meminimalkan jumlah pekerjaan yang harus Anda buang ketika Anda melakukan kesalahan. Sepotong kode yang harus dibuang (bukan copy-paste dari sana-sini) adalah kesetaraan waktu Anda kehilangan penulisan kode itu.
  5. Memiliki banyak tes otomatis sehingga Anda dapat secara teratur melakukan tes regresi setiap kali Anda melakukan perubahan
  6. Pisahkan tanggung jawab desain Anda (mis. Kurangi kopling). Jadikan hal-hal semodel mungkin
  7. Gunakan debugger untuk debug dan gunakan pencarian biner untuk menemukan cacat.
  8. Terus-menerus memperbaiki kode Anda untuk mengurangi kopling (eksplisit) dan paparan metode publik (kopling implisit).
  9. Tidak ada yang benar-benar. Ini di sini kalau-kalau saya bisa datang dengan sesuatu yang baru: P
InformedA
sumber
13

Ulasan kode.

Ini sangat berguna karena Anda akan menjelaskan kode kepada seseorang yang belum bekerja pada proyek yang sama sehingga mereka tidak akan memiliki asumsi Anda tentang cara kerjanya.

Mereka juga akan mendapat manfaat tambahan dari berbagi pengetahuan di sekitar perusahaan sehingga ketika orang lain harus mengerjakan proyek (karena orang-orang sibuk di tempat lain, sakit, mengundurkan diri atau dipecat) mereka tidak akan harus mulai dari awal .

ChrisF
sumber
7

Saya telah meluncurkan versi lincah saya sendiri yang mengandalkan cerita, interaksi pelanggan yang berat, rilis yang sering, dan pengembangan yang digerakkan oleh tes. Saya menggunakan wiki untuk melacak cerita, membuat pelanggan terlibat sebanyak mungkin dalam menulisnya, dan meminta pelanggan bekerja dengan saya untuk memprioritaskan dan mengatur ke dalam rilis. Saya menggunakan TDD untuk mendorong desain dan implementasi. Saya mengatur server QA di mana pelanggan dapat mencoba rilis yang sering (kadang-kadang setiap hari saat fitur baru dikembangkan) sehingga saya mendapatkan umpan balik dengan cepat. Saya jarang pergi lebih dari 3 iterasi tanpa rilis ke QA. Pelanggan dapat memutuskan kapan versi QA memiliki cukup fitur untuk ditayangkan - dan jika tidak ada lagi fitur dari daftar yang perlu dikembangkan.

tvanfosson
sumber
7

Di perusahaan saya, kelompok kami semua bekerja pada proyek yang sama, tetapi pada irisan yang relatif independen. Satu hal yang sering kami lakukan di sini adalah ketika sesuatu yang Anda lakukan tampak sedikit rumit, atau Anda berada di persimpangan dengan lebih dari satu cara untuk mengimplementasikan sesuatu, Anda mengambil orang lain dan mendiskusikan pro dan kontra sebelum Anda melanjutkan. Jika Anda menunggu hingga Anda mempertimbangkan kode Anda selesai melakukan tinjauan, Anda biasanya sudah menginvestasikan terlalu banyak waktu untuk mempertimbangkan perubahan arsitektur besar, meskipun tentu banyak cacat yang ditemukan dalam ulasan kode.

Juga, saya menyadari bahwa Test Driven Development adalah kata kunci yang sedikit jenuh akhir-akhir ini, tetapi ini dapat menjadi bantuan besar bagi pengembang solo karena memberikan pemeriksaan kualitas saat Anda pergi, dan ketika tes menjadi sulit untuk ditulis, Anda tahu Anda mungkin perlu merestrukturisasi Anda kode. Ini juga membantu pengelola selanjutnya agar tidak secara tidak sengaja memecahkan kode dengan cara yang sulit dideteksi.

Karl Bielefeldt
sumber
4

Saya sarankan Anda yang berikut ini:

  1. Pengembangan yang digerakkan oleh tes
  2. Penggunaan EOD dari "TODO: note here" di kode Anda ketika Anda melihat sesuatu yang tidak dapat Anda lakukan segera, dan kembali kepada mereka ketika Anda punya waktu sebagai gantinya tinggal di facebook menunggu klien Anda menelepon kembali
  3. Tulis kode Anda karena klien Anda akan membelinya sambil melihat kode tidak hanya pada hasilnya, bayangkan klien Anda sebagai ketua untuk ulasan kode.
  4. Isi kode konfirmasi Anda

sumber
1
akankah Anda menjelaskan bagian "Isi kode penegasan Anda"?
EKanadily
3

saya berharap saya bisa mengatakan saya bisa mempraktekkan apa yang saya khotbahkan 100% dari waktu, tetapi BDD tampaknya menjadi pendekatan yang baik untuk mengambil dalam situasi Anda:

Berikut tautan dengan info lebih lanjut: http://en.wikipedia.org/wiki/Behavior_driven_development

Levi Rosol
sumber
2

Saya di kapal yang sangat mirip. Saya mencoba mengikuti prinsip-prinsip gesit (dan juga saya memahaminya) sebanyak mungkin. Saya mungkin tidak melakukan hal-hal "dengan benar", tetapi saya telah sukses besar pada proyek-proyek saya dengan mencoba mengikuti prinsip-prinsip tangkas. Dibutuhkan disiplin yang sangat besar, karena tidak ada tim untuk memastikan Anda tidak hanya mulai mengambil jalan pintas.

John Kraft
sumber
2

Saya menemukan bahwa menggunakan alat pemformatan kode seperti ReSharper memastikan bahwa, setidaknya secara visual, kode mudah diambil untuk pengembang lain.

Dalam hal metodologi aktual, sulit bagi satu pengembang untuk tetap dengan yang tertentu. Saya seorang konsultan yang umumnya bekerja sendiri, dan saya merasa paling mudah bagi saya dan klien untuk menggunakan proses yang gesit. Saya biasanya mencoba untuk membuat klien saya langsung memasukkan persyaratan mereka ke alat seperti Trac (atau saya akan, atas nama mereka). Ini tidak hanya membantu pengembang lain mengidentifikasi tujuan kode, tetapi juga diri Anda 3 bulan kemudian!

bryanatkinson
sumber
2

filsafat: XP / TDD + GTD

garis besar umum:

  • wawancara dengan pemangku kepentingan
  • tiruan layar, penelusuran, prototipe kertas (sebagaimana diperlukan)
  • brainstorming fitur / cerita (dengan dan tanpa pemangku kepentingan)
  • brainstorming test-case (dengan dan tanpa pemangku kepentingan)
  • keseluruhan desain / arsitektur think-time (sesuai kebutuhan)
  • perencanaan iterasi (dengan pemangku kepentingan)
  • iterasi
  • tinjauan proses, pelatihan, perencanaan pemeliharaan, dll (sesuai kebutuhan)
Steven A. Lowe
sumber
Saya setuju dengan semua itu, dan saya sangat senang melihatnya sebagai jawaban pertama. Tetapi dengan tim 1, saya pikir penjadwalan gaya kanban bahkan lebih baik (dan bahkan lebih mudah) daripada memiliki iterasi.
William Pietri
@ William jika klien mengerti kanban, atau tidak ada klien, lakukanlah
Steven A. Lowe
1

Metodologi yang tepat akan membantu - terlepas dari jumlah orang di proyek. Jadi pilih satu per satu dan lihat bagaimana Anda bisa menerapkan dan memetakan ke domain Anda, dan mengukur keberhasilannya.

Mungkin yang lebih menarik adalah bertanya, metodologi apa yang tidak dibuang karena hanya ada 1 orang yang mengerjakan proyek.

Dan salah satu kunci yang menonjol bagi saya adalah Kontrol Sumber (Ya itu adalah alat, tetapi itu adalah bagian dari alur kerja Anda, demikian juga sebuah proses). Orang mungkin tergoda untuk memberikan ini karena mereka "tidak perlu mendukung banyak orang mengedit kode pada saat yang sama".

Ironisnya saya menemukan bahwa solusi kontrol versi distribusi seperti GIT lebih baik untuk individu yang seperti SVN.

Stephen Bailey
sumber
0

Jika itu membuang kode mungkin bisa menjadi sedikit longgar dengan metodologi, tetapi sesuatu yang penting dan saya akan mengatakan cara Anda memperlakukannya sebagai proyek tim dengan satu orang sangat baik dan disiplin.

Tulis kode Anda untuk dibaca orang berikutnya, bukan Anda ... bersikap baik padanya. Bahkan kode "buang" tetap ada selamanya.


sumber
0

Tangkas

fitur, cerita, dan kasus uji jauh lebih instruktif daripada dokumentasi yang lebih formal, dan serangkaian tes kerja lebih baik dalam menunjukkan cara menggunakan sesuatu atau cara sesuatu bekerja daripada pohon mati dalam jumlah berapa pun

Ini juga lebih mudah untuk menyerahkan pekerjaan di antara iterasi.

Steven A. Lowe
sumber
0

Sebagai seorang konsultan, saya menyarankan agar Anda menemukan cara agar selalu ada setidaknya dua pengembang dalam tugas apa pun.

Saya setuju untuk menjadi gesit, dan meninggalkan jejak cerita dan tes yang lincah yang bisa diikuti orang lain, tetapi saya tidak percaya bahwa proses atau metodologi lain akan tetap ada saat orang bekerja sendiri.

Apalala
sumber
0

Saya pikir tinjauan Kode adalah awal yang baik tetapi saya suka ketika dibuat informal dan menyenangkan, seperti melakukan tinjauan kode Pair atau pemrograman pasangan untuk mengatasi masalah / masalah tertentu atau beberapa peningkatan (misalnya mengubah kode warisan untuk memenuhi standar pengkodean baru ). Terkadang dua pasang mata lebih baik daripada satu dan juga menyenangkan, saya merasa bahwa berbagi dan berdiskusi tampak lebih terbuka. Anda juga dapat menikmati makan siang formal / informal dan mendiskusikan sesi untuk membicarakan apa yang Anda lakukan secara individu atau sebagai kelompok, misalnya menyebutkan tentang pola baru yang Anda gunakan atau teknologi baru bagaimana masalah diselesaikan?

MalsR
sumber