IT Development & Integration

Sebagian besar organisasi gagal dalam pengiriman perangkat lunak bukan karena mereka tidak mampu menulis kode. Mereka gagal karena sistem mereka tidak dapat berubah tanpa saling merusak satu sama lain. Selama bertahun-tahun ekspansi, sebuah lanskap IT mengakumulasi koneksi, yang masing-masing masuk akal ketika dibangun, tetapi secara keseluruhan membentuk jalinan ketergantungan tersembunyi di mana perubahan kecil menghasilkan kegagalan yang tidak terduga di tempat lain. Artikel ini memperlakukan integrasi sebagai persoalan desain, bukan sekadar pekerjaan pemasangan pipa, dengan argumen bahwa kemampuan untuk merilis secara aman dan mengganti sebuah komponen berasal dari beberapa prinsip dasar: kontrak yang eksplisit, kopling yang longgar, dan komunikasi yang dimediasi. Terakhir, kami menjelaskan bagaimana Nashua menangani pekerjaan ini dalam praktiknya.

What Nashua offers herePenugasan yang membangun perangkat lunak yang aman untuk diubah dan membuat sistem saling berbicara tanpa penyebaran koneksi point-to-point.See the engagements

Utang integrasi di balik pengiriman modern

Integrasi diam-diam telah menjadi biaya dominan dalam sebagian besar lanskap IT perusahaan, dan biaya ini jarang muncul sebagai pos anggaran tersendiri. Ia bersembunyi di dalam keterlambatan proyek, di dalam kehati-hatian yang menyelimuti setiap rilis, di dalam rapat-rapat yang diperlukan untuk mengoordinasikan sebuah perubahan di tiga tim yang masing-masing memiliki sistem yang tersentuh perubahan itu. Ketika orang mengatakan sebuah platform sulit digunakan, mereka biasanya tidak bermaksud bahwa kodenya buruk. Mereka bermaksud bahwa sistemnya saling terjalin: Anda tidak dapat menalar satu bagian tanpa menalar beberapa bagian lain, dan Anda tidak dapat merilis satu bagian tanpa memindahkan sisanya.

Alasan mengapa hal ini penting sekarang, lebih dari satu dekade lalu, adalah bahwa cakupan integrasi telah berlipat ganda. Satu kapabilitas bisnis dapat membentang di sebuah sistem inti pencatatan, beberapa aplikasi software as a service, sebuah platform data, sebuah kanal seluler, dan satu atau lebih mitra eksternal yang terhubung melalui antarmuka mereka sendiri. Pelanggan mengharapkan perubahan dalam hitungan minggu, bukan kuartal. Regulasi menuntut agar aliran data dapat dilacak dan diaudit. Sementara itu, sistem-sistem yang mendasarinya semakin banyak yang bukan milik organisasi dan tidak dapat dimodifikasi, sehingga memindahkan seluruh beban adaptasi ke lapisan integrasi.

Akibatnya, kualitas integrasi kini menetapkan batas atas kecepatan pengiriman. Organisasi dengan batas yang jelas dan kontrak yang eksplisit dapat menambahkan sebuah kanal atau mengganti vendor sebagai sebuah pekerjaan yang terisolasi dan dipahami dengan baik. Organisasi tanpa hal itu memperlakukan setiap permintaan semacam itu sebagai proyek penelitian, karena tidak ada yang dapat memprediksi apa yang akan rusak. Perbedaannya bukan pada bakat atau anggaran. Perbedaannya terletak pada apakah lanskap IT dirancang untuk berubah, dan desain itu hampir sepenuhnya berada pada bagaimana sistem dibuat agar dapat saling berbicara.

Ada alasan lain mengapa topik ini menjadi semakin mendesak. Seiring semakin banyak kapabilitas dirakit dari perangkat lunak yang dibeli dan layanan eksternal, kode yang ditulis sendiri oleh organisasi menyusut, sementara kode yang menghubungkan berbagai hal justru bertambah. Pusat gravitasi rekayasa telah bergeser dari membangun fitur di dalam satu aplikasi menjadi menyusun perilaku di antara banyak aplikasi. Pergeseran itu menguntungkan tim yang memperlakukan integrasi sebagai aset yang dirancang dan menghukum mereka yang memperlakukannya sebagai pemikiran belakangan yang ditempelkan di akhir setiap proyek. Lanskap IT yang akan menua dengan baik adalah yang di dalamnya seseorang secara sengaja menguasai bentuk koneksi-koneksinya, alih-alih membiarkannya menumpuk satu tenggat demi satu tenggat.

Kontrak sebelum koneksi

Prinsip pertama integrasi yang tahan lama adalah bahwa kontrak lebih penting daripada koneksi. Koneksi adalah mekanisme yang dengannya dua sistem bertukar data. Kontrak adalah kesepakatan tentang apa arti data itu, bentuk apa yang dimilikinya, jaminan apa yang berlaku, dan apa yang boleh diasumsikan masing-masing pihak tentang pihak lain. Tim yang berfokus pada koneksi membangun hal-hal yang berfungsi pada hari pengujiannya. Tim yang berfokus pada kontrak membangun hal-hal yang terus berfungsi seiring kedua pihak berkembang, karena kontrak adalah permukaan stabil yang di baliknya masing-masing pihak bebas berubah.

Kontrak yang baik bersifat eksplisit dan sempit. Ia menyatakan data yang dibawanya dan tidak menyertakan hal-hal tak relevan tentang bagaimana penyedia kebetulan menyimpannya secara internal. Perbedaan antara antarmuka dan implementasi ini adalah inti dari segalanya. Ketika seorang konsumen mulai bergantung pada detail internal yang bocor melalui antarmuka yang dirancang dengan buruk, terbentuklah sebuah kopling yang tidak disepakati siapa pun dan tidak dilacak siapa pun. Penyedia tidak lagi dapat melakukan refaktorisasi secara bebas, karena perubahan pada internalnya kini diam-diam merusak konsumen. API yang dirancang dengan baik ada justru untuk mencegah hal ini: mereka mempublikasikan permukaan yang sengaja dibuat minimal dan menyembunyikan segala sesuatu di baliknya.

Kontrak juga membawa semantik, bukan hanya struktur. Dua sistem dapat menyepakati sebuah bidang bernama status dan tetap tidak kompatibel karena mereka berbeda pendapat tentang apa arti nilai-nilainya atau kapan nilai itu ditetapkan. Karena itu, desain kontrak yang serius mencakup makna, versioning, perilaku kesalahan, serta jaminan seputar pengiriman dan pengurutan. Ia memperlakukan kompatibilitas sebagai perhatian utama: sebuah perubahan bisa jadi backward compatible, yang dalam hal ini konsumen yang ada tidak terganggu, atau tidak, yang dalam hal ini membutuhkan strategi versioning dan jalur migrasi. Membuat perbedaan itu terlihat, dan menolak untuk melanggarnya secara diam-diam, adalah kebiasaan paling berharga yang dapat dipegang oleh sebuah praktik integrasi. Segala hal lain dalam artikel ini, dengan satu atau lain cara, adalah teknik untuk menjaga kontrak tetap jujur.

Dari pengkabelan point-to-point menuju alur event-driven

Gaya integrasi tertua adalah point-to-point: sistem A memanggil sistem B secara langsung ketika ia membutuhkan sesuatu. Untuk segelintir sistem, ini sepenuhnya masuk akal. Masalahnya adalah jumlah kemungkinan koneksi bertambah jauh lebih cepat daripada jumlah sistem, dan setiap tautan langsung mengikat dua komponen bersama-sama dalam waktu dan dalam pengetahuan. A harus tahu di mana B berada, harus tersedia ketika B tersedia, dan harus menangani B yang lambat atau tidak ada. Kalikan itu di seluruh lanskap yang terus berkembang dan Anda tiba pada spaghetti yang sudah tidak asing lagi: jalinan padat tautan buatan khusus di mana tidak ada yang dapat mengubah satu sistem tanpa menelusuri setiap benang yang menyentuhnya.

Respons yang telah matang selama satu dekade terakhir adalah memediasi komunikasi alih-alih mengkabelnya secara kaku, dan semakin banyak menjadikannya event-driven. Alih-alih A memerintah B secara langsung, A mempublikasikan sebuah fakta, sebuah pesanan telah dibuat, sebuah pembayaran telah dikonfirmasi, sebuah alamat telah berubah, dan sistem mana pun yang peduli akan berlangganan fakta itu. Penerbit tidak tahu atau tidak peduli siapa yang mengonsumsi event tersebut. Konsumen dapat ditambahkan atau dihapus tanpa menyentuh produser. Pembalikan ini adalah inti dari kopling yang longgar: sistem-sistem tidak lagi bergantung satu sama lain, mereka bergantung pada sebuah kontrak bersama yang eksplisit tentang event yang lewat di antara mereka.

Integrasi berbasis pesan dan event-driven juga memisahkan sistem dalam waktu. Sebuah pesan yang ditempatkan pada broker yang tahan lama dikirim ketika konsumen siap, yang berarti sistem hilir yang lambat atau tidak tersedia sementara tidak lagi menghambat sistem hulu. Asinkronitas ini bukan sekadar trik kinerja. Ia mengubah model kegagalan: back pressure, percobaan ulang, dan buffering menggantikan pemadaman berantai. Tren di seluruh industri, yang terlihat pada bangkitnya platform streaming dan layanan messaging terkelola, justru merupakan perpindahan ini dari rantai permintaan sinkron menuju alur event yang diamati dan direspons oleh sistem. Ini tidak selalu sesuai untuk semua kasus, panggilan sinkron tetap merupakan pilihan yang tepat ketika pemanggil benar-benar membutuhkan jawaban langsung, tetapi sebagai sikap standar untuk mengintegrasikan banyak sistem, ia terbukti jauh lebih tangguh daripada pengkabelan langsung.

Merancang untuk kopling yang longgar

Kopling yang longgar sering dikutip sebagai tujuan dan jarang didefinisikan dengan presisi yang cukup untuk ditindaklanjuti. Dalam praktiknya, ia memiliki beberapa dimensi yang berbeda, dan arsitektur yang baik memperhatikan masing-masing. Ada kopling dalam lokasi: apakah sebuah sistem perlu tahu di mana sistem lain berada, atau apakah ia mengalamati tujuan logis yang dapat dipindahkan. Ada kopling dalam waktu: haruskah kedua sistem tersedia secara bersamaan, atau dapatkah mereka berjalan secara independen. Ada kopling dalam format: apakah mereka terikat pada representasi bersama, atau apakah sebuah lapisan mediasi menerjemahkan di antara mereka. Dan ada kopling dalam pengetahuan: seberapa banyak satu sistem perlu memahami tentang internal sistem lain untuk dapat bekerja dengannya. Setiap keputusan integrasi mengencangkan atau melonggarkan salah satu dari ini, dan tujuannya adalah menjaga masing-masing selonggar yang diperbolehkan oleh kebutuhan.

Beberapa prinsip desain mengikuti secara langsung. Mediasilah alih-alih menghubungkan secara langsung, agar sebuah broker, gateway, atau lapisan integrasi menyerap perbedaan antar sistem dan memberikan masing-masing satu hal yang stabil untuk diajak berbicara. Kuasai batas Anda secara eksplisit: sebuah anti-corruption layer yang menerjemahkan model eksternal ke dalam kosakata Anda sendiri mencegah desain mitra atau vendor merembes dan mendikte desain Anda. Jaga antarmuka tetap kecil, karena setiap bidang yang Anda paparkan adalah janji yang harus Anda tepati. Buat komunikasi bersifat idempoten dan toleran terhadap percobaan ulang, karena dalam sistem terdistribusi mana pun pesan sesekali akan tiba dua kali atau tidak berurutan, dan desain yang mengasumsikan pengiriman sempurna adalah desain yang akan merusak data di bawah beban. Utamakan memindahkan fakta, bukan perintah, agar sebuah sistem mengumumkan apa yang telah terjadi dan membiarkan pihak lain memutuskan apa yang harus dilakukan, alih-alih menjangkau melintasi batas untuk mengorkestrasi pekerjaan yang bukan miliknya.

Yang mendasari semua ini adalah satu uji: dapatkah setiap komponen diubah, dideploy, dan ditalar secara sendiri-sendiri. Ketika jawabannya ya, lanskap IT dapat berevolusi satu bagian pada satu waktu, yang merupakan satu-satunya cara berkelanjutan bagi sistem besar untuk berubah. Ketika jawabannya tidak, yang Anda miliki bukanlah sebuah arsitektur melainkan sebuah program terdistribusi tunggal yang hanya tampak seperti beberapa sistem, dengan segala kerapuhan yang menyertainya dan tanpa kemandirian sama sekali. Merancang untuk kopling yang longgar adalah pekerjaan yang disengaja dan berkelanjutan untuk menjaga agar jawaban itu tetap ya seiring bertumbuhnya lanskap IT.

Integration backboneSystem of recordCRMBillingIdentityData platformPartner APIs
A mediated backbone replaces the point-to-point mesh, so each system integrates once rather than binding directly to every other.

Di mana integrasi berjalan keliru

Kegagalan integrasi sangat konsisten di berbagai organisasi, yang menggembirakan, karena berarti kegagalan itu dapat diantisipasi. Beberapa cukup sering berulang sehingga layak diberi nama.

Monolit terdistribusi. Sistem dipecah menjadi layanan-layanan yang dapat dideploy secara terpisah, tetapi mereka begitu erat terkopling melalui basis data bersama, rantai panggilan sinkron, atau model internal yang bocor sehingga mereka harus dirilis bersama dan gagal bersama. Ini adalah yang terburuk dari kedua dunia: kompleksitas operasional banyak sistem dengan kekakuan satu sistem. Ini hampir selalu berasal dari pemecahan menurut garis teknis alih-alih di sekitar batas kepemilikan dan perubahan yang sesungguhnya.

Basis data bersama. Dua sistem berintegrasi dengan membaca dan menulis tabel yang sama. Terasa efisien dan justru bencana bagi perubahan, karena skema basis data menjadi kontrak implisit yang tidak dirancang siapa pun dan digantungi semua orang. Tidak ada sistem yang dapat mengembangkan penyimpanannya tanpa membahayakan yang lain, dan kopling itu tak terlihat hingga ia rusak.

Perubahan yang merusak secara diam-diam. Sebuah penyedia mengubah bidang, makna, atau perilaku kesalahan tanpa versioning, dan konsumen gagal dengan cara yang muncul jauh dari penyebabnya. Ini adalah pelanggaran kontrak, dan inilah mengapa kompatibilitas harus menjadi disiplin yang eksplisit dan ditegakkan, bukan soal niat baik.

Rantai sinkron yang cerewet dan rapuh. Satu tindakan pengguna memicu urutan panjang panggilan yang memblokir di banyak sistem. Keandalan ujung-ke-ujung adalah hasil perkalian setiap tautan, sehingga keseluruhan rantai menjadi kurang andal daripada bagian mana pun darinya, dan satu komponen yang lambat menghambat semua yang ada di hulu.

Logika integrasi tanpa rumah. Aturan transformasi dan perutean menumpuk dalam skrip, prosedur tersimpan, dan pekerjaan terjadwal yang tidak dimiliki tim mana pun dan tidak dicakup pengujian mana pun. Lanskap IT masih berjalan, tetapi tidak ada yang memahaminya, dan setiap perubahan adalah sebuah tindakan arkeologi.

Pesan yang hilang. Sebuah sistem mempublikasikan atau mengonsumsi tanpa memedulikan apa yang terjadi ketika pengiriman gagal: tanpa percobaan ulang, tanpa jalur dead letter, tanpa idempotensi, tanpa cara untuk memutar ulang. Di bawah beban normal, ia tampak sempurna. Di bawah tekanan atau pemadaman sebagian, ia diam-diam menjatuhkan atau memproses data dua kali, dan kerusakannya baru ditemukan berminggu-minggu kemudian dalam rekonsiliasi yang tidak seimbang. Inilah mode kegagalan yang paling sering mengikis kepercayaan pada integrasi, karena gejalanya senyap dan penyebabnya terkubur dalam asumsi pengiriman sempurna yang tidak dapat dipenuhi oleh sistem terdistribusi mana pun. Benang merah dari semua ini sama: sebuah kopling atau sebuah asumsi diciptakan yang tidak dibuat eksplisit oleh siapa pun, sehingga tidak ada yang mengelolanya. Menamainya adalah langkah pertama untuk merancangnya keluar, dan praktik yang matang meninjau setiap integrasi baru terhadap daftar inilah sebelum diluncurkan.

Bagaimana Nashua menangani pengembangan dan integrasi

Nashua memperlakukan integrasi sebagai disiplin arsitektur terlebih dahulu dan pilihan teknologi kemudian. Penugasan dimulai dengan membuat lanskap yang ada menjadi terbaca: memetakan sistem, alur di antara mereka, dan di atas segalanya kopling-koplingnya, termasuk yang tidak terdokumentasi yang bersembunyi di basis data bersama dan pekerjaan yang tak terurus. Peta inilah tempat risiko yang sesungguhnya berada, dan memunculkannya mengubah percakapan dari sekadar daftar perkakas menjadi serangkaian keputusan yang disengaja tentang batas-batas. Hanya setelah batas-batas jelas, pertanyaan tentang mekanisme, sebuah API, aliran event, antrean pesan, menjadi dapat dijawab, karena mekanisme yang tepat sepenuhnya bergantung pada kopling yang berusaha Anda longgarkan.

Dari sana, pekerjaan mengikuti prinsip-prinsip yang telah diuraikan di atas. Kontrak dirancang secara eksplisit dan diberi versi secara sengaja, agar penyedia dapat berkembang tanpa merusak konsumen dan kedua pihak tahu persis apa yang boleh mereka andalkan. Di tempat sistem perlu bereaksi terhadap perubahan alih-alih saling memerintah, Nashua mengutamakan pola event-driven dan berbasis pesan yang dimediasi melalui sebuah lapisan integrasi, menggantikan tautan point-to-point dengan sebuah tulang punggung yang diajak berbicara sekali oleh setiap sistem. Di tempat jawaban langsung benar-benar diperlukan, antarmuka sinkron yang dirancang dengan baik digunakan dengan perilaku timeout, percobaan ulang, dan kegagalan yang jelas. Tujuannya sepanjang waktu adalah perangkat lunak yang aman untuk diubah: komponen yang dapat dirilis, diganti, dan ditalar secara independen, dilindungi satu sama lain oleh kontrak dan anti-corruption layer, bukan oleh harapan.

Praktik pengiriman memperkuat arsitektur. Contract test menjaga kedua sisi antarmuka tetap jujur dan menangkap perubahan yang merusak sebelum mencapai produksi, yang mengubah kompatibilitas dari soal disiplin menjadi sesuatu yang ditegakkan secara otomatis oleh pipeline. Pipeline build dan rilis otomatis membuat deployment menjadi kecil, sering, dan dapat dibalik, yang hanya mungkin karena batas-batasnya cukup bersih untuk mendeploy satu komponen pada satu waktu. Observabilitas dibangun ke dalam alur, dengan korelasi lintas event dan pesan, agar sebuah masalah dapat ditelusuri ke sumbernya alih-alih disimpulkan dari gejala setelah kejadian. Logika integrasi diberi rumah: sebuah tempat yang dimiliki, teruji, dan berversi, bukan hamburan pekerjaan yang tak terurus, agar lanskap IT tetap terbaca bagi orang-orang yang mewarisinya.

Yang sama pentingnya adalah apa yang Nashua tolak untuk lakukan. Ia tidak meraih aliran event ketika sebuah panggilan sederhana lebih jelas, tidak pula memecah sebuah sistem menjadi layanan-layanan yang tidak punya alasan untuk terpisah, tidak pula menambahkan broker pada persoalan yang tidak memiliki kopling yang layak dilonggarkan. Mode kegagalan yang dijelaskan sebelumnya sama-sama tentang kelebihan maupun kelalaian, dan pengendalian diri adalah bagian dari keahlian. Tidak ada satu pun dari ini yang eksotis, dan itulah intinya. Integrasi yang tahan lama datang dari menerapkan sekumpulan kecil prinsip secara konsisten dan mengetahui kapan masing-masing berlaku, dan kontribusi Nashua adalah menghadirkan konsistensi itu, serta pengalaman telah melihat di mana lanskap berjalan keliru, sehingga apa yang dibangun dirancang untuk berubah alih-alih sekadar dibuat agar berfungsi pada hari peluncurannya.

Di mana Nashua membuat perbedaan

Perbedaan yang dibawa Nashua bukanlah sebuah teknologi tunggal melainkan cara berpikir yang memperlakukan kemampuan untuk berubah sebagai kebutuhan utama dan mempertahankannya di bawah tekanan pengiriman. Banyak pemasok dapat membangun sebuah koneksi yang berfungsi dalam sebuah demonstrasi. Jauh lebih sedikit yang merancang sebuah lanskap IT yang masih mudah diubah tiga tahun dan tiga puluh integrasi kemudian, ketika tim awal telah pindah dan bisnis telah meminta hal-hal yang tidak diantisipasi siapa pun. Cakrawala jangka panjang itulah tempat disiplin kontrak, kopling yang longgar, dan komunikasi yang dimediasi membuktikan nilainya, dan itulah tempat pengalaman rekayasa yang mendalam dan sabar bernilai lebih daripada produk tertentu mana pun.

Ada pula konsekuensi praktis yang mengubah apa yang boleh diasumsikan oleh pekerjaan tersebut. Ketika sebuah penugasan menuntut kapabilitas yang belum ada, ia tidak perlu menunggu siklus pengadaan atau peta jalan vendor. enterprise platform dibangun untuk mengakomodasi hampir semua fitur dengan cepat, melalui agentic engineering: apa yang dibutuhkan dijelaskan dalam bahasa sehari-hari dan dihasilkan dengan cepat, tetapi selalu dalam prinsip arsitektur yang kokoh dan di bawah jaminan mutu yang ketat, sehingga kecepatan tidak pernah dibayar dengan mengorbankan koherensi, keamanan, atau kendali. Efeknya bersifat strategis alih-alih sekadar praktis. Ia menggeser garis buat-atau-beli, menjaga opsionalitas tetap murah, dan membiarkan arsitektur mengikuti strategi alih-alih strategi yang tunduk pada apa pun yang kebetulan tersedia di rak.

Yang mengikat semuanya adalah pertimbangan: mengetahui kapan sebuah event lebih cocok daripada sebuah panggilan, kapan sebuah batas harus dipertahankan dengan anti-corruption layer, kapan sebuah perubahan yang merusak sepadan dengan migrasinya dan kapan tidak, kapan harus berinvestasi pada strategi versioning dan kapan jalur yang lebih sederhana sudah cukup jujur. Keputusan-keputusan ini tidak dapat dibeli di rak, dan keputusan-keputusan itu berlipat ganda. Satu pilihan yang tepat hampir tak terlihat. Seribu di antaranya, dibuat secara konsisten sepanjang hidup sebuah lanskap IT, adalah perbedaan antara sebuah sistem yang semakin rapuh dengan setiap rilis dan sebuah sistem yang tetap lentur. Dibuat dengan baik dan konsisten, keputusan-keputusan itu menghasilkan sebuah lanskap IT yang menyerap kanal, mitra, dan regulasi baru sebagai pekerjaan biasa alih-alih krisis. Itulah hasil yang dituju Nashua: bukan integrasi yang sekadar berfungsi, tetapi sistem yang tetap aman untuk diubah selama bisnis membutuhkannya, yang pada akhirnya adalah satu-satunya ukuran integrasi yang penting.