// archive
All posts.
76 posts so far. Sorted by date.
2026
-
2026-07-29 · 12 min
Prisma vs Drizzle ORM untuk Node.js Production 2026
Perbandingan objektif Prisma vs Drizzle untuk Node.js production 2026: DX, type-safety, performa, migrasi, bundle size, dan kapan sebaiknya pilih mana. Lengkap dengan contoh kode dan trade-off tiap pendekatan.
-
2026-07-25 · 12 min
Setup OpenTelemetry di Node.js untuk Monitoring 2026
Tutorial setup OpenTelemetry di Node.js: instrumentasi otomatis, traces, metrics, dan logs, export ke OTel Collector, custom span, sampai contoh Dockerfile. Teknis dan lengkap dengan contoh kode.
-
2026-07-20 · 8 min
Observability Stack: Grafana + Loki + Tempo 6 Bulan
Grafana + Loki + Tempo + Mimir di enterprise Indonesia. Log 8TB/bulan, trace 4.2TB, metric 380GB. Cost $640/bulan, MTTR turun 60%.
-
2026-07-19 · 6 min
ADR (Architecture Decision Records) Tim 15 Engineer
Implementasi ADR di tim 15 engineer enterprise Indonesia. 84 ADR dalam 2 tahun, 22 superseded, format yang work, dan kapan ADR jadi liability.
-
2026-07-19 · 11 min
Pola Error Handling TypeScript Modern 2026
Pola error handling TypeScript modern: Result type, discriminated union untuk error, custom error class, dan kapan sebaiknya throw vs return. Lengkap dengan contoh kode dan trade-off tiap pendekatan.
-
2026-07-18 · 8 min
Event Sourcing + Saga Pattern: Microservices Payment
Event sourcing + Saga di microservices payment Indonesia. 6 service coordinate, 99.97% saga completion, replay event store 38 menit untuk DR.
-
2026-07-17 · 8 min
gRPC vs REST vs GraphQL: Enterprise Pilih Mana 2026
Perbandingan gRPC vs REST vs GraphQL untuk enterprise Indonesia 2026. Bench throughput, latency p99, dev experience, dan kapan masing-masing menang.
-
2026-07-16 · 8 min
Cost Optimization AWS 100 Juta/Bulan → 60 Juta
Klien enterprise AWS Indonesia Rp 100 juta/bulan jadi Rp 60 juta dalam 5 bulan. RI + Savings Plan + Spot + S3 lifecycle + data transfer audit.
-
2026-07-15 · 8 min
Postgres Sharding Vertikal: Enterprise SaaS 500GB
Vertical sharding Postgres untuk SaaS enterprise Indonesia 500GB. Split per-domain ke 4 cluster, latency p99 turun 48%, complexity ops naik.
-
2026-07-14 · 8 min
Distributed Tracing OTEL di Microservices BCA-like: Lessons
Implementasi distributed tracing OTEL di bank besar Indonesia. 84 microservice, ~28k span/detik, hit-ratio sampling 12%, MTTR turun 71%.
-
2026-07-13 · 9 min
Legacy Modernization Tangerang ERP 3 Tahun
Modernize ERP legacy PHP 5.6 + MySQL 5.7 ke Spring Boot 3 + Postgres 17. 3 tahun, 47 modul, 0 big-bang deploy. Strangler fig pattern detail.
-
2026-07-12 · 10 min
Docker Multi-Stage Build untuk Optimasi Ukuran Image
Cara menekan ukuran image Docker dengan multi-stage build: konsep build stage vs runtime, contoh Dockerfile before/after, layer caching yang benar, dan distroless untuk image seramping mungkin.
-
2026-07-12 · 8 min
Java Virtual Threads + Spring di Production: 6 Bulan
Java 21 Virtual Threads di Spring Boot 3.4 production. Throughput 3.2x, memory turun 58%, pinning issue 4 kali, dan kapan tetap pakai platform thread.
-
2026-07-11 · 8 min
OAuth 2.1 + PKCE Spring Boot Production: 6 Bulan Pengalaman
Implementasi OAuth 2.1 + PKCE di Spring Boot 3.4 untuk SaaS Indonesia B2B. Authorization Server custom, ~340 client app, 4 incident penting.
-
2026-07-10 · 8 min
Redis Cluster vs Sentinel: SaaS Jakarta Skala 100k Op/s
Pilih Redis Cluster vs Sentinel di SaaS Jakarta dengan 100k+ op/s. Failover < 12 detik, sharding key strategy, dan kapan masing-masing tepat.
-
2026-07-09 · 8 min
JSON-LD LocalBusiness untuk Landing Page SMB: Yang Sering Salah
Cara benar pasang structured data JSON-LD schema LocalBusiness di landing page klien SMB: field wajib, validasi, kesalahan umum NAP, dan kapan kerjaan ini bukan tanggung jawab dev.
-
2026-07-09 · 8 min
Kafka vs NATS Jetstream: Enterprise Pilih Mana 2026
Bench Kafka 3.8 vs NATS Jetstream 2.11 di enterprise Indonesia. Throughput 240k msg/s vs 180k msg/s, ops cost beda 4x, dan kapan masing-masing menang.
-
2026-07-08 · 8 min
OpenTelemetry di Microservices Jakarta: 18 Bulan
Adopsi OpenTelemetry di 22 microservice SaaS Jakarta. Trace coverage 94%, MTTR turun 58%, vendor lock-in nol. Cost storage 4.2TB/bulan.
-
2026-07-07 · 9 min
Spring Boot 3 Modular Monolith: Bank Indonesia Migration
Migrasi 14 microservice ke modular monolith Spring Boot 3.4 di bank menengah Indonesia. Latency p99 turun 42%, infra cost turun 38%, tim lebih kecil.
-
2026-07-06 · 8 min
Kubernetes Cost Cut 30%: Enterprise Jakarta
Cluster K8s 142 node, $48k/bulan jadi $33k/bulan di enterprise Jakarta. Right-sizing, spot, dan PDB tuning. 4 bulan optimasi, zero SLA breach.
-
2026-07-05 · 9 min
Postgres 17 Replication Zero-Downtime: ERP Enterprise
Migrasi cluster Postgres 14 ke 17 untuk ERP enterprise Tangerang. 3 primary + 6 replica, 2.8TB data, replication lag p95 < 1.2s selama cutover.
-
2026-07-04 · 7 min
LogRocket vs Sentry vs Datadog: Monitoring SaaS Indonesia
3 tool monitoring, 6 bulan perbandingan di SaaS Tangerang. Cost $58 vs $26 vs $186/bulan, kasus pakai berbeda, dan kapan harus combine.
-
2026-07-04 · 11 min
Strategi Caching Redis di Node.js/Express untuk Production
Pola cache-aside di Node.js/Express dengan Redis: TTL yang benar, invalidation aman, contoh kode lengkap, dan pitfall production seperti cache stampede, stale data, dan connection leak.
-
2026-07-03 · 6 min
Postmortem Deploy Jumat Malam Part 2: 12 Bulan Setelah
12 bulan setelah postmortem Jumat sore. 3 perubahan pipeline, 1 deploy hari Jumat sengaja, dan apa yang saya pelajari soal disiplin tim kecil.
-
2026-07-02 · 7 min
SQLite vs Postgres SaaS 1k MAU: 6 Bulan Real Data
Side project SaaS invoice 1.200 MAU di SQLite + Litestream vs Postgres. Cost Rp 95k vs Rp 480k, latency, dan kapan tidak boleh pakai SQLite.
-
2026-07-01 · 7 min
Prometheus + Grafana SaaS Jakarta: Setup 2 Hari
Setup Prometheus + Grafana untuk SaaS Jakarta. 47 metrik custom, 9 dashboard, alert ke Slack. Storage 14GB/bulan untuk 6 service.
-
2026-06-30 · 6 min
GitHub Actions Deploy Pipeline ke Cloudflare: Setup 90 Detik
Pipeline GitHub Actions ke Cloudflare Pages + Workers untuk SaaS Tangerang. Push ke main sampai live: 87 detik p50, 134 detik p95.
-
2026-06-29 · 7 min
GrowthBook vs LaunchDarkly: Feature Flag SaaS Indonesia
Self-host GrowthBook vs LaunchDarkly $400/bulan untuk SaaS Indonesia. 7 bulan run, 47 flag aktif, edge eval latency 12ms vs 4ms.
-
2026-06-28 · 7 min
Monorepo: Turborepo vs Bun Workspaces 8 Bulan
Migrasi monorepo 14 package dari Turborepo ke Bun Workspaces. Cold install 4m20s ke 38s, CI cache hit naik 71% ke 88%, tapi ada catatan.
-
2026-06-27 · 8 min
Database Migration Zero-Downtime Postgres 150GB
Migrasi Postgres 14 ke 17 di SaaS klien Tangerang. 150GB data, zero downtime, replication lag p95 di bawah 800ms selama cutover.
-
2026-06-26 · 7 min
Caching Strategy: Redis + CDN di SaaS 2026
Layering Redis dan CDN di SaaS multi-tenant Indonesia. Hit ratio 92%, P95 turun 220ms ke 38ms, biaya bandwidth Cloudflare turun 64%.
-
2026-06-25 · 7 min
Capacity Planning Payment Gateway Tangsel: 0-10k Tx/Hari
Klien payment gateway Tangsel tumbuh dari 200 ke 10,000 transaksi/hari dalam 8 bulan. Saya share capacity planning yang berhasil tanpa over-provision, plus 2 saat saya hampir gagal.
-
2026-06-25 · 12 min
Database migration zero-downtime untuk tabel besar: pola yang benar-benar jalan
Cara aman migrasi tabel 50M+ row di PostgreSQL production tanpa table lock: expand-contract, backfill bertahap, dan pitfall yang paling sering diabaikan.
-
2026-06-24 · 7 min
Mongo vs Postgres JSONB di SaaS 2026: Pilih Mana
Klien minta saya pilih DB untuk SaaS baru yang schema-flexible. Saya benchmark Mongo 7 vs Postgres 17 JSONB di workload real. Postgres menang query power, Mongo menang write throughput tinggi.
-
2026-06-23 · 7 min
Terraform vs Pulumi: Tim Jakarta Pakai Mana 2026
Tim klien Jakarta migrasi infra ke IaC. Saya prototype Terraform dan Pulumi parallel 1 bulan. Terraform menang ekosistem, Pulumi menang testing + DX TS-native. Pilih berdasarkan tim.
-
2026-06-22 · 7 min
DORA Metrics di Tim 3 Engineer SaaS Jakarta
Tim klien saya 3 engineer. Saya implement DORA metrics tracking selama 6 bulan tanpa heavy tooling. Deploy frequency naik 4x, lead time turun 68%, MTTR turun 52%. Setup detail.
-
2026-06-21 · 7 min
CSRF di SPA 2026: Masih Relevan?
Saya security review klien fintech. CSRF jadi pertanyaan: SameSite cookie default-nya Lax sejak Chrome 80, masih perlu token CSRF? Saya audit 4 app dan ketemu 3 vector serangan nyata.
-
2026-06-20 · 7 min
Hetzner vs DigitalOcean: SMB SaaS Indonesia 1 Tahun
Saya operate 6 klien SaaS Indonesia, mix Hetzner dan DigitalOcean. Setelah 1 tahun data: Hetzner 60% lebih murah, DO menang region Singapore latency, dan support response time.
-
2026-06-19 · 7 min
nginx vs Traefik vs Caddy: 6 Bulan di VPS Jakarta
Saya pakai nginx untuk klien A, Traefik untuk klien B, Caddy untuk klien C. Setelah 6 bulan: nginx menang stabilitas, Caddy menang DX, Traefik menang Docker-native ops. Trade-off detail.
-
2026-06-18 · 7 min
Postgres 17 Incremental Backup di SaaS: 30 Hari Production
Saya enable pg_basebackup --incremental + WAL archiving di SaaS klien Jakarta. Backup time turun 76%, storage di R2 turun 62%, dan recovery test memenuhi RTO 12 menit.
-
2026-06-18 · 9 min
WebSocket vs SSE vs Long Polling — pilih yang tepat untuk real-time app
Trade-off konkret tiga pola real-time: WebSocket (full-duplex), SSE (server-push), Long Polling (fallback). Kapan masing-masing tepat, implementasi minimal, dan gotcha production.
-
2026-06-17 · 7 min
Zod v5 vs Valibot vs ArkType: 3 Bulan di Form Production
Saya benchmark Zod v5, Valibot, ArkType di SaaS klien Jakarta. Bundle size beda 8x, parse perf beda 3x, tapi DX winner masih Zod. Detail per metric.
-
2026-06-16 · 7 min
Astro Content Actions + Postgres untuk CMS Internal
Saya bangun CMS internal pakai Astro 6 Content Actions + Postgres untuk klien media kecil Tangerang. 0 vendor lock-in, cost Rp 50k/bulan, dan editor bisa publish dalam 2 minggu training.
-
2026-06-15 · 7 min
Server Actions vs tRPC di SaaS 2026: Mana yang Lebih Cepat
Saya benchmark Server Actions dan tRPC di SaaS Jakarta yang sama selama 90 hari. tRPC menang di mobile client compatibility, Server Actions menang di web-only DX. Detail breakdown.
-
2026-06-14 · 7 min
Bangun MVP SaaS 3 Hari dengan Claude Code + Cloudflare
Klien minta MVP SaaS booking untuk usahanya. Saya bangun dari nol ke production deploy dalam 3 hari pakai Claude Code + Astro + Cloudflare. Cost setup Rp 0 sampai paying user pertama.
-
2026-06-13 · 7 min
LangChain vs Claude SDK Direct: 6 Bulan Build Agent
Saya bangun customer service agent untuk klien e-commerce. Versi 1 pakai LangChain, versi 2 saya rewrite ke Claude SDK direct. LOC turun 71%, latency turun 38%, debugging jauh lebih sane.
-
2026-06-12 · 7 min
Supabase pgvector RAG 1k Documents: Cost + Latency Real
Saya build RAG untuk klien legal Jakarta dengan 1,000 dokumen kontrak pakai Supabase pgvector. Cost $34/bulan, P95 retrieval 280ms, dan satu pitfall chunk size yang kena akurasi.
-
2026-06-11 · 6 min
Cloudflare Workers AI vs Replicate: Cost di 100k Inference
Saya butuh image classification untuk app warung. Saya benchmark Cloudflare Workers AI vs Replicate di 100k inference real. Cost Workers AI 4,2x lebih murah, tapi latency P95 lebih tinggi.
-
2026-06-10 · 7 min
QRIS Payment di SaaS Jakarta: Snap vs Direct Integration
Klien SaaS Jakarta minta saya integrasi QRIS. Saya coba 2 jalur: Midtrans Snap (faster ship) vs direct ke acquirer (lebih murah). Setelah 5 bulan, breakdown lengkap.
-
2026-06-09 · 7 min
Expo Router vs React Navigation 7 di Aplikasi Indonesia
Klien minta saya rewrite app mobile dari React Navigation 6 ke salah satu: Expo Router atau React Navigation 7. Saya coba keduanya 2 minggu. Verdict berdasarkan device Indonesia low-end.
-
2026-06-08 · 6 min
TypeScript 5.7 noUncheckedIndexedAccess: 3 Bulan Penyesalan
Saya enable noUncheckedIndexedAccess di SaaS Jakarta. 1,847 type error harus diperbaiki dalam 3 minggu. Bug runtime turun dari 8/bulan ke 2/bulan. Worth it, tapi sakit dulu.
-
2026-06-07 · 6 min
Astro 6 Actions vs Server Functions: Production Pakai Mana
Saya pakai Astro Actions di 2 project klien dan Server Functions di 1 project. Actions menang di DX form-heavy, Server Functions menang di API REST-like. Sharing pattern saya.
-
2026-06-06 · 7 min
Bun 1.3 + Supabase Auth: Migrasi SaaS dari Next
Saya migrasi auth SaaS klien dari Next.js + Auth.js ke Bun + Hono + Supabase Auth. Cold start hilang sama sekali, cost Vercel turun $89/bulan, tapi rewrite middleware 5 hari.
-
2026-06-05 · 7 min
Drizzle vs Prisma di RSC 2026: 8 Bulan Production
Klien Jakarta migrasi dari Prisma ke Drizzle di Next.js 15 RSC. Cold start turun 64%, bundle turun 380KB, tapi migration 3 minggu plus 2 incident saat learning.
-
2026-06-04 · 6 min
Bun 1.3 di Production: 4 Bulan Migrasi Payment Gateway
Migrasi payment gateway warung dari Node 22 ke Bun 1.3. Latency turun 30%, memory turun 40%, dan satu kali downtime karena native module.
-
2026-06-04 · 6 min
shadcn + Tailwind v4: Migrasi Design System 1 Hari
Klien SaaS minta refresh visual. Saya migrasi dari Tailwind v3 + Radix custom ke shadcn + Tailwind v4. CSS bundle turun 47%, build time turun 38%, satu hari kerja.
-
2026-06-03 · 7 min
Next.js 15 Server Actions di SaaS Jakarta 6 Bulan
SaaS invoice klien Jakarta migrasi dari REST API ke Next.js 15 Server Actions. LOC turun 32%, P95 latency turun 18%, tapi ada satu pitfall serial form submit yang bikin RSU customer marah.
-
2026-06-02 · 7 min
Cursor vs Claude Code: 100 Hari Side-by-Side
Saya pakai Cursor untuk project A dan Claude Code untuk project B selama 100 hari. Cursor menang di UX, Claude Code menang di refactor besar. Cost beda Rp 180k/bulan.
-
2026-06-02 · 5 min
PostgreSQL 17 Incremental Backup: Ganti pgBackRest Setelah 5 Tahun
Postgres 17 introduces native incremental backup via pg_basebackup --incremental. Setelah 5 tahun pakai pgBackRest, saya migrasi ke native. Setup yang lebih simple, tapi bukan replacement penuh.
-
2026-06-01 · 7 min
Vibe Coding 2 Minggu dengan Claude Code + Astro
Dua minggu saya coba pure vibe-coding pakai Claude Code untuk landing page Astro klien warung. Velocity naik 3x, tapi tech debt yang harus saya cleanup setelahnya 8 jam.
-
2026-05-30 · 5 min
Cloudflare Pages Cold Start dari Jakarta: 8 Bulan Data
Saya monitor cold start latency dari user real di Jakarta, Bandung, Surabaya, Medan ke Cloudflare Pages selama 8 bulan. Inilah angkanya.
-
2026-05-25 · 6 min
SQLite + Litestream: Database untuk SaaS Kecil dengan Budget 0
Migrasi SaaS personal saya dari Postgres ke SQLite + Litestream replication. 6 bulan production tanpa downtime. Cost: $0/month.
-
2026-05-22 · 4 min
Astro 6 Build Time: 8 Detik di Laptop Karawaci
Build time site dengan 120 markdown posts + dynamic OG image generation. 12 detik di Astro 5, 8 detik di Astro 6. Catatan optimisasi dan benchmark.
-
2026-05-20 · 4 min
bun install vs npm install di Astro 5 — benchmark real dari laptop di Lippo
Saya ukur cold install + warm install di project Astro 5 dengan 12 dependencies. Bun menang, tapi ada caveat soal lockfile.
-
2026-05-18 · 5 min
JWT vs Session Cookies di 2026: Pemenang yang Jelas
Setelah lima tahun pakai JWT untuk autentikasi SaaS Indonesia, saya pindah balik ke session cookies. Inilah pertimbangannya.
-
2026-05-15 · 5 min
Systemd vs Docker untuk VPS Indonesia: Pilih Sederhana
Untuk SMB single-server di Indonesia, systemd often kalahkan Docker dalam simplicity + resource usage. Catatan deploy 8 project.
-
2026-05-10 · 4 min
CSRF di SPA 2026: Yang Bener-bener Anda Butuhkan
Banyak SPA Indonesia masih implement CSRF token padahal pakai SameSite cookie. Catatan tentang setup yang minimal tapi cukup.
-
2026-05-05 · 5 min
Postmortem: Deploy Hari Jumat Sore yang Bikin Saya Tidak Tidur
Saya tahu pepatah 'jangan deploy hari Jumat'. Saya tetap deploy. Pelajaran setelah 3 jam emergency rollback dan satu hari minggu yang hilang.
-
2026-04-30 · 5 min
Work From Home Karawaci: Internet Redundancy yang Worth It
Indihome turun 14 hari dalam 2 tahun. Setelah satu insiden meeting client US yang batal, saya invest internet redundancy. Setup detail.
-
2026-04-22 · 6 min
Migrate dari Astro 4 content collections ke Astro 5+ Content Layer API
Astro 5 punya breaking change di content collections. Step-by-step migrate dari `defineCollection({ schema })` ke `defineCollection({ loader, schema })` dengan loader API.
-
2026-04-22 · 4 min
Temporal API JavaScript 2026: Akhirnya Boleh Lupa Moment.js
Temporal API sudah Stage 4 dan ada di Bun, Node 23+. Setelah 12 tahun pakai Moment/date-fns, ini transition saya untuk project klien.
-
2026-04-15 · 5 min
Bun Shell vs Node child_process — kapan pakai yang mana
Bun Shell ($`cmd`) menarik karena syntax-nya bersih, tapi Node child_process masih punya use case yang tidak bisa di-replace. Breakdown trade-offs.
-
2026-04-15 · 5 min
Cloudflare D1 vs Postgres Hetzner: Pilihan untuk Warung Sederhana
Klien warung minta saya migrasi database dari Postgres ke Cloudflare D1 untuk lebih murah. Saya kasih comparison nyata setelah 2 bulan parallel-running.
-
2026-04-08 · 7 min
Cloudflare Pages vs Vercel untuk Astro project Indonesia — observasi 3 bulan
Saya deploy 5 site Astro identik ke Cloudflare Pages dan Vercel, tracking performance dari user Indonesia selama 90 hari. Breakdown TTFB, bandwidth, build time, dan free tier limit.
-
2026-04-08 · 5 min
Rust Axum vs Go Fiber 2026: API Sederhana untuk Klien Indonesia
Saya kasih klien pilihan: API mereka pakai Rust Axum atau Go Fiber. Saya kasih perbandingan dari sudut pandang freelancer di Karawaci.
-
2026-04-01 · 6 min
Test strategy untuk Astro static site — apa yang worth test, apa yang tidak
Astro static site tidak butuh test setup yang sama dengan full SaaS. Saya breakdown 4 layer test yang worth invest, dan 3 layer yang waste of time.