Berke Özyaşar
Blog

Offline-first şantiye uygulaması: Şantiyepro'yu nasıl kurguladık

İnternetin olmadığı şantiyelerde çalışan bir uygulama nasıl tasarlanır? 56 modüllü Şantiyepro üzerinden offline-first mimari, senkronizasyon ve test notları.

·
Şantiyepro web sitesi ana sayfası

Şantiyepro, ekibimizle geliştirdiğimiz kendi ürünümüz: inşaat sektörü için bir şantiye yönetim uygulaması. Puantajdan kasa ve cari hesaba, imalat kayıtlarından hakediş, beton takibi ve İSG'ye kadar 56 modülü var; Android ve iOS'ta çalışıyor, masaüstü erişim için bir WebPanel'i de bulunuyor. Ürünün en belirleyici özelliği ise tamamen offline çalışması. Ben Berke Özyaşar; bu yazıda bu kararın nedenlerini ve offline-first bir uygulama geliştirirken dikkat edilmesi gerekenleri anlatıyorum.

Şantiyede internet bir varsayım değil

Ofiste çalışan bir yazılım için internet bağlantısı neredeyse her zaman vardır. Şantiye öyle değil. Bodrum katlarda, betonarme perdelerin arasında, şehir dışındaki arazilerde ya da yeni açılan yerleşim alanlarında mobil veri zayıf ya da hiç yok. Bir formen günün sonunda puantajı girmek istediğinde uygulama "bağlantı hatası" verirse, o kayıt ya kağıda geri döner ya da hiç girilmez. Saha uygulamalarının kullanılmamasının en sık nedenlerinden biri bu.

Bu yüzden Şantiyepro'da temel ilke şu: uygulama internete ihtiyaç duymadan tam çalışır, veriler önce telefonda saklanır. Kayıt girmek, rapor almak ya da geçmişe bakmak için bağlantı gerekmiyor. Rol bazlı bulut senkronizasyonu ise ekibin birlikte çalışması gerektiğinde devreye giriyor.

Offline-first ile "offline desteği" arasındaki fark

Pek çok uygulama "offline destek" sunar: bağlantı koptuğunda son görülen verileri gösterir, belki birkaç işlemi kuyruğa alır. Offline-first ise tersini kabul eder: uygulamanın asıl veri kaynağı cihazdaki yerel veritabanıdır, sunucu bir senkronizasyon hedefidir. Bu fark mimarinin her katmanını etkiler:

  • Ekranlar ağdan değil, yerel veritabanından okur; bu yüzden bağlantı olsun olmasın aynı hızda açılır.
  • Her kayıt cihazda oluşturulduğu anda geçerlidir, sunucunun onayını beklemez.
  • Kayıt kimlikleri sunucuya sorulmadan, cihazda benzersiz olarak üretilmelidir; aksi halde iki cihazda aynı anda oluşturulan kayıtlar çakışır.
  • Puantaj özeti ya da kasa bakiyesi gibi raporlar ve hesaplamalar cihazda yapılabilmelidir.

Senkronizasyon: işin zor kısmı

Verinin telefonda olması tek kişilik bir kullanım için yeterli. Ama şantiye şefi, teknik ofis ve muhasebe aynı veriyi görmek istediğinde senkronizasyon gerekiyor. Offline-first bir sistemde senkronizasyon tasarlarken cevaplanması gereken sorular:

  • Neler gönderilecek? Son senkronizasyondan bu yana değişen kayıtların izlenmesi gerekir. Her değişikliği bir zaman damgası ya da sürüm numarasıyla işaretlemek, yalnızca farkın gönderilmesini sağlar.
  • Çakışma olursa ne olacak? İki kişi aynı kaydı offline iken değiştirirse hangisi geçerli olacak? Pek çok kayıt türünde son yazanın kazanması yeterli. Ama kasa ve cari hareketleri gibi finansal kayıtlarda mevcut kaydı değiştirmek yerine yeni bir hareket eklemek çok daha güvenli; böylece çakışma yerine iki ayrı kayıt oluşur ve bakiye her zaman hareketlerden yeniden hesaplanabilir.
  • Kim neyi görecek? Şantiyepro'da senkronizasyon rol bazlı. Bir formen ile şirket sahibinin göreceği veri aynı değil; her cihaza yalnızca o kullanıcının yetkili olduğu veri inmeli.
  • Silme nasıl yayılacak? Offline bir cihazda silinen kaydın diğer cihazlardan da silinmesi için kaydı fiziksel olarak silmek yerine silindi olarak işaretlemek gerekir.
  • Büyük dosyalar: İmalat kayıtlarındaki fotoğraflar metin verisinden çok daha büyüktür. Bunları ayrı bir kuyrukta, bağlantı uygun olduğunda göndermek, kayıtların senkronizasyonunu bekletmez.

Sahada güven: imza, konum ve zaman

Şantiyede kayıtların ne zaman ve nerede girildiği önemli; bir tutanağın, bir teslim belgesinin ya da bir İSG kontrolünün sonradan tartışma konusu olmaması gerekiyor. Şantiyepro'da dijital imzalar GPS koordinatı ve zaman damgasıyla birlikte kaydediliyor. Offline çalışmanın burada bir inceliği var: konum telefonun GPS'inden internet olmadan da alınabiliyor, ama cihaz saati kullanıcı tarafından değiştirilebilir. Bu tür kayıtlarda cihaz zamanının yanında senkronizasyon sırasındaki sunucu zamanını da tutmak, sonradan yapılacak kontroller için faydalı.

56 modülü yönetilebilir tutmak

Puantaj, kasa, cari hesap, çek takibi, imalat, iç sevkiyat, beton döküm ve demir takibi, satın alma, hakediş, kalite kontrol, İSG... Şantiyepro'nun kapsamı geniş, çünkü bir şantiyede işler birbirinden kopuk değil. Bu genişlikte bir üründe her modülün kendi başına bir uygulama gibi davranması bakımı imkânsız hale getirir. Modüllerin ortak bir altyapıyı paylaşması gerekir: aynı yerel veri katmanı, aynı senkronizasyon mantığı, aynı yetki modeli, aynı raporlama ve dışa aktarma araçları. Böylece yeni bir modül eklemek sıfırdan bir özellik yazmak değil, bu altyapının üzerine yeni bir veri tipi ve ekranlar eklemek oluyor.

Ürünün kullanıcıları da çeşitli: müteahhitler, konut yapanlar, mühendisler, İSG uzmanları, teknikerler ve formenler. Her biri uygulamanın farklı bir bölümünü yoğun kullanıyor. Menüleri ve ana ekranı role ve ihtiyaca göre sade tutmak, 56 modülün kullanıcıyı boğmaması için önemli.

Test: uçak modu en iyi arkadaşınız

Offline-first bir uygulamayı test etmenin en etkili yolu, onu gerçekten bağlantısız kullanmak. Bu tür bir uygulamada test listesinde mutlaka şunlar olmalı:

  • Uçak modunda bir gün boyunca kayıt girip, sonra bağlantıyı açarak senkronizasyonu izlemek
  • İki cihazda aynı kaydı offline değiştirip çakışma davranışını kontrol etmek
  • Senkronizasyon yarıdayken bağlantıyı kesmek ve verinin tutarlı kalıp kalmadığına bakmak
  • Uygulamayı güncelleyip yerel veritabanındaki yapı değişikliklerinin mevcut veriyi bozmadan uygulandığını doğrulamak
  • Eski ve düşük depolamalı cihazlarda, çok sayıda kayıt ve fotoğrafla performansı ölçmek

Son madde özellikle önemli: Şantiyepro Android 8.0 ve üzerini destekliyor ve sahada kullanılan telefonların hepsi yeni model değil.

Verinin kullanıcıda kalması

Offline-first yaklaşımın teknik olmayan bir faydası da var: veriler kullanıcının telefonunda kalıyor. Şantiye kasası, taşeron ödemeleri ve cari hesaplar hassas bilgiler. Şantiyepro'nun ücretsiz planı tek bir şantiyeyle başlamaya imkân veriyor; bulut senkronizasyonu ise ekip birlikte çalışmak istediğinde devreye giriyor. Bu sayede ürün hem tek başına çalışan küçük müteahhitler hem de kalabalık ekipler için kullanılabilir oluyor.

Yayın ve sürüm döngüsü

Şantiyepro Google Play'de ve App Store'da yayında. Ürünü yaklaşık 45 günlük bir sürüm döngüsüyle güncelliyoruz. Offline-first bir uygulamada her sürümün cihazdaki mevcut veriyi güvenle taşıması gerektiği için düzenli ve öngörülebilir bir ritim önemli.

Sonuç

Sahada çalışan insanlar için yazılım geliştiriyorsanız, internet bağlantısını bir varsayım olarak değil, bir bonus olarak görmek gerekiyor. Offline-first mimari daha fazla tasarım emeği istiyor, ama kullanıcıya her koşulda çalışan bir araç veriyor. Benzer bir saha uygulaması ya da SaaS ürünü düşünüyorsanız SaaS ürün geliştirme ve mobil uygulama geliştirme sayfalarında nasıl çalıştığımı bulabilirsiniz.

Diğer yazılar

Uygulamanızı birlikte yayınlayalım.

Ne yapmak istediğinizi birkaç cümleyle anlatın. Aynı gün dönüş yapıyorum.

Gezinmek için ↑ ↓, açmak için Enter, kapatmak için Esc