18 पॉइंट द्वारा xguru 2022-09-27 | 3 टिप्पणियां | WhatsApp पर शेयर करें
  • 2 साल पहले मोबाइल/वेब/बैकएंड बनाने के लिए चुनी गई तकनीकों और उन पर पुनरावलोकन दर्ज किया गया है
  • यह एक बहुत ही सरल, सामान्य SaaS था, इसलिए लक्ष्य था न्यूनतम मेहनत और संसाधनों के साथ जल्दी bootstrapping करना
    डिज़ाइन क्षमता सीमित थी, इसलिए मोबाइल ऐप खुद विकसित नहीं किया और उसे आउटसोर्स कर दिया, जबकि केवल बैकएंड और वेब विकसित किए

तकनीकी चयन

मोबाइल ऐप

  • मैं लंबे समय से .NET डेवलपर रहा हूँ, लेकिन Xamarin में डेवलप करना नहीं चाहता था
  • iOS/Android दोनों को साथ में सपोर्ट करने के लिए Flutter चुना
  • कुछ ही हफ्तों में दोनों प्लेटफ़ॉर्म पर चलने वाला ऐप तैयार हो गया, इसलिए Time to Market के नज़रिए से यह शानदार था
  • UI में कुछ कमियाँ थीं, लेकिन हमारे जैसे B2B use case में उन्हें नज़रअंदाज़ किया जा सकता था
  • Flutter में खुद काफी bugs और समस्याएँ थीं, लेकिन वे show-stopper स्तर की नहीं थीं
  • एक भाषा के रूप में Dart खास पसंद नहीं आई, लेकिन यह समस्या नहीं थी। (वैसे भी मैं खुद डेवलप नहीं कर रहा था)
  • शायद Xamarin पर टिके रहना या React Native चुनना बेहतर भी हो सकता था

API

  • scale यहाँ महत्वपूर्ण नहीं था। बस शुरुआती कुछ ग्राहकों को सेवा देनी थी
  • इसलिए Kubernetes/serverless जैसी चीज़ों को पूरी तरह नज़रअंदाज़ किया और सीधे Monolith के रूप में डेवलप किया
  • यह एक single लेकिन modular .NET application थी, जिसे F# में कोड किया गया और Onion architecture (Ports & Adapters pattern) का पालन किया गया
  • GraphQL जैसी चीज़ों को भी छोड़ा और सीधे पुराने REST तरीके पर रहे
  • परिणाम
    • API बहुत मज़बूत और तेज़ है। deployment के दौरान लगभग कोई समस्या नहीं हुई
    • मैं इसे साबित नहीं कर सकता, लेकिन मुझे लगता है कि इस सफलता का बड़ा हिस्सा मेरे इस्तेमाल किए गए "Applied Functional Programming" approach की वजह से है
    • साथ ही F# कोड बहुत सुंदर, पढ़ने में आसान और समझने में सरल है
    • बहुत कम open source libraries पर निर्भर होने के कारण, F# ecosystem का तुलनात्मक रूप से छोटा और धीमा होना कोई समस्या नहीं बना

Persistence

  • मैं लंबे समय से SQL Server इस्तेमाल करता आया हूँ, लेकिन database पर license cost नहीं लगाना चाहता था
  • इसलिए PostgreSQL चुना, और API इसे एक single DB server के रूप में इस्तेमाल करती थी। इसमें हल्का queue mechanism भी शामिल था
  • प्रोडक्ट में BLOB storage की ज़रूरत पड़ी, इसलिए बस सर्वर के file system का उपयोग करने का फैसला किया
  • परिणाम
    • यह बस काम करता है (It just works). Postgres के साथ काम करना आनंददायक है
    • JSONB data type relational और NoSQL techniques को मिलाकर इस्तेमाल करने की सुविधा देता है। वह भी बहुत स्थिर और सहज तरीके से
    • JSON query syntax को याद रखने की शायद ज़रूरत नहीं पड़ेगी
    • BLOB को सीधे disk पर स्टोर करना एक बड़ा निर्णय है, लेकिन कम उपयोगकर्ताओं की स्थिति में AWS S3 जैसी चीज़ का उपयोग शायद कोई बड़ा फायदा नहीं देता

Web App

  • web app के लिए तकनीकी निर्णय लेने में काफी समय लगा
  • मेरा instinct Fable और F# चुनने को कह रहा था, लेकिन आखिरकार React और TypeScript का उपयोग करके SPA बनाने का निर्णय लिया
  • शुरुआती महत्वपूर्ण निर्णयों में से एक Tailwind CSS को अपनाना था
  • परिणाम
    • React just works, TypeScript just works
    • Dart की तरह TypeScript लिखना भी मुझे खास पसंद नहीं, और पढ़ना भी बहुत नहीं
    • फिर भी TS में कुछ बेहतरीन features हैं। discriminated unions जैसी सुविधाएँ F# में भी होतीं तो अच्छा होता
    • कुल मिलाकर developer experience शानदार रहा। build time बहुत कम है (F# की तुलना में), और ज़्यादातर जटिल UI समस्याओं के लिए packages पहले से मौजूद हैं
    • functional programming के नज़रिए से भी React का पूरा application model समझ में आता है
    • Tailwind CSS ने बहुत सारा बोझ कम कर दिया

Infrastructure

  • Monolith चुन लेने के बाद बाकी चयन आसान हो गया
  • Hetzner से Linux machine किराए पर लेकर 3 Docker containers चलाए: Postgres, DotNet API, Nginx
  • सब कुछ GitHub Actions से build होता है और अपने आप deploy हो जाता है
  • परिणाम
    • client और backend को एक साथ deploy करने पर downtime होता है, लेकिन फिलहाल वह छोटा है और नज़रअंदाज़ किया जा सकता है
    • पूरी प्रक्रिया slim, stable और cost structure के लिहाज़ से भी वैसी ही है। Hetzner वाकई बहुत सस्ता है

निष्कर्ष

  • मैं मौजूदा निर्णयों से बहुत संतुष्ट हूँ
  • पिछले प्रोजेक्ट्स की तुलना में F# और functional programming पर बड़े पैमाने पर अधिक निवेश किया
  • एक प्रोजेक्ट में F#, TypeScript, Dart — ये तीन भाषाएँ थोड़ा ज़्यादा हैं
    Dotnet MAUI, Flutter जितना mature नहीं है, लेकिन कम इस्तेमाल होने वाली किसी दूसरी भाषा की जगह इसे चुनना संभव हो सकता है

3 टिप्पणियां

 
coremaker 2022-09-27

दीर्घकाल में क्या टैलेंट की उपलब्धता सुचारु रहेगी?

 
xguru 2022-09-27

यह शायद एक ऐसा service लगता है जिसे अकेले चलाया जा रहा है। लगता है कि उन्होंने manpower से ज़्यादा इस बात को प्राथमिकता दी कि खुद के लिए maintenance करना आसान रहे।

 
xguru 2022-09-27

कुछ हिस्से ऐसे भी हैं जो मेरे साथ पूरी तरह मेल नहीं खाते.. लेकिन लगता है कि इस व्यक्ति के लिए ये अपने तरीके से काफ़ी व्यावहारिक विकल्प थे।