Afteroffice Studio EN
ENTRI 020 Lampiran teknis

Halaman ini ditulis untuk kamu, bukan untuk atasanmu.

Kalau kamu diminta menilai apakah orang ini aman diajak bekerja sama, ini yang biasanya ingin kamu tahu. Saya tulis apa adanya, termasuk yang belum beres.

Dicatat oleh
Ihsan Nugraha
Diperiksa
6 Agu 2026, 17.17 WIB
Cara verifikasi
Minta lihat repositori mana pun sebelum memutuskan
Dicatat oleh
ENTRI 021

Apa yang jalan, di mana

Semua yang saya bangun berjalan di satu VPS yang saya kelola sendiri — bukan platform serverless yang tiba-tiba mengubah harga, dan bukan akun hosting yang saya tidak punya akses root-nya.

Reverse proxy & TLSCaddy, sertifikat otomatis, konfigurasi per-project terpisah
Proses aplikasiPM2 untuk service Node, Docker Compose untuk yang butuh isolasi penuh
DatabasePostgreSQL di Docker untuk yang berat; SQLite untuk yang genuinely single-writer
Sistem operasiLinux, patch keamanan otomatis, akses lewat kunci SSH

Kalau kamu lebih nyaman semuanya berjalan di infrastruktur milik kamu sendiri, itu juga bisa — dan sering memang pilihan yang lebih tepat untuk jangka panjang.

ENTRI 022

Bagaimana sebuah service diekspos

Aturan yang saya pakai konsisten di semua project, dan ini biasanya pertanyaan pertama yang kamu ajukan:

Service aplikasibind ke 127.0.0.1, tidak pernah ke 0.0.0.0 di host
Container Dockerport dipetakan sebagai 127.0.0.1:PORT, bukan dibuka ke publik
Satu-satunya pintu publikCaddy, di 80 dan 443
Firewallaktif, dengan daftar port yang dibuka secara eksplisit
Tool yang bisa mengeksekusi perintahwajib punya autentikasi, tanpa pengecualian
Secretdi file environment di server, tidak pernah masuk ke git

Sebuah service yang bind ke 0.0.0.0 di dalam container itu benar dan memang harus begitu — pembatasannya ada di pemetaan port, bukan di kode aplikasinya. Saya sebutkan karena perbedaan ini sering jadi salah paham.

ENTRI 023

Deployment

Tidak ada langkah manual yang cuma ada di kepala saya. Setiap project punya perintah deploy-nya sendiri yang tercatat di repo-nya.

Sumber kebenarangit, di server juga — bukan hanya di laptop saya
Rilisbuild ulang image, bukan menyalin file ke container yang sedang jalan
Rollbackkembali ke commit sebelumnya, lalu build ulang
Perubahan skemafile migrasi yang tercatat, bukan mendorong skema langsung

Menyalin file ke container yang sedang berjalan memang lebih cepat, dan saya pernah melakukannya. Akibatnya satu kali container ter-recreate karena alasan yang sama sekali tidak berhubungan, dan 15 perbaikan hilang sekaligus. Sejak itu cara tersebut tidak dipakai lagi.

ENTRI 024

Backup, dan bukti bahwa backup itu bisa dipulihkan

Punya file backup bukan berarti punya backup. Yang saya lakukan adalah membuktikannya:

Frekuensidump database harian, otomatis
Tujuanpenyimpanan cloud di luar server, dengan rotasi
Verifikasidump diunduh, dipulihkan ke database sementara yang terpisah dari production
Kriteria lulusjumlah baris tabel-tabel utama dibandingkan dengan production sampai cocok

Pemulihan diuji ke container terpisah, tidak pernah menyentuh production. Setelah selesai, container ujinya dihapus.

ENTRI 025

Kalau ada yang mati

Ada pengecekan otomatis yang memanggil setiap URL dan mencatat kode responsnya. Halaman katalog di situs ini membaca hasil yang sama, termasuk saat hasilnya jelek.

Saat catatan ini ditulis, beberapa project yang saya tandai hidup ternyata sedang mengembalikan 502. Itu tetap ditampilkan di katalog. Menyembunyikannya akan membuat seluruh angka di situs ini tidak ada gunanya.

ENTRI 026

Source code, dan apa yang terjadi kalau saya hilang

Ini pertanyaan yang paling jarang ditanyakan di depan, padahal paling penting.

Kepemilikan kodedisepakati tertulis di awal, bukan di akhir project
Repositorybisa langsung di organisasi git milik kamu sejak commit pertama
DokumentasiREADME, catatan arsitektur, dan langkah deploy ditulis sebagai bagian dari pekerjaan
Handoversesi serah terima ke tim kamu, dengan dokumen yang cukup untuk melanjutkan tanpa saya

Kalau kerja sama ini berhenti, tim kamu harus bisa melanjutkan. Kalau tidak bisa, berarti pekerjaan saya belum selesai.

ENTRI 027

Soal AI, dijawab langsung

Ini biasanya keberatan terbesar dari sisi teknis, jadi saya jawab tanpa berputar.

Apakah kodenya ditulis AI dan tidak ada yang mengerti?

Saya membaca dan bertanggung jawab atas setiap perubahan yang masuk. Kalau saya tidak paham sebuah bagian, bagian itu tidak dirilis. Beberapa bug tersulit di catatan kasus saya justru ditemukan dengan membaca kode dan output sistem, bukan dengan meminta AI menebak.

Apakah data kami dikirim ke penyedia AI?

Tidak, kecuali memang itu fungsinya dan kamu menyetujuinya. Untuk fitur yang menggunakan AI, saya batasi data yang dikirim seminimal mungkin — di salah satu project, informasi pribadi sengaja tidak pernah dimasukkan ke prompt sampai ada persetujuan eksplisit untuk melakukannya.

Penyedia model mana yang dipakai?

Dipilih per kasus — Anthropic, DeepSeek, atau lainnya — berdasarkan biaya, kualitas, dan di mana datanya boleh berada. Untuk pekerjaan kamu, itu keputusan yang kita ambil bersama di awal, bukan yang saya tentukan sendiri.

Apakah ini akan jadi beban buat tim kami nanti?

Itu risiko yang nyata, dan jawabannya bukan janji. Jawabannya adalah kode yang wajar dibaca, skema yang tercatat, dokumentasi yang cukup, dan handover yang benar-benar dilakukan. Silakan minta lihat repositori mana pun sebelum memutuskan.

ENTRI 028

Di mana saya bukan pilihan yang tepat

Daftar ini ada supaya kamu tidak perlu menemukannya sendiri di tengah project.

  • Dukungan operasional 24/7 dengan SLA berlapis — saya satu orang, dan itu tidak bisa dijanjikan.
  • Sertifikasi kepatuhan formal, audit ISO, atau kebutuhan regulasi yang butuh proses lembaga.
  • Integrasi dalam ke sistem enterprise besar yang butuh koordinasi berbulan-bulan lintas vendor.
  • Tim besar yang mengerjakan banyak jalur paralel dengan tenggat yang sama.
  • Pekerjaan yang butuh akses ke data pribadi sensitif dalam skala besar tanpa perjanjian pemrosesan data yang jelas.

Kalau kebutuhan kamu ada di daftar ini, saya akan bilang di percakapan pertama. Untuk sebagian, saya masih bisa membantu di bagian awalnya — merancang, membuat versi pertama, lalu menyerahkannya ke tim atau vendor yang lebih tepat.