18 puan yazan xguru 2022-09-27 | 3 yorum | WhatsApp'ta paylaş
  • 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

 
coremaker 2022-09-27

Uzun vadede insan kaynağı bulmak sorunsuz olacak mı?

 
xguru 2022-09-27

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.

 
xguru 2022-09-27

Bana çok uymayan bazı yönleri olsa da... bu kişi için kendince pratik tercihler gibi görünüyor.