











{"author":"Faiq Najib Al-Aziz","body":"\nSeri [Hijrah Backend](/writing/2026/hijrah-backend-01/) akhirnya kelar. Backend GPS sekarang jalan di Go, 14 modul domain sudah tertata, dan _endpoint_ yang dulu butuh 15 detik sekarang jauh lebih ngebut. Alhamdulillah.\n\nNah, sekarang giliran gedung sebelah: _frontend_.\n\nSaya seorang _backend engineer_. Sehari-hari saya berurusan dengan _query_, _index_, _parser_ paket biner, dan kesejahteraan _database_. _Frontend_ biasanya hanya saya kunjungi seperlunya, seperti turis. Sampai akhirnya saya diminta ikut mengurusnya. Bukan sekadar mampir lagi, hehe~\n\n## Kesan Pertama: Bau _Spaghetti_\n\nSaat membuka _frontend_ warisan itu, saya langsung melihat _spaghetti_ di mana-mana. Saya memang tidak jago _frontend_, tapi sudah cukup lama baca kode orang untuk tahu mana yang _spaghetti_. Tidak perlu jadi koki untuk tahu kalau sup sudah kelamaan nangkring di meja, kan? Kelihatan saja sudah cukup.\n\nEh, saya tidak bermaksud menuduh siapa pun ya. Aplikasi itu dibangun bertahun-tahun, dikerjakan banyak orang dengan selera berbeda, dan tetap melayani puluhan ribu _user_ setiap hari. _Backend_ yang dulu saya hijrahkan ceritanya mirip. Gedungnya beda, penyebabnya sama: **waktu dan keadaan darurat**.\n\n## Keputusan: Fork, Bukan Rewrite\n\nPengalaman [menghijrahkan _backend_](/writing/2026/hijrah-backend-01/) membuat saya makin yakin bahwa _rewrite_ total itu kelihatan keren di _slide_, tapi bikin deg-degan begitu masuk produksi.\n\nUntuk _frontend_, kami ambil jalan yang mirip: **fork sistem lama, lalu port tipis**. Aplikasinya dibawa ke rumah baru apa adanya, tidak digambar ulang dari nol pakai _framework_ terbaru. Bahkan nama _repo_-nya tidak berubah, mungkin karena belum sempat diberi tahu bahwa ia sudah pindah rumah.\n\nHari pertama di rumah baru saya habiskan untuk menghitung isi lemari:\n\n- **76 halaman** di _app router_[^2]: 60 berformat JSX, 15 berformat JS, dan satu file _backup_ yang tidur di antara mereka[^1]\n- Dua _library_ UI besar yang hidup berdampingan di satu aplikasi yang sama\n- _State management_ warisan yang sudah bertahun-tahun menjadi tukang kebun sekaligus tukang listrik\n- Satu dokumen bernama `TAILWIND_FIX.md` di akar _repo_: monumen kecil untuk penyakit yang pernah sehat hehe~\n\nEnam puluh halaman pakai JSX. Ini bukan keluhan, cuma pengingat bahwa saya sedang belajar bahasa lain. Biasanya saya teriak `if err != nil`, sekarang harus belajar merangkai _className_ (ya... pelan-pelan).\n\n## Kenapa Port Tipis, Bukan Redesign\n\nPertanyaannya sama seperti di _backend_: kenapa tidak sekalian dirombak biar rapi dan kekinian?\n\nJawabannya sederhana, _user_ maunya tombol yang mereka pakai tiap hari tetap jalan. Merombak tampilan sambil pindahan berarti mengubah dua hal sekaligus. Di [episode empat di seri backend](/writing/2026/hijrah-backend-04/), saya sudah belajar betapa mahalnya perbaikan diam-diam saat migrasi.\n\nJadi untuk _frontend_, tampilan dan perilakunya kami pertahankan dulu. Struktur internal dirapikan nanti saja, satu keputusan setiap kali. Kode warisan yang ikut pindah kami catat, tidak kami sembunyikan. Di episode kedua saya cerita apa saja yang terbawa dan kenapa sebagian belum bisa ditinggal.\n\n## Rencana Episode\n\nSeri **Hijrah Frontend** ini rencananya lima episode (yang pertama sedang Anda baca):\n\n2. **Port tipis dan warisan yang ikut naik**: apa saja yang terbawa dari rumah lama, secara sadar.\n3. **Type chaos: angka, _string_ kosong, dan halaman yang berbeda pendapat**: satu _field_ yang sama dikirim dengan tipe berbeda-beda tergantung halamannya, lalu bagaimana itu diterima di dunia yang _strict_.\n4. **Dua _library_ UI, dua era penamaan**: warisan yang hidup berdampingan, dan konvensi yang berganti setiap ganti tukang.\n5. **Dua sisi satu gedung**: penutup, refleksi, dan apa yang berubah setelah gedung sebelah jadi rumah sendiri.\n\nKalau Anda datang dari seri _backend_: selamat datang kembali, gedungnya masih sama, cuma pindah lantai. Kalau baru mampir, boleh mulai dari [episode pembuka seri sebelah](/writing/2026/hijrah-backend-01/), atau langsung di sini saja. Cerita ini tetap bisa dinikmati sendiri kok, hehe~\n\n## Tetangga Baru Gedung Sebelah\n\nSaya datang sebagai turis, tapi sekarang _frontend_ warisan ini ikut jadi tanggung jawab saya. Isinya sudah kelihatan: _spaghetti_, dua _library_ UI, dan 76 halaman yang harus tetap jalan setelah pindah.\n\nSelanjutnya saya mulai mencatat barang-barang yang ikut naik kereta. Ternyata daftarnya lebih panjang dari dugaan saya.\n\n[^1]: Satu file itu bukan salah siapa-siapa; dia jenazah _backup_ yang setia menemani, sama seperti puluhan jenazah berkomentar yang pernah saya temui di _backend_.\n\n[^2]: Angka halaman dan rincian format dihitung langsung dari _repo_ saat episode ini ditulis; detail _stack_ lain disederhanakan untuk bercerita.\n","body_clean":"Seri Hijrah Backend akhirnya kelar. Backend GPS sekarang jalan di Go, 14 modul domain sudah tertata, dan endpoint yang dulu butuh 15 detik sekarang jauh lebih ngebut. Alhamdulillah.\nNah, sekarang giliran gedung sebelah: frontend.\nSaya seorang backend engineer. Sehari-hari saya berurusan dengan query, index, parser paket biner, dan kesejahteraan database. Frontend biasanya hanya saya kunjungi seperlunya, seperti turis. Sampai akhirnya saya diminta ikut mengurusnya. Bukan sekadar mampir lagi, hehe~\nKesan Pertama: Bau Spaghetti #Saat membuka frontend warisan itu, saya langsung melihat spaghetti di mana-mana. Saya memang tidak jago frontend, tapi sudah cukup lama baca kode orang untuk tahu mana yang spaghetti. Tidak perlu jadi koki untuk tahu kalau sup sudah kelamaan nangkring di meja, kan? Kelihatan saja sudah cukup.\nEh, saya tidak bermaksud menuduh siapa pun ya. Aplikasi itu dibangun bertahun-tahun, dikerjakan banyak orang dengan selera berbeda, dan tetap melayani puluhan ribu user setiap hari. Backend yang dulu saya hijrahkan ceritanya mirip. Gedungnya beda, penyebabnya sama: waktu dan keadaan darurat.\nKeputusan: Fork, Bukan Rewrite #Pengalaman menghijrahkan backend membuat saya makin yakin bahwa rewrite total itu kelihatan keren di slide, tapi bikin deg-degan begitu masuk produksi.\nUntuk frontend, kami ambil jalan yang mirip: fork sistem lama, lalu port tipis. Aplikasinya dibawa ke rumah baru apa adanya, tidak digambar ulang dari nol pakai framework terbaru. Bahkan nama repo-nya tidak berubah, mungkin karena belum sempat diberi tahu bahwa ia sudah pindah rumah.\nHari pertama di rumah baru saya habiskan untuk menghitung isi lemari:\n76 halaman di app router1: 60 berformat JSX, 15 berformat JS, dan satu file backup yang tidur di antara mereka2 Dua library UI besar yang hidup berdampingan di satu aplikasi yang sama State management warisan yang sudah bertahun-tahun menjadi tukang kebun sekaligus tukang listrik Satu dokumen bernama TAILWIND_FIX.md di akar repo: monumen kecil untuk penyakit yang pernah sehat hehe~ Enam puluh halaman pakai JSX. Ini bukan keluhan, cuma pengingat bahwa saya sedang belajar bahasa lain. Biasanya saya teriak if err != nil, sekarang harus belajar merangkai className (ya\u0026hellip; pelan-pelan).\nKenapa Port Tipis, Bukan Redesign #Pertanyaannya sama seperti di backend: kenapa tidak sekalian dirombak biar rapi dan kekinian?\nJawabannya sederhana, user maunya tombol yang mereka pakai tiap hari tetap jalan. Merombak tampilan sambil pindahan berarti mengubah dua hal sekaligus. Di episode empat di seri backend, saya sudah belajar betapa mahalnya perbaikan diam-diam saat migrasi.\nJadi untuk frontend, tampilan dan perilakunya kami pertahankan dulu. Struktur internal dirapikan nanti saja, satu keputusan setiap kali. Kode warisan yang ikut pindah kami catat, tidak kami sembunyikan. Di episode kedua saya cerita apa saja yang terbawa dan kenapa sebagian belum bisa ditinggal.\nRencana Episode #Seri Hijrah Frontend ini rencananya lima episode (yang pertama sedang Anda baca):\nPort tipis dan warisan yang ikut naik: apa saja yang terbawa dari rumah lama, secara sadar. Type chaos: angka, string kosong, dan halaman yang berbeda pendapat: satu field yang sama dikirim dengan tipe berbeda-beda tergantung halamannya, lalu bagaimana itu diterima di dunia yang strict. Dua library UI, dua era penamaan: warisan yang hidup berdampingan, dan konvensi yang berganti setiap ganti tukang. Dua sisi satu gedung: penutup, refleksi, dan apa yang berubah setelah gedung sebelah jadi rumah sendiri. Kalau Anda datang dari seri backend: selamat datang kembali, gedungnya masih sama, cuma pindah lantai. Kalau baru mampir, boleh mulai dari episode pembuka seri sebelah, atau langsung di sini saja. Cerita ini tetap bisa dinikmati sendiri kok, hehe~\nTetangga Baru Gedung Sebelah #Saya datang sebagai turis, tapi sekarang frontend warisan ini ikut jadi tanggung jawab saya. Isinya sudah kelihatan: spaghetti, dua library UI, dan 76 halaman yang harus tetap jalan setelah pindah.\nSelanjutnya saya mulai mencatat barang-barang yang ikut naik kereta. Ternyata daftarnya lebih panjang dari dugaan saya.\nAngka halaman dan rincian format dihitung langsung dari repo saat episode ini ditulis; detail stack lain disederhanakan untuk bercerita.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nSatu file itu bukan salah siapa-siapa; dia jenazah backup yang setia menemani, sama seperti puluhan jenazah berkomentar yang pernah saya temui di backend.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","canonical":"https://najib.id/writing/2026/hijrah-frontend-01/","description":"Ep 1 seri Hijrah Frontend: setelah backend GPS selesai dihijrahkan ke Go, giliran gedung sebelah. Kesan pertama seorang backend engineer membuka kode frontend warisan, dan keputusan port tipis.","language":"id","lastmod":"2026-10-29T09:31:17Z","publishedAt":"2026-09-23T09:00:01Z","readingTime":4,"section":"writing","series":"Hijrah Frontend","tags":["frontend","nextjs","cerita"],"title":"Hijrah Frontend (1): Ketika Backend Engineer Disuruh Menyentuh Frontend","type":"writing","url":"https://najib.id/writing/2026/hijrah-frontend-01/","wordCount":647}
