Artikel ini tersedia dalam Bahasa Inggris

๐Ÿ‡ฌ๐Ÿ‡ง Read in English

2 Mei 2026

๐Ÿ‡ฎ๐Ÿ‡ฉ Bahasa Indonesia

Fleet Management System Part 1: Pengenalan & Arsitektur Sistem

Pelajari cara mendesain arsitektur sistem enterprise untuk platform manajemen armada logistik energi. Dari pengumpulan kebutuhan hingga keputusan tech stack dengan NestJS, Laravel, dan Next.js.

6 min read

Selamat Datang di Seri Fleet Management

Ini adalah Part 1 dari seri tutorial 8 bagian di mana kita membangun Sistem Manajemen Armada dari nol โ€” jenis sistem yang digunakan oleh perusahaan logistik energi dan distribusi untuk melacak ratusan truk BBM, mengelola pengemudi, dan mengoptimalkan rute pengiriman secara real-time.

Di akhir seri ini, Anda akan memahami cara berpikir developer senior dalam membangun aplikasi enterprise. Kita tidak hanya menulis kode โ€” kita akan membuat keputusan arsitektur, menjelaskan mengapa kita memilih setiap teknologi, dan menunjukkan kesalahan yang tidak pernah dibahas kebanyakan tutorial.

Apa yang Akan Kita Bangun

Bayangkan Anda bekerja di perusahaan distribusi energi. Setiap hari, 200+ truk BBM meninggalkan gudang untuk mengirimkan bahan bakar ke SPBU di seluruh Indonesia. Anda perlu:

  • ๐Ÿ—บ๏ธ Melacak setiap truk secara real-time di peta
  • ๐Ÿ‘จโ€โœˆ๏ธ Mengelola pengemudi โ€” jadwal, sertifikasi, performa
  • ๐Ÿ“ฆ Melacak pengiriman โ€” truk mana membawa apa, ke mana tujuannya
  • โ›ฝ Memantau level BBM โ€” mencegah pencurian, deteksi kebocoran
  • ๐Ÿ“Š Menghasilkan laporan โ€” untuk compliance, billing, optimisasi
  • ๐Ÿ”” Mengirim alert ke operator โ€” ketika sesuatu tidak beres

Ini bukan proyek mainan. Ini jenis sistem yang perusahaan bayar miliaran rupiah.


Apa itu Arsitektur Sistem?

Jika Anda baru mengenal arsitektur software, pikirkan seperti membangun rumah.

Anda bisa langsung pukul paku. Tapi pembangun profesional membuat denah terlebih dahulu: di mana dinding, di mana pipa air, bagaimana listrik mengalir. Arsitektur adalah denah dari software Anda.

Mengapa Arsitektur Penting

Inilah yang terjadi ketika tim melewatkan arsitektur:

Bulan 1: "Ayo bangun semuanya dalam satu app Next.js!" Bulan 3: "API mulai lambat... ayo tambah caching" Bulan 6: "Kita tidak bisa deploy admin panel tanpa merusak halaman tracking" Bulan 9: "Semuanya terjerat satu sama lain, kita harus rewrite"

Saya sudah melihat ini terjadi di tiga perusahaan berbeda. Rewrite selalu menghabiskan biaya 3-5x lebih mahal daripada merancang arsitektur dengan benar dari awal.

Pertanyaan Kunci: Monolith atau Microservices?

Sebelum kita mendesain apapun, kita perlu menjawab pertanyaan ini. Mari saya jelaskan kedua pendekatan dengan sederhana:

Monolith = Semua dalam satu aplikasi

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Satu Aplikasi Besar โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚Track โ”‚ โ”‚Admin โ”‚ โ”‚API โ”‚ โ”‚ โ”‚ โ”‚ ing โ”‚ โ”‚Panel โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Satu Database โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Microservices = Beberapa aplikasi kecil, masing-masing mengerjakan satu hal

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Tracking โ”‚ โ”‚ Admin โ”‚ โ”‚ Telemetryโ”‚ โ”‚ Service โ”‚ โ”‚ Service โ”‚ โ”‚ Service โ”‚ โ”‚ (Next.js)โ”‚ โ”‚(Laravel) โ”‚ โ”‚ (NestJS) โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”‚ MySQL โ”‚ โ”‚ MySQL โ”‚ โ”‚PostgreSQLโ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Keputusan Senior: Mana yang Harus Kita Pilih?

Inilah yang membedakan pemikiran junior dan senior:

Pemikiran junior: "Microservices itu modern dan keren, ayo pakai!"

Pemikiran senior: "Apa kebutuhan aktual kita? Seberapa besar tim? Berapa timeline deployment?"

Untuk sistem fleet management kita, saya memilih pendekatan hybrid โ€” dan inilah alasannya:

FaktorSituasi KitaKeputusan
Ukuran tim4-6 developerTerlalu kecil untuk full microservices
DomainSangat berbeda (real-time tracking vs business admin)Layanan terpisah masuk akal
PerformaTelemetri butuh throughput tinggiLayanan khusus diperlukan
Time to market3-4 bulan untuk MVPTidak bisa membangun 10 microservices

Arsitektur kita: 3 layanan, bukan 30.


Arsitektur Sistem Kita

Berikut arsitektur yang akan kita bangun sepanjang seri ini:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Pengguna/Operator โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Next.js Frontend โ”‚ โ”‚ (Aplikasi Dashboard)โ”‚ โ”‚ - Peta Armada โ”‚ โ”‚ - Laporan โ”‚ โ”‚ - Manajemen Driverโ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ HTTPS โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Nginx Reverse โ”‚ โ”‚ Proxy โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ NestJS API โ”‚ โ”‚ Laravel API โ”‚ โ”‚ NestJS โ”‚ โ”‚ (Backend Utama) โ”‚ โ”‚ (Admin) โ”‚ โ”‚ (Telemetri) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ - Auth โ”‚ โ”‚ - Filament โ”‚ โ”‚ - GPS Ingest โ”‚ โ”‚ - Fleet CRUD โ”‚ โ”‚ - Invoice โ”‚ โ”‚ - Monitor BBM โ”‚ โ”‚ - Perencanaan โ”‚ โ”‚ - Jadwal โ”‚ โ”‚ - Alert โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ MySQL โ”‚ โ”‚ MySQL โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚ (Data Utama) โ”‚ โ”‚ (Data Admin) โ”‚ โ”‚ (Telemetri) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Redis โ”‚ โ”‚ (Cache + โ”‚ โ”‚ Pub/Sub) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Mengapa Stack Ini? (Matriks Keputusan Tech Stack)

Setiap pilihan teknologi harus punya alasan. Berikut matriks keputusan kita:

Frontend: Next.js (TypeScript)

Mengapa Next.js? Dashboard kita membutuhkan server-side rendering untuk performa loading awal (operator membukanya pertama kali di pagi hari dengan WiFi kantor yang lambat). Ekosistem React memberikan kita library peta, library chart, dan dukungan WebSocket real-time.

Backend Utama: NestJS (TypeScript)

Mengapa NestJS? Express.js cukup untuk API kecil, tapi untuk aplikasi enterprise dengan 50+ endpoint, Anda butuh struktur. NestJS memberikan kita modules, dependency injection, dan decorators โ€” pola-pola yang menjaga kode tetap terorganisir saat tim bertumbuh.

Layanan Admin: Laravel (PHP)

Mengapa Laravel bersamaan dengan NestJS? Ini mungkin tampak aneh โ€” mengapa pakai dua bahasa backend? Jawabannya pragmatis: Laravel + Filament memberikan kita admin panel siap produksi dalam hitungan hari, bukan minggu. Developer senior memilih alat yang tepat untuk setiap pekerjaan, bukan satu alat untuk semua.

Database: PostgreSQL + MySQL + Redis

DatabaseDigunakan UntukMengapa
PostgreSQLTelemetri GPS, data sensorEkstensi PostGIS untuk query geospasial
MySQLUser, driver, invoice, jadwalBagus untuk data bisnis transaksional
RedisCaching, real-time pub/sub, sesiPembacaan mikro-detik, sempurna untuk "di mana truk X sekarang?"

Pengumpulan Kebutuhan: Skill Senior

Kebanyakan tutorial langsung ke npx create-next-app. Tapi di perusahaan nyata, Anda menghabiskan 1-2 minggu pertama memahami apa yang Anda bangun.

Pertanyaan yang Saya Ajukan Sebelum Menulis Kode

  1. Siapa penggunanya? โ€” Dispatcher, manajer armada, pengemudi, akuntan
  2. Apa alur kritisnya? โ€” Tracking real-time tidak boleh pernah down
  3. Berapa skalanya? โ€” 200 truk, 50 operator bersamaan, 1000+ GPS ping/menit
  4. Apa persyaratan compliance? โ€” Pengiriman BBM harus punya audit trail
  5. Apa lingkungan deployment? โ€” VPS di data center lokal, bukan AWS

SDLC: Bagaimana Kita Membangun Ini

Kita akan mengikuti pendekatan Agile yang disederhanakan:

SprintDurasiDeliverableBagian Seri
Sprint 1Minggu 1-2Arsitektur + Shell FrontendPart 1-2
Sprint 2Minggu 3-4API Utama + Admin panelPart 3-4
Sprint 3Minggu 5-6Database + Data layerPart 5
Sprint 4Minggu 7-8Kualitas kode + RefactoringPart 6
Sprint 5Minggu 9-10Split Microservices + ScalingPart 7
Sprint 6Minggu 11-12Security + CI/CD + DeployPart 8

Kesalahan Umum yang Harus Dihindari

Kesalahan 1: Microservices Prematur

Jangan mulai dengan 15 microservices. Mulai dengan 2-3 layanan dengan batasan yang jelas. Anda selalu bisa memecah kemudian โ€” tapi menggabungkan microservices kembali itu menyakitkan.

Kesalahan 2: Memilih Teknologi untuk CV

Jangan pakai Kubernetes, Kafka, dan GraphQL hanya karena terlihat bagus di CV. Pilih teknologi yang menyelesaikan masalah nyata Anda.

Kesalahan 3: Tidak Ada Architecture Decision Records

Lakukan dokumentasi mengapa Anda memilih setiap teknologi. Enam bulan dari sekarang, ketika anggota tim baru bertanya "mengapa kita pakai dua framework backend berbeda?", Anda ingin jawaban tertulis.


Selanjutnya

Di Part 2, kita akan membangun frontend Next.js โ€” dashboard tracking armada real-time dengan tampilan peta, kartu status kendaraan, dan layout responsif.


Ini adalah Part 1 dari seri Fleet Management System. Ikuti perjalanan kita membangun aplikasi enterprise production-grade dari nol, mencakup setiap aspek pengembangan full-stack senior.

Lanjut Membaca

Artikel Selanjutnya โ†’

Fleet Management Part 2: Building the Real-Time Dashboard with Next.js

Next article thumbnail