Bagaimana menjelaskan kepada orang yang tidak teknis mengapa tugas itu akan memakan waktu lebih lama daripada yang mereka pikirkan? [Tutup]

60

Hampir setiap pengembang harus menjawab pertanyaan dari sisi bisnis seperti:
Mengapa perlu 2 hari untuk menambahkan formulir kontak sederhana ini?

Saat pengembang memperkirakan tugas ini, mereka dapat membaginya menjadi langkah-langkah:

  • membuat beberapa perubahan pada Database
  • mengoptimalkan perubahan DB untuk kecepatan
  • tambahkan HTML ujung depan
  • tulis kode sisi server
  • tambahkan validasi
  • tambahkan javascript sisi klien
  • gunakan tes unit
  • pastikan pengaturan SEO berfungsi
  • menerapkan konfirmasi email
  • refactor dan optimalkan kode untuk kecepatan
  • ...

Ini mungkin sulit untuk dijelaskan kepada orang non-teknis, yang pada dasarnya melihat seluruh tugas hanya mengumpulkan beberapa HTML dan membuat tabel untuk menyimpan data. Bagi mereka itu bisa 2 jam MAX.

Jadi, apakah ada cara yang lebih baik untuk menjelaskan mengapa estimasi tersebut tinggi untuk yang bukan pengembang?

Mag20
sumber
15
Saya mengangkat pertanyaan Anda karena itu adalah jawaban terbaik untuk dirinya sendiri.
JohnFx
3
Persis. Beri tahu mereka deet satu kali dan kemudian mungkin mereka akan memahami secara spesifik ... Lakukan sekali dan mungkin mereka akan membahas detailnya di lain waktu ...
Agile Scout
4
Anda pikir ini sulit dijelaskan kepada orang-orang non-teknis? Bahkan orang-orang teknis tidak mengerti!
congusbongus
1
Menampar mereka dengan trout besar dan berteriak pada mereka untuk sujud sebelum kekuatan teknologi Anda tentu lebih menyenangkan tapi saya pikir peluru sebenarnya adalah ide yang cukup bagus.
Erik Reppen

Jawaban:

26

Anda baru saja melakukannya dalam pertanyaan Anda.

Bagi tugas menjadi langkah-langkah individual dan berikan taksiran untuk masing-masing langkah. Ini akan menunjukkan bahwa Anda telah mempertimbangkan semua opsi dan (semoga) mencakup semua kemungkinan.

Jika rentang waktu terlalu besar, Anda dapat mendiskusikan bagian mana (mis. Konfirmasi e-mail) yang tidak diperlukan dalam kasus ini dengan data konkret daripada hanya mencoba menjejalkan satu liter ke dalam panci pint.

Lakukan ini cukup sering dan mudah-mudahan Anda akan mengajarkan mereka bahwa biasanya ada lebih banyak perkembangan daripada bertemu mata pada pandangan pertama.

ChrisF
sumber
3
Saya biasanya mengambil satu langkah lebih jauh dan memasukkannya ke dalam Microsoft Project. Ini adalah sesuatu yang profesional yang dapat mereka lakukan untuk bos mereka dan Anda dapat membuat daftar waktu untuk masing-masing (lebih disukai dalam jam) dan kemudian menunjukkan semua langkah yang terlibat. Jauh lebih sulit bagi mereka untuk berdebat tentang tugas individu yang memakan waktu 4 jam dan bertambah hingga seminggu. Jika Anda memiliki tugas yang membutuhkan waktu berhari-hari atau berminggu-minggu, cobalah untuk memecahnya menjadi tugas yang lebih kecil.
Daniel Knoodle
1
@Aniel - Saya kira itu tergantung pada seberapa "formal" Anda perlu, tetapi Project (atau yang setara) memang terlihat lebih profesional.
ChrisF
Memang saya setuju pada formalitas yang lebih dari yang dibutuhkan untuk beberapa kasus. Ini semua tentang opsi mana yang mendapat sedikit dorongan ke belakang dan seberapa jauh tangga yang harus dilaluinya. Secara pribadi saya menggunakan proyek untuk menjadwalkan pekerjaan rumah .. lol
Daniel Knoodle
1
Tentu saja kerugian dari hal ini adalah bahwa daftar ini menjadi komitmen dan jika ada yang melebihi Anda akan mendapatkan hit.
Andy
Berkaitan dengan komentar @Andy, itu satu hal yang sangat sulit untuk diperbaiki sepenuhnya. Salah satu cara utama untuk melakukan upaya sadar untuk memitigasinya adalah dengan memperkirakan estimasi Anda, tetapi kemudian Anda menanggung dua risiko: 1) Anda masih meremehkan waktu yang Anda butuhkan, atau 2) estimasi tersebut terlihat terlalu lama, setidaknya sebagian dari padding. Ini juga merupakan masalah yang muncul di Scrum: pengembang akan meninggalkan banyak ruang dalam perkiraan mereka untuk sprint. (Itu sebabnya saya pribadi lebih suka Kanban.) Mudah-mudahan akan ada semacam cara untuk menangani dua masalah potensial ini ketika berkomunikasi.
Panzercrisis
11

Mendaftar tugas hampir sempurna, tetapi perlu diingat bahwa tugas yang masuk akal bagi seorang insinyur sangat kecil artinya bagi orang yang tidak teknis. Sebagai contoh, dalam daftar di atas, saya tahu bahwa "mengoptimalkan perubahan DB untuk kecepatan" mungkin satu atau beberapa tugas yang memakan waktu yang meliputi profiling kode, menjalankannya mencari titik lambat, meninjaunya dengan para ahli, atau melemparkannya melalui set tes yang ditentukan sebelumnya khusus untuk produk. Dan kemudian Anda mungkin memiliki beberapa jam jika tidak berhari-hari menumbuk kepala di meja Anda saat Anda mencoba menemukan cara untuk memperbaiki area yang terlalu lambat.

Tetapi Anda mungkin telah kehilangan manajemen proyek Anda pada kata "DB" jika bukan kata "optimalkan".

Saya biasanya mengungkapkan hal ini kepada manajemen proyek dalam hal langkah-langkah BESAR dengan kata-kata yang menggambarkan risiko dalam hal bisnis. Mengambil daftar Anda, saya akan merebusnya dengan cara ini jika saya berbicara dengan manajemen proyek saya:

  1. Pertama, ada dua bagian untuk hal ini - halaman web yang dilihat pengguna, dan server yang melakukan tugas berat. Kedua bagian harus ada agar fitur ini berfungsi.
  2. Bagian pertama adalah membuat halaman web yang masuk akal bagi pengguna (tambahkan HTML ujung depan, tambahkan javascript sisi klien). Kuncinya di sini adalah bahwa halaman web harus terlihat seperti itu bagian dari produk ini, itu harus beroperasi di semua browser yang kami dukung dan harus licin. Ini yang dilihat pengguna, jadi jika terlihat buruk, pengguna akan berpikir produk kami buruk. Mengembangkan ini dan kemudian mengujinya akan memakan waktu X hari.
  3. Selanjutnya, perlu ada hal-hal di bawah halaman web yang melakukan pekerjaan. Dalam hal ini itu berarti memasukkan deskripsi fitur di sini (peta untuk - membuat beberapa perubahan pada Database, menulis kode sisi server, mengimplementasikan konfirmasi email, menambahkan validasi, menggunakan tes unit). Saya tidak bisa begitu saja menyatukan ini. Jika kode dikembangkan dan kemudian diuji, kami berisiko menyebabkan kerusakan pada data SEMUA pengguna. Itu berarti bahwa hal baru yang sederhana dapat merusak reputasi produk secara keseluruhan - bahkan untuk pengguna yang tidak menggunakan fitur khusus ini. Praktik pengembangan kami mencakup ini - kami melakukan banyak pengujian untuk memastikan itu tidak terjadi - tetapi itu berarti saya harus merencanakan pada waktunya untuk mengujinya dengan benar. Itu akan membawa saya Y hari.
  4. Kecepatan adalah masalah besar dalam produk kami. Jika hal-hal tidak terjadi dengan cepat, pengguna akan berpikir bahwa produknya tidak bagus. Jadi setelah saya menulis semua hal ini, saya harus melalui pekerjaan dan memastikan bahwa itu sesuai dengan kinerja. Ini adalah masalah besar dalam hal web - jika orang melihat situs menjadi lambat, mereka akan dengan cepat beralih ke produk yang berbeda untuk memenuhi kebutuhan yang sama, karena sangat sulit untuk melihat perbedaan antara lambat dan rusak. Pekerjaan semacam itu biasanya memakan waktu Z hari (mengoptimalkan perubahan DB untuk kecepatan, refactor dan mengoptimalkan kode untuk kecepatan)

Saya akan menghindari estimasi yang kurang dari setengah hari. Pada tingkat tertentu, mereka harus percaya bahwa Anda tahu apa yang Anda bicarakan. Dan jika mereka benar-benar berpikir bahwa itu hanya akan menjadi 2 jam, maka undanglah mereka untuk duduk bersama Anda selama 2 jam saat Anda menuntun mereka persis seperti apa 2 jam dalam kehidupan pengembang SW - lalu lakukan pengkodean kelas 101 untuk sekitar 2 jam, untuk menunjukkan apa yang harus dipertimbangkan untuk mulai menyelesaikan masalah.

Yang terpenting adalah hal-hal berikut:

  • Beli yang paling banyak berbicara tentang persepsi pelanggan dan penggunaan produk, Anda datang sebagian berbicara bahasa mereka - bahasa $$ - intinya adalah, jika kode diretas secara jelek, Anda akhirnya akan kehilangan bisnis - jika tidak pada fitur ini, kemudian pada beberapa fitur selanjutnya ketika praktik pembangunan yang buruk telah membuatnya tidak mungkin untuk memperpanjang kode.
  • Tetapkan urutan peristiwa. Pertanyaan non-teknis berikutnya adalah "jika kami memiliki lebih banyak pengembang daripada Anda, apakah ini akan terjadi lebih cepat? Jika demikian, jika akan membutuhkan waktu 40 jam untuk membuat ini, dapatkah 40 orang mewujudkannya sore ini?" Jawabannya, tentu saja, adalah "TIDAK! APAKAH KAMU KELUAR DARI PIKIRAN ANDA ??". Tapi itu bukan yang terbaik. Yang terbaik adalah ada urutan langkah logis di sini. Hal B tidak dapat dilakukan sampai hal A ada di tempat (jika Anda belum menulis kode apa pun, Anda tidak dapat benar-benar mengoptimalkan atau mengujinya ...). Hal A dan A bisa dilakukan bersama, jadi jika mereka bisa menyisihkan orang pintar di sana, Anda bisa mengurangi waktu dari satu minggu menjadi 4 hari, dan jika mereka bisa menjamin dukungan tes yang luar biasa, maka Anda mungkin bisa mendapatkan 3 hari. Sana'
  • Berfokuslah pada risiko dan bersiaplah untuk diberi tahu bahwa beberapa risiko sepadan dengan saat ini. Untuk itulah para pebisnis mendapatkan bayaran besar - mencari tahu risiko apa yang pantas diambil. Misalnya, jika kecepatan memasarkan memiliki kinerja yang buruk karena perusahaan Anda memiliki cukup uang untuk menggelar sejumlah server yang konyol dalam jangka pendek, maka Anda mungkin diminta untuk mengabaikan semua hal itu di langkah 4 (optimasi kode / basis data) ). Itu hak mereka - hanya tugas Anda untuk menjelaskan risiko yang melekat dalam keputusan itu.
  • Namun, jika Anda tidak mempercayai orang-orang ini, dapatkan konfirmasi secara tertulis - itu tidak harus konfrontatif, hanya surel cepat yang mengatakan "inilah yang saya pikir kita bahas, inilah yang saya tidak lakukan, inilah risiko. Saya akan melakukannya sekarang, jadi beri tahu saya jika Anda tidak setuju ... jika saya tidak mendengar, Anda akan menganggap ini adalah cara yang tepat untuk melanjutkan ". Mengingat bahwa manajemen produk dapat menjadi pusat untuk kehilangan memori jangka pendek, ini sangat membantu untuk semua orang.
bethlakshmi
sumber
Inilah saatnya akan menyenangkan untuk dapat jawaban favorit.
Panzercrisis
9

Ada pepatah, "Anda tidak bisa memuat sepuluh pound (omong kosong) dalam kantong lima pound." Tugas Anda adalah menunjukkan bahwa tugas itu sepuluh pound dan mereka meminta untuk melakukannya dalam jangka waktu lima pound.

Satu-satunya hal yang Anda lewatkan adalah perkiraan waktu. Masukkan perkiraan waktu pada setiap tugas, dan perlihatkan bagaimana semua hal ini dijumlahkan bersama dengan perkiraan yang Anda berikan. Jangan izinkan perkiraan apa pun lebih besar dari 4 jam. Jika Anda memiliki tugas di mana Anda mengatakan "sehari" atau "10 jam", maka pilah menjadi beberapa subtugas yang lebih kecil.

2h make some changes to Database
2h add front end HTML
   write server side code
     4h input validation
     4h database inserts
2h add validation
2h add client side javascript
   use unit tests
     2h client-side tests
     3h server-side tests
2h make sure SEO is setup is working
2h implement email confirmation
2h optimize DB changes for speed
2h refactor and optimize the code for speed

Sekarang Anda punya tagihan terperinci dari biaya. Semua mengatakan, bahwa total hingga 27 jam kerja.

Anda sekarang dapat menunjukkan ini kepada pelanggan Anda dan mengatakan "Ini adalah hal-hal yang harus dilakukan, dengan biaya masing-masing." Gunakan kata "biaya", karena waktu ADALAH biaya, dan manajemen memahami biaya. Jelaskan bahwa Anda mungkin dapat meninggalkan dua tugas pengoptimalan pada akhirnya, tetapi mereka akan memiliki efek negatif, dan mereka hanya 15% dari total perkiraan.

Pastikan juga Anda menjelaskan jam / hari Anda secara realistis. Misalnya, jika Anda dipanggil untuk melakukan dukungan teknis, atau mengelola basis data, atau apa pun, pikirkan hal itu dalam perkiraan Anda. Jangan katakan "Yah, saya bisa melakukan pengkodean yang baik 7,5 jam sehari" karena Anda mungkin tidak bisa. Mungkin lebih seperti 5 atau 6.

Kemudian, yang paling penting, lacak kemajuan Anda. Katakanlah Anda dapat melakukan pengkodean 5 jam per hari. Maka Anda harus bisa menghilangkan dua tugas pertama (dalam contoh saya) pada hari Senin, menyelesaikan yang ketiga dan memulai yang keempat pada hari Selasa, dan seterusnya. Buat daftar periksa yang menunjukkan ini, sehingga Anda dapat menunjukkannya pada hari Rabu ketika mereka datang dan berkata, "Bagaimana kabarmu, Anda masih akan selesai pada akhir Jumat?"

Lihat slide saya untuk ceramah saya Mencegah Krisis: Estimasi Proyek dan Pelacakan yang Berhasil yang saya berikan di OSCON beberapa tahun yang lalu. Lihat slide 21, "Merencanakan minggu". Ada juga bagan kecepatan sampel .

Andy Lester
sumber
5
Lima atau enam jam coding yang baik per hari? Pasti baik!
HANYA PENDAPATAN SAYA yang benar
1

Tanya mereka:

Bagaimana Anda melakukannya? Modul apa yang akan Anda ubah? Berapa banyak baris kode? Apa implikasi keamanannya? Adakah perubahan pada skema database? Jika Anda melakukan perubahan pada DB, berapa banyak file yang terpengaruh? Berapa lama untuk menambahkan formulir terakhir? Apa rata-rata (rata-rata aritmatika) untuk menambahkan formulir? Apa yang terlama? Saya akan memperkirakan itu akan memakan waktu kurang dari satu menit lebih lama. Jika Anda tidak tahu berapa lama waktu untuk menambahkan formulir N terakhir, maka perkiraan ini hanya dijamin akurat untuk satu urutan besarnya.

SnoopDougieDoug
sumber
1
Ini tampaknya menjadi agresif-pasif bagi saya.
Andy
Tidak, ini metode Sokrates.
SnoopDougieDoug
-2

Saya dapat memberitahu Anda untuk menjelaskan kepada mereka bahwa perangkat lunak mereka seperti mesin 100 ton dengan 10.000 bagian yang berbeda, sebagian besar terhubung dengan cara yang rumit. Memasukkan sepotong 1 inci ke dalam mesin ini membutuhkan beberapa rekayasa, sehingga tidak akan merusak mesin, TAPI jawaban yang lebih baik adalah:

Jika Anda memiliki arsitektur kode yang lebih baik, apakah itu membuat tugas seperti ini mudah? Dan jawabannya adalah bahwa sebagian besar tim perangkat lunak bukan arsitek yang baik (karena mereka belum mengumpulkan banyak template generik, arsitektur atau mereka tidak menguasai domain masalah secara memadai untuk mengantisipasi setiap masalah) dan mereka tidak selalu insinyur yang baik , sehingga mereka tidak merasa percaya diri dalam memberikan perkiraan atau membuat janji.

Sama seperti yang dibutuhkan abad ke-20 untuk mengumpulkan arsitektur yang bagus dan rekayasa untuk membangun gedung-gedung besar, alat-alat untuk rekayasa perangkat lunak belum sampai pada arus utama. Mereka sedang dikembangkan: dibutuhkan pola pikir baru. Lihat Kode Zen di wiki.hackerspaces.org/Hacking_with_the_Tao.

dokter
sumber
ini tampaknya tidak menawarkan sesuatu yang substansial atas poin yang dibuat dan dijelaskan dalam 5 jawaban sebelumnya
nyamuk