Blog

Mobil Uygulama Maliyet Hesaplaması

Herkese merhaba. Sürekli değişen ve en çok sorulan mobil uygulama fiyatları ve maliyet hesaplaması ile ilgili tekrar yazı yazma ihtiyacı hissettim.

Daha önceki bir yazımda (buradan ulaşabilirsiniz) bu işin mantığından bashetmiştim. Bu yazıyı da okumanızı tavsiye ederim.

Bu yazıdan sonra tabi uzun zaman geçmiş. Malum döviz kurundaki artış ve TL deki değer kaybı ile mobil uygulama geliştirme adam/gün ücretlerinde de ciddi artışlar oldu.

Bir mobil uygulama yaptırmak için neye ihtiyacınız var , ne kadar maliyet olur fiyatları nelerdir bu yazımda bunlara tekrar değineceğim.

Öncelikle tek platform için yazdığımız bu yazıyı hem ios hem android için düşünebilirsiniz. Sebebi de her iki platformda iş yükünün hemen hemen yakın olmasındandır. Eğer flutter/react native gibi tek bir platformada mobil uygulama geliştiriyorsanız o zaman tek maliyet düşünebilirsiniz.

Özetle, android/ios ayrı ise x2, flutter/react native ise x1 olarak düşünebilirsiniz.

Mobil uygulama fiyatını hesaplamak için öncelikle işi parçalara ayırmak gerekir.

Aşağıdaki örnek maliyetler tahminen 1 ay sürecek normal ölçüde bir mobil uygulama geliştirme için hesaplanmıştır.

Başlamadan önce şunu belirteyim. Sizin 5000 TL bütçeniz olabilir. Bu bütçe ile işi yapacak bir ekip yada kişi bulabilirsiniz. Ancak her kalitenin her çalışan kişinin bir adam/gün maliyeti vardır ve plansız ve hakkını ve karşılığını tam vermediğiniz ürünün sonucu da kötü olacak veya ardından çıkan hatalarda destek alamayacaksınız , veya kod kötü ve baştan savma olabilir. Ben bu konuda uyarmayı bir borç biliyorum kendime. Bu tip durumlar çok gördüm. Biz birine bir iş yaptırdık ama bıraktı gitti bize yardımcı olurmusunuz. Kodu inceleyince ne kadar çok hatalı olduğunu görünce şaşırıyorsunuz. Sanki yapan kişi yapmak istememiş ve istemeyerek paraya da ihtiyacı olduğu için işi de kabul etmiş. Bu yüzden şunu unutmayın ne kadar ekmek o kadar köfte gibi özetleyebiliriz konuyu.

Aşağıdaki adam/gün fiyatları işin hakkını vererek 2020 yılında 1 ay sürecek bir mobil uygulama geliştirme fiyatlarıdır.

1 -Mobil Uygulama Tasarım Fiyatları

Tasarım aşamasında yapılacak işin büyüklüğüne kaç ekran olacağına , ne kadar profesyonel olması gerektiğine göre değişkenlik gösterir.

Bir yazılımcıya sadece mockup yani ekran taslak çizimleri vererek bu taslakdan yola çıkaran ui bileşenlerini kullanarak yol almasını isteyebilirsiniz. Bu durumda tasarım maliyetiniz olmayacak ama karşınıza çıkan ekranlarda görsel olarak sizi tatmin etmeyebilir. Burada iş yazılımcının kabiliyetine kalıyor aslında. Çok güzel birşey de ortaya çıkarabilir eğer çok görsel içeren bir uygulama olmayacak ise yeterli birşey yapabilir.

Ancak splash ekranından başlayarak her ekranın nasıl olması gerektiğini çalıştıracak ve ui (kullanıcı arayüzü) ve ux (kullanıcı deneyimi) düşünerek ekranların çalışılmasını ve nihai ürünün ne olacağını bilmek istiyor ve süpriz ile karşılaşmak istemiyorsanız bu durumda tasarım süresi ve adam/gün maliyeti üzerinden giderek bir hesaplama yapabilirsiniz.

Diyelim 10 gün sürecek bir tasarım çalışması var. Maliyet hesaplamasını adam/gün üzerinden yaparsak:

Adam gün ücreti 400 – 800 civarında ve değişkenlik gösterebilir. Biz burada 600 alalım. 600 x 10= 6000 TL bir tasarım maliyeti çıkacaktır.

2 – Mobil Uygulama Yazılım Fiyatları

Yazılım fiyatları da aynı tasarımda olduğu gibi iş yükü ekranlara göre çıkartılarak yapılır.  Burada her ekran düşünülerek kaç gün süreceği çıkartılır. Yazılımcı maliyetleri düşünüldüğünde ve işi hakkını vererek yaptırmak istediğiniz iyi bir yazılımcı için adam/gün ücretleri 600-1000 TL arasında değişkenlik gösterebilir.

Biz burada 800 TL den hesap yapalım.

800 x 20 iş günü = 16.000 TL çıkacaktır. (Android/iOS ayrı yazılıyorsa x2 düşünelim)

Not: Android/ios ayrı olunca maliyet çok çıkıyor. O zaman neden hep Flutter gibi tek platformda mobil uygulama geliştirmiyoruz ? Bu soruyu duyar gibi oldum bir anda. Bu durumda son yazılarımdan Flutter tecrübelerimi lütfen okuyun. Özetle evet Flutter gayet başarılı buldum ama bazı riskleri de yok değil.

3 – Mobil Uygulama Backend/Admin Paneli Yazılım Fiyatları

Şunu unutmamak lazım. Bazı durumlarda işe ait backend olmak zorundadır. Aslında tamamen cihazda çalışacak local bir uygulama yapmıyorsanız bu durumda backend servisleri ve admin paneli ihtiyacınız da olacaktır.

Tüm bunlar içinde 20 gün dersek, adam/gün ücreti de backend yazılımcısı için hemen hemen aynıdır.

Maliyet 800 x 20 iş günü = 16.000 TL çıkacaktır.

4 – Mobil Uygulama Devreye alım ve destek

Mobil uygulama yaptırma işi tamamlandıktan sonra uygulama test edilip yayına alınır. Bu aşamada işimiz bitmiyor. Genelde sizlere tavsiyem anlaşacağınız yazılımcı yada firma ile sözleşme yaparak ilerlemeniz. Çünkü yayına aldıktan sonrada bazı hatalar ve eksikler olduğu ortaya çıkabilir. Ne kadar iyi test yapılıp işi teslim alsanızda store a çıktıktan sonra tüm kullanıcıların farklı cihazlar ile yapacağı kulllanım gibi test yapamazsınız. Sadece en iyi testler buna yaklaşabilir ama aynı olmaz. Bu nedenle sözleşmenizde mutaka en az 6 aylık ücretsiz bakım ve destek isteyebilirsiniz. Yapılacak çalışmaya göre tabi bu 6 ay , 3 ayda olabilir ama 3 ayda az olmamasında fayda vardır. Tavsiyem minumum 6 aydır. Çünkü uygulama 3 ayda belli bir kullanıcı sayısına ulaşamayabilir. Bu tabi yapacağınız tanıtım/reklam ile orantılıdır.

Peki bu süre geçtikten sonra ne olacak? Bu durumda da toplam proje bütçesinin %10 – %20 si arasında değişen yıllık bakım ücretleri devreye girecektir.

Örneğimizde;

Android/iOs ayrı ve backend olmayan proje için maliyet

Tasarım – 6.000 TL
Android. – 16.000 TL
iOS – 16.000 TL
TOPLAM MALİYET: 38.000 TL
YILLIK BAKIM DESTEK(%15) : 5.700 TL.

Android/iOs aynı (Flutter/React Native) ve backend olmayan proje için maliyet

Tasarım – 6.000 TL
Android/iOS. – 16.000 TL
TOPLAM MALİYET: 22.000 TL
YILLIK BAKIM DESTEK(%15) : 3.300 TL.

Bu bakım destek kapsamında sözleşmenizde sonradan çıkabilecek hataların giderilmesi, yeni çıkan kütüphane ve sdk ların projede güncellenmesi, yeni cihaz ve sürümlerin yaratacağı sıkıntıların giderilmesi ve hata raporlarının belli aralıklar ile takibi ve raporlanması olmalıdır. Unutmamalıdır ki bir uygulama yaşayan bir canlı gibidir. Sürekli bakıma ve desteğe ihtiyaç duyar. Bunun sebeplerinden biri de teknolojinin sürekli değişmesi ve eskiden kullanılan bazı kütüphanelerin atıl kalmasıdır. Uygulama geliştirildiği platformda tekrar açılmalı , gerekli güncelleme ve testler tekrar yapılarak store a güncelleme olarak gönderilmelidir. Bu tip güncellemeler ortalama 4-5-6 ayda bir veya uygulamada bazı buglar tespit edilmiş ise onlar ile beraber store a çıkarken yapılabilir.

Özet;

Aşağıdaki fiyatlar işi yapacak ekip/kişi ile anlaşmanıza göre 6 veya 12 taksit şeklinde olabilir. Bu fiyatlar peşin ödenecek gibi sakın düşünmeyin. Hatta peşin ödememek sonuç aldıkça ödeme yapmak kesinlikle daha iyi olacaktır. 12 taksit yapılınca işe başlarken sadece maliyetin 1/12 sini verip işe başlatmanız mümkündür. Tabi şahıs/ekip bu şartları kabul ederse. Etmiyorsa zaten sizde onlar ile çalışmak zorunda değilsiniz. Önemli olan makul bir ödeme planı yapmak ve aşama aşama ilerlemektir.

BACKEND olan durumda:
Android/iOS ayrı
olursa toplam ilk sene masrafımız:

38.000(android/iOS/Tasarım) + 16.000 (Backend) + sonraki 6 aylık bakım (8100/2) 4050 TL = 58.050 TL

Sonraki seneler uygulamada ek özellik yada değişiklik istemezseniz 8100 TL destek ve bakım masrafı olacaktır.

Android/iOS aynı (Flutter/React Native) olursa toplam ilk sene masrafımız:

22.000(android&iOS/Tasarım) + 16.000 (Backend). + sonraki 6 aylık bakım (5700/2) 2850 TL = 40.850 TL

Sonraki seneler uygulamada ek özellik yada değişiklik istemezseniz 5700 TL destek ve bakım masrafı olacaktır.

BACKEND olmayan durumda:
Android/iOS ayrı olursa toplam ilk sene masrafımız:

38.000 + sonraki 6 aylık bakım (5700/2) 2850 TL = 40.850 TL

Sonraki seneler uygulamada ek özellik yada değişiklik istemezseniz 5700 TL destek ve bakım masrafı olacaktır.

Android/iOS aynı (Flutter/React Native) olursa toplam ilk sene masrafımız:

22.000 + sonraki 6 aylık bakım (3300/2) 1650 TL = 23.650 TL

Sonraki seneler uygulamada ek özellik yada değişiklik istemezseniz 3300 TL destek ve bakım masrafı olacaktır.

Gördüğünüz gibi iş biraz karışık. Uygulamanızın backend ihtiyacı var mı? Profesyonel tasarım ihtiyacı var mı? Flutter/React Native gibi tek platform da yazılır mı gibi birçok seçeneğe göre fiyat hesaplanıyor. Bu durumda bir uzmana danışmanız ve onunla ilerlemeniz çok önemli.

Son olarak: Teknik Danışman ?

Aynı zamanda sadece seçim yeterli değil. Yazılımı yapan ekip/şahıs denetlenmeli ve kalite kontrol yapılmalı. Paranızı sokağa atmak istemiyorsanız bir danışmandan proje devam ettiği sürece şu konularda destek alabilirsiniz. Bu kalite ve paranızın boşa gitmemesi için çok önemli.

Danışmanlık kapsamı projenin büyüklüğüne göre değişmekle birlikte kapsam genelde şu şekilde oluyor.

1 – Projeye ait kurgunun kontrolü/şekillendirilmesi ve apple/google politikalarına uygunluğu,
2 – Tasarımınız yok ise projeye uygun tasarımın yapılması,
3 – Tasarım sonrası iş planının belirlenmesi,
4 – İşi yapacak ekibin belirlenmesi,
5 – İşin (yazılan kodun) düzgün olmasının sağlanması,
6 – Kodun ve tüm dökümanların yedeğinin alınması,
7 – Kalite kontrol için iyi bir test sürecinin yürütülmesi,
8 – Yazılım yapan ekibe aşama aşama ödemelerin yapılması,
9 – Kısacası kalite güvencesi ve devam eden süreçte yani teslimat sonrası bu kalitenin korunması.

Bu hizmetler için proje büyüklüğüne göre değişen aylık bir danışmanlık ücreti ile anlaşıp yazılımın kaliteli çıktı üretmesi ve sürekli hatalara karşı denetlenip yazılım ekibi ile koordineli çalışma sağlanması danışmanın temel görevi olacaktır.

Hangi ekip ya da şahış ile çalışıyorsanız çalışın bir proje yönetimi ve proje liderine ihtiyacınız bulunuyor. Hiçbir ekip ya da şahıs bilen biri tarafından denetlenmiyorsa düzgün ve kaliteli bir iş çıkaramayabilir. Bunu garanti etmek için bu danışmanlık şart görünüyor. Yoksa projeniz için üretilen çıktılar ve harcanan para boşa gidebiliyor.

Umarım bu konuda detaylı ve faydalı bir yazı olmuştur. Bir sorunuz olursa buradan yorum bırakabilir veya iletişim bölümünden benimle irtibata geçebilirsiniz.


Flutter ile mobil uygulama geliştirme

Bu yazımda flutter tecrübemden ve bunun sonucunda mobil uygulama geliştirirken flutter kullanmalımıyız bundan bahsedeceğim

Flutter önceki yazılarımda da bahsetmiştim Google’ın mobil uygulama geliştirmek için tek bir platforma mobil uygulamayı geliştirmeye imkan sağlayan platformunun adı diyebiliriz. Flutter aslında google ın çok eskiden beri kullandığı Dart programlama dilini kullanıyor. Flutter hakkında geniş bilgiyi https://flutter.dev/ den edinebilirsiniz.

Şimdi gelelim çok samimi eleştirilerime;

Öncelikle flutter ile mobil uygulama geliştirmek zevkli ve heyecan verici. Özellikle başlarda. Hem android hem ios için aynı anda kod yazmak çok güzel. Bir taşla 2 kuş vurmak tam buna denir. Google’ın yani flutter ın sunduğu şey standart android ve ios da yapılan herşeyi burada da yapabiliyor olmanız.

Sistem aslında dart dosyalarından oluşuyor. İlk olarak çalışan bir main.dart dosyanız var ve bu dosya içinde geliştirmeye başlıyorsunuz. Temel olarak her screen için bir dart dosyası oluşturarak ilerleyebilirsiniz. Tasarımınızı ve business logic dediğimiz iş yapan kodlarınız herşey bu kod içinde bulunabiliyor. Zaman içinde sisteme aşina oldukça tekrarlayan kodlarınızı class mantığında ayrı dart dosyalarınıza koyup oradan çağırıyorsunuz.

Bu yazımda aslında flutter ile nasıl mobil uygulama geliştirilir den daha çok ne gibi sıkıntılar yaşadım ondan bahsetmek istiyorum daha çok. Çünkü flutter development zaten her yerde anlatılıyor. Ancak bu flutter ı kullanmalımıyım o konuda net çok fazla şey yok.

Öncelikle çok dikkatli olmalı ve yazdığınız her kodu hem android hem ios da her aşamada test etmelisiniz. Bazı kütüphaneler birbiri ile çakışabiliyor ve siz android de işin sonuna kadar geldiğinizde ve ios a baktığınızda bir türlü ios derleyemediğiniz bir konumda kendinizi bulabilirsiniz. Bu çok üzücü ki herşeyi baştan neden ios da çalışmıyor diye ele alamanız anlamına geliyor. Yani aslında tek yerde yaz ikisinde de sıkıntısız çalışsın diye bir durum yok malesef. Özellikle pubspec.yaml yani projenin kullandığı kütütphanelerin dosyasına dokunuyorsanız her seferinde fluttter clean yapıp sonra xcode build yapılması için flutter run ı ios sumulator için çalıştırmanızda fayda var. Nedense flutter geliştirenler önce android de yapıp en son ios build almaya çalışıyor ama bence beraber olmalı. İşte bu yüzden de sürekli bir mac de çalışmanız ihtiyacı ortaya çıkıyor.

Tabiki tek developer avantajı bulunsada bence flutter developer ios uygulama geliştirmedende android uygulama geliştirmeden de biraz anlıyor olması lazım. Ios – Xcode da çıkan problemleri çözmesi gerektiği kadar android de çıkabilecek sorunları da çözebiliyor olması lazım. Google, Android Stuidio ile de Flutter kod yazımını destekliyor olması ve Android konusunda öncü olmasından mıdır bilmem ama Android derlemelerinde pek sorun yaşamadım. Ancak Ios konusunda ios kod geliştirme konusunda sıkıntım olmamasına rağmen burada Xcode build lerde çok uzun süre beklemeler, tıkanmalar, donmalar ve hatalar ile karşılaştım. Özellikle pod install süreçlerinde çakışmalar ve kütüphanelerrin uyumsuzlukları gibi sorunlar insanı çileden çıkarıyor.

Son olarak şu görüşe vardım. Basit ve çok kütüphane kullanmadan yapabileceğiniz uygulamalar flutter için biçilmiş kaftan gibi ama gelişmiş ve kritik uygulamalar yapıyorsanız flutter da aldığınız bir hatadan dolayı takılıp kalma riskini göze alırmısınız? Ben açıkcası alamam. Ama yinede şans vermenizi tavsiye ederim. Tam olarak gerçek bir uygulama yapmadan da bunu göremezsiniz. Basit bir projenizde şans verin. Farklı görüşleriniz var ise lütfen yorumlarınızı bekliyorum.

Bu yazımı yazarken hala ios un Launching… ini bekliyorum. Nerde tıkandı yine neden tıkandı belli değil. Yeni sıfır bir proje açıp run dediğinizde ne güzel çalışıyor oysa ki…


Mobil Uygulama Geliştirme Kolaylaşıyor Mu?

Daha önceki bir yazımda Flutter dan bahsetmiştim. Son zamanlarda detaylı inceleme ve birkaç uygulama yapma şansım oldu. Oldukça beğendiğimi ve sıkıntı yaşamadığımı ama öğrenim sürecinin eski yöntemler ile native mobil uygulama geliştirenler için çokda kolay olmadığını belirtmek isterim. Genel olarak tüm dünyada Flutter a karşı güven artıyor. Daha önce bu tarz bir güveni ben React Native e karşı hissetmemiştim. Plugin bağımlılığı ve yaşanan sıkıntılar bizi soğutmuştu ve tamamen ios için XCode da Swift dilince ve Android için Android Stuidio da Java veya Kotlin dillerinde yazıyorduk. Uzun zamandır bu şekilde devam ediyor ancak sıkıntımız işin bu şekilde çok zor olmasıydı. Her projede Android ve Ios u baştan yazmak hem kaynak dolayısı ile maliyet hem de uygulamaların farklı ellerden çıkmasında dolayı bazı farklılıklar oluşmasına sebep oluyordu. Şöyle örnek vereyim Android hızlı gidiyorsa Ios onu bekliyor yada özellik olarak biri diğerini geçebiliyordu.

Son zamanlarda tasarım aracı olarak Figma kullanıyoruz. Şimdi size eskiden veri devam eden tasarımdan canlıya alıma kadar süren bu yöntemi kısaca göstereyim.

Eski Yöntem – Android ve Ios Ayrı

Süreci görüyorsunuz. XCode ve Android Studio aşamasında mobil uygulama yazılımına başlandığında uygulamayı yazanlar yan yana dahi otursa sonuçların ne kadar farklı olduğuna defalarca şahit oldum. Ayrıca her mobil uygulama yazılımcısının eski yaptığı işlerden bir kütüphanesi, işi hızlandırmak için bazı ekran tasarımları, kod yapıları olsada her işte sıfırdan ekranlar uygulamada oluşturuluyor ve uygulama mantığı baştan ele alınıyor.

Flutter’da tek bir ortamda Dart dilinde yazıyorsunuz ve çıktı aynı olmakla kalmıyor üstelik Native e derlediği için performans olarakda bu eski yönteme göre bir eksisi olmuyor.

Şimdi gelin yeni yönteme ve sürecin nasıl işlediğine bakalım.

Yeni Yöntem – Flutter – Android Ios Tek Yerde

Görüyorsunuz bu sefer iş direk aslında maliyet olarak yarıya düşmüş gibi görünüyor.

Benim son zamanda gözlemlediğim aslında böyle değil. Bence yarıdan daha fazla kazanç söz konusu.

Flutter da UI hazırlamak bence mesela XCode StoryBoard da yada Android Studio da layout hazırlamaktan daha kolay. Layout larda değişiklik yapmak ve layout ları kod ile birleştirmekdee Flutter da daha kolay. Dolayısı ile şöyle bir hesap yapabiliriz.

Diyelim bir mobil uygulama yazmanız gerekiyor ve hesap yapmaya başladınız. Kapsamlı bir iş diyelim. 1 ayda yani 20 iş gününde anca ekranları hazırlıyorsunuz. 2 ay yani 40 iş günüde yazılım sürecek. Bu Android ve Ios için genelde aynı çıkar.

Sonuçta

Android toplam 60 iş günü
Ios toplam 60 iş günü.

Genel Maliyet buradan hesaplanır ve 120 birim maliyet çıkar.

Flutter da ise bir baktınız aslında ekranlara 20 değil 15 günde hazırlanabilecek gibi ve kod açısından da 40 iş günü değil 35 iş gününde halledebiliyorsunuz. Bunun daha az zaman aldığını Flutter da biraz ilerledikten sonra göreceksiniz. Belki bundan bile daha az zaman alacak ama ben şimdilik bu şekilde yazdım.

Sonuçta Flutter da

Android+Ios toplam 50 günde işi bitirebiliyoruz.

120 günden 50 güne düşürmek hem maliyet hem zaman açısından uygulama geliştirenlere ve girişim amaçlı fikrini hayata geçirmek isteyenlere kolaylık sağlayacak diye düşünüyorum.

Ben standart iş yapan birçok projede bunu artık tavsiye ediyorum. Ancak bazı projeler vardır ki o projeler direk Swift yada Kotlin/Java değil dahada native C de yazmanız gerekir. C. de yazılan kodu derler Swift veya Java dan çağırırsınız. Bu tip çok ileri seviye bazı projelerde Flutter tavsiye etmeyebilirim. Ama uygulamaların %99 u zaten bu tarz uygulamalar değil. Düşünsenize Google ın tüm mobil uygulamaları çok uzun zamandır Flutter da geliştiriliyor. Arayüz ve performans olarak ne kadar iyi sonuçları var hepimiz kullanıyoruz günlük hayatta bu uygulamaları. Örneğin tüm dünyada 50 milyon kullanıcısı olan Alibaba tüm uygulamalarını Flutter’a geçirdi ise bizler, bu dünya devleri bunu tercih ediyorsa, neden bir şans verip Flutter kullanmayalım. Ben denemeler yapmadan yada gerçek uygulamalar geliştirmden böyle önerilerde bulunmam. O yüzden tüm çalışmalarımı yaptıktan sonra sizlere bunları yazmak istedim.


Mobil uygulama ile beraber web sitesi ve web uygulaması da gerekli mi?

Herkese merhaba,

Bu konu çok sorulduğu için değinmek istedim. Çünkü web uygulamasının artıları olduğu gibi eksileri de var aslında. Bunları bir uygulama yaparken düşünmek lazım.

Önce artılarından bahsedilim ya da neden web tarafına ihtiyacımız var. Yapacağınız uygulamaya göre tabi değişir ama uygulamanın bir tanıtım sayfası, hakkında, gizlilik ilkeleri ve kullanıcı sözleşmesi gibi sayfaların bulunduğu bir web sitesine ihtiyaç duyacağız zaman zaman. Sebebi de bu bilgilerin artık google ve apple tarafından isteniyor olması. Uygulamaların gizlilik ve sözleşme sayfaları yok ise olumlu karşılanmıyor ve mobil reklamlar kısıtlanabiliyor ya da kaldırılabiliyor uygulamanızdan. Apple ve Google bunları kullanıcılarını korumak ve app hakkında ne haklara sahip bilmek için istiyor.

Tanıtım sitesi yapmak dışında mobil uygulamanızın tüm özelliklerini içeren bir web uygulaması yapıp yapmama konusunda kararsız kalıyorsanız şunları düşünerek karar verebilirsiniz.

Mobil uygulamada reklamdan gelir elde etmek istiyorsanız web tarafının olması bu gelirinizi bir miktar düşürebilir. Web sitesine gelen kullanıcıları mobil uygulamayı indirmeye yöneltmek daha iyi bir çözüm olabilir. Ancak büyük çaplı ve ya global bir uygulama yapıyorsanız bu durumda her platformda hizmet sunmak için web uygulaması da düşünebilirsiniz. Çünkü burada amaç reklamdan daha çok kullanıcılara en iyi hizmeti her kanaldan vermek olacaktır.

Web sitesini yapmayı benim tavsiyem sona bırakın. Eğer yapacaksanız işleri fazlandırın. Backend oturduktan ve uygulamalarınız hayata geçtikten sonra da web sitesi yapıp yapmamaya her zaman karar verebilirsiniz.

Bazı durumlarda ise web den başlamak ve android/ios u sona bırakmak tercih sebebi olabiliyor. Bu genelde eldeki imkanlar ile de alakalı tabiki. Önce bir yapı otursun belli şeyleri tecrübe edelim, şu anda elimizde web yazılımcısı mevcut buradan başlayalım gibi konulardan dolayı web öne çıkarak mobil uygulamalar sona bırakılabiliyor.

Ben hangisi önce ya da hangisi sonra buna şu iyidir demek istemiyorum. Bu konuda kesin bir karar yok ancak mobil uygulamalardan başlamak da bazen daha maliyetli olabiliyor. En iyisi yapacağınız işin hedef kitlesine göre hareket etmek tabiki. Kullanıcılar en çok hangi kanaldan gelecek bunu düşünerek bir karar vermek en doğrusu.

Umuyorum bir miktar faydalı olmuştur yazdıklarım. Sorularınız var ise bu konu ile alakalı bu sayfanın altındaki yorum kısmına yazabilirsiniz. Her soruyu en kısa sürede cevaplamaya çalışıyorum.


Native ama hızlı mobil uygulama geliştirme(React vs Flutter)

Merhaba,

Hybrid vs Native arasındaki farkları anlatmıştım. Artık hybrid deki kötü performansı kimse istemiyor bunda hemfikir olduğumuzu sanıyorum. Bu yazımı okumayanlar buradan okuyabilir.
https://ferhatbalaban.com/hybrid-vs-native/

Bu yazımda native mobil uygulama yaparken nasıl daha hızlı yaparız konusuna değineceğim.

Biliyorsunuz native app , yada bilmeyenler için kısaca anlatayım 🙂 , android uygulaması android studio da Java yada Kotlin dilleri ile yazılırken, Ios uygulaması ise Xcode da Swift yada Objective-C ile yazılıyor. Son zamanlarda daha çok swift tercih ediliyor.

Tamam bunda bir sorun yok ama bir uygulamayı yazmak için 1 backend, 1 android 1 ios yazılımcısı gerekiyor ve maliyetler artıyor. Teknoloji artık çok hızlı ilerliyor ve her firmanın, her girişimin bir mobil uygulaması olmaya başladı. Bu nedenden herkes bir arayış içinde.

Native performansı olsun, ancak nasıl daha hızlı hem ios hem android için kod geliştirebilirim?

Herkes bu arayış içinde ve maliyetleri azaltırken aynı zamanda daha hızlı uygulamalar çıkarmak peşinde. Bunun içinde karşımıza ortak bir dilde tek yerde kod yazabileceğiniz ama sonuçta kodu android için ayrı ios için ayrı bir native koda dönüştüren 2 platformdan bahsedeceğim. React Native ve Flutter.

React Native, Facebook tarafından başlatılmış bir proje ve 2015 yılında açık kaynak olarak açılarak herkesin kullanımına sunuldu. O günden bu yana birçok kullanıcı kitlesine ulaştı.

Flutter ise 2017 yılında Google tarafından duyruldu ve kullanımı giderek artıyor.

Şimdi bu 2 mobil uygulama platformunun geleceğinden, farklarından ve biz eğer bir ortak dilde yazıp bu işi yapmak istiyorsak hangisini seçmeliyiz bundan bahsedeceğim.

Öncelikle benim görüşüm şu oldu bugüne kadar. Bu tip ortak dilde yazılan ve sonuçta android ve ios uygulama üreten sistemlere ben biraz uzak durdum ve uzaktan izledim. Mesela react native de yazılmış uygulamalar geldi karşıma ve insanların bazı sorunları kolay çözemediğini ve tıkandığını gördüm. Yeri geldiğinde framework yetersiz kalınca gerçek native ile kod yazma ihtiyaçları ortaya çıktığına şahit oldum. Native de bize basit gelen hataların framework ün kendisinin ayrı bir yapısı olduğundan ve iyi bilinmeyince çözülemediğini gördüm. Ancak dert o kadar büyük ki bu arayış devam ediyor ve bunu gören google da kendisi android i desteklemesine rağmen Flutter ı çıkartarak bu derde bir çözüm sunduğunu göstermiş oldu. Çünkü ios içinde google ın hazırladığı birçok mobil uygulama var ve bu dertden tüm dünya gibi onlarda çekiyor.

Programlama dili olarak React Native, javascript dilini kullanırken (tabi kendine ait bir yapısı ve kuralları var yine frameworkün), Flutter ise Dart programlama dilini kullanıyor. Dart yine Google ın 2011 de geliştirdiği bir dil ve kullanımı çok yaygın değil ama javascript oldukça yaygın. Bu açıdan React Native , Flutter a göre biraz daha avantajlı görünüyor. Buradan React Native e +1 veriyorum.
Sonuç: React 1 – Flutter 0

Teknik altyapı olarak React Native js altyapısına dayandığından ve native e çevirirken biraz köprü vazifesi gören bir sistem üstünden çevirim yapıyor ve kötü performans verebiliyor ancak Flutter kendi içinde hemen hemen tüm native kütüphaneleri barındırdığından native sistem ile haberleşmek için ayrı birşeye ihtiyaç duymuyor. Bu konuda Flutter +1
Sonuç: React 1 – Flutter 1

Kurulum konusunda React Native NPM(Node Package Manager) ile daha rahat kurulurken Flutter bu konuda biraz manuel kurulum aşamasında kalmış. En kısa zamanda iyileştireceklerini düşünsemde React Native bu konuda +1
Sonuç: React 2 Flutter 1

Proje Hazırlığı konusunda Flutter hem android hem ios için daha açıklayıcı bilgilere sahip. Mesela React da IOS dökümantasyonu biraz zayıf. Ayrıca Flutter da yer alan flutter doctor her kontrolü yaparak hazır olup olmadığınızı denetliyor. Bu konuda Flutter +1
Sonuç: React 2 – Flutter 2

UI (Arayüz) ve Development API konusunda ise native bileşenlere sorunsuz ulaşmak çok önemli. React native UI bileşenleri ve bazı native erişim API ı sunsada birçok konuda 3rd party yani dışarıdan eklenen plugin lere ihtiyaç duyuyorsunuz. Herkes kendi en iyi plugin ini yapmaya çalışıyor ya da bulmaya çalışıyor. Başkalarının geliştirdiği bu plugin ler hatalı kalabildiği gibi bir süre sonra destek kesilebiliyor ve projeniz de siz bu plugin i geliştirmediğiniz için zor durumda kalıyor. Flutter da ise kendi içinde ihtiyaç duyacağınız hemen hemen herşey var. Bence bu aslında +3 ve bir yazılımcı için en önemli şey. Hatta benim react native e uzak durmamdaki sebeplerden biri bu. Hadi yinede adil olsun diye bu maddeye de Flutter +1 diyelim.
Sonuç: React 2 – Flutter 3

Geliştirme Hızı konusunda yazılımcı js biliyorsa React Native(RN) de hızlı kod geliştirebiliyor. Js bile çok yazılımcı var ama RN için bence js den daha çok kendi kuralları olduğu için RN bilen kişi aranıyor. Js bilmesi avantaj tabi ama kurallar çok iyi öğrenilmesi lazım. Flutter da ise Dart dilinin öğrenilmesi lazım. Çok zor değil ancak çok yaygın değil. Flutter yaygınlaştıkça bu açığı kapatacak görünüyor ancak şu an için RN +1
Sonuç: React 3 – Flutter 3

Destek konusunda React Native daha önce çıktığı ve daha çok kullanıldığı için daha büyük bir kitle tarafından destekleniyor. Bu konuda yine Flutter geriden gelse de açığı kapatması bekleniyor.
RN +1
Sonuç: React 4 – Flutter 3

Test konusunda React Native de birkaç 3rd party çözüm var ancak Flutter bu konuda kendi içinde çok güzel çözümlere sahip. Cihaza aktarmadan uygulamanızı test tool ları üzerinden deneyip test edebiliyorsunuz.
Flutter +1
Sonuç: React 4 – Flutter 4

Yayına alma konusunda React Native de otomatik çözümler yok ancak Flutter CLI ile build (derleme) ve release (yayına alma) işlemleri yapabildiğiniz gibi Fastlane ile otomatik build ayarları yapabiliyorsunuz. Bunun nasıl yapılacağı güzel anlatılmış. React da da fastlane kullanılabilir ama dökümantasyon konusunda zayıf gibi geldi bana. Sonuç olarak bu konuda Flutter +1
Sonuç: React 4 – Flutter 5

Bakım ve Sürekli Geliştirme konusunda React Native de yine detaylı birşey bulamadık ancak Flutter da bu konuda gerekli bilgiler mevcut ve CLI ile yapılabiliyor. Bu sayede hataları giderip kullanıcılar teste açma , geri bildirim alıp tekrar teste gönderme süreçleri daha hızlı ilerliyor.
Flutter +1
Sonuç: React 4 – Flutter 6

Sonuç olarak iki sisteminde kendi artıları eksiler var. Flutter daha avantajlı görünüyor. Bu konuda ona bir şans vermeyi düşünüyorum. Bazı mobil uygulamaları Flutter ile yapıp denemek lazım. Ancak bu tip framework ler sonuçta Google da geliştirse Facebook da geliştirse bir şekilde bir yerlerde tıkanmanıza yol açabiliyor. İçeride React ya da Flutter bilen yazılımcılar olması gerekiyor. Bu konuya eğildiğinizde ve tüm yazılım dilinizi değiştirmeye başladığınızda sonradan sorun yaşarsanız kötü olabiliyor.

Basit ve sıfırdan yapılacak uygulamalarda bu yöntemlere şans verilirken. Kritik uygulamalar bence hala gerçek ait olduğu yerde yazılmalı. Sonuç olarak hiçbir ara framework gerçek native de yazmak gibi olmayacaktır. Orada ne isterseniz yapacağınız kesinken bu ara tek dilde yazalım framework leri hep bir firmaya birilerine ihtiyaç duyacağınız anlamına geliyor. Örneğin facebook kapanır yada React Native i bırakırsa ne olacak? Çok kritik bir app yapıyorsanız sizde mi bırakacaksınız ya da komple sıfırdan mı yazacaksınız. Ya da Google, Flutter a gerektiği önemi vermez ise?

Ancak şu da var. Şans da vermek lazım. Flutter’ın geleceği parlak gözüküyor. Mesela Alibaba flutter a geçmiş ve çok memnunlar bu video yu izleyebilirsiniz.

Karar vermek zor ancak dediğim gibi basit kurgusu olan bazı app ler Flutter ile yapılabilir. Benim düşüncem bu yönde. Neden bilmem ben React Native e zaten ısınamamıştım sorunlarından dolayı. Şimdi daha heyecanlandım Flutter ile.

Alibaba, Flutter ile 50 milyon üzerindeki kullanıcıya uygulama geliştiriyor.


Mobil uygulamada backend nasıl olmalı?

Herkese merhaba,

Bugün önemli bir konuya değineceğim. Mobil uygulamaların görünmeyen ama en önemli kısmı. Backend.

Backend ne demek ne işe yarar kısaca önce bundan bahsedelim. Daha önceki yazılarımda yönetilebilir mobil uygulamalar ve yönetim paneli nasıl olmalı onlardan bahsetmiştim. Bu yazıyı da okumanızda fayda var. Bkz:
https://ferhatbalaban.com/yonetilebilir-mobil-uygulamalar/

Backend, yönetim paneli ile karıştırılmamalı. Yönetilebilir uygulamaların mutlaka bir backend i vardır. Neden mi? Yönetilebilir olması demek aynı zamanda client app lerin yani ios ve android in ayarları çektiği işlemleri yaptığı bir backend api si vardır. Bu api genelde json formatında çıktılar verir client mobil uygulamalara.

Basit anlamda bir mobil uygulama backend şunlardan oluşur.

1 – Veritabanı

2 – Backend Api

Örneğin en basit anlamda backend api de bulunan bir settings servisi veritabanında bulunan settings tablosundan gerekli verileri çekerek json a dönüştürür ve clientlara iletir.

Örnek json çıktısı:

{
“success”: true,
“error_code”: 0,
“error_message”: “”,
“data”: [
{
“key”: “default_banner_mode”,
“value”: “2”
},
{
“key”: “admob_app_id_ios”,
“value”: “ca-app-pub-34534345345345~4361065035”
},
{
“key”: “admob_banner_id_ios”,
“value”: “ca-app-pub-43353453453/7181055093”
}
]
}

Bu çıktıda ios a gerekli bazı ayarlar gönderilmiştir. Backend istek yapan client a bakarak ve istek yapan user a göre gerekli dönüşleri yapabilir. İşte tüm bu kurgu yani nasıl çıktı vereceği veritabanındaki değerleri nasıl döneceği yada veritabanına nasıl insert/update/delete yapacağına backend api karar verir.

Peki bu backend api nasıl hazırlanıyor?

Öncelikle backend api yi oluşturacağınız yazılım dilini seçiyorsunuz. Bu dotnet, php olabilir. Hangi platformu seçerseniz onunda içinde kullanacağınız mvc framework lerden birini seçmeniz gerekiyor.

Dotnet için:
.net mvc framework
.net mvc core framework

Php için:
Laravel
Symphony
Codeignitor


Tüm bu seçimleri nasıl yapmalısınız ne seçmelisiniz buna bu yazıda girmeyeceğim ancak müşteriniz yada yazılımcılarınız hangi platformu tercih ediyorsa onu seçiyorsunuz genelde. Ancak seçim şansınız varsa ne seçmelisiniz? Buna başka bir yazıda değineceğim çünkü çok uzun olacak o yazıda. Sebebi de bu konu en çok tartışma konusu ve özellikle microsoft ile çalışanların .net kullananların php tercih etmemesi yada linux ile çalışanların .net e çok uzak olması sebebi ile 2 platform arasında şu daha iyidir gibi tartışmalar çok oluyor.

Bu güne kadar hem müşterilerin tercihi sebebi ile hem de bilgi edinmek amacı ile 2 tarafta da oldukça tecrübem oldu. Ağırlıklı olarak php-mysql tercih etsekte .net ve .net core kullandım ve karşılaştırma şansım oldu. Ancak son zamanlarda eğer tercih bize bırakılırsa Php-Laravel tercih ediyoruz. Bunu da başka bir yazıda anlatacağım.

Php kullananlar da genelde php ile tam uyumlu mysql veritabanını kullanmayı seçiyor. Laravel framework ile de backend api yi oluşturarak sağlam bir backend api yi kolayca yapabiliyorlar.

Birçok yerde Laravel nedir nasıl çalışır bilgi alabilirsiniz ancak ben gözlemlediğim en büyük faydaları yazacağım burada.

1 – Güvenlik: Php framework lerde birçok yapı hazır gelir. Bunlar içinde en önemliside bence kullanıcıların authentication yani yetkilendirme işlemleridir. Hangi kullanıcı ne yapabilecek hangi api functionlarını çağırabilecek gibi tüm bunları Laravel altyapısı ile sağlam şekilde kurgulamak çok kolay ve etkili sonuçlar verir.

2 – Migration: Veritabanınızı migration lar ile yönetmek oldukça pratiktir. Özellikle test ortamınız var diyelim burada bir tablo yada kolon oluşturdunuz aynısını prod a da yapmanız lazım hazır olduğunuzda. Ne yapmıştım diye hep test db sini incelemek zorunda kalırsınız. Migration lar ile tüm bunların kaydını tutabilir ve kolayca tek bir komutla bunu prod ortamına aktarabilirsiniz.

3 – MVC: Kullanılan her framework günümüzde bir mvc yapısından oluşur. Yani Model-View-Controller. Modeller veritabanındaki tabloları simgelerken, Controller arayüzünüzle veritabanı arasında tüm kurgularınızın yer aldığı işi yapan kısımdır. View ler ise arayüz yani ekranda görünen kısımdır. Laravel de buna ek olarak bu model, view ve controller ları komutlar ile kolay şekilde oluşturabilir ve hızlı şekilde kod geliştirebilirsiniz.

4 – Performans: Cache yapısı Laravel de iyi kurgulanmış ve kullanması çok kolay. Sürekli veri çekmeniz gerekmeyen tablolarınız illaki olacaktır. Bunları cache yani önbellek ile saatlik , günlük cache ler ile kullanabilir ve performansınızı kolay şekilde yönetebilirsiniz.

5 – Model – Tablo İlişkisi: Modellerimiz ile sql yazmadan php kodları ile select/insert/update/delete işlemlerini kolay şekilde yapabiliriz.

6 – Hazır kütüphaneler: Laravel birçok hazır kütüphane içeriyor ve bunları kolay şekilde projeye import edebiliyorsunuz.

Bunların dışında hiçbir framework siz iyi kurgulamazsanız backend api tam olarak iyi olmaz. Birazda bunlardan bahsedelim.

1 – Loglama: Her işlemi loglamanızda fayda vardır. Bunun için bir log request tablosu yaratabilir ve client ların yaptığı her request i ve dönüşlerinizi loglayabilirsiniz. Laravel burada yine imdadımıza yetişiyor. Middleware dediğimiz katmanda tek bir class ile bu işlemleri yapabiliyorsunuz. Hatta 500 hataları oluştuğunda yada client lara verdiğiniz response ların süreleri belli değerleri aştığında alert ler üretip ilgili kişilere mail ve sms atabilirsiniz burada. Bu sayede bir problem olduğunda anında haberiniz olur.

2 – Kritik kontroller: Backend i yazarken örneğin kritik işlemler var ise bunları çok iyi kontrol etmek ve açık kapılar bırakmamak gerekir. Örneğin bir satınalma işleminiz var ise Apple store yada Google play üzerinden bu satınalma genelde client dan yapılır ancak alınan receipt yani fatura çıktısı diyelim buna bu backend e iletilmeli ve backend tarafında yine google ve apple a sorgulama yapılarakçift kontrol yapılmalıdır. Çünkü backend api nizin yapısını çözen biri mutlaka satınalma yapmış gibi backend inize istek yapabilir. Bundan dolayı bu gibi yerlerde yani kritik yerlerde mutlaka çok fazla detaylı düşünmeli her aşamada kontroller koymalı ve bazende bir hacker gibi düşünmeniz gerekmektedir.

Daha anlatacak tabi çok şey var ama çok da uzun yazmak istemiyorum. Sadece genel bilgi vermek istedim. Başka yazılarda backend ile ilgili farklı detaylara girmeye devam edeceğim. Şimdilik hoşçakalın.