Membuat non-programmer memahami proses pengembangan


66

Ketika memulai sebuah proyek untuk sebuah perusahaan yang bukan terutama perusahaan pemrograman, salah satu harapan adalah bahwa ada produk jadi pada akhirnya bebas dari semua bug dan melakukan semua yang dibutuhkan segera. Namun, itu jarang terjadi.

Apa sajakah cara untuk mengelola harapan dan menjelaskan kepada non-programmer bagaimana pengembangan perangkat lunak berbeda dari jenis pengembangan produk lainnya?


Terkadang Anda "memegang kendali", dan rekan kerja non-teknis Anda cerdas dengan caranya sendiri, tidak bodoh, rendah hati, dan ingin tahu. Di ujung lain dari spektrum (seperti dalam kasus saya) Anda bisa bekerja dengan seseorang yang ingin sihir dilakukan dalam 1 jam dan Anda menemukan diri Anda menjelaskan mengapa perusahaan harus menghormati pengembang. Tak perlu dikatakan saya sedang mencari pekerjaan. Anda berada di lingkungan seperti apa, karena jawabannya bisa saja "Lari, lari!".
Pekerjaan

Jawaban:


34

Hampir semua orang dengan komputer telah menemukan konsep "bug" akhir-akhir ini, jadi Anda bisa memulainya. "Apa cara paling menjengkelkan dari aplikasi yang pernah gagal padamu? Lipat gandakan dengan sepuluh, dan kamu akan memiliki pengalaman pengguna kami jika kami tidak mencurahkan cukup sumber daya untuk pengujian dan pemeliharaan."

Dan jangan meremehkan nilai membangun hubungan kerja yang baik dengan non-programmer. Jika Anda dapat memastikan bahwa penilaian Anda dapat dipercaya, mereka akan menganggap Anda serius ketika Anda membunyikan alarm bahwa X akan gagal secara spektakuler jika Anda tidak melakukannya, meskipun mereka tidak sepenuhnya memahami alasan Anda.


+1 untuk menunjukkan ini. Tidak ada yang lebih berbahaya bagi suatu proyek jika orang-orang teknologi dan orang-orang non-teknologi tidak memiliki rasa hormat satu sama lain.
mr

28

Satu pendekatan yang saya temukan sukses adalah ini:

Kita semua tahu bahwa komputer hanya melakukan dan melakukan apa yang diperintahkan.

Pemrograman adalah cara kita memberi tahu komputer sekarang apa yang harus kita lakukan nanti .

Ini berarti bahwa perilaku Anda sekarang adalah karena niat gabungan dari semua orang yang menulis kode apa pun yang berjalan di komputer Anda. Ketika Anda mempertimbangkan kompleksitas sistem operasi, driver, lingkungan pemrograman, perpustakaan dan sebagainya, mudah untuk melihat bahwa di sebagian besar sistem harus ada lebih dari 20k orang yang terlibat, dan mungkin ada lebih dari 100k.

Kode yang ditulis oleh setiap orang mencerminkan pemahaman, motivasi, niat, dan kemampuan mereka sendiri. Mengingat bahwa operasi tanpa cacat dari sistem mensyaratkan bahwa semua kode yang ditulis oleh 20k orang ini berinteraksi tanpa kesalahan - bahwa semua kode harus menyetujui makna dan interpretasi dari perilaku yang diperlukan, fakta yang mengejutkan bukanlah kita memiliki bug, tetapi bahwa kita memiliki begitu sedikit dari mereka.


4
+1 untuk "memberi tahu sekarang apa yang kita inginkan nanti". Juga dengan anggapan bahwa sebagian besar perangkat lunak melakukan hal - hal baru .

12

IMO, saya telah menemukan bahwa transparansi yang ditawarkan oleh proses gesit (misalnya Scrum, Crystal, dll.) Berjalan jauh menuju menunjukkan bagaimana pembangunan bekerja untuk pemangku kepentingan rata-rata.


1
Ini adalah strategi luar biasa jika Anda melakukan 100% pengembangan. Jika ada bagian dari dev yang ditangani oleh pihak lain, Anda harus sedikit berkompromi.
JBRWilkinson

3

Penjelasan dengan metafora adalah abstraksi yang bocor, tetapi berikut adalah beberapa ide yang sering berhasil untuk saya:

Perhatikan bahwa tidak satu pun dari penjelasan ini yang bisa dimaafkan.

Pikirkan program komputer sebagai mesin, di mana setiap variabel adalah bagian yang bergerak. Itu bahkan membuat program sepele mesin yang terdiri dari ratusan bagian yang bergerak.

Ketika itu gagal, saya kembali pada kenyataan bahwa meskipun secara matematis dimungkinkan untuk membuktikan bahwa suatu program tidak memiliki kesalahan, dibutuhkan banyak waktu dan tidak akan sepadan dengan usaha.

Akhirnya, saya bertanya apakah Intel dan Microsoft tidak dapat menghindari bug, bagaimana mereka mengharapkan kita?


2
Poin yang sangat bagus tentang Microsoft
Casebash

1
Bukan tidak mungkin membuktikan bahwa suatu program melakukan ini dan itu. Namun, tidak mungkin bagi komputer untuk mengatakan apakah suatu program pada akhirnya akan berhenti melakukan ini dan itu.

1
-1 @ ThorbjørnRavnAndersen benar. Posting ini salah. Sangat mungkin untuk membuktikan program-program yang benar (hingga gagasan tentang kebenaran), beberapa dari kita melakukannya sepanjang waktu. Saya pikir poster itu salah paham tentang konsekuensi epistemologis dari masalah penghentian, dan dengan demikian membingungkan non-programer dengan klaim yang tidak benar.
Philip JF

2

Saya telah menjawab pertanyaan serupa dengan lebih terperinci , tetapi intinya adalah, "Pemrograman seperti membangun pabrik atau jalur perakitan."


Itu menyedihkan. Saya percaya pemrograman adalah seni. Anda mencoba membangun sesuatu yang memiliki banyak fitur, membangun berdasarkan potongan-potongan kecil perintah, metode, dan kelas. Sebagian besar Anda tidak bekerja dengan palu - Anda mencoba untuk membentuk sesuatu dengan hati-hati seperti yang Anda inginkan ...
mhr

@mri - Siapa pun yang benar-benar membangun pabrik akan memberi tahu Anda bahwa tidak peduli seberapa baik mesin pabrik yang dirancang dengan baik, sebagian darinya masih harus pas dengan tangan. Alat kami dapat menyederhanakan pemasangan tangan, tetapi kami tidak lagi (kebanyakan dari kita) 'merakit' kode Majelis untuk memanfaatkan siklus dan batas memori. Mirip seperti mebel "pengrajin tangan" yang indah yang diuntungkan dari otomatisasi zamannya.
DaveE

2

Cara tradisional untuk menyatakannya adalah Segitiga Manajemen Proyek: tiga kriteria ruang lingkup, biaya, dan jadwal yang bersaing; biasanya dinyatakan sebagai "murah, cepat, bagus - pilih dua".

Pada akhir proses desain, pengembangan, dan penyebaran, harapan bahwa suatu produk relatif bebas dari cacat desain dan beroperasi dengan fungsi yang ditentukan sangat masuk akal. Harapan yang sama benar-benar tidak masuk akal sehubungan dengan proyek, proses, atau profesi.

Apa yang profesional berdasarkan ilmu, keras atau lunak, tidak melalui proses eksplorasi, membentuk konseptualisasi yang tidak akurat dan tidak tepat, mengikuti taktik yang kurang optimal (atau hanya salah), menemukan apa yang berhasil melalui coba-coba, dan mengulangi proses berulang-ulang sampai sumber daya habis atau tingkat kinerja yang memadai tercapai?

Tidak ada proses yang bebas dari cacat, meskipun secara asimptotik dapat mendekati tingkat kualitas yang lebih tinggi.

Itu berlaku bagi profesi medis di mana taktik sering kali melibatkan dugaan dan protokol, dan sebagian besar aktivitas pada dasarnya adalah debugging mesin yang kebanyakan basah. Memang benar untuk teknik sipil dan arsitektur di mana aplikasi bahan rekayasa baru harus divalidasi di lapangan dan dapat gagal secara tiba-tiba setelah bertahun-tahun pelayanan meskipun kepatuhan ketat terhadap standar. Memang benar dalam bidang otomotif di mana usia dan perubahan dalam kondisi operasi biasanya memengaruhi kinerja hingga titik kegagalan, bukan karena kesalahan teknik atau layanan perbaikan yang diterapkan. Pengembangan perangkat lunak tidak berbeda secara mendasar dari profesi-profesi ini dalam hal seperti itu, ia hanya memiliki sebagian besar fokus yang terlibat dalam pembuatan novel, mesin yang bertujuan.


Poin bagus dengan perbandingan otomotif, itu adalah cara yang bagus untuk menunjukkan tentang kelanjutan pemeliharaan aplikasi yang digunakan.
Kingsolmn

0

Jika Anda memiliki pengetahuan tentang pengembangan perangkat lunak hi-rel, seperti untuk kontrol reaktor nuklir, komunikasi luar angkasa, atau perangkat implan medis (dll.), Anda dapat menjelaskan bagaimana struktur biaya dan waktu pengiriman untuk tingkat manajemen priject dan QA mungkin besarnya lebih besar dari apa yang biasanya mampu dilakukan oleh bisnis untuk proyek perangkat lunak mereka.


0

Anda dapat membandingkannya dengan sesuatu yang dapat mereka lihat dan jika mungkin, gunakan setiap hari.

Misalnya, mobil. Mobil memulai perangkat yang jauh lebih halus dan dapat diandalkan daripada yang kita miliki saat ini. Sementara mobil telah dibuat selama lebih dari 100 tahun, tetapi perangkat lunak mungkin sekitar setengahnya. Mobil tersedia dengan kustomisasi yang signifikan, beberapa termasuk dalam harga (seperti pilihan warna), yang lain seperti ukuran mesin, tipe transmisi, roda / ban, trim level adalah driver biaya yang signifikan.

Ada banyak fitur, kualitas, dan driver biaya untuk mobil, dan untuk perangkat lunak. Kemudian Anda dapat mendiskusikan bagaimana teknologi perangkat lunak, ketersediaan keahlian, bahkan mungkin di mana ia dibangun akan membuat perbedaan besar. Siklus pengembangan yang tepat (misalnya, model tahunan dengan perubahan kecil, perubahan bodi / engine / platform setiap tiga tahun) didorong oleh kombinasi kebutuhan pelanggan dan proses desain yang kompleks. Beberapa produk mulai kecil dan terlihat gemuk (pikirkan Honda Accord), tetapi ditingkatkan setiap tahun sampai mereka berperingkat teratas.

Mobil memiliki penarikan (seringkali jauh lebih mahal daripada peningkatan perangkat lunak) dan peningkatan tambahan dalam bentuk menjalankan perubahan pada daftar komponennya (pikirkan perbaikan bug), dan sering kali mereka membutuhkan dukungan jangka panjang (pikirkan kompatibilitas ke belakang / ke depan). Sebagian besar biaya mobil Anda datang setelah Anda mengendarainya pulang. Sebagian besar biaya perangkat lunak muncul setelah rilis produk awal saat Anda memperbarui dan meningkatkan pelanggan.

Dalam beberapa kasus, Anda dapat merujuk produk terkenal yang menyertakan perangkat lunak atau produk perangkat lunak lainnya. Misalnya, ponsel memiliki siklus rilis dan pembaruan serta metode penambahan fungsionalitas setelah penjualan awal untuk menghasilkan lebih banyak pendapatan. Telepon adalah ilustrasi yang bagus tentang kompatibilitas maju / mundur. Terlalu banyak, dan orang tidak akan membuang yang lama untuk membeli yang baru. Terlalu sedikit, dan pelanggan putus asa untuk memiliki telepon yang tidak akan mereka benci sebelum kontraknya habis.

Produk seperti Windows, Microsoft Office, browser web, dan halaman web semuanya adalah perangkat lunak yang dapat digunakan dalam diskusi. Mereka telah diperbarui pada siklus tahunan atau tiga tahun, tetapi mungkin memiliki pembaruan otomatis lebih sering. Mereka memiliki bug dan lubang keamanan yang memengaruhi pelanggan hingga derajat yang bervariasi, tetapi merupakan bagian dari lanskap meskipun kami telah berupaya sebaik-baiknya. Pelanggan dapat memperoleh perbaikan secara gratis, tetapi umumnya membayar untuk peningkatan, seringkali sebagai satu bundel, kadang-kadang sebagai modul individu atau melalui kunci lisensi.

Para pemimpin industri seperti Microsoft, Apple, Google, dan Amazon semuanya memberikan pelanggan yang relatif murah bagi pengguna. Tetapi mereka memiliki biaya besar yang memungkinkan produk-produk itu. Pengalaman mereka menunjukkan bahwa perangkat lunak itu mahal, tetapi berharga dan menguntungkan. Mereka sering berkompromi antara kualitas, memiliki semua fitur yang mereka inginkan, dan masuk ke pasar ketika waktunya tepat. Tidak setiap produk yang mereka hasilkan adalah sukses, dan mereka terkadang mengubah anjing menjadi pemenang dengan mengganti nama, meningkatkan pemasaran dan penjualan, atau memotong kerugian mereka dan menggunakan apa yang mereka pelajari dalam produk selanjutnya.


0

Mungkin mencoba menuntun mereka, satu-satu atau dalam kelompok-kelompok kecil idealnya, gunakan casing perangkat lunak yang harus Anda kembangkan. Ketika mereka menggambarkan kasus penggunaan, identifikasi poin dalam kasus di mana hal yang berbeda dapat terjadi (kasus yang tidak terduga tetapi tidak masuk akal). Mulailah menghitungnya, minta klarifikasi, dan ilustrasikan semua keputusan dan arahan yang perlu dibuat atau diselesaikan, dan kompromi yang dilakukan untuk melakukannya. Terus sampai mereka bingung dan tidak bisa memberi Anda jawaban. Buat mereka mengerti bahwa, apa yang Anda lakukan sekarang dengan mereka, adalah persis apa yang Anda lakukan sepanjang hari, mungkin sendiri, mungkin dengan arah yang kurang jelas, baik memutuskan kursus dan menulis kode, untuk ratusan atau ribuan menggunakan kasus-kasus yang mungkin atau mungkin tidak ditata oleh siapa pun. Dan ketika ada Jika Anda tidak memikirkan diri sendiri, Anda tidak dapat menjamin apa yang akan dilakukan program. Mungkin itu hal yang "benar", mungkin perlu diperhatikan. Dan itulah bugnya. Dan itu sebabnya menulis perangkat lunak membutuhkan waktu. Semakin sedikit waktu yang Anda miliki, semakin sedikit kasus yang Anda miliki untuk mempertimbangkan dan mengakomodasi, dan semakin besar kemungkinan program tidak akan melakukan hal yang "benar" dalam keadaan yang tidak diketahui.


0

Biaya dan Waktu.

Waktu

Tetapkan harapan bahwa Anda akan memberikan jumlah waktu X dalam Y. Tidak akan ada yang lebih, tidak kurang. Lalu beri tahu mereka apa versi berikutnya akan memiliki dalam waktu apa. Pada awalnya mereka mungkin akan terkejut untuk percaya bahwa membangun X membutuhkan jumlah waktu Y - ini adalah di mana Anda menjelaskan waktu yang diperlukan dan kompleksitas membangun perangkat lunak. Jika mereka tidak terkejut, baik Anda memperkirakan waktu yang sangat sedikit atau mereka tahu lebih baik daripada yang Anda pikirkan tentang membangun perangkat lunak.

Biaya

Ini dari buku Code Compete karya Steve McConnel (mengutip dari memori, jadi maafkan saya jika saya tidak bisa menyampaikannya dengan efek yang sama) - Sangat mudah bagi pelanggan untuk meminta fitur baru. Sebagai manajer produk, Anda tidak boleh mengatakan apa yang diminta pelanggan. Anda harus memperkirakan berapa banyak usaha dan biaya yang diperlukan untuk membangun fitur baru itu. Mereka perlahan-lahan akan mengerti bahwa fitur baru tidak benar-benar sepadan dengan uang / waktu atau mungkin mereka bahkan tidak memerlukannya. Saya tidak menyarankan agar Anda menggunakan senjata ini untuk menakut-nakuti mereka, tetapi gunakan dengan jujur ​​dan itu bisa membantu dalam mengarahkan poin.


-2

Metafora adalah abstraksi yang bocor, namun itu adalah langkah kecil yang membawa Anda lebih dekat ke pemahaman.

Favorit saya adalah bahwa membangun perangkat lunak seringkali sebagai proses yang mirip dengan merancang rumah. Namun lebih tepat untuk menganggapnya sebagai menciptakan sistem yang mencetak cetak biru yang dirancang khusus berdasarkan beberapa parameter dan membangun yang berbeda untuk setiap penggunanya. Dalam geek talk yang menjadi meta-architeting.


-2

Saya telah menemukan, bahwa itu mungkin sebenarnya membantu ketika Anda menunjukkan kepada mereka apa artinya menulis kode. Tunjukkan pada pemangku kepentingan basis kode yang Anda gunakan. Bahkan ketika Anda telah memilih nama variabel dan metode yang baik, sebagian besar orang akan berpikir Anda menggunakan semacam ilmu hitam. Mungkin mereka akan mengerti, mengapa Anda perlu lebih dari "beberapa hari" untuk mengimplementasikan fitur baru untuk perangkat lunak mereka.


Ini adalah ide buruk IMO. Ini seperti menyerahkan pel kepada klien untuk menunjukkan kepadanya betapa sulitnya membersihkan lantai yang basah.
Sundeep
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.