- 2 yıl önce mobil/web/backend oluşturmak için seçtiğim teknolojileri ve bunlara dair değerlendirmelerimi kaydediyorum
- Oldukça basit, genel bir SaaS’tı; bu yüzden hedef, en az emek ve kaynakla hızlıca bootstrap etmekti
Tasarım yetkinliğim sınırlı olduğu için mobil uygulamayı kendim geliştirmedim, dış kaynak kullandım; yalnızca backend ve web’i geliştirdim
Teknoloji seçimleri
Mobil uygulama
- Uzun yıllar .NET geliştiricisi olsam da Xamarin ile geliştirmek istemedim
- iOS/Android’e aynı anda destek vermek için Flutter’ı seçtim
- Birkaç hafta içinde iki tarafta da çalışan bir uygulama çıktı; bu yüzden Time to Market açısından harikaydı
- UI’da bazı kusurlar vardı ama bizim gibi B2B kullanım senaryolarında bunlar göz ardı edilebilirdi
- Flutter’ın kendisinde epey hata ve sorun vardı ama Show-Stopper seviyesinde değildi
- Dil olarak Dart pek hoşuma gitmedi ama bu bir sorun değildi. (Nasıl olsa ben geliştirmiyordum)
- Sadece Xamarin’de kalmak ya da React Native seçmek daha iyi de olabilirdi
API
- Ölçek kritik değildi. Sadece ilk müşterilerden bir kısmına sunmamız yeterliydi
- Bu yüzden Kubernetes/serverless gibi şeylerin hepsini görmezden gelip doğrudan monolith olarak geliştirdim
- Tek parça ama modüler bir .NET uygulamasıydı; F# ile kodlandı ve Onion mimarisini (Ports & Adapters pattern) takip etti
- GraphQL gibi şeyleri de görmezden gelip klasik REST yaklaşımıyla devam ettim
- Sonuç
- API çok sağlam ve hızlı. Dağıtım sırasında neredeyse hiç sorun çıkmıyor
- Kanıtlayamam ama bu başarının büyük kısmının kullandığım "Applied Functional Programming" yaklaşımından geldiğini düşünüyorum
- Ayrıca F# kodu çok güzel, okunması ve anlaşılması çok kolay
- Çok az sayıda open source kütüphaneye bağımlı olduğum için, F# ekosisteminin nispeten küçük ve yavaş hareket ediyor olması sorun olmadı
Kalıcılık
- Uzun süredir SQL Server kullanıyordum ama veritabanına lisans maliyeti ödemek istemedim
- Bu yüzden PostgreSQL’i seçtim; API bunu tek bir DB sunucusu olarak kullanıyor. İçinde küçük bir kuyruk mekanizması da var
- Üründe BLOB depolama ihtiyacı doğunca doğrudan sunucunun dosya sistemini kullanmaya karar verdim
- Sonuç
- Sadece çalışıyor (It just works). Postgres ile çalışmak keyifli
- JSONB veri tipi, ilişkisel ve NoSQL tekniklerini bir arada kullanmayı mümkün kılıyor. Oldukça sağlam ve rahat bir şekilde
- JSON sorgu sözdizimini ezberlemeniz gerekmeyebilir
- BLOB’ları doğrudan diske kaydetmek büyük bir karar ama AWS S3 gibi bir şey kullanmak az sayıdaki kullanıcı için çok da fayda sağlamayacaktı
Web uygulaması
- Web uygulaması için teknoloji kararı epey uzun sürdü
- İçgüdüm Fable ve F# seçmemi söylüyordu ama sonunda React ve TypeScript kullanıp bir SPA kurmaya karar verdim
- Erken aşamadaki önemli kararlardan biri Tailwind CSS’i benimsemekti
- Sonuç
- React just works, TypeScript just works
- Dart’ta olduğu gibi TypeScript yazmayı da çok sevmiyorum, okumayı da pek değil
- Yine de TS’de harika özellikler var. Discriminated unions gibi özelliklerin F#’ta da olmasını isterdim
- Genel olarak geliştirici deneyimi harika. Build süreleri çok kısa (F# ile kıyaslandığında) ve çoğu karmaşık UI problemi için paketler zaten mevcut
- Fonksiyonel programlama açısından bakıldığında React’in genel uygulama modeli de anlaşılır
- Tailwind CSS inanılmaz derecede yük azalttı
Altyapı
- Monolith gitmeye karar verince seçim kolaylaştı
- Hetzner’dan bir Linux makinesi kiralayıp 3 Docker container çalıştırdım: Postgres, DotNet API, Nginx
- Her şey GitHub Actions ile build ediliyor ve otomatik deploy ediliyor
- Sonuç
- İstemci ve backend’i aynı anda deploy edince downtime oluşuyor ama şu an için kısa ve göz ardı edilebilir düzeyde
- Tüm süreç yalın, istikrarlı ve maliyet yapısı da aynı şekilde. Hetzner gerçekten çok ucuz
Özet
- Mevcut kararlardan çok memnunum
- Önceki projelere kıyasla daha geniş ölçekte F# ve fonksiyonel programlama çalışmalarına yatırım yaptım
- Projede F#, TypeScript ve Dart olmak üzere üç dil biraz fazla.
Dotnet MAUI, Flutter kadar olgun değil ama sık kullanmadığım başka bir dil yerine tercih edilebilir gibi görünüyor
3 yorum
Uzun vadede insan kaynağı bulmak sorunsuz olacak mı?
Bu muhtemelen tek başına işletilen bir hizmet gibi görünüyor. İnsan kaynağındansa, kendisinin bakımını sürdürmesinin daha kolay olacağı tarafı düşündüğü anlaşılıyor.
Bana çok uymayan bazı yönleri olsa da... bu kişi için kendince pratik tercihler gibi görünüyor.