Zenzop: تطبيقات توصيل مبنية للميل الأخير
المشكلة
Zenzop تطبيق توصيل عند الطلب: طعام وبقالة وأدوية واحتياجات يومية تصل إلى بابك. التوصيل ينجح أو يفشل بناءً على أمرين يشعر بهما العميل مباشرة: هل أعرف أين طلبي، وهل وقت الوصول المتوقع صادق. كانت مهمتي بناء التطبيقات التي تحمل الأمرين، من الصفر، لـ iOS و Android.
القرارات
تطبيقان، مهمة واحدة. بنيت كلا الجانبين بالكامل باستخدام React Native: تطبيق Shop الذي يطلب منه العميل، وتطبيق Rider الذي يشغّله شريك التوصيل. شُحن كل منهما إلى iOS و Android، حتى يتمكن فريق صغير من التحرك على المنصات الأربع معًا. يتولى Google Maps تحديد الموقع في الوقت الفعلي وتحسين المسار، وهو العمود الفقري الذي يتشاركه التطبيقان.
تتبع مباشر يصمد مع هاتف مقفل. يقضي هاتف السائق الرحلة كلها في الجيب. بنيت تتبعًا مباشرًا في الخلفية حتى يستمر تدفق موقع السائق حتى عندما لا يكون التطبيق في المقدمة، وعلى iOS ذهبت إلى الأصلي باستخدام Swift لتشغيل Live Activities: حالة الطلب وتقدم السائق على Dynamic Island وشاشة القفل، حتى يرى العميل أين طعامه دون فتح أي شيء. هذا هو الفرق بين تطبيق يفحصه الناس وتطبيق يثق به الناس.
محرك وقت وصول، لا تخمين وقت وصول. وقت الوصول المتوقع في التوصيل وعد. بنيت محركًا يحسبه من مصفوفات المسافة، وحركة المرور الحية، وموقع السائق المباشر، والمتوسطات التاريخية للمسار، بدلًا من تقدير خط مستقيم ساذج. رفع دقة وقت الوصول بنسبة 28%، وهو الرقم الذي يشعر به العميل في كل طلب.
سريع في التحميل، سريع في الإصلاح. أعدت هيكلة التطبيقات لأوقات تحميل أسرع بنسبة 30% ووصلت CodePush، حتى تُشحن تحديثات عبر الأثير مباشرة إلى المستخدمين دون إصدار كامل في المتجر. الإصلاحات والتعديلات تصل في اليوم نفسه، لا في دورة المراجعة التالية.
وثائق حتى لا تصبح الـ API عنق زجاجة. كتبت وثائق Swagger API شاملة حتى تتمكن فرق العميل والباكيند من البناء والاختبار والتكامل بناءً على مصدر حقيقة واحد بدلًا من المعرفة القبلية.
النتيجة
شُحن التطبيقان على iOS و Android: تطبيق عميل وتطبيق سائق بُنيا من لا شيء، مع تتبع مباشر يصمد في الجيب، و iOS Live Activities على Dynamic Island، ومحرك وقت وصول أدق بنسبة 28% من الأساس. الميل الأخير هو الجزء الذي يختبره العميل فعلًا من التوصيل، وهذه التطبيقات بُنيت لتجعله يبدو مُتقنًا.