Bagaimana "perusahaan perangkat lunak khusus" menangani hutang teknis?

20

Apa itu "perusahaan perangkat lunak khusus"?

Yang dimaksud dengan "perusahaan perangkat lunak khusus" adalah perusahaan yang menghasilkan uang terutama dari membangun perangkat lunak khusus, salah satunya. Contohnya adalah agen atau perusahaan barang setengah jadi, atau kontraktor / konsultan seperti Redify .

Apa kebalikan dari "perusahaan perangkat lunak khusus"?

Kebalikan dari model bisnis di atas adalah perusahaan yang fokus pada produk jangka panjang, apakah itu aplikasi desktop / mobile yang dapat digunakan, atau perangkat lunak SaaS.

Cara yang pasti untuk membangun hutang teknis:

Saya bekerja untuk perusahaan yang berupaya fokus pada serangkaian produk SaaS. Namun, karena kendala tertentu, terkadang kami akhirnya tunduk pada kehendak klien tertentu dan kami akhirnya membangun bit perangkat lunak khusus yang hanya dapat digunakan untuk klien itu.

Ini adalah cara yang pasti untuk menimbulkan hutang teknis. Sekarang kami memiliki sedikit perangkat lunak untuk dipelihara yang tidak menambah apa pun pada produk inti kami.

Jika pekerjaan kustom adalah cara yang pasti untuk membangun utang teknis, bagaimana agen mengatasinya?

Jadi itu membuat saya berpikir. Perusahaan yang tidak memiliki produk inti sebagai pusat model bisnis mereka, yah mereka selalu melakukan pekerjaan perangkat lunak khusus. Bagaimana mereka mengatasi gagasan utang teknis? Bagaimana itu tidak membuat mereka bangkrut secara teknis ?

andy
sumber
5
Mengapa saya memiliki keinginan kuat untuk hanya mengatakan, "Buruk"?
HLGEM
5
Apakah ini pertanyaan tentang utang teknis, atau fitur creep dan perangkat lunak hanya untuk satu klien? Utang teknis adalah jumlah praktik buruk yang kembali menghantui Anda nanti. Fitur creep dan perangkat lunak hanya untuk satu klien adalah jenis mimpi buruk manajemen yang berbeda.
Phil
Dengan kata lain, umum untuk memiliki kasus ini. Saya bekerja di beberapa perusahaan yang, dengan sengaja, menjual atau menyewakan perangkat lunak perantara, dengan modul generik, yang memungkinkan penyesuaian.
umlcat
3
Dari sudut pandang klien, pengalaman telah mengindikasikan bahwa sebagian besar toko-toko khusus sangat menganjurkan Anda untuk menimbun utang teknis yang buruk sehingga Anda dapat memanggil mereka lagi untuk menagih utang teknis baru yang berbeda.
Wyatt Barnett
2
@ WyattBarnett Dari perspektif custom shop: banyak pelanggan memiliki pemahaman yang buruk tentang utang teknis, dan upaya untuk mendidik mereka hanya menyebabkan gesekan. Mereka secara efektif bersikeras bahwa Anda membantu mereka mengumpulkan utang teknis, tanpa pernah membahas pro dan kontra.
MarkJ

Jawaban:

13

Jika Anda dapat mengubah persyaratan khusus pengguna menjadi sesuatu yang akan bermanfaat bagi semua orang, bagus. Jika klien bersedia membayar biaya dukungan yang sedang berlangsung untuk fitur ini, juga hebat. Tetapi jika Anda adalah tim kecil dan Anda kesulitan untuk mendukung semua fitur Anda, tidak ada artinya kecuali membuat beberapa keputusan sulit tentang fitur yang paling tidak Anda butuhkan, dan kemudian menginvestasikan waktu untuk menghilangkannya dari basis kode Anda.

SaaS menempatkan Anda pada posisi yang baik untuk mengumpulkan statistik penggunaan. Anda harus melihat tooling up fitur Anda jika Anda belum melakukannya sehingga Anda dapat melacak siapa yang menggunakan apa. Pengalaman kami adalah bahwa pelanggan yang paling idiomatis biasanya juga yang paling tidak berfungsi; pria yang menghentakkan kakinya dan menahan nafas sampai Anda memberinya tombol ekspor-ke-MS-Access mungkin belum menggunakannya selama lebih dari setahun. Beberapa fitur tetap hidup meskipun hanya satu pelanggan yang menggunakannya, karena pelanggan itu keras dan mengancam untuk membawa bisnisnya ke tempat lain setiap kali ada sesuatu yang tidak memuaskannya. Menghentikan fitur mungkin dikenakan biaya pelanggan sekarang, tetapi waktu yang dihabiskan untuk mendukung fitur itu mungkin dikenakan biaya puluhan pelanggan selama bertahun-tahun. Ini adalah ukuran kualitas tim manajemen Anda,

Ketika Anda menghentikan fitur, pastikan untuk mengumumkan keputusan kepada pelanggan Anda (atau setidaknya mereka yang terpengaruh) jauh sebelumnya, di mana saja antara enam bulan dan tiga tahun adalah wajar. Faktanya, jika Anda setuju untuk membangun fitur khusus pengguna, Anda mungkin mencoba membuat staf penjualan membangun tanggal kedaluwarsa sejak awal. Sebut saja "dukungan seumur hidup", dan jelaskan bahwa semakin lama mereka menginginkannya semakin banyak biaya. Cobalah untuk memberikan solusi bagi klien Anda sehingga mereka tidak dibiarkan menggelepar ketika fitur berjalan, misalnya skrip yang mengubah file XML yang diekspor ke format MS-akses, atau sedikit saran tentang memilih RDBMS yang lebih baik.

Sesuatu yang berhasil bagi kami sebagai langkah pencegahan adalah mendapatkan laporan dari tim penjualan kami yang dikirim ke tim pengembangan dan manajemen kami setiap bulan. Laporan ini mencakup umpan balik dari klien - fitur apa yang paling populer, fitur apa yang paling diminta, fitur apa yang diusulkan menghasilkan buzz paling banyak. Ini menarik jika Anda seorang pengembang tetapi manfaat sebenarnya adalah untuk tim penjualan, yang sekarang berpikir lebih banyak tentang masing-masing fitur dalam konteks gambaran yang lebih besar, alih-alih mengirimkan aliran permintaan fitur tanpa henti dan memprioritaskan berdasarkan di mana klien adalah yang paling keras. Efeknya adalah membuat staf penjualan kami lebih sulit dalam hal permintaan fitur baru dalam negosiasi karena mereka lebih sadar tentang di mana setiap fitur mungkin masuk ke dalam proposisi nilai keseluruhan produk kami.

Memiliki kode modular dengan banyak tes otomatis akan membantu Anda ketika Anda meretas fitur ke dalam produk Anda dan meretasnya kembali, tetapi pada akhirnya ini bukan pertanyaan pemrograman tetapi pertanyaan manajemen. Menulis kode untuk melakukan penjualan adalah permainan bodoh.

dslh
sumber
+1 dslh jawaban yang bagus, itu benar-benar sampai pada inti dari jenis modifikasi atau peretasan yang harus kita buat. Saya suka ide kadaluwarsa ... benar-benar menarik.
andy
+1 Tidak ada masalah dengan memperoleh banyak fitur kecil yang harus didukung, selama klien membayar untuk fitur + dukungan. Maaf, kami tidak dapat mendukung fitur Anda secara gratis ...
Phil
18

Ketika saya dihadapkan dengan permintaan pengembangan khusus, saya memfilternya melalui filter keren yang membagi permintaan menjadi 3 tumpukan:

  1. hal-hal luar biasa yang akan berguna bagi semua orang dan relatif mudah diterapkan
  2. hal-hal luar biasa yang akan berguna untuk semua orang dan sulit untuk diterapkan
  3. satu hal bodoh yang hanya diperlukan untuk klien yang satu ini yang sebenarnya tidak membutuhkannya
  • Kategori 1 diimplementasikan dalam siklus dev saat ini.
  • Kategori 2 diimplementasikan dalam siklus dev berikutnya.
  • Kategori 3 mendapat penawaran waktu man 1 dev bulan setelah mana sebagian besar klien menyadari bahwa permintaan mereka tidak layak.

Jujur, ini tidak pernah gagal dan saya tidak berpikir kami akhirnya menerapkan salah satu fitur kategori 3. Dan tentu saja tidak ada pelanggan yang berjalan (penjualan tidak akan membiarkan saya melakukan ini :)

(Pengalaman ini di sebuah perusahaan ISV)

MK01
sumber
MK menarik. Meskipun saya tidak yakin 3 akan terbang dengan pelanggan baru yang potensial, tetapi mungkin akan bekerja dengan pelanggan yang sudah ada. Tidak ada yang kurang, sangat menarik.
andy
6
1 bulan pria? Anda harus memiliki pelanggan dengan permintaan fitur yang sangat kecil!
JohnB
@ JohnB ya, baik itu atau produk sudah sangat fleksibel.
MK01
6
@ JohnB, maksudmu pria bulan itu mitos?
octern
2
@octern Saya pikir orang lain melewatkan referensi :-)
Arnold Zokas
12

karena kendala tertentu, kami terkadang berakhir dengan keinginan klien tertentu dan kami akhirnya membangun sedikit perangkat lunak khusus yang hanya dapat digunakan untuk klien itu.

Masalah Anda bukanlah Anda membuat kode yang hanya digunakan untuk satu klien. Masalahnya adalah Anda memasukkan kode yang hanya digunakan untuk satu klien ke dalam produk yang Anda jual ke banyak klien lain yang tidak membutuhkan fungsionalitas itu.

Perusahaan yang tidak memiliki produk inti sebagai pusat model bisnis mereka, yah mereka selalu melakukan pekerjaan perangkat lunak khusus. Bagaimana mereka mengatasi gagasan Hutang Teknis? Bagaimana itu tidak mendorong mereka ke Kebangkrutan Teknis?

Mereka mengirimkan produk. Dan kemudian mereka melanjutkan. Ketika Anda mengembangkan produk berdasarkan kontrak, semua yang Anda lakukan pada proyek itu adalah untuk satu klien itu. Hutang teknis apa pun yang mungkin timbul selama pengembangan menjadi masalah klien setelah kontrak berakhir, dan pengembang beralih ke proyek lain untuk klien lain.

Itu tidak berarti bahwa tidak apa-apa untuk melakukan pekerjaan yang buruk, tentu saja. Tujuan nomor satu Anda adalah membuat klien Anda ingin terus bekerja dengan Anda, dan melakukan pekerjaan yang berkualitas adalah cara untuk sampai ke sana. Itu juga tidak berarti bahwa utang teknis bukan masalah bagi pengembang kontrak. Bahkan jika Anda secara konsisten menulis kode bersih sendiri, kemungkinan besar Anda akan dipekerjakan pada titik tertentu untuk mengerjakan proyek yang telah menimbulkan tumpukan utang. Itu bisa baik (klien ingin membayar Anda untuk membersihkan kekacauan) atau tidak (klien tidak tahu seberapa buruk kode itu dan tidak mengerti mengapa "hanya" menambahkan beberapa fitur lagi akan memakan waktu begitu lama ).

Caleb
sumber
3

Saya tidak setuju dengan premis bahwa pekerjaan bea cukai dijamin menghasilkan utang teknis. Menghindari utang teknis tidak berarti menghindari jenis fungsionalitas tertentu - itu berarti menghindari kekakuan yang tidak perlu, masalah ketergantungan, dan hal-hal yang membuat basis kode sulit (misalnya mahal) untuk diubah. Fungsionalitas kustom tidak menyiratkan semua ini - itu hanya menyiratkan basis sempit untuk fungsionalitas. Jadi, kuncinya adalah membuat faktor sebanyak mungkin, logika yang dapat digunakan kembali sebanyak mungkin dari implementasi sebanyak mungkin, meninggalkan kebiasaan, sekali saja sebagai modul mandiri yang dapat digunakan untuk pelanggan yang meminta.

Misalnya, katakanlah Anda memiliki kiriman yang merupakan aplikasi web internal yang akan dipasang oleh pelanggan Anda di intranet. Suatu hari, seorang pelanggan datang dan menawarkan untuk mengemudikan truk sampah penuh uang ke perusahaan Anda jika Anda akan membuat versi untuk mereka yang memiliki aplikasi desktop "klien kaya" alih-alih antarmuka browser. Nah, jika sistem Anda dirancang dengan baik dan dependensi Anda dikelola dengan baik, ini hanya masalah menggunakan kembali domain, akses data, dan komponen layanan sambil membuat komponen presentasi baru. Utang teknis bukan merupakan pertimbangan, meskipun Anda hanya memiliki satu pelanggan yang ingin kembali ke tahun 1999 dan memiliki aplikasi desktop untuk ini.

Erik Dietrich
sumber
1

Ini adalah pertanyaan yang agak rumit untuk dijawab karena seperti banyak hal itu benar-benar tergantung pada keadaan proyek, tingkat kontrol yang dimiliki perusahaan yang dikontrak, apakah perangkat lunak khusus telah dikelola oleh perusahaan yang dikontrak untuk seluruh siklus hidupnya, jumlah "gangguan" oleh orang lain dengan akses ke basis kode, sikap semua orang yang terlibat, kompleksitas proyek dan metodologi yang digunakan ... saya benar-benar bisa melanjutkan.

Semua sistem memiliki tingkat hutang teknis. Dalam beberapa kasus ini mungkin tidak terlalu terlihat karena upaya yang rajin dari pengembang yang berupaya untuk selalu menjaga basis kode yang bersih, namun tidak ada sistem yang sempurna dan perancangan ulang yang besar dapat membuat masalah yang tampaknya tidak bersalah namun sudah lama berdiri menjadi jelas. Jadi bagaimana perusahaan yang dikontrak menangani ini?

Dalam banyak kasus mereka tidak melakukannya. Seringkali perangkat lunak akan ditulis oleh satu perusahaan, kemudian dimodifikasi oleh yang lain, dan itu tidak biasa untuk melihat basis kode menjadi benar-benar kacau karena setiap perusahaan di bawah kontrak bekerja dengan tenggat waktu yang ketat dan tidak akan membenarkan waktu untuk menjaga kode tetap bersih ( dan kadang-kadang nyaris tidak diuji) jika itu berarti mereka mungkin berisiko melewati tenggat waktu.

Dalam kasus lain, Anda menemukan perusahaan yang tidak hanya mengelola proyek yang dikontraknya dengan baik, tetapi juga entah bagaimana menemukan waktu untuk meninggalkan basis kode yang ada dalam keadaan yang lebih baik daripada yang mereka temukan. Mereka sering melakukan hal ini dengan perencanaan yang cermat, mengidentifikasi sumber-sumber utang teknis - biasanya yang paling berdampak pada pekerjaan baru - dan mereka merancang strategi untuk menyediakan kasus uji dan modifikasi yang berkontribusi untuk mengelola utang teknis dan memasukkan semua ini ke dalam jadwal proyek mereka .

Apakah menjadi perangkat lunak khusus menjamin hutang teknis yang bertentangan dengan penulisan produk utama? Jawaban singkatnya adalah tidak, namun kemungkinan utang teknis akan bertambah jika tidak ditangani secara aktif. Ini sama dengan proyek perangkat lunak lainnya. Jika Anda mengendalikan proyek sepenuhnya sepanjang siklus hidupnya, maka Anda memiliki peluang yang lebih baik untuk berurusan dengan utang teknis. Jika tidak, maka Anda harus berurusan dengan utang teknis yang mungkin diperoleh dari kode yang ditinggalkan perusahaan sebelumnya.

Di sisi lain, jika pertanyaan Anda adalah apakah menulis perangkat lunak terlepas dari model bisnis Anda adalah jaminan hutang teknis. Jawabannya tentu saja. Pertanyaan sebenarnya adalah bagaimana perusahaan mana pun menangani utang teknis. Biarkan itu bertambah dan menanganinya pada waktu yang dijadwalkan, atau mengelola basis kode bersih secara berkelanjutan untuk melunasi hutang teknis sesegera mungkin? Jawaban itu datang ke prioritas individu perusahaan, dan apakah utang teknis yang dikeluarkan relevan secara finansial.

S.Robins
sumber
+1 Terima kasih atas jawabannya melalui S.Robins. Saya kira poin utama yang saya coba buat adalah bahwa, jika Anda membangun sesuatu untuk tujuan jangka pendek penjualan, tetapi Anda tidak siap untuk mendukung produk itu dari waktu ke waktu, maka Anda telah menimbulkan hutang teknis, karena setiap kali bahwa produk membutuhkan dukungan, Anda, sebagai perusahaan, tidak akan siap, dan kemudian Anda harus membawa anggota tim produk utama untuk memperbaiki sesuatu yang tidak lagi dibayar oleh siapa pun.
andy
0

Perangkat lunak khusus bukan jaminan hutang teknis, tetapi melayani dua tuan itu.

Perusahaan perangkat lunak khusus akan membuat perangkat lunak yang tepat dipasang untuk tugas yang ada, mengirimkannya, dan memeliharanya jika perlu. Benar-benar perangkat lunak khusus seringkali tidak perlu fitur baru ditambahkan terlalu sering.

Masalah yang diuraikan dalam pertanyaan ini adalah ketika perusahaan produk membuat fitur khusus menjadi produk generik. Jika produk sepenuhnya custom, itu hanya akan bergerak ketika persyaratan di satu pelanggan berubah. Jika produk itu sepenuhnya generik, itu akan bergerak hanya ketika fitur-fitur baru ditambahkan untuk membuatnya lebih menarik. Tetapi ketika Anda memiliki fitur khusus dalam produk generik lain, Anda memiliki dua potongan kode, dalam kontak dekat, yang bergerak dengan kecepatan berbeda. Seperti lempeng tektonik yang menyebabkan gempa bumi, antarmuka antara potongan kode ini adalah "titik panas", siap untuk masalah.

Sean McMillan
sumber