Bagaimana menjelaskan bahwa ukuran sampel tidak mempengaruhi panjang proyek


58

Kami memiliki proyek perusahaan besar yang biasanya melibatkan menyalin data dari basis data sumber ke basis data tujuan dan kemudian menyiapkan sejumlah aplikasi tambahan yang menyinkronkan data ini dll.

Proyek terakhir berisi 250.000 item (baris data). Proyek berikutnya hanya akan berisi 4.000 item. Manajer proyek / pebisnis percaya bahwa proyek harus 1/10 waktu untuk menyelesaikan karena hanya sebagian kecil dari ukuran proyek terakhir.

Apa analogi yang baik yang dapat saya gunakan untuk menjelaskan bahwa menulis kode untuk mentransfer data dari satu sistem ke sistem lain mengambil jumlah yang sama terlepas dari jumlah item - menulisnya untuk 1 item atau untuk 100.000.000 akan memakan waktu yang kira-kira sama dengan waktu dari suatu pemrograman sudut pandang.


46
Tampaknya tidak persis situasi yang sama - tetapi ketika saya bertemu manajer yang berpikir mereka dapat mempercepat proyek dengan melemparkan lebih banyak benda ke dalamnya, saya mengatakan "9 wanita tidak bisa menghasilkan bayi dalam sebulan"
MattDavey

3
Hati-hati bagaimana Anda menjelaskan ini. Jelas tidak membutuhkan waktu selama 1 item sebagai 100.000.000 item. Untuk 1 item, Anda hanya perlu mengonversi dengan tangan tanpa pemrograman sama sekali.
MarkJ

Jika Anda benar-benar perlu menjelaskannya, Anda sudah dikutuk
Balog Pal

Jawaban:


112

Katakan pada mereka itu seperti membangun jalan raya empat lajur baru ke bagian terpencil negara itu. Apakah jalan itu digunakan oleh 100 mobil sehari atau 1000 mobil sehari, upaya untuk membuat jalan akan hampir sama.

Memang, jika itu akan mendukung 1.000.000 mobil sehari Anda harus membuat jalan sedikit lebih kuat, tetapi terlepas dari itu, Anda harus menebang pohon yang sama, meledakkan melalui gunung yang sama, meratakan jumlah yang sama kotoran, dan kegiatan ini cukup banyak biaya tetap tidak peduli berapa banyak mobil yang menggunakan jalan.


1
+1 analogi yang bagus, saya kesulitan menemukan yang fisik berfungsi;)
jk.

1
+1 Saya sedang memikirkan seorang tukang ledeng pipa dari satu lokasi ke lokasi lain.
Joshua Drake

13
Analogi mobil tidak akan mengecewakan Anda :-)
Daniel Serodio

7
"Biaya tetap" adalah kata kunci yang bagus yang disukai dan dipahami oleh
pebisnis

4
Masalahnya, analoginya tidak bekerja. Pembangun jalan hanya membangun jalan raya 4 jalur jika mereka mengharapkan banyak lalu lintas (25.000 kendaraan sehari akan khas. Satu juta mobil sehari? Wow). Jika mereka berharap 50 kali lebih sedikit, mereka akan membangun jalan yang jauh lebih murah. Manajer Anda mungkin mengatakan "lalu mengapa Anda membangun jalan raya 4 lajur untuk masalah ini? Ini adalah masalah lajur tunggal atau masalah lintasan tanah"
MarkJ

102

Beri mereka kalkulator dan minta mereka menambahkan 1238783423 hingga 9858238483, waktu yang dibutuhkan. kemudian minta mereka untuk menambahkan 3423 hingga 8483 dan beri tahu mereka bahwa Anda mengharapkan jawaban sekitar 100.000 lebih cepat.

Anda mungkin juga menjelaskan jumlah data (mungkin) efek lamanya waktu perangkat lunak untuk menjalankan bukan waktu pengembangan.


11
Saya masuk hanya untuk memberi +1 analogi kalkulator Anda. Manajer terkadang lucu.
Alex

1
Saya menertawakan yang satu ini, tetapi memilih suara Eric. Saya tidak berpikir ini adalah apa yang mereka sebut "mengatur".
David W

2
Tidak yakin. Saya pikir ini lebih seperti "berapa biayanya untuk kalkulator yang dapat menambahkan dua angka 4000 kali berturut-turut" vs. "host berapa biayanya untuk kalkulator yang dapat menambahkan dua angka 250.000 kali berturut-turut".
Scott Whitlock

wow, itu brilian
Balog Pal

35

Masukkan ke dalam pembicaraan manajer.

Jika Anda membuat mesin untuk membuat widget dengan kecepatan 1 widget per detik, tidak masalah jika Anda menggunakannya untuk membuat 100 widget atau 10.000 widget, mesin itu sendiri membutuhkan waktu yang sama untuk membuatnya.

perbedaannya adalah pada saat run time, bukan build time.

Semua kelas manajemen bekerja pada masalah seperti ini dengan pabrik widget hipotetis.


5

Jangan gunakan analogi. Jelaskan saja.

  • Untuk jumlah barang yang sangat kecil (10?), Paling murah untuk mengonversi secara manual. Jangan menulis program sama sekali.
  • Untuk sejumlah kecil item (100?) Ada baiknya menulis program. Anda mungkin dapat melakukan penghematan dengan mengabaikan beberapa permutasi data yang secara teori dimungkinkan, tetapi tidak muncul dalam praktiknya dalam dataset kecil. Atau muncul dalam jumlah kecil sehingga program dapat menolaknya, dan mereka dapat dikonversi secara manual. Ini layak untuk menjalankan analisis cepat pada data untuk memeriksa apakah kasus sudut benar-benar muncul dalam data. Jika tidak muncul, mereka dapat diabaikan.
  • Setelah Anda melewati titik ini, ukuran sebenarnya dari data tidak memiliki dampak. Anda perlu menulis program serius yang dapat menangani segala kemungkinan input. Program ini dapat menangani 1.000 item atau 100.000. Hanya butuh waktu lebih lama untuk berjalan.

Pendidikan lebih baik daripada mengecilkan :)


3

Tidak benar-benar analogi, tapi saya masih percaya cara yang baik untuk menangani argumen ini: menunjukkan ada kesalahan fatal di dalamnya.

Proyek Anda sebelumnya termasuk (dari apa yang saya dapatkan) menyalin data dengan beberapa modifikasi di atasnya.

Jika saya melakukannya dengan benar, itu adalah sesuatu yang tim, katakan, 100 akuntan dapat lakukan dalam beberapa bulan. Lalu mengapa mereka melemparkan pengembang perangkat lunak pada masalah?

Karena perangkat lunak yang Anda buat tidak peduli apakah itu akan memproses 10 atau 10 juta lembar data (tidak persis, tapi saya ragu manajer Anda peduli dengan O(n)kerumitan). Jadi, itu mungkin lebih murah, lebih cepat dan lebih bersih (proses rawan kesalahan lebih sedikit).

Jika Anda lebih radikal, Anda mungkin bahkan menyarankan bahwa jika mereka tidak suka seberapa cepat tim perangkat lunak bekerja, mereka selalu dapat memanggil akuntan untuk melakukan pekerjaan dengan tangan.

Ini membuat hidup manajer Anda jauh lebih mudah ketika Anda sedang mengembangkan proyek terakhir, dan sekarang, ketika mereka harus menerapkan logika yang sama untuk mencari tahu perangkat lunak berikutnya tidak peduli apakah itu akan bekerja pada 10 juta atau 4 000 baris, mereka tiba-tiba melupakannya.

Saya pikir dalam kasus Anda para manajer hanya memainkan permainan estimasi dan mencoba untuk memaksa tim untuk bekerja lebih cepat, dengan menunjukkan perbedaan antara 4000 dan 250000 dan berharap untuk beberapa 'kesalahan'. Saya bisa saja salah, tetapi saya pernah melihat ini dilakukan sebelumnya.

Ini cara yang mengerikan untuk mengelola tim programmer (sebenarnya semua jenis tim kreatif) dan tidak membantu siapa pun.


3

Saya tahu Anda meminta analogi, tetapi saya pikir itu teknik yang salah.

Saya percaya, seperti yang disebutkan orang lain secara sepintas, bahwa Anda perlu menekankan bahwa ukuran data mempengaruhi waktu berjalan , bukan waktu pembangunan .
Jadi, uraikan untuk mereka - Anda benar-benar memiliki dua sub proyek, membangun dan menjalankan. Proyek pembangunan seharusnya (sebagian besar) tidak relevan dengan berapa banyak data yang akan dijalankan, itu hanya masalah jenis data.
Adapun runtime - tentu saja, mereka dapat mempertimbangkan bahwa menurut ukuran data (tidak termasuk overhead tetap non-sepele).

Ini seperti jika Anda harus pergi ke Melbourne - tetapi pertama-tama Anda harus membuat mobil.
Tentu, berkendara ke Sydney mungkin lebih cepat - tetapi membangun kendaraan membutuhkan waktu yang sama.
Oke, saya memberi Anda analogi setelah semua.


0

Mungkin telepon? Pelanggan Anda menginginkan ponsel yang dibuat khusus. Jika dia melakukan 0 panggilan per hari atau 100 panggilan per hari, dibutuhkan waktu yang sama untuk membuat ponselnya.

Data yang ditransmisikan oleh telepon adalah analog dengan data yang disalin oleh program Anda.

Manajer Anda tampaknya mengacaukan waktu-dev dengan waktu sebenarnya program. Tetapi kesalahpahaman mereka mungkin berbeda. Mereka mungkin berasumsi bahwa ada lebih sedikit "bidang" yang terlibat. Tidak hanya catatan data yang lebih sedikit. Jika ada 100000 bidang data individual, ini akan menjadi upaya pengembangan besar-besaran dibandingkan dengan hanya 10 bidang. Lebih banyak pemetaan bekerja dari satu sistem ke sistem lainnya. Dalam hal ini mereka mungkin benar, tetapi masih ada beberapa overhead konstan yang terlibat dan Anda tidak bisa hanya membagi dengan jumlah bidang untuk mendapatkan waktu.


0

Seperti yang saya gambarkan, data memiliki panjang dan lebar 2 dimensi. Panjang adalah jumlah rekaman, lebar adalah jumlah total kolom di semua tabel

Sekarang ketika Anda ingin mengimpor data itu seperti mendapatkan blok melalui lubang. Anda perlu membuat lubang yang cukup besar untuk dimensi terkecil, dan kemudian membawa blok itu

sekarang dengan 10 juta dan 10 ribu dimensi terkecil masih lebarnya. Jadi lebar yang menentukan berapa lama untuk membuat lubang.

Untuk menyelesaikan metafora, jika panjangnya lebih kecil Anda cukup mengetik data secara manual


-1

Saya mengimpor ratusan file klien setiap minggu.

Satu hal yang saya temukan adalah bahwa file kecil umumnya membutuhkan waktu lebih lama untuk mengembangkan impor data karena:

  • Mereka cenderung mengikuti aturan (kami memiliki struktur file standar, saya belum pernah melihat klien kecil memberi kami data dalam format standar yang kami minta tetapi yang besar mengerti mengapa itu penting)
  • Mereka cenderung memiliki lebih banyak masalah integritas data terutama jika mereka berasal dari file Excel daripada database (di mana file besar cenderung berasal) yang sudah memiliki aturan integritas data
  • Mereka cenderung disediakan dalam format yang sama setiap kali.

Kami telah menemukan bahwa kami menghemat banyak waktu dalam pengembangan dengan membangun paket SSIS anak induk yang memiliki proses anak standar dan manipulasi yang diperlukan untuk mendapatkan data dalam bentuk standar dapat dilakukan pada induknya. Dengan begitu, itu menjadi kurang masalah tentang berapa banyak catatan ketika kita melakukan estimasi tetapi masalah tentang seberapa dekat dengan stanrdard adalah file yang kita dapatkan. Kami sekarang tidak mendapatkan banyak keluhan ketika hal-hal kecil membutuhkan waktu lebih lama untuk berkembang karena mereka tidak sesuai dengan standar.


-1

Menulis sebuah program seperti mempekerjakan karyawan baru. Anda harus mengajari mereka di mana menemukan data, apa yang harus dilakukan dengannya, dan bagaimana memberi Anda hasilnya. Anda harus mengawasi mereka sebentar untuk memastikan mereka melakukannya dengan benar. Mungkin butuh sedikit lebih lama untuk melatih mereka jika mereka memiliki pekerjaan yang rumit / penting atau jika mereka akan melakukan pekerjaan yang sangat besar, tetapi itu membutuhkan banyak waktu tidak peduli apa pun itu.

Banyak manajer yang akrab dengan overhead yang terlibat dalam pelatihan karyawan baru, jadi ini mungkin masuk akal bagi mereka.

(analoginya rusak sejauh karyawan baru Anda adalah robot superpower yang bisa menyelesaikan pekerjaan dalam jumlah waktu yang sepele tidak peduli berapa banyak catatan yang Anda lemparkan pada mereka, tapi mudah-mudahan Anda sudah membuat poin Anda saat itu.)

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.