Mengapa kita tidak bisa menyelesaikan sesuatu?


9

Saya bekerja di tim kecil, di perusahaan menengah, yang sebagian besar tidak terlibat dalam pengembangan perangkat lunak. Saya adalah pengembang terbaru dan paling tidak berpengalaman dan tidak memiliki latar belakang profesional atau akademis dalam perangkat lunak sebelum memulai, tetapi saya cukup senang dengan betapa terhormatnya input saya dan saya bersyukur karena dianggap serius pada tahap awal karir saya.

Namun, saya merasa harus melakukan lebih banyak dengan jumlah airtime yang murah hati ini. Sebagai tim, kami sepertinya kesulitan menyelesaikan sesuatu. Saya ingin dapat menyarankan sesuatu untuk memperbaiki situasi, dan saya pikir saya akan didengarkan jika itu adalah ide yang baik, tetapi saya bingung apa yang harus disarankan.

Hal-hal yang dapat saya identifikasi sebagai masalah meliputi:

  • Spesifikasi tugas yang dihadapi jarang. Ini sebagian karena manajemen adalah hambatan dan kami tidak memiliki uang atau orang untuk berkomitmen untuk mengerjakan persyaratan terperinci sebanyak yang kami inginkan. Ini juga sebagian karena perangkat lunak yang kami kembangkan bersifat investigatif dan metode yang tepat tidak jelas sampai diperlihatkan dan digunakan untuk menentukan efektivitasnya.
  • The Dev Dev sangat menyukai apa yang dia sebut 'prototyping' sampai-sampai dia baru-baru ini mulai bersikeras bahwa semuanya 'prototyped', yang bagi kita semua seperti menulis kode yang buruk dan memberikannya kepada pemodel untuk bermain. Tidak jelas apa yang dia harapkan dari latihan ini dalam banyak kasus. Implementasi 'aktual' kemudian menderita karena desakannya bahwa praktik yang baik membutuhkan waktu terlalu lama dari pembuatan prototipe. Saya bahkan belum mulai bisa mengurai logika bengkok ini dan saya tidak yakin saya ingin mencoba.
  • Para pemodel diharapkan memberi tahu kami segala sesuatu tentang metodologi yang diinginkan secara terperinci, dan sangat percaya bahwa apa yang mereka hasilkan secara teoritis tanpa cacat. Ini hampir tidak pernah benar, tetapi tidak ada tindakan yang diambil untuk memperbaiki situasi ini. Tidak ada seorangpun di sisi pemodelan yang mengajukan kekhawatiran dengan cara terstruktur yang kemungkinan akan ditindaklanjuti, juga tidak mencari bimbingan dalam menerapkan praktik terbaik. Tidak ada yang dilakukan tentang kepasifan mereka juga.
  • Saya sudah mencoba untuk mendorong TDD di tim sebelumnya, tetapi merasa sulit karena ini baru bagi saya dan sementara mereka yang mengawasi pekerjaan saya mau menerimanya, tidak ada antusiasme yang muncul dari orang lain. Saya tidak dapat membenarkan jumlah waktu yang saya habiskan untuk berkubang dan tidak menyelesaikan fitur, jadi ide itu - untuk saat ini - telah ditinggalkan. Saya khawatir itu tidak akan dijemput lagi, karena tidak ada yang suka diberitahu bagaimana melakukan pekerjaan mereka.
  • Kami sekarang memiliki server integrasi berkelanjutan, tetapi sebagian besar hanya digunakan untuk menjalankan tes regresi beberapa jam. Sudah dibiarkan terbuka bahwa itu harus menjalankan unit cakupan penuh dan tes integrasi juga, tetapi saat ini tidak ada yang menulisnya.
  • Setiap kali saya mengangkat masalah kualitas dengan pemimpin dev, saya mendapatkan jawaban atas efek 'Fitur pengujian A sangat mudah, fitur B jauh lebih penting bagi pengguna tetapi terlalu sulit untuk diuji, oleh karena itu kita tidak boleh menguji fitur SEBUAH'. Sekali lagi saya tidak membuat kemajuan dalam mencoba mengurai logika ini.

.... Fiuh. Ketika saya mengucapkannya seperti itu, itu terlihat jauh lebih buruk dari yang saya kira. Saya kira, ternyata, ini adalah teriakan minta tolong.


5
Seberapa baik perusahaan mendorong perangkat lunak yang digunakan dan disukai pelanggan? Dengan kata lain, apakah tim mendapatkan hasil yang baik, terlepas dari kenyataan bahwa Anda tidak percaya prosesnya sangat baik?
Robert Harvey

@Robert Harvey - Sulit bagi saya untuk menilai. Produknya sangat khusus, dan kami (pengembang) mendapatkan pesan yang beragam. Di satu sisi, pelanggan baru di pasar terobosan meronta-ronta produk lebih dari yang kami bayangkan dan menemukan kesalahan sebagai konsekuensi, yang tampaknya tidak mereka pedulikan karena kami menjelaskan mengapa dan memperbaikinya dengan cepat. Di sisi lain, beberapa pelanggan institusional besar tidak percaya dan kami mulai mengambil risiko karena berulang kali mengubah model. Tim perangkat lunak adalah salah satu dari sedikit titik impas di perusahaan saat ini, jadi kami terlihat bagus saat ini .
Tom W

1
Saya akan meminta umpan balik sebanyak mungkin dari para pelanggan tentang cara-cara untuk menyetujui "model" kerja dasar, dan mencoba dan memperkuatnya sedikit. Memang bisa membuat frustasi bagi pelanggan untuk mengubah model, tetapi jika ini adalah perangkat lunak baru, canggih, itu sesuai dengan wilayah.
Robert Harvey 6/11

Pertanyaan bagus. Saya perhatikan bahwa bahkan dengan audiens yang reseptif, perubahan nyata itu sulit, kecuali Anda dapat melihatnya bekerja dalam praktik. Saran saya adalah mencoba pendekatan untuk meningkatkan produktivitas Anda terlebih dahulu, dan kemudian mendemonstrasikannya untuk tim. Dengan latihan, Anda bisa mendapatkan lebih cepat pada pengembangan TDD daripada menulis / debug / ulangi.
Mike B

Jawaban:


19

Biarkan saya bermain sebagai pendukung iblis sejenak:

Spesifikasi tugas yang dihadapi jarang ... The Dev Dev sangat menyukai apa yang ia sebut 'prototyping'

Pemimpin dev gemar prototyping karena spesifikasinya jarang. Ini mungkin hal yang baik; ini adalah cara kerja toko berulang.

Para pemodel diharapkan memberi tahu kami segala sesuatu tentang metodologi yang diinginkan secara terperinci

Ini tidak akan berfungsi di toko berulang. Sifat dasar dari pengembangan berulang adalah bahwa persyaratan seringkali tidak lengkap. Iterasi adalah apa yang dibutuhkan untuk menyempurnakan persyaratan.

Saya sudah mencoba untuk mendorong TDD di tim sebelumnya, tetapi merasa sulit karena ini baru bagi saya

Ini tidak akan berhasil; Anda perlu memahami teknologinya sebelum dapat menginjili. Lebih jauh, di toko iteratif dengan persyaratan minim, TDD mungkin terlalu mahal. Lebih baik untuk mendorong cakupan pengujian unit yang memadai.

Kami sekarang memiliki server integrasi berkelanjutan, tetapi sebagian besar hanya digunakan untuk menjalankan tes regresi beberapa jam.

Itu mungkin cocok di toko kecil yang iteratif.

Setiap kali saya mengangkat masalah kualitas dengan pemimpin dev, saya mendapatkan jawaban atas efek 'Fitur pengujian A sangat mudah, fitur B jauh lebih penting bagi pengguna tetapi terlalu sulit untuk diuji, oleh karena itu kita tidak boleh menguji fitur SEBUAH'

Sepertinya toko Anda memiliki batasan waktu yang cukup ketat; suka atau tidak, Anda terikat oleh kendala itu.

Sepertinya Anda berasal dari bagian industri perangkat lunak yang menghargai melakukan hal-hal "dengan cara yang benar" daripada membawa barang ke pasar terlebih dahulu. Tidak ada yang salah dengan itu (sebenarnya mengagumkan), kecuali bahwa orang pertama yang memasarkan dengan perangkat lunak kereta seringkali adalah pemenangnya. Itu tidak adil, tapi memang begitu.


Saya pikir Anda akan perlu mendekatinya dari perspektif "utang teknis". Setiap perusahaan melakukan estimasi waktu; anggap milikmu sudah cukup bagus, mulailah membangun surplus 10% hingga 20% ke dalam perkiraan waktu Anda untuk refactoring dan pelatihan, dan membuatnya tetap.
Robert Harvey 6/11

Untuk melanjutkan; Pengembangan berulang adalah nama permainan, Anda sudah benar. Masalahnya adalah, iterasi keluar sebelum itu benar-benar selesai karena kita mendapatkan kata-kata hampa dari pemodel tentang apakah kode yang kita miliki benar atau tidak. Tidak ada yang bisa mengidentifikasi kesalahan, jadi apa yang kami lakukan mengirim. Enam bulan kemudian ternyata salah. Aku suka untuk dapat menunjukkan bahwa pemodel perlu diberikan kriteria yang lebih tegas untuk uji terhadap, tetapi sekali lagi, bukan mereka pekerjaan untuk mengatakan begitu?
Tom W

2
@ Tom: Selama Anda tidak menuntut spesifikasi yang dapat diuji dari pemodel, mereka selalu dapat memberi tahu tim Anda bahwa mereka salah. Jika mereka meminta Anda bertanggung jawab atas hasil yang dihasilkan dari model mereka, Anda harus meminta pertanggungjawaban mereka karena memberikan Anda spesifikasi yang dapat diuji sehingga Anda dapat menyatakan keberhasilan. Setiap spesifikasi harus dibangun ke dalamnya semacam tes "pergi, tidak pergi", sehingga Anda dan pelanggan (atau pemodel) dapat saling setuju bahwa tes berlalu, tanpa harus ditafsirkan.
Robert Harvey 6/11

Benar sekali. Sayangnya Anda mungkin mewajibkan saya untuk mengakui sesuatu yang tidak saya inginkan - bahwa kami memiliki kompetensi yang kurang. Ini terbukti secara umum, tetapi khususnya dengan para pemodel. Untuk beberapa aspek kami bersikeras pada spesifikasi perusahaan, maka itu tetap salah. Mereka adalah ilmuwan, dan berbicara dari pengalaman, ilmuwan cenderung memperlakukan kode seperti percobaan - memperbaiki kesalahan saat Anda melakukannya. Untuk bisnis ini tidak cukup baik dan itu masalah profesionalisme yang diharapkan untuk mengenali ini.
Tom W

Tidak ada yang salah dengan memperlakukan kode seperti eksperimen; itu bagian dari proses berulang. Tetapi pada akhirnya Anda harus berkeliling untuk "kode ini menerima input ini dan diharapkan untuk menghasilkan output ini." Untuk itulah tes unit dilakukan; mereka merupakan bagian dari spesifikasi. Saya dapat melihat mengapa Anda ingin melakukan TDD; itu memaksa spesifikasi ke kode ... Tapi Anda perlu dukungan dari budaya perusahaan untuk membuat itu bekerja, dan TDD memiliki kesan "agama" tentang hal itu. Tidak semuanya dapat diuji dengan cara ini, jadi pada akhirnya, Anda mungkin harus hidup dengan tingkat ketidaknyamanan tertentu.
Robert Harvey 6/11

2

Saya akan fokus pada prototyping di sini

masalah utama dengan prototipe adalah bahwa mereka dimaksudkan sebagai bukti konsep

namun jika Anda tidak dapat membangun lebih jauh pada prototipe dan perlu membangun kembali produk akhir dari awal, Anda mungkin juga tidak membangun prototipe dan Anda membuang-buang waktu untuk membangunnya

saran saya kepada tim Anda adalah untuk mendapatkan kualitas dan fleksibilitas dalam prototipe tersebut. Saya tahu itu tidak mungkin untuk membuat hal-hal yang sempurna pertama kali tetapi mencoba untuk tetap dapat dikembangkan untuk kebutuhan di masa depan


Itulah yang saya coba komunikasikan selama beberapa waktu. Seperti yang terjadi, prototipe seringkali berharga dan mengajarkan kita pelajaran penting tentang sifat masalah. Namun, terlepas dari apakah pelajaran tersebut dipelajari atau tidak, dan kualitas penerapannya bergantung pada pengembang merekonstruksi pengetahuan yang diperoleh dari otak mereka, daripada menggunakan prototipe untuk menulis spesifikasi. Pemimpin dev mengatakan yang terakhir harus terjadi, kemudian tidak menindaklanjuti untuk memastikan hal itu terjadi.
Tom W

ketika dia mengatakan dia ingin prototipe apa yang dia maksud adalah dia ingin versi kerja minimal, dan secepat mungkin. Ini akan menjadi dasar untuk versi final. Masalah dengan pendekatan ini adalah bahwa junior devs (umumnya) dapat menulis kode yang baik, atau dapat menulis kode dengan cepat, tetapi jarang dapat melakukan keduanya sekaligus.
Kevin

2
Fred Brooks berkata, "Tulis saja untuk dibuang, Anda akan tetap melakukannya", itu benar hari ini seperti 40 tahun yang lalu.
mattnz

1

Ini adalah jawaban yang bagus. Saya hanya dapat menambahkan bahwa "berusaha berkomunikasi" adalah yang terbaik. Perubahan cara kerja organisasi tidak terjadi dengan cepat. Ketika itu terjadi seringkali seperti gelombang, di mana momentum terbentuk dari bawah dan dari atas. Jadi Anda akan lebih bahagia jika harapan Anda tetap rendah dan menunggu kesempatan Anda untuk mengatakan bagaimana hal-hal akan dilakukan atau berharap untuk bekerja dengan organisasi lain.


1

Sudahkah Anda mengidentifikasi seseorang di perusahaan yang "mendapatkannya" jika demikian, mengunci orang ini dan belajar sebanyak mungkin darinya. Jika tidak, tundalah waktu Anda, mulailah belajar dan tumbuh sendiri (bergabunglah dengan proyek Open Source atau mulai proyek Anda sendiri), dan cari tempat yang dapat mendorong pertumbuhan Anda.

Hal terburuk yang dapat terjadi adalah Anda tetap di sana dan belajar melakukan hal-hal dengan cara yang salah. Ya, harus ada pragmatisme yang diambil, tetapi tim yang benar-benar terampil dapat melakukan hal-hal dengan cara yang benar dan masih tepat waktu dengan produk yang berkualitas. Sepertinya tim Anda saat ini tidak memiliki apa yang diperlukan dan Anda harus mulai mencari yang baru.


"Sudahkah Anda mengidentifikasi seseorang di perusahaan yang" mendapatkannya "" LOL
Kenzo
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.