RFC

RFC #

RFC (Request for Comments) dalam konteks software engineering adalah dokumen formal yang digunakan untuk mengusulkan, mendiskusikan, dan mendokumentasikan perubahan teknis sebelum perubahan tersebut benar-benar diimplementasikan.

RFC bukan sekadar dokumentasi akhir, melainkan alat komunikasi dan pengambilan keputusan teknis.

RFC bisa mencakup:

  • Perubahan arsitektur
  • Penambahan fitur besar
  • Perubahan API
  • Perubahan database schema
  • Perubahan behavior sistem yang berdampak luas

Awalnya, istilah RFC populer dari dunia internet standards (IETF), namun di dunia engineering modern (Google, Meta, Netflix, Stripe, dll), RFC diadaptasi sebagai engineering decision record yang terstruktur.

Tujuan RFC #

RFC dibuat bukan untuk birokrasi, tapi untuk menghindari masalah mahal di masa depan.

Tujuan utamanya:

1. Menyatukan Pemahaman #

Semua stakeholder (engineer, reviewer, product, ops) membaca dokumen yang sama, dengan asumsi yang sama.

2. Mencegah Keputusan Sepihak #

RFC memaksa ide besar untuk dibuka ke publik internal, bukan langsung di-commit ke repository.

3. Mengurangi Rework #

Lebih murah membuang ide di fase dokumen daripada membuang kode setelah production.

4. Dokumentasi Keputusan Teknis #

RFC menjawab pertanyaan klasik:

“Kenapa sistem ini dibangun seperti ini?”

Bukan apa yang dibangun, tapi mengapa.

5. Sarana Diskusi Asinkron #

Tim tidak perlu selalu meeting panjang. Komentar bisa dilakukan async, lebih scalable.


Mengapa RFC Itu Penting? #

Perubahan Teknis Selalu Punya Dampak #

Perubahan kecil di satu service bisa berdampak ke:

  • Performance
  • Scalability
  • Database load
  • Cost
  • Security

RFC memaksa engineer berpikir end-to-end sebelum coding.

Menghindari “Hero Engineering” #

Tanpa RFC:

  • Engineer senior langsung implement
  • Review terjadi setelah kode jadi
  • Diskusi terlambat

Dengan RFC:

  • Ide diuji dulu
  • Semua level engineer bisa berkontribusi
  • Keputusan lebih objektif

Skala Tim & Organisasi #

Semakin besar tim:

  • Knowledge tidak bisa hanya di kepala
  • Keputusan harus traceable

RFC menjadi single source of truth.

Mengurangi Risiko Production Incident #

Banyak incident berasal dari:

  • Assumption yang salah
  • Edge case yang tidak terpikirkan
  • Dampak yang tidak dianalisis

RFC yang baik memaksa engineer menuliskan:

  • Failure scenario
  • Rollback plan
  • Migration strategy

Kapan Sebaiknya Membuat RFC? #

Gunakan RFC jika perubahan:

  • Berdampak ke banyak service
  • Mengubah kontrak API
  • Mengubah data model
  • Berdampak ke performance / cost
  • Sulit di-rollback
  • Akan dipakai jangka panjang

Tidak semua PR butuh RFC.

Rule of thumb:

Jika perubahan sulit dijelaskan dalam 5 menit, kemungkinan besar butuh RFC.


Struktur RFC yang Baik (Best Practice) #

RFC yang baik itu:

  • Jelas
  • Ringkas
  • Fokus ke decision
  • Bukan proposal satu arah

Di bawah ini adalah template RFC yang umum dipakai di banyak organisasi besar.


Contoh Template RFC (Best Practice) #

Judul RFC #

Judul harus singkat dan deskriptif.

Contoh: RFC: Asynchronous Processing untuk Upload File Besar

Status #

Menunjukkan lifecycle RFC.

  • Draft
  • In Review
  • Accepted
  • Rejected
  • Implemented

Author & Reviewer #

  • Author: Nama / Tim
  • Reviewer: Nama / Tim terkait

Latar Belakang (Background) #

Jelaskan:

  • Kondisi saat ini
  • Masalah yang terjadi
  • Data atau fakta pendukung

Contoh:

Saat ini proses upload file Excel diproses secara synchronous. Rata-rata waktu pemrosesan 3–5 menit, menyebabkan timeout dan poor user experience.

Problem Statement #

Tuliskan masalah secara eksplisit dan terukur.

  • Apa yang salah?
  • Dampaknya apa?
  • Siapa yang terdampak?

Tujuan & Non-Tujuan #

Tujuan #

  • Apa yang ingin dicapai RFC ini

Non-Tujuan #

  • Apa yang tidak ingin diselesaikan

Ini penting untuk mencegah scope creep.

Proposal / Solusi yang Diusulkan #

Jelaskan solusi secara detail:

  • High-level design
  • Flow diagram (jika perlu)
  • Komponen yang terlibat

Fokus ke bagaimana sistem bekerja, bukan detail implementasi kode.

Alternatif yang Dipertimbangkan #

Tuliskan:

  • Alternatif lain
  • Kenapa tidak dipilih

Ini menunjukkan keputusan dibuat secara sadar, bukan kebetulan.

Dampak & Risiko #

Bahas secara jujur:

  • Performance impact
  • Database load
  • Operational complexity
  • Security risk

Termasuk failure scenario.

Migration & Rollback Plan #

  • Bagaimana migrasi dari sistem lama
  • Apakah bisa gradual
  • Bagaimana rollback jika gagal

Bagian ini sering dilupakan, padahal sangat krusial.

Open Questions #

Daftar pertanyaan yang:

  • Belum terjawab
  • Butuh masukan reviewer

RFC tidak harus sempurna di awal.

Appendix (Opsional) #

  • Detail teknis tambahan
  • Benchmark
  • Referensi

Best Practice Menulis RFC #

1. RFC Bukan Tempat Pamer Skill #

Tujuannya clarity, bukan kompleksitas.

2. Fokus ke “Why” daripada “How” #

Detail kode bisa berubah, alasan keputusan jarang berubah.

3. Terima Kritik Sejak Dini #

RFC yang bagus biasanya berubah beberapa kali sebelum accepted.

4. Jangan Terlalu Panjang #

Idealnya:

  • 2–6 halaman
  • Bisa dibaca dalam 15–30 menit

5. Update Status dan Hasil Akhir #

Setelah implementasi:

  • Tandai RFC sebagai Implemented
  • Tambahkan catatan hasil

RFC adalah dokumen hidup.


Penutup #

RFC adalah salah satu tools paling underrated dalam software engineering.

Bukan soal formalitas, tapi soal:

  • Mengurangi risiko
  • Meningkatkan kualitas keputusan
  • Membuat tim lebih scalable

Semakin besar dampak perubahan, semakin besar nilai sebuah RFC yang ditulis dengan baik.

Good engineers write code. Great engineers write decisions.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact