Cara Mengevaluasi, Mengelola, dan Menghindari Hutang Teknis

Diterbitkan: 2020-05-26

Jika utang teknis terdengar seperti sesuatu yang diangkat dari buku pegangan keuangan, itu karena istilah tersebut terkait dengan keuangan. Namun, dalam arti sebenarnya, utang teknis terkait dengan pemrograman. Ini adalah gagasan bahwa selama pengembangan proyek perangkat lunak, langkah-langkah tertentu yang diperlukan dilewati, atau dibuang sama sekali dalam upaya untuk memenuhi tenggat waktu.

Dalam upaya untuk mengembangkan aplikasi atau perangkat lunak yang sempurna, pengembang sering kekurangan waktu — sama seperti orang acak yang melakukan tugas sewenang-wenang. Jadi, biasanya masuk akal untuk memiliki semacam trade-off antara memberikan produk yang sempurna dengan kode yang sempurna dan memaksimalkan waktu.

Pertanyaannya kemudian adalah: apakah ada batasan untuk trade-off ini? Apakah ada kerugian yang melekat yang dapat dihasilkan dari pertukaran ini? Akhirnya, apakah pengembang benar-benar lebih baik dalam jangka panjang? Dalam bagian tentang hutang teknis ini, saya akan mencoba menjawab semua pertanyaan ini.

Apa itu Utang Teknis?

What Is Technical Debt

Dalam mendefinisikan utang teknis, kita harus mengacu pada orang yang pertama kali disebut sebagai pencipta istilah: Ward Cunningham. Menurut Cunningham, utang teknis mengacu pada pekerjaan pengembangan ekstra yang harus dilakukan untuk memprogram sebuah kode untuk menebus defisit yang timbul dari memprogramnya dalam waktu singkat.

Untuk membuatnya lebih gamblang, bayangkan Anda ditugasi membersihkan ruangan yang berantakan, dan Anda terlambat masuk kelas. Dalam upaya untuk memastikan Anda melaksanakan instruksi dan juga tepat waktu untuk kelas Anda, Anda melakukan pembersihan cepat, menyapu sebagian besar puing-puing di bawah sofa. Dampaknya adalah Anda pada akhirnya harus meluangkan waktu untuk memilah-milah kekacauan. Untuk pengembangan perangkat lunak, ketika Anda melewati langkah-langkah yang diperlukan dan mengikuti rute yang lebih mudah, dengan kode 'tidak begitu bersih', akan lebih sulit untuk membersihkan kode di kemudian hari. Ada beberapa fase yang dihadapi dalam domino proyek perangkat lunak, dan semakin lama Anda mengabaikan masalah yang ada, semakin lama waktu yang dibutuhkan untuk menyelesaikannya.

Jenis Utang Teknis

Utang teknis terdiri dari berbagai jenis, termasuk:

Hutang Teknis yang Direncanakan

Ini terjadi dalam situasi di mana organisasi dengan sengaja memutuskan untuk berhutang teknis. Ini, seperti yang telah dibahas sebelumnya, biasanya untuk mengalahkan tenggat waktu yang ditentukan dan mencapai tujuan tertentu. Ketika terlibat dalam hutang teknis yang direncanakan, organisasi harus jelas apa yang mereka bersedia untuk menyerah, dan apa yang mereka tidak bisa. Anda harus menyimpan catatan yang akurat, mengingat bahwa pada akhirnya Anda harus mengembalikan dan memperbaiki kesalahan yang Anda lewati di awal.

Hutang Teknis Tidak Disengaja

Jenis hutang teknis ini adalah kebalikan langsung dari yang pertama. Itu muncul ketika sebuah organisasi tidak meramalkan atau merencanakan utang teknis. Alasan untuk ini biasanya adalah gangguan komunikasi antara berbagai unit dalam organisasi, atau praktik kerja yang buruk antar unit.

Hutang Teknis yang Tidak Dapat Dihindari

Ini adalah jenis utang teknis yang tidak dapat dicegah oleh tindakan apa pun dari pihak organisasi. Misalnya, dengan perubahan cepat yang dialami dalam teknologi, masuk akal bahwa beberapa kode yang ditulis di masa lalu akan gagal memenuhi standar yang diproyeksikan saat ini.

Juga, hutang teknis semacam ini dapat muncul ketika perubahan diminta ketika kode sudah ditulis. Jika di tengah-tengah perancangan perangkat lunak, perubahan tertentu diperkenalkan, itu bisa mengacaukan dinamika, membuat kode lama menjadi usang atau tidak perlu.

Penyebab Utang Teknis

Causes of Technical Debt

Beberapa alasan untuk hutang teknis telah dibahas di atas, tetapi saya hanya akan memilihnya satu demi satu untuk membuatnya lebih jelas.

Bergegas

Penyebab paling sering dari utang teknis adalah tergesa-gesa. Pengembang sering memiliki tenggat waktu yang ketat, beberapa di antaranya mencakup tenggat waktu untuk meluncurkan perangkat lunak tertentu. Seringkali dapat dimengerti (dan diharapkan) dalam situasi seperti ini bahwa pengembang mungkin mengalami hutang teknis di sepanjang jalan. Jenis hutang teknis ini sering disengaja dan dapat mengakibatkan masalah yang dapat berkisar dari memiliki bug dalam kode, atau kode spageti yang timbul.

Pengawasan/Kesalahan

Terkadang, programmer hanya menulis kode yang buruk, yang pada akhirnya menyebabkan hutang teknis. Terlepas dari apakah kode yang buruk ada sebagai akibat dari kesalahan pembuat kode atau tidak, kenyataannya adalah bahwa kesalahan mengakibatkan hutang teknis, dan karena tidak terukur, pada akhirnya harus diperbaiki.

Kurangnya Kesadaran akan Efeknya

Terkadang hutang teknis muncul karena pembuat kode gagal menyadari atau mengakui betapa berbahayanya hutang teknis dalam jangka panjang. Ini bisa berasal dari ketidaktahuan yang sah tentang efek berbahaya dari mengambil jalan pintas selama pemrograman, atau bisa juga dengan sengaja mengabaikan konsekuensinya.

Maksud

Hutang teknis dapat timbul dengan sengaja oleh tindakan yang disengaja dari pembuat kode atau organisasi.

Kurangnya Modularitas

Ini muncul terutama karena satu kode dapat melayani logika bisnis yang berbeda secara bersamaan. Situasi semacam ini membuat penanganan perangkat lunak jauh lebih sulit. Dengan setiap kode yang ditulis pengembang, semakin besar kemungkinan mereka akan mengalami tantangan dengan modularitas.

Evaluasi Utang Teknis

Evaluation of Technical Debt

Utang teknis tidak boleh dihitung secara manual karena itu akan sangat sulit. Ini berarti harus memasukkan kode secara manual untuk menentukan masalah saat ini dan kemungkinan yang akan datang. Terlepas dari bagaimana membuang waktu proses manual, ada kemungkinan bahwa kode akan berubah bentuk pada akhir proses manual.

Salah satu cara untuk melakukan evaluasi adalah dengan melakukan analisis statis dengan menggunakan beberapa alat yang mendukungnya. Beberapa alat yang dapat digunakan antara lain Coverity, SonarQube, Check Style, dan Closure Compiler.

Secara umum, ada dua cara untuk menghitung hutang teknis. Pada pendekatan pertama, dapat diperoleh dengan menghitung rasio utang teknis berikut kode rasio. Di sini, perkiraan awal atau keseluruhan waktu yang dibutuhkan untuk mengembangkan aplikasi akan digunakan untuk menentukan waktu yang dibutuhkan untuk memperbaiki utang teknis.

Pada pendekatan kedua, Anda dapat langsung menggunakan perkiraan yang diberikan oleh berbagai alat seperti SonarQube. Ini akan digabungkan dengan daftar hutang teknis serta kode referensi mereka. Dari alat tersebut, Anda bisa mendapatkan perkiraan yang akurat tentang lamanya waktu yang dibutuhkan untuk memperbaikinya.

Mengevaluasi utang teknis akan memberi Anda gambaran tentang berapa hari yang diperlukan untuk memperbaiki utang teknis. Semakin banyak hutang, semakin lama waktu yang Anda butuhkan untuk memperbaikinya.

Menyelesaikan Utang Teknis

Bagaimana jika hutang teknis telah terjadi dan Anda bingung harus berbuat apa? Ada langkah-langkah tertentu yang dapat Anda ambil untuk mengelola utang teknis.

Pertama, Anda harus mengakui bahwa ada hutang teknis dan mengkomunikasikan hal yang sama kepada tim Anda. Dalam berkomunikasi, Anda harus jelas tentang apa yang telah terjadi dan apa yang perlu dilakukan untuk memperbaikinya. Anda harus memastikan bahwa Anda dengan jelas mengomunikasikan kebutuhan untuk mengurus hutang teknis pada kesempatan paling awal.

Setelah memberi tahu tim Anda tentang hutang teknis, ada tiga pendekatan yang dapat Anda ambil. Pada pendekatan pertama, Anda dapat memutuskan untuk melanjutkan sistem apa adanya. Dalam skenario ini, aplikasi akan digunakan apa adanya.

Atau, Anda dapat memutuskan untuk melakukan refactor aplikasi. Refactoring dilakukan dengan tujuan untuk mengurangi kompleksitas dalam aplikasi serta membersihkan struktur aplikasi. Dengan refactoring, perilaku perangkat lunak tidak akan berubah; satu-satunya bagian yang terpengaruh adalah struktur internal.

Terakhir, jika dua opsi yang dibahas di atas tidak berfungsi, Anda harus mengganti kode sepenuhnya. Satu masalah dengan ini adalah bahwa hal itu dapat menyebabkan utang teknis baru, tetapi itu bisa menjadi pertukaran yang lebih baik dalam jangka panjang.

Menghindari Utang Teknis di Masa Depan

Avoiding Technical Debts

Tentu saja, tidak perlu dipikirkan lagi bahwa menghindari utang teknis jelas lebih pintar daripada mencoba memperbaikinya saat utang itu muncul. Terlepas dari kenyataan bahwa itu menghemat waktu dan stres Anda, itu juga memastikan bahwa konsekuensi sisa yang berasal dari hutang teknis sejak awal tidak ada.

Dapat dikatakan bahwa utang teknis, dengan sendirinya, tidak buruk. Mereka umumnya bermasalah karena mereka adalah hutang yang harus dibayar kembali, dan manusia bukanlah spesies yang paling bertanggung jawab di bumi. Memilih opsi yang lebih lemah secara konsisten biasanya akan melemahkan kekuatan perangkat lunak Anda, dan mempersulit peningkatan fungsionalitas di kemudian hari. Secara keseluruhan, menghindari hutang teknis adalah pilihan terbaik bagi siapa pun.

Jadi, bagaimana Anda mencegah timbulnya hutang teknis:

Buat Backlog Proyek

Idenya di sini adalah untuk membuat semua orang mengikuti proses dan mempercepat mereka dengan persyaratan untuk tugas apa pun yang sedang dilakukan. Membuat backlog memungkinkan semua orang melihat tugas yang belum diselesaikan, dan jalur yang harus diambil untuk mencapainya.

Prioritaskan Kualitas Di Atas Kecepatan

Jika Anda sendiri seorang programmer, Anda harus belajar memprioritaskan pekerjaan yang berkualitas daripada banyak pekerjaan. Pastikan kode Anda bersih, dan aplikasi atau perangkat lunak lainnya dikembangkan dengan sempurna. Pahami bahwa godaan untuk mengambil jalan pintas tidak akan sia-sia karena pada akhirnya, Anda masih harus melakukan tugas yang Anda buang.

Jika Anda memimpin sebuah tim, Anda harus mengomunikasikan nilai-nilai yang sama ini kepada anggota tim. Anggota harus diajari untuk menciptakan solusi yang berorientasi pada hasil dan menghindari jalan pintas.

Menciptakan kesadaran

Secara umum, pengetahuan mendalam tentang apa itu utang teknis dan bagaimana menghindarinya dapat berguna untuk mencegah timbulnya utang tersebut sejak awal. Ketika Anda mempersenjatai pengembang Anda dengan pengetahuan yang diperlukan, mereka akan lebih baik menghindari jebakan utang teknis.

Perkenalkan Praktik Pengkodean yang Baik

Beberapa praktik pengkodean membuat Anda lebih mungkin untuk jatuh ke dalam utang teknis. Jadi, akan sangat bagus untuk menghindari kopling ketat, menggunakan abstraksi dan refactoring.

Memperkenalkan Teknologi yang Diperbarui

Pembaruan teknologi secara teratur dapat menjadi cara yang sangat baik untuk mencegah utang teknis. Dalam melakukan update, Anda harus memastikan bahwa yang digunakan adalah framework, database, dan software aplikasi terbaru.

Kesimpulan

Hutang teknis, dalam sebagian besar kasus, tidak dapat dihindari selama Anda terus mengembangkan program dan menulis kode. Namun, kemungkinan kemunculannya bisa sangat berkurang ketika langkah-langkah yang tercantum di atas diikuti. Juga, dalam kemungkinan utang teknis, semua harapan tidak hilang. Tetap tenang, percaya diri, bertindak sesuai dengan itu.