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:
| Faktor | Situasi Kita | Keputusan |
|---|---|---|
| Ukuran tim | 4-6 developer | Terlalu kecil untuk full microservices |
| Domain | Sangat berbeda (real-time tracking vs business admin) | Layanan terpisah masuk akal |
| Performa | Telemetri butuh throughput tinggi | Layanan khusus diperlukan |
| Time to market | 3-4 bulan untuk MVP | Tidak 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
| Database | Digunakan Untuk | Mengapa |
|---|---|---|
| PostgreSQL | Telemetri GPS, data sensor | Ekstensi PostGIS untuk query geospasial |
| MySQL | User, driver, invoice, jadwal | Bagus untuk data bisnis transaksional |
| Redis | Caching, real-time pub/sub, sesi | Pembacaan 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
- Siapa penggunanya? โ Dispatcher, manajer armada, pengemudi, akuntan
- Apa alur kritisnya? โ Tracking real-time tidak boleh pernah down
- Berapa skalanya? โ 200 truk, 50 operator bersamaan, 1000+ GPS ping/menit
- Apa persyaratan compliance? โ Pengiriman BBM harus punya audit trail
- Apa lingkungan deployment? โ VPS di data center lokal, bukan AWS
SDLC: Bagaimana Kita Membangun Ini
Kita akan mengikuti pendekatan Agile yang disederhanakan:
| Sprint | Durasi | Deliverable | Bagian Seri |
|---|---|---|---|
| Sprint 1 | Minggu 1-2 | Arsitektur + Shell Frontend | Part 1-2 |
| Sprint 2 | Minggu 3-4 | API Utama + Admin panel | Part 3-4 |
| Sprint 3 | Minggu 5-6 | Database + Data layer | Part 5 |
| Sprint 4 | Minggu 7-8 | Kualitas kode + Refactoring | Part 6 |
| Sprint 5 | Minggu 9-10 | Split Microservices + Scaling | Part 7 |
| Sprint 6 | Minggu 11-12 | Security + CI/CD + Deploy | Part 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.
