← semua materi
Mingguan Review · 08 Nov 2026 · 21:10

REVIEW MINGGUAN — 2 s.d. 8 November 2026 Sumber: learning_state.json, 21 entri tercatat (7 hari × 3 sesi). Semua yang di bawah ini berasal dari riwayat file, bukan rekonstruksi.


1. KONSEP YANG DIPELAJARI

05:00 — Deep (Arsitektur & Fondasi)

Tanggal Topik Inti yang dicatat
2 Nov d-saga Transaksi lintas service tanpa 2PC. Saga = urutan local transaction + compensating action. Dua gaya: choreography (service reaksi ke event, tidak ada pusat kendali) vs orchestration (satu coordinator pegang state machine). Kompensasi bukan rollback — ia aksi bisnis baru (refund, cancel), jadi harus idempoten dan bisa gagal sendiri.
3 Nov d-sharding Shard key menentukan segalanya. Salah pilih → hot partition (satu shard nanggung mayoritas trafik). Range shard bagus untuk scan, buruk untuk penulisan monotonic (timestamp/auto-increment = semua write ke shard terakhir). Hash shard meratakan beban tapi mematikan range query. Resharding = biaya operasional terbesar, bukan masalah storage.
4 Nov d-circuit-breaker Tiga state: closed → open → half-open. Bedanya dengan retry: retry mengasumsikan kegagalan sementara, breaker mengasumsikan kegagalan sistematis dan berhenti memanggil. Pendampingnya bulkhead (isolasi pool per dependency) dan timeout budget (total deadline dialokasikan ke seluruh hop, bukan timeout per-hop yang dijumlahkan).
5 Nov d-ddd-bounded Bounded context = batas di mana satu model domain konsisten. Kesalahan klasik: satu model User dipakai di billing, shipping, dan auth → model jadi gumpalan. Solusi: model berbeda per context + context map (shared kernel, anti-corruption layer, conformist). Pemisahan context adalah keputusan sosial/organisasi, bukan teknis.
6 Nov d-rate-limit Token bucket (burst diizinkan, refill konstan) vs leaky bucket (output rata) vs sliding window log (akurat, mahal) vs sliding window counter (kompromi). Versi terdistribusi butuh state bersama: Redis + Lua script untuk atomicity, atau pendekatan approximate dengan local bucket + periodic sync. Yang sering dilupakan: rate limit harus punya key yang benar (user? IP? API key?) — pilihan key = kebijakan produk.
7 Nov d-idempotency Idempotency key disimpan bersama hash request + response. Tiga hal wajib: (1) key disimpan sebelum efek samping dijalankan, (2) request dengan key sama dan payload beda harus ditolak (409), (3) ada TTL — key abadi = tabel membengkak. Ini pondasi retry-safe API: tanpa idempotency, at-least-once delivery = duplikasi uang.
8 Nov d-type-systems Static vs dynamic bukan soal "aman vs cepat" tapi soal kapan kesalahan ditemukan. Soundness = sistem tipe menjamin tidak ada operasi ilegal saat runtime; hampir semua bahasa produksi tidak sepenuhnya sound (TypeScript sengaja unsound, Java punya null, Go punya nil interface). Bug produksi yang bisa dicegah tipe: kesalahan bentuk data lintas boundary. Yang tidak bisa dicegah tipe: kesalahan logika bisnis — jadi tipe mengurangi kelas bug, tidak menghilangkannya.

15:00 — Technical Exploration

Tanggal Topik Inti
2 Nov t-cloud-cost Tiga pembocor biaya terbesar: egress (data keluar), idle resource (volumenya, bukan harganya), dan over-provisioning (right-sizing). Optimasi tanpa tag biaya = tebak-tebakan.
3 Nov t-profiling Flame graph dibaca lebar = waktu, tinggi = kedalaman call stack. Bottleneck nyata biasanya bukan fungsi yang paling sering dipanggil, tapi yang paling lama menahan CPU/IO. Profiling harus di beban realistis — profile di lokal sering menunjuk tempat yang salah.
4 Nov t-tool-calling Schema tool = kontrak. Nama fungsi harus menjelaskan kapan dipakai, bukan cuma apa yang dilakukan. Error recovery: kembalikan error yang bisa dibaca model (apa yang salah + apa yang valid), bukan stack trace. Tool yang terlalu banyak = model bingung memilih.
5 Nov t-rust-ownership Ownership = satu pemilik per nilai, dipindah atau dipinjam. Borrow checker menolak apa yang akan jadi data race / use-after-free. Jalan keluar dari frustrasi umumnya bukan clone() di mana-mana, tapi memperbaiki struktur data (pakai index/handle, bukan referensi bersarang).
6 Nov t-nextjs-caching App Router punya empat lapisan cache yang bisa saling menimpa: Request Memoization, Data Cache, Full Route Cache, Router Cache (client). Bug "data basi" hampir selalu berasal dari Router Cache client yang tidak di-revalidate — solusinya revalidatePath/revalidateTag, bukan mematikan cache global.
7 Nov t-terraform-state State = sumber kebenaran mapping resource nyata ↔ kode. Drift = infra berubah di luar Terraform → rencana berikutnya mencoba "memperbaiki" dan bisa menghapus. Aturan: state di remote backend dengan locking, satu state per blast radius, import untuk resource yang sudah ada, jangan pernah edit state manual tanpa state mv.
8 Nov t-llm-prompt-cache Prompt caching memotong biaya input untuk prefix yang identik dan berulang (system prompt, dokumen panjang). Syaratnya: prefix harus persis sama dan di depan — satu karakter berubah di awal = cache miss total. Urutan prompt jadi keputusan ekonomi: taruh yang stabil di depan, yang dinamis di belakang.

19:00 — Light Learning

Tanggal Topik Inti
2 Nov l-g-monty-hall Intuisi gagal karena tidak memperbarui informasi setelah host membuka pintu — host tahu isi dan tidak membuka pintu berhadiah, jadi tindakannya membawa informasi. Pindah pintu = menang 2/3.
3 Nov l-debug-binary Binary search atas ruang masalah, bukan cuma array: matikan separuh sistem, lihat mana yang masih rusak. Syarat: ruang harus terurut dan bisa dipartisi bersih.
4 Nov l-estimation Estimasi salah karena ketidakpastian menumpuk secara perkalian, bukan penjumlahan, dan karena manusia mengestimasi kasus terbaik. Perbaikan: estimasi berbasis rentang, pecah ke unit kecil, catat estimasi vs aktual.
5 Nov l-utf8 UTF-8 = encoding variabel 1–4 byte; UTF-16 = 2 atau 4. Emoji di luar BMP butuh surrogate pair di UTF-16 (itu sebabnya panjang string di JavaScript tidak sama dengan jumlah karakter yang dilihat mata). Bug klasik: length dianggap jumlah karakter, padahal di UTF-8 itu jumlah byte dan di UTF-16 itu jumlah code unit.
6 Nov l-git-bisect Binary search atas riwayat commit. Butuh commit good dan bad yang diketahui; git bisect run <script> mengotomatiskan seluruh pencarian — 1000 commit = ~10 langkah.
7 Nov l-retro-formats Retro yang menghasilkan perubahan punya tiga ciri: dibatasi 1–2 masalah prioritas, tiap item punya pemilik dan tanggal, dan hasilnya ditinjau di retro berikutnya. Tanpa itu retro jadi sesi curhat.
8 Nov l-naming Nama adalah cara termurah menyimpan konteks. Nama buruk memaksa pembaca membangun ulang model mental dari implementasi. Aturan praktis: nama mengungkap maksud, bukan tipe; hindari singkatan yang tidak menambah informasi; nama yang butuh komentar penjelas = nama yang salah.

2. KETERAMPILAN YANG DILATIH

Yang bisa langsung dipakai minggu depan:


3. CELAH PENGETAHUAN

Topik yang tercatat tapi belum tuntas — butuh pendalaman:

  1. Rate limiting terdistribusi — sudah dibahas token bucket lokal, tapi mekanisme sinkronisasi antar-node (Redis Lua vs local+sync vs consistent hashing per key) belum diuji angkanya. Berapa error rate kompromi local bucket?
  2. Soundness type system — sudah tahu TypeScript unsound dan di mana, tapi belum menyentuh variance (covariance/contravariance) dan bagaimana itu menyebabkan bug di generic API.
  3. Context map DDD — batas context sudah jelas, tapi pola integrasi (anti-corruption layer vs shared kernel) belum punya contoh konkret biaya maintenance-nya.
  4. Compensating action di saga — belum dibahas apa yang terjadi kalau kompensasi itu sendiri gagal (compensation of compensation). Ini titik paling rapuh di saga.
  5. Bounded context vs batas tim — sudah disebut pemisahan itu keputusan organisasi, tapi belum ada kerangka (Conway's law) untuk menilainya.
  6. d-type-systems baru tercatat 8 Nov — permukaan saja; belum menyentuh type inference, HM algorithm, atau efek praktisnya ke desain API.

Catatan struktural: pool deep sudah 22/22 selesai. Pemanggilan next deep berikutnya akan menghapus seluruh riwayat sesi deep dan memulai siklus baru dari nol. Kalau riwayat itu mau dipertahankan sebagai arsip, harus ditambahkan topik baru ke pool sebelum siklus berikutnya berjalan.


4. KONEKSI ANTAR BIDANG

Ini bagian yang paling berharga dari minggu ini — topik-topik yang terlihat terpisah ternyata satu prinsip:

A. "Idempotency" muncul di empat tempat berbeda - d-idempotency (API) — request ulang tidak menggandakan efek. - d-saga (kompensasi) — compensating action harus idempoten karena bisa di-retry. - t-terraform-state — apply yang sama dua kali = hasil sama; itulah kenapa drift berbahaya. - l-git-bisect — bisect bisa diulang dari commit mana pun tanpa merusak state. Satu prinsip: operasi yang bisa diulang aman adalah fondasi sistem terdistribusi. Kalau satu komponen tidak idempoten, seluruh alur retry di atasnya rapuh.

B. "Cache invalidation" punya bentuk sama di tiga lapisan - t-nextjs-caching — Router Cache client tidak tahu data berubah. - t-llm-prompt-cache — satu karakter berubah di prefix = seluruh cache hilang. - d-cache-strategy (minggu lalu, 28 Okt) — stampede saat cache expire bersamaan. Benang merah: cache selalu soal key dan staleness, bukan soal kecepatan. Yang salah bukan cache-nya, tapi definisi key atau momen invalidasi.

C. "Binary search" bukan algoritma array - l-debug-binary — mempersempit ruang masalah. - l-git-bisect — mempersempit riwayat commit. - d-amortized / struktur data (Oktober) — binary search sebagai primitif. Pola yang sama: setiap kali ruang pencarian bisa dipartisi dan punya predikat monoton, biaya pencarian jatuh dari O(n) ke O(log n).

D. "Batasan sebagai alat desain" - d-ddd-bounded — batas context membuat model bisa konsisten. - d-sharding — batas shard menentukan pola akses. - d-type-systems — batas tipe memindahkan error ke compile time. - d-rate-limit — batas kuota melindungi sistem. Empat topik, satu pelajaran: sistem yang baik bukan sistem tanpa batas, tapi sistem yang batasnya dipilih secara sadar. Batas yang tidak dipilih akan dipilih oleh kegagalan produksi.

E. "Estimasi & informasi" - l-estimation — estimasi salah karena ketidakpastian menumpuk perkalian. - l-g-monty-hall — intuisi gagal karena informasi baru tidak diperbarui. - d-circuit-breaker — breaker adalah cara memperbarui keyakinan tentang kesehatan dependency secara berkala (half-open = eksperimen). Ketiganya soal cara memperbarui keyakinan ketika informasi baru datang — estimasi, probabilitas, dan resilience punya logika yang sama.


5. REKOMENDASI MINGGU DEPAN

Sisa pool saat ini: 4 tech (t-ts-types, t-node-eventloop, t-pg-index, t-http2-3) dan 1 light (l-g-honey). Deep kosong. Berikut prioritas, diurutkan berdasarkan mana yang menutup celah terbesar:

  1. t-ts-types — langsung menyambung d-type-systems. Fokus type-level programming yang benar-benar dipakai: conditional types, mapped types, infer. Ini yang mengubah "tahu ada type system" jadi "bisa memakainya".
  2. t-node-eventloop — menyambung t-python-async dan d-concurrency-models. Inti: satu fungsi sinkron memblokir seluruh proses — ini penyebab paling umum latensi tak terjelaskan di Node.
  3. t-http2-3 — melengkapi t-cdn-edge dan l-utf8 (soal framing & overhead). QUIC mengambil alih congestion control dari kernel ke userspace — itu perubahan arsitektur, bukan versi.
  4. t-pg-index — pasangan alami t-pg-explain dan t-tx-isolation. Index yang tidak dipakai = biaya tulis tanpa manfaat baca.
  5. l-g-honey — satu-satunya light yang tersisa. Kimia dasar: kadar air rendah + pH asam + hidrogen peroksida + senyawa antibakteri. Bagus sebagai penutup siklus light.
  6. d-type-systems lanjutan (variance) — bukan topik baru di pool, tapi pendalaman yang paling mendesak: covariance/contravariance adalah sumber bug generic API yang tidak terlihat sampai produksi.
  7. Compensation failure di saga — apa yang terjadi saat kompensasi gagal. Ini lubang terbesar yang tersisa dari minggu ini.
  8. Rate limiting terdistribusi, dengan angka — bandingkan local bucket + sync vs Redis Lua pada tingkat error yang bisa ditoleransi.

Kalau pool deep mau diisi topik baru sebelum siklus reset, kandidat yang paling nyambung dengan minggu ini: consistency models di level aplikasi (read-your-writes), API versioning & evolusi schema, dan Conway's law / batas tim vs batas service.


6. SATU PERTANYAAN RETROSPEKTIF

Minggu ini kamu mempelajari idempotency, saga, dan Terraform state — tiga hal yang intinya sama: operasi yang aman diulang. Tapi di sistem yang kamu bangun sendiri, proses mana yang kalau dijalankan dua kali akan merusak data?

Kalau kamu tidak bisa menjawabnya dengan cepat dan spesifik, itu berarti prinsipnya sudah kamu pahami sebagai konsep, tapi belum kamu terapkan sebagai audit.