18 poin oleh xguru 2022-09-27 | 3 komentar | Bagikan ke WhatsApp
  • Catatan tentang teknologi yang dipilih 2 tahun lalu untuk membangun mobile/web/backend, beserta refleksinya
  • Karena ini adalah SaaS umum yang sangat sederhana, tujuannya adalah melakukan bootstrapping secepat mungkin dengan usaha dan sumber daya seminimal mungkin
    Karena kemampuan desain terbatas, aplikasi mobile tidak dikembangkan sendiri melainkan dialihdayakan, dan hanya backend serta web yang dikembangkan

Pilihan teknologi

Aplikasi mobile

  • Saya sudah lama menjadi pengembang .NET, tetapi tidak ingin mengembangkannya dengan Xamarin
  • Memilih Flutter untuk mendukung iOS/Android secara bersamaan
  • Dalam beberapa minggu, aplikasi yang berjalan di kedua platform sudah jadi, sehingga dari sudut pandang time to market hasilnya sangat baik
  • UI memang punya sedikit kekurangan, tetapi untuk use case B2B seperti kami itu bisa diabaikan
  • Flutter sendiri punya cukup banyak bug & masalah, tetapi tidak sampai tingkat show-stopper
  • Dart sebagai bahasa tidak terlalu saya sukai, tetapi itu bukan masalah. (Bagaimanapun saya tidak yang mengembangkannya)
  • Bisa jadi tetap bertahan dengan Xamarin atau memilih React Native akan lebih baik

API

  • Skala bukan hal yang penting. Cukup jika hanya disediakan untuk sebagian pelanggan awal
  • Jadi Kubernetes/serverless dan sejenisnya diabaikan, dan dikembangkan sebagai Monolith
  • Meski tunggal, ini adalah aplikasi .NET yang termodularisasi, ditulis dengan F# dan mengikuti arsitektur Onion (pola Ports & Adapters)
  • Hal seperti GraphQL juga diabaikan, dan tetap memakai pendekatan REST yang klasik
  • Hasil
    • API sangat tangguh dan cepat. Hampir tidak ada masalah saat deployment
    • Saya tidak bisa membuktikannya, tetapi saya rasa sebagian besar keberhasilan ini berasal dari pendekatan "Applied Functional Programming" yang saya gunakan
    • Selain itu, kode F# sangat indah, mudah dibaca, dan mudah dipahami
    • Karena hanya bergantung pada sangat sedikit pustaka open source, fakta bahwa ekosistem F# relatif kecil dan bergerak lambat bukan menjadi masalah

Persistence

  • Saya sudah lama memakai SQL Server, tetapi tidak ingin mengeluarkan biaya lisensi untuk DB
  • Jadi memilih PostgreSQL, dan API menggunakannya dengan satu server DB. Termasuk sedikit mekanisme antrean
  • Produk akhirnya membutuhkan penyimpanan BLOB, jadi diputuskan untuk langsung memakai file system server
  • Hasil
    • Tinggal jalan saja (It just works). Bekerja dengan Postgres itu menyenangkan
    • Tipe data JSONB memungkinkan penggunaan teknik relasional dan NoSQL secara campuran. Dengan cara yang sangat stabil dan nyaman
    • Sepertinya tidak perlu menghafal sintaks query JSON
    • Menyimpan BLOB langsung ke disk adalah keputusan besar, tetapi memakai sesuatu seperti AWS S3 mungkin tidak akan banyak membantu untuk jumlah pengguna yang sedikit

Web App

  • Keputusan teknologi untuk web app memakan waktu cukup lama
  • Intuisi saya menyuruh memilih Fable dan F#, tetapi pada akhirnya saya memutuskan memakai React dan TypeScript lalu membangun SPA
  • Salah satu keputusan penting di awal adalah mengadopsi Tailwind CSS
  • Hasil
    • React just works, TypeScript just works
    • Seperti Dart, saya juga tidak terlalu suka menulis TypeScript, dan membaca pun biasa saja
    • Meski begitu, TS memang punya fitur-fitur hebat. Fitur seperti discriminated unions rasanya akan bagus jika ada juga di F#
    • Secara keseluruhan, pengalaman developer sangat baik. Waktu build sangat singkat (dibandingkan F#), dan untuk sebagian besar masalah UI yang kompleks, paketnya sudah tersedia
    • Bahkan dari sudut pandang functional programming, model aplikasi React secara keseluruhan masih bisa dipahami
    • Tailwind CSS sangat banyak mengurangi beban

Infrastructure

  • Setelah memutuskan memakai Monolith, pilihannya jadi lebih mudah
  • Menyewa mesin Linux di Hetzner, lalu menjalankan 3 container Docker: Postgres, DotNet API, Nginx
  • Semuanya dibangun dengan GitHub Actions dan di-deploy otomatis
  • Hasil
    • Jika klien dan backend di-deploy bersamaan memang ada downtime, tetapi untuk saat ini singkat dan bisa diabaikan
    • Seluruh prosesnya ramping dan stabil, begitu juga struktur biayanya. Hetzner benar-benar murah

Ringkasan

  • Saya sangat puas dengan keputusan yang ada saat ini
  • Saya berinvestasi pada F# dan pekerjaan functional programming dalam skala yang lebih luas dibanding proyek sebelumnya
  • Tiga bahasa di proyek ini, yaitu F#, TypeScript, dan Dart, terasa agak terlalu banyak.
    Dotnet MAUI belum sematang Flutter, tetapi mungkin bisa dipilih agar tidak perlu memakai bahasa lain yang jarang digunakan

3 komentar

 
coremaker 2022-09-27

Dalam jangka panjang, apakah perekrutan talenta akan berjalan lancar?

 
xguru 2022-09-27

Itu sepertinya layanan yang dijalankan sendiri. Tampaknya dia lebih mempertimbangkan sisi yang memudahkan dirinya untuk melakukan pemeliharaan daripada soal tenaga kerja.

 
xguru 2022-09-27

Ada beberapa bagian yang agak kurang cocok dengan saya, tapi sepertinya ini tetap pilihan yang cukup praktis dan sesuai untuk orang ini.