Ekor Kadal
Dalam biologi, autotomy adalah saat seekor hewan melepaskan bagian tubuh yang tidak lagi berguna. Kadal melepaskan ekornya untuk lolos dari predator. Ekor itu dulu berguna, tetapi untuk bertahan hidup ia harus rela melepaskannya. Nantinya ekor baru akan tumbuh.
Begitulah cara Anda seharusnya memandang refactor pada aplikasi React Native hasil vibe coding.
Pada MVP awal yang dikodekan dengan AI, auth flow pertama biasanya terkirim jauh lebih cepat daripada yang dibayangkan siapa pun. Masalahnya baru mulai beberapa minggu kemudian, saat produk berubah dan tim mencoba merefactor dengan hati-hati kode yang sebenarnya tidak pernah mereka desain. Di situlah login rusak, user state mulai drift, dan jumlah bug naik. Mereka sedang mencoba mempertahankan kode yang seharusnya diganti.
Refactor kode hasil AI itu mahal karena Anda harus memahami intent yang tidak pernah Anda miliki. Claude Code membuat abstraksi yang tidak pernah Anda desain. Ia membuat keputusan coupling yang tidak pernah Anda setujui. Merefactor kode itu berarti melakukan reverse engineering terhadap keputusan arsitektur yang dibuat secara probabilistik, bukan dengan sengaja.
Ganti, Jangan Refactor
Alternatifnya: jika sebuah modul memenuhi interface yang sama dan lulus test yang sama, Anda bisa menukarnya tanpa harus memahami implementasi lama. Modul lama dihapus. Modul baru menggantikannya. Composition root adalah satu-satunya file yang tahu.
// Module A (Auth v1) -> Interface Contract -> Module A' (Auth v2)
// The old auth module. You don't need to understand it.
// Claude Code generated it. It worked. Now it's done.
class SupabaseAuthService implements AuthService {
// ... implementation you inherited ...
}
// The new auth module. You designed it. Claude Code helps write it.
class CustomAuthService implements AuthService {
// ... your clean implementation ...
}
// The composition root is the ONLY place that changes:
const auth: AuthService = useSupabase
? new SupabaseAuthService()
: new CustomAuthService()
Login screen tidak berubah. Route guards tidak berubah. Hooks tidak berubah. Hanya composition root yang tahu bahwa pertukaran terjadi. Inilah kekuatan arsitektur berbasis interface saat Anda bekerja dengan kode hasil AI. Interface adalah polis asuransi Anda terhadap technical debt.
Empat Syarat Agar Penghapusan Aman
Ini hanya bekerja jika ada empat hal. Tanpa itu, Anda sekadar menghapus kode dan berharap. Dengan itu, Anda sedang melakukan operasi:
- Defined interfaces - Setiap modul mengekspos contract. TypeScript types, API schemas, batas yang jelas. Cursor menghasilkan kode berdasarkan ini. Claude Code membacanya. Anda yang memilikinya.
- Boundary enforcement - Modul tidak boleh menjangkau internal satu sama lain. dependency-cruiser, ESLint, atau convention mencegah itu.
- Contract tests - Test memverifikasi interface, bukan implementasi. Jika modul baru lulus test yang sama, perilakunya setara secara behavior.
- Clean dependency graphs - Tidak ada circular dependency. Tidak ada coupling implisit lewat global. Import graph Anda berbentuk DAG, bukan sarang laba-laba.
Menukar Analytics Tanpa Menyentuh Screen
Anda memulai dengan Segment karena Claude Code merekomendasikannya. Sekarang Anda butuh PostHog. Modul lama dihapus. Modul baru mengimplementasikan interface yang sama. Semua call site tetap identik:
// Before
const analytics = new SegmentAnalytics(writeKey)
// After - same interface, different implementation
const analytics = new PostHogAnalytics(apiKey)
// Every call site stays the same.
// Cursor-generated screens don't change.
analytics.track('purchase_completed', { productId: '123' })
analytics.identify(userId, { plan: 'premium' })
Naluri untuk mempertahankan itu kuat. Kita ingin membawa kode kita dengan hati-hati ke depan, menjaga setiap perilaku tetap utuh. Tapi saat Anda bekerja dengan kode hasil AI, jalur yang paling aman sering kali justru melepaskannya. Tulis interface yang baik. Tegakkan boundaries. Lalu siaplah untuk menghapus.
Autotomy Expo Starter Pack dibangun di atas filosofi ini - setiap modul dirancang untuk diganti, bukan dipertahankan. Saat aplikasi hasil vibe coding Anda menabrak dinding skala, Anda tidak membongkar keputusan arsitektur Claude Code. Anda menggantinya.