Mağazaya rağmen hızlı gitmek: kod gönderimi nereye kadar

Teck'te bir stok hatasını düzeltmek için mağaza incelemesini beklemek istemiyorsun. Ama incelemeyi atlayabildiğin her şey, aynı zamanda test etmeden gönderebildiğin bir şey.

Teck bir perakende uygulaması. Kasiyer tezgahın arkasında telefonla barkod okutuyor, sıra bekleyen müşteri var. Bir hata çıktığında düzeltmenin mağaza incelemesini beklemesi, iki gün boyunca bozuk bir kasa demek.

Bu yüzden dağıtım stratejisi ürünün bir parçası oldu. Ama "her şeyi anında gönderelim" cevabı, göründüğünden tehlikeli.

İki farklı gönderim

Mobil tarafta iki ayrı yol var ve karıştırılıyor.

Birincisi mağaza sürümü: uygulamanın kendisi, yerel modüller, izinler, ikon, sürüm numarası. Bu yol inceleme gerektiriyor ve gerektirmesi doğru — cihaz üzerinde çalışan yerel kodu kimse denetlemeden dağıtmamalı.

İkincisi kod gönderimi: uygulamanın JavaScript paketi. Yerel katman aynı kaldığı sürece, arayüzü ve iş mantığını güncellemek için yeni bir mağaza sürümüne gerek yok. Kullanıcı uygulamayı açıyor, yeni paket iniyor, bir sonraki açılışta devreye giriyor.

İkinci yol Teck için hayat kurtarıcı. Ama sınırı net: yerel bir bağımlılık eklediğin, kamera iznini değiştirdiğin, çalışma zamanı sürümünü yükselttiğin an mağazaya dönüyorsun.

Hızın bedeli

Kod gönderimini kurduktan sonra fark ettiğim şey, asıl riskin teknik olmaması.

İnceleme süreci, istemesen de bir yavaşlatıcı. İki gün beklemek zorunda olduğunda, gönderdiğin şeye daha dikkatli bakıyorsun. O sürtünme kalktığında, "hemen düzeltirim" düşüncesiyle test edilmemiş bir paket gönderme ihtimalin artıyor.

Ve mobilde geri almak, sunucudan daha yavaş. Bozuk paket cihazlara indikten sonra düzeltmeyi göndersen bile, kullanıcının uygulamayı iki kez açması gerekiyor. Tezgahın arkasındaki kasiyer için bu, sırada bekleyen müşteriyle geçen beş dakika.

Dağıtımı hızlandırmak, dikkatli olmayı isteğe bağlı hâle getirir. Sürtünmeyi kaldırırken yerine bir kapı koymak zorundasın.

Kanallar ve kademeli açılış

Bizde bu kapı iki parçalı oldu.

Birincisi ayrı kanallar. Geliştirme, deneme ve üretim ayrı paket akışları. Bir değişiklik önce deneme kanalına gidiyor, orada gerçek cihazda gerçek barkodla çalışıyor, sonra üretime çıkıyor. Aynı kod, farklı hedef kitle.

İkincisi kademeli açılış. Yeni paket bütün cihazlara aynı anda inmiyor. Önce küçük bir kesime, hata oranı izleniyor, sonra genişliyor. Bir mağazada patlayan bir şey, üç mağazada birden patlamıyor.

Sürüm eşleşmesi

En çok baş ağrıtan konu bu oldu: hangi paket hangi mağaza sürümüyle uyumlu.

Kullanıcının telefonunda eski bir mağaza sürümü varken, yeni bir yerel modül bekleyen bir JavaScript paketi inerse uygulama açılışta çöküyor. Ve bu çöküş, en kötü türden — kullanıcı uygulamayı hiç açamıyor, yani düzeltmeyi de indiremiyor.

Çözüm çalışma zamanı sürümünü açıkça yönetmek: her paket hangi yerel katmanla çalışabileceğini beyan ediyor, eşleşmeyen cihaz o paketi hiç almıyor. Sıkıcı bir muhasebe işi ama alternatifi, kullanıcının uygulamayı silip yeniden kurması.

Nereye kadar

Teck için sınır şu oldu: iş mantığı, ekran akışları, doğrulama kuralları, hata mesajları — hepsi kod gönderimiyle. Kamera, barkod okuyucu, yazıcı entegrasyonu, arka plan senkronizasyonu — hepsi mağaza sürümüyle.

Bu ayrım kendiliğinden ortaya çıkmadı; yerel katmanı bilinçli olarak ince tutarak elde edildi. Yerel tarafta ne kadar az şey varsa, o kadar çok şeyi hızlı gönderebiliyorsun.

Ve bu, mobil mimarinin en az konuşulan tarafı: neyi nereye koyduğun, sonradan ne kadar hızlı hareket edebileceğini belirliyor.