Yerel öncelikli (local-first) uygulama nedir? Ne zaman seçilir?
Yerel öncelikli (local-first) uygulama, verisini önce kullanıcının cihazında tutan ve sunucuya ihtiyaç duymadan çalışan uygulamadır. İnternet bağlantısı varsa veri isteğe bağlı olarak eşitlenebilir; ama uygulamanın açılması, kaydetmesi ve göstermesi bağlantıya bağlı değildir. Sonuç: daha hızlı bir arayüz, çevrimdışı çalışma ve varsayılan olarak daha fazla gizlilik.
Bu yazıda local-first yaklaşımın ne olduğunu, bulut öncelikli uygulamalardan farkını ve abonelik takip uygulamamız Tako’yu bu yaklaşımla neden kurduğumuzu anlatıyoruz.
Local-first uygulama nedir, kısaca
Bugün kullandığımız uygulamaların çoğu bulut önceliklidir. Veri bir sunucuda yaşar; telefon ya da tarayıcı yalnızca o veriye bakan bir penceredir. Bir kayıt eklediğinizde istek sunucuya gider, sunucu “tamam” dediğinde ekranda görünür. Bağlantı yoksa uygulama ya bekler ya da hata verir.
Local-first yaklaşım bu sırayı tersine çevirir:
- Verinin asıl kopyası cihazdadır.
- Okuma ve yazma işlemleri doğrudan cihazdaki veritabanında yapılır.
- Sunucu, varsa, yalnızca yedekleme ya da cihazlar arası eşitleme için kullanılır.
- Bağlantının olmaması bir hata durumu değil, olağan bir durumdur.
Kavramın kısa tanımını sözlüğümüzde de bulabilirsiniz.
Çevrimdışı çalışan uygulamadan farkı ne?
Bu iki kavram sık karıştırılır. “Çevrimdışı destekli” bir uygulama genellikle bulut önceliklidir; bağlantı kopunca bir süre idare eder, bağlantı gelince sunucuya yetişir. Local-first uygulamada ise cihaz, kendi başına tam yetkili bir kopyadır.
| Özellik | Bulut öncelikli | Çevrimdışı destekli | Local-first |
|---|---|---|---|
| Verinin asıl yeri | Sunucu | Sunucu | Cihaz |
| Bağlantı yokken | Çalışmaz | Kısıtlı çalışır | Tam çalışır |
| Hesap gereksinimi | Genellikle zorunlu | Genellikle zorunlu | Çoğu zaman gereksiz |
| Arayüz hızı | Ağa bağlı | Kısmen ağa bağlı | Ağdan bağımsız |
| Cihazlar arası paylaşım | Doğal | Doğal | Ek tasarım ister |
Tablonun son satırı önemli. Local-first her şeyin cevabı değil; birazdan sınırlarına da bakacağız.
Local-first’ün avantajları
Hız
Her dokunuşun ağda bir gidiş-dönüşü beklemediği bir arayüz, kullanıcı tarafından hemen fark edilir. Liste anında açılır, kayıt anında görünür. Yavaş bir mobil bağlantıda, asansörde ya da uçakta bile davranış değişmez.
Gizlilik
Veri cihazdan çıkmıyorsa, sızma ihtimali olan merkezi bir veritabanı da yoktur. Kişisel finans, sağlık ya da inanç gibi hassas konularda bu, kullanıcının güvenini kazanmanın en sade yoludur. Ayrıca toplanmayan veri için beyan edilecek, saklanacak ya da korunacak bir şey de kalmaz.
Hesapsız kullanım
Kayıt ekranı, birçok uygulamada kullanıcının kaybedildiği ilk yerdir. Local-first bir uygulama, kullanıcıdan e-posta ya da şifre istemeden ilk açılışta işe başlayabilir. Bu aynı zamanda mağaza süreçlerini de sadeleştirir; hesap yoksa hesap silme akışı, şifre sıfırlama ya da demo hesap gibi yükler de yoktur. Bu konuya App Store’a uygulama yükleme yazımızda değindik.
Daha düşük işletme yükü
Her kullanıcı işlemi bir sunucuya gitmiyorsa, sunucu tarafında ölçeklenmesi, izlenmesi ve korunması gereken altyapı da küçülür. Ürün büyüdükçe artan sabit maliyetler azalır.
Sınırları ve bedeli
Local-first bir mimari, bazı işleri kolaylaştırırken bazılarını zorlaştırır. Karar vermeden önce bunları bilmek gerekir.
Cihazlar arası eşitleme zordur
Kullanıcı aynı veriyi telefonda ve tablette görmek istiyorsa, iki cihazın da birbirinden habersiz değişiklik yapabileceği bir durumu yönetmek gerekir. İki cihazda aynı kayıt farklı biçimde düzenlenirse hangisi geçerli olacak? Bu çakışmaları çözmek için özel teknikler (örneğin CRDT adı verilen, çakışmasız birleşen veri yapıları) kullanılır. Bunlar güçlü ama emek isteyen araçlardır.
Birlikte çalışma ek tasarım ister
Bir ekibin aynı kayıt üzerinde anlık çalıştığı ürünlerde — ortak doküman, sipariş paneli, müşteri yönetimi — merkezi bir kaynak çoğu zaman daha doğru seçimdir. Local-first bu ürünlerde mümkündür, ama basit değildir.
Yedekleme kullanıcının sorumluluğuna kayabilir
Veri yalnızca cihazdaysa, cihaz kaybolduğunda veri de kaybolabilir. Bu yüzden local-first uygulamalarda dışa aktarma ya da isteğe bağlı yedekleme seçeneklerini baştan düşünmek gerekir.
Merkezi rapor yoktur
Verisi sunucuda olmayan bir uygulamada, “kullanıcılar en çok hangi özelliği kullanıyor?” gibi sorulara cevap vermek için ayrı ve gizliliğe saygılı bir ölçüm yaklaşımı tasarlamak gerekir.
Hangi ürünler için doğru seçim?
Kendi deneyimimizde local-first şu durumlarda öne çıkıyor:
- Veri kişiselse. Abonelikler, notlar, alışkanlıklar, günlükler — başkasıyla paylaşılmayan veri.
- Veri hassassa. Finans, sağlık ya da inanç gibi alanlarda veriyi cihazdan çıkarmamak güven inşa eder.
- Kullanım hareket hâlindeyse. Yolda, sahada, bağlantının belirsiz olduğu yerlerde kullanılan uygulamalar.
- Hız ürünün parçasıysa. Saniyelik bir kayıt işinin bekletilmemesi gerekiyorsa.
Şu durumlarda ise genellikle bulut öncelikli bir yapıyı öneriyoruz:
- Birden fazla kişinin aynı veri üzerinde çalıştığı ekip araçları
- Verinin merkezi olarak denetlenmesi ya da raporlanması gereken iş uygulamaları
- Kullanıcının verisinin başka sistemlerle sürekli konuşması gereken ürünler
Bu ikinci gruptaki ürünler çoğu zaman özel yazılım ve SaaS tarafına düşer.
Tako’da local-first: neden ve nasıl?
Tako, dağınık abonelikleri tek bir sakin ekranda toplayan bir abonelik takip uygulaması. Aylık ve yıllık toplam maliyeti gösteriyor, ödeme gününden önce hatırlatma gönderiyor ve farklı para birimlerindeki abonelikleri tek toplamda birleştiriyor.
Burada local-first bir tercih değil, ürünün kendisiydi. Abonelik listesi kişisel finansal bir veri. Kullanıcıdan bu listeyi görmek için bir hesap açmasını, şifre belirlemesini ya da verisini bir sunucuya emanet etmesini istemek, sakin bir araç fikriyle çelişiyordu. Bu yüzden Tako’da:
- Hesap yok. Uygulama ilk açılışta kullanıma hazır.
- Zorunlu bağlantı yok. Veriler cihazda tutuluyor.
- Gizlilik varsayılan. Kullanıcının bir ayarı açması gerekmiyor.
Benzer bir yaklaşımı Mümin 360’ta da görmek mümkün: namaz vakitleri cihazda hesaplanıyor ve Kur’an-ı Kerim tamamen çevrimdışı erişilebilir. İki uygulama farklı alanlarda, ama aynı soruya aynı cevabı veriyor: kullanıcının günlük aracı, internete muhtaç olmamalı.
Local-first bir uygulama planlarken dikkat ettiklerimiz
- Eşitleme gerçekten gerekli mi? İlk sürümde tek cihaz çoğu zaman yeterlidir. Eşitleme sonradan eklenebilecek şekilde veri yapısını baştan düşünüyoruz.
- Veri yapısı göç edebilir mi? Veri cihazda yaşadığı için, yeni bir sürümde yapı değişirse kullanıcının cihazındaki veri güvenle dönüştürülmeli.
- Dışa aktarma var mı? Kullanıcının verisini alıp götürebilmesi hem güven hem de yedek demektir.
- Bildirimler yerelde mi? Hatırlatmalar sunucusuz, cihazdan planlanabilir. Bu da çevrimdışı çalışmanın bir parçasıdır.
- Gizlilik beyanı sade mi? Veri cihazdan çıkmıyorsa, mağaza gizlilik beyanı da kısa kalır. Ancak reklam ya da analitik gibi eklenen her üçüncü taraf parça bu beyanı değiştirir; bunu baştan hesaba katıyoruz.
Sık sorulan sorular
Local-first uygulama hiç internet kullanmaz mı?
Kullanabilir. Yedekleme, cihazlar arası eşitleme, reklam ya da uygulama içi satın alma gibi işler için bağlantı kullanılabilir. Fark şudur: uygulamanın temel işi bağlantıya bağlı değildir.
Telefonumu değiştirirsem verilerim ne olur?
Bu, uygulamanın nasıl tasarlandığına bağlıdır. İyi bir local-first uygulama; dışa aktarma, cihaz yedeği ya da isteğe bağlı eşitleme yoluyla verinin taşınmasına imkân tanır. Planlama aşamasında bu sorunun cevabı netleştirilmelidir.
Local-first, kurumsal bir uygulama için uygun mu?
Sahada çalışan ekipler için toplanan verinin önce cihazda tutulup sonra merkeze gönderilmesi sık kullanılan, sağlam bir yaklaşımdır. Ancak ekibin aynı kayıt üzerinde anlık çalıştığı durumlarda merkezi bir yapı genellikle daha doğrudur.
Local-first geliştirmek daha mı pahalı?
Tek cihazlı bir uygulamada genellikle daha sade, çünkü sunucu tarafı küçülür. Cihazlar arası eşitleme ve çakışma çözümü işin içine girdiğinde ise emek artar. Maliyeti, eşitleme ihtiyacı belirler.
Verisini kullanıcının cihazında tutan, sakin ve hızlı bir uygulama düşünüyorsanız, nasıl çalıştığımızı mobil uygulama geliştirme sayfamızda bulabilir ya da bize yazabilirsiniz.
