Episode ini membahas kesiapan operasional aplikasi Dart: runbook untuk deployment, monitoring, dan incident response, logging dan error reporting, release management dan versioning, serta memelihara aplikasi Dart yang berumur panjang.

Aplikasi yang tidak bisa dioperasikan adalah aplikasi yang gagal. Episode 19 membahas operational readiness: menyiapkan runbook, memonitor kesehatan layanan, menangani insiden, mengelola rilis, dan memelihara aplikasi Dart dalam jangka panjang.
Kode yang hebat tetap membutuhkan proses: bagaimana melakukan deployment tanpa rasa takut, bagaimana mengetahui layanan sakit sebelum pengguna mengeluh, dan bagaimana memperbarui dependency tanpa merusak produksi. Ini semua adalah keterampilan yang membedakan hobby project dari sistem produksi.
Runbook adalah dokumen langkah-demi-langkah yang memandu operasi. Bagian deployment harus menyebutkan:
dart compile exe atau flutter build.dart compile exe bin/server.dart -o bin/server
docker build -t myapp:1.4.0 .
docker push registry.example.com/myapp:1.4.0docker build -t myapp:1.4.0 . menandai image dengan versi spesifik agar rilis dapat dilacak dan di-rollback secara tepat.
Monitor kesehatan layanan sebelum pengguna terkena dampak:
/healthz yang memeriksa dependency penting.Runbook insiden mendefinisikan siapa yang di-hubungi, langkah triase, dan eskalasi — sehingga saat alarm berbunyi, tim tidak perlu berpikir dari nol.
Log yang baik terstruktur, bukan sekadar string:
import 'package:logging/logging.dart';
void main() {
final log = Logger('aplikasi');
log.info('Server dimulai', {'port': 8080});
log.warning('Latensi tinggi', {'ms': 1200});
}log.info('Server dimulai', {'port': 8080}) mencatat pesan dengan data terstruktur yang mudah dicari dan difilter di sistem log. Hindari mencatat data sensitif seperti token.
Jangan biarkan exception hilang di log. Kirim ke layanan error tracking seperti Sentry, yang mengelompokkan error, menangkap stack trace, dan memberi konteks release. Integrasi via package:sentry memakan waktu menit dan memberi visibilitas yang jauh lebih baik.
Gabungkan metrik runtime — memori, heap, dan throughput — dengan dashboard. Server Dart bisa mengekspos metrik Prometheus, sementara Flutter memakai Firebase Performance atau solusi serupa untuk melacak frame time dan startup.
Patuhi Semantic Versioning agar pengguna tahu dampak pembaruan:
Untuk aplikasi, integrasikan dengan tag git dan CI: setiap tag v1.4.0 memicu build image dengan label yang sama.
Otomasi membuat rilis konsisten dan bebas kesalahan manual:
git tag v1.4.0
git push origin v1.4.0git tag v1.4.0 menandai commit tertentu sebagai rilis. Pipeline yang mendengarkan tag bisa otomatis membangun image, menjalankan test, dan melakukan deploy — membuat rilis menjadi peristiwa yang membosankan dan andal.
Aplikasi yang berumur panjang butuh perawatan rutin:
dart pub outdateddart pub outdated menampilkan package yang tertinggal versinya. Tetapkan jadwal pembaruan dependency, dan selalu jalankan test penuh setelah dart pub upgrade.
Ekosistem Dart terus bergerak: API lama dipensiunkan, fitur baru hadir. Pantau daftar breaking change di rilis SDK, dan rencanakan migrasi bertahap. dart analyze akan menandai penggunaan API yang deprecated, membantu kalian bersiap lebih awal.
Kode yang mudah dipelihara adalah kode yang dipahami orang lain (termasuk diri kalian enam bulan lagi): fungsi kecil, nama jelas, test yang menggambarkan perilaku, dan dokumentasi yang cukup. Investasi ini terbayar setiap kali aplikasi diubah.
Inti yang harus dibawa pulang:
dart pub outdated rutin menjaga dependency tetap segar.Di episode 20 selanjutnya kita akan membahas real-world use cases dan patterns — use case mobile, web, backend, dan CLI, pola arsitektur MVC, Clean Architecture, dan reactive, pola data flow dan state management, serta model deployment dan runtime.