Journey
MilestoneDesign SystemsChangesetsrelease

Katalog yang menjaga kami tetap jujur

Selama setahun, seluruh UI kami hidup di dalam satu app. Minggu ini ia pindah ke rumah sendiri di ui.pangaea.id: satu design system, dipecah jadi tiga puluh tujuh paket ber-versi, dengan katalog live yang bisa Anda telusuri. Milestone-nya bukan kodenya — kodenya sudah ada bertahun-tahun. Milestone-nya adalah keputusan memperlakukan UI kami sendiri seperti sebuah produk.

Bagian tengah yang membosankan

Ekstraksi itu pekerjaan yang tak seorang pun bertepuk tangan untuknya. Menarik rv-* keluar dari satu app berarti puluhan paket kecil, tiap satu dengan React sebagai peer dependency, CSS-nya sendiri, dan package.json-nya sendiri, semuanya duduk dalam satu monorepo. Tak ada demo memukau di ujungnya — cuma higiene.

Godaan terbesarnya jelas: lewati katalognya, "cukup publikasikan paketnya", lalu lanjut. Kami tak melakukannya. Dan justru katalog itulah yang menyelamatkan kami.

Katalognya yang menjaga kami jujur

Anda tak bisa menaruh komponen yang setengah ter-ekstraksi di sebuah halaman yang harus benar-benar render, bisa dikendalikan lewat kontrol, dan cara pakainya bisa disalin utuh. Kalau sebuah paket diam-diam masih bergantung pada sesuatu di app lama, halaman katalognya langsung rusak — di depan mata.

Itulah gunanya katalog: ia jadi tempat tiap komponen harus membuktikan dirinya benar-benar berdiri sendiri. Paket yang lolos di katalog adalah paket yang sudah bersih. Katalog memberi kami kegagalan yang keras dan cepat — jauh lebih baik daripada menemukan paket rusak berbulan-bulan kemudian di dalam app orang lain.

Kerepotan yang tak kami duga

Kejutannya bukan di paketnya — tapi di rilisnya. Rilis pertama menuntut dua merge manual: PR kode Anda, lalu satu "Version PR" yang menaikkan versi dan menulis changelog. Merge kedua itu terlihat sepele. Tapi pajak kecil seperti itulah yang diam-diam membuat Anda berhenti merilis — Anda menunda satu perbaikan, lalu perbaikan berikutnya, sampai design system-nya basi.

Jadi kami perlakukan ergonomi rilis sebagai fitur, bukan renungan belakangan. Sekarang satu changeset yang mendarat di main memicu satu CI/CD run yang membuka Version PR, meng-auto-merge-nya, lalu mem-publish — semuanya dalam satu jalan. Satu-satunya langkah manual yang tersisa adalah menulis changeset-nya: satu kalimat tentang apa yang berubah.

Kerja sesungguhnya bukan mengemas komponennya — tapi membuat rilis berikutnya nyaris tanpa gesekan. Kalau merilis terasa merepotkan, Anda akan berhenti merilis.

yang kami pelajari minggu ini

Yang ingin kami sampaikan ke diri kami dulu

Lakukan

  • Bangun katalog live lebih dulu — ia yang memaksa ekstraksi jadi jujur, bukan hadiah di akhir
  • Ekstrak satu komponen utuh dari ujung ke ujung sebelum mengekstrak tiga puluh tujuh
  • Perlakukan ergonomi rilis sebagai fitur — langkah manual terakhir adalah pajak yang Anda bayar selamanya

Jangan

  • Menunda katalog sebagai "dokumentasi yang ditulis nanti" — tanpanya, paket rusak lolos diam-diam
  • Merilis dengan dua merge manual dan berharap terbiasa — Anda justru akan berhenti merilis
  • Mengekstrak semua komponen sebelum satu halaman katalog membuktikan bentuknya

Cara teknis membangunnya — monorepo, deploy ke Cloudflare Pages, dan Changesets dari ujung ke ujung — ada di artikelnya: Merilis design system di ui.pangaea.id. Dan kenapa kami memilih paket ber-versi yang membosankan alih-alih runtime module federation yang seksi ada di catatan sebelumnya: Federasi yang tak kami bangun.

Sources

  1. ui.pangaea.id — katalog design system Pangaea
  2. labspangaea/pangaea.ui — repo-nya