Namun di banyak domain, pelanggan tipikal adalah:
- Tertarik dengan masalah operasional harian - taktik jarak pendek ... bukan strategi;
- Hanya peduli dengan solusi langsung;
- Umumnya pemikir satu dimensi, non-abstrak;
- Terutama tertarik pada "menyelesaikan pekerjaan" sebagai lawan datang dengan solusi yang tahan lama dan berkualitas.
Dan jujur saja, mereka biasanya punya alasan bagus untuk berpikir seperti ini. Pertama-tama, mereka menjalankan bisnis, yang seharusnya menghasilkan pendapatan hari ini dan besok, bukan di masa depan yang jauh. Kedua, mereka bukan ahli teknis - mereka tidak tahu apa yang mungkin dan apa yang tidak, dan apa konsekuensi dari pilihan arsitektur / desain / implementasi tertentu. Ini yang kita tahu.
Jadi jawabannya adalah - tidak mengejutkan - komunikasi .
Anda perlu banyak berkomunikasi, untuk saling mendidik, untuk membuat satu sama lain memahami sudut pandang pihak lain setidaknya ke tingkat dasar. Anda perlu menjelaskan konsekuensi jangka pendek dan jangka panjang dari alternatif yang mungkin. Dan Anda perlu menggunakan bahasa yang mereka pahami .
- Jika Anda mengatakan "ini akan menjadi peretasan, yang membuat kodenya lebih mudah dibaca dan tidak dapat diperpanjang" , kata mereka, "yeah, terserahlah" .
- Jika Anda mengatakan "ini akan menjadi perbaikan jangka pendek, yang akan membuat pengembangan dan pemeliharaan jangka panjang lebih mahal, dan meningkatkan risiko memperkenalkan bug" , kata mereka "ha, mari kita pertimbangkan" .
- Dan jika Anda mengatakan "solusi ini akan dikenakan biaya $ 100 sekarang, tetapi perkenalkan $ 500 dari hutang teknis yang Anda harus bayar kembali dengan bunga cepat atau lambat; OTOH solusi lain ini menelan biaya $ 400 sekarang dan tidak meninggalkan utang teknis; pilih yang Anda ingin " , kata mereka " sekarang kita berbicara! " .
OTOH mereka bisa mengajari kita satu atau dua hal tentang perspektif bisnis. Bisnis menginginkan solusi yang dapat digunakan dan cukup baik - hampir tidak sempurna -. Dan mereka tahu mungkin lebih baik daripada siapa pun bahwa "sempurna adalah musuh kebaikan". Jadi, Anda harus ingat bahwa tugas kami adalah memberikan solusi untuk masalah klien kami, daripada menghasilkan perangkat lunak yang sempurna secara teknis. Terkadang keduanya bertemu dengan yang sama, tetapi lebih sering tidak. Ini mungkin dipandang menyedihkan oleh banyak orang, tetapi ini adalah kenyataan bisnis. Bagi saya, jika saya berhasil memecahkan masalah pelanggan saya, dan saya melihat bahwa itu membuat hidup mereka tampak lebih mudah, saya bahagia seperti mereka. OTOH jika saya berhasil menerapkan desain sempurna yang ada dalam pikiran saya, tetapi perusahaan itu bangkrut pada minggu berikutnya, hampir tidak ada kemenangan bagi siapa pun, bukan?
Seorang pemilik bisnis yang masuk akal akan mengerti - jika Anda menjelaskannya menggunakan bahasa mereka sendiri - mengapa penting untuk menjaga perangkat lunak tetap bersih, untuk menulis unit test, untuk refactor dll. Meskipun ini tampaknya tidak secara langsung berkontribusi apa pun dalam jangka pendek, mereka sangat penting untuk pemeliharaan jangka panjang. Dan pelanggan yang masuk akal peduli dengan pemeliharaan jangka panjang dari bisnis mereka, jadi mereka pasti mau berinvestasi ke dalamnya ketika mereka melihat nilai yang dihasilkan dari investasi mereka. Namun, sumber daya dan waktu Anda terbatas, sehingga Anda perlu memprioritaskan dan fokus pada hal-hal yang paling penting. Tapi itu penting hanya jika itu penting bagi Anda berdua .
Anda mungkin ingin memperbarui modul A karena kode di sana hanya buruk, dan Anda memiliki ide yang luar biasa bagaimana membuat ulang kode menjadi ringkas, elegan dan bersih, menggunakan pola desain yang baru saja Anda baca. Namun, jika modul itu belum disentuh selama bertahun-tahun, dan itu berfungsi dengan baik, Anda kemungkinan besar lebih baik berfokus pada modul B, yang akan diperpanjang minggu depan dengan fitur baru yang sangat penting, dan berisi banyak bug sudah.