Modern yazılım geliştirmede varsayılan kabul, cihazın internete bağlı olmasıdır. API'ler gerçek zamanlı çağrılır, veriler talep üzerine getirilir ve çevrimdışı durumlar hata koşulları olarak değerlendirilir. Bu varsayım, temsilcilerin hücresel kapsama alanı olmayan bölgelerdeki mağazaları düzenli olarak ziyaret ettiği, ağ kalitesinin güvenilmez olduğu veya veri planlarının aşırı pahalı olduğu FMCG saha operasyonlarında tamamen çöker. FMCG uygulamalarının bu ortamlarda değer sunması için çevrimdışı yetenek sonradan akla gelen bir düşünce olamaz. Temel olmalıdır.
İlk mühendislik zorluğu yerel veritabanıdır. Saha temsilcisinin tüm müşteri dizinine, ürün kataloğuna, fiyatlandırma kurallarına, bakiyelere, sipariş geçmişine ve rota planına — tümü ağ erişimi olmadan — erişmesi gerekir. Orta ölçekli bir distribütör için bu 20.000 müşteri kaydı, görsel ve fiyatlandırmalı 5.000 SKU ve 100.000 son işlem kaydı anlamına gelebilir. Bu veriler cihazda yerel veritabanında depolanmalı, hızlı sorgulama için dizinlenmeli ve arka plan senkronizasyonu ile güncel tutulmalıdır.
SQLite bu bağlamda cihaz üzerinde depolamanın iş gücüdür. Tam veritabanı sunucusu yükü olmadan karmaşık sorgular için gereken ilişkisel sorgu yeteneklerini sağlar (bu bölgedeki bakiyesi eşiğin üzerindeki tüm müşterileri bul). Modern akıllı telefonlarda, iyi dizinlenmiş SQLite veritabanı FMCG operasyonlarındaki tipik veri hacimlerini milisaniyenin altında sorgu süreleriyle işler. Zorluk sorgu performansı değil veri yönetimidir: yerel veritabanını kayıt sunucusuyla senkronize tutmak.
Delta senkronizasyon, devam eden senkronizasyonu pratik kılan stratejidir. Her senkronizasyonda tüm veri setini indirmek yerine, sistem son başarılı senkronizasyondan bu yana yapılan değişiklikleri takip eder ve yalnızca değiştirilmiş kayıtları aktarır. 20.000 müşterisi olan bir distribütör için tipik günlük delta 50-200 değiştirilmiş kaydı içerebilir: yeni müşteriler, güncellenmiş bakiyeler, fiyat değişiklikleri ve rota değişiklikleri. Bu, senkronizasyonu hızlı ve bant genişliği açısından verimli tutar; ölçülü hücresel bağlantılardaki cihazlar için kritiktir.
Senkronizasyon protokolü çift yönlü veri akışının doğal karmaşıklığını işler. Cihaz sunucudan güncellemeler alır (yeni müşteriler, fiyat değişiklikleri) ve geri güncellemeler gönderir (alınan siparişler, ziyaret kayıtları, arama günlükleri). Aynı kayıt senkronizasyonlar arasında her iki tarafta da değiştirildiğinde çakışma çözümü gereklidir. Sistem, sunucu yetkili veriler (fiyatlandırma, bakiyeler) için son-yazan-kazanır stratejisi ve kullanıcı tarafından oluşturulan veriler (sipariş taslakları, ziyaret notları) için birleştirme stratejisi kullanarak sahada yakalanan hiçbir verinin kaybolmamasını sağlar.
Ön yükleme, yeni cihazı hazırlayan veya veri sıfırlaması sonrası yeniden hazırlayan ilk senkronizasyondur. Bu, ürün görselleri dahil potansiyel olarak yüzlerce megabayt veri aktaran en ağır işlemdir. Sistem bunu devam ettirilebilir parçalı indirmelerle işler, böylece ağ kaybıyla kesintiye uğrayan bir ön yükleme baştan başlamak yerine kaldığı yerden devam edebilir. Ürün görselleri ilk yükleme için sıkıştırılmış çözünürlükte indirilir ve bağlantı mevcut olduğunda tam çözünürlüklü görseller talep üzerine getirilir.
Arka plan senkronizasyon çizelgelemesi, güncelliği pil ve bant genişliği tüketimine karşı dengeler. Sistem, cihaz WiFi'de ve şarjda olduğunda (tam delta senkronizasyon), hücresel mevcut olduğunda ve son senkronizasyon yapılandırılabilir eşiği aştığında (yalnızca bakiyeler ve fiyatlandırmayı kapsayan öncelikli delta senkronizasyon) ve kullanıcı rotasına başlamadan önce açıkça senkronizasyon tetiklediğinde senkronize olur. Her senkronizasyon stratejisi, mevcut koşullar için optimize etmek üzere farklı veri alt kümeleri aktarır.
Çevrimdışı modda sipariş alma dikkatli mühendislik gerektirir. Temsilci bağlantı olmadan sipariş oluşturduğunda, sipariş bekleyen durumla yerel olarak depolanır. Karşılanma için gerekli tüm verileri içerir: müşteri kimliği, miktar ve fiyatlı ürün listesi, ödeme koşulları ve promosyonel koşullar. Bağlantı yeniden sağlandığında, bekleyen siparişler kronolojik sırayla sunucuya yüklenir. Sunucu her siparişi güncel verilere (kredi limitleri, stok durumu) göre doğrular ve onay veya ret döner. Reddedilen siparişler temsilcinin incelemesi ve ayarlaması için cihazda işaretlenir.
Kademeli iyileştirme deseni, uygulamanın çevrimdışıyken tam temel işlevsellik sağlarken bağlantı mevcut olduğunda bundan yararlanmasını sağlar. Sipariş alma, müşteri sorgulama ve rota navigasyonu gibi temel iş akışları tamamen çevrimdışı çalışır. Gerçek zamanlı raf tanıma (sunucu tarafında GPU işleme gerektiren), canlı envanter kontrolleri ve anında ödeme işleme gibi gelişmiş özellikler bağlantı mevcut olduğunda etkinleşir. Arayüz, mevcut bağlantı durumunda hangi özelliklerin kullanılabilir olduğunu açıkça göstererek doğru beklentiler oluşturur.
Görsel işleme FMCG'ye özgü bir zorluktur. Tanıma için raf fotoğrafları genellikle 3-5 megabayttır. Çevrimdışı modda fotoğraflar yakalanır ve yerel olarak depolanır. Bant genişliği mevcut olduğunda işlenmek üzere yüklenir ve sonuçlar cihaza geri senkronize edilir. Sistem fotoğrafları akıllıca kuyruğa alır, son çekimleri önceliklendirir ve bant genişliği kısıtlı olduğunda yüklemeleri duraklatır. Bu, birikmiş raf fotoğraflarının temsilcinin tüm veri kotasını tüketmesini önler.
Çevrimdışı öncelikli uygulamaları test etmek, geleneksel bağlantılı yazılımdan farklı bir yaklaşım gerektirir. Test matrisi bağlantı durumları arasındaki geçişleri kapsamalıdır: çevrimdışı başlama, iş akışı ortasında çevrimiçi olma, senkronizasyon sırasında bağlantı kaybetme ve eski yerel verilerle bağlantı yeniden kazanma. Otomatik testler bu koşulları sistematik olarak simüle eder, ancak en değerli test, uygulamanın gerçek koşullar altında kendini kanıtlaması gereken düşük bağlantılı ortamlarda yapılan saha denemelerinden gelir.
FMCG saha operasyonlarının en aktif olduğu gelişmekte olan pazarlar — Güneydoğu Asya, Sahra Altı Afrika, Güney Asya ve Latin Amerika — tam olarak bağlantının en güvenilmez olduğu pazarlardır. Çevrimdışı öncelikli geliştirmek bu pazarlar için premium özellik değildir. Saha ekipleri tarafından günlük kullanılması beklenen herhangi bir uygulama için ön koşuldur. Mühendislik yatırımı önemlidir, ancak alternatif tam da ne zaman ve nerede ihtiyaç duyulduğunda başarısız olan yazılım geliştirmektir.