استخدم تمرين التراجع هذا لتدريب استعادة إصدار معطّل خلال 5 دقائق: ما الذي تلتقطه، ما الذي تتحقق منه، ومن يضغط ماذا أثناء التمرين.

قد يبدو الإصدار سليمًا في الاختبارات، ثم يتعطل خلال الخمس دقائق الأولى من حركة المستخدم الحقيقية. الجزء المخيف عادةً ليس الخطأ نفسه، بل حالة عدم اليقين: ما الذي تغيّر، ما الذي يمكن التراجع عنه بأمان، وهل سيجعل التراجع الأمور أسوأ؟
بعد النشر مباشرة، تكون الأخطاء غالبًا بسيطة ومرئية بوضوح. زر جديد قد يُعطّل الصفحة على الجوال. تغيير في الخلفية قد يرجع شكل بيانات خاطئ فيتعطّل الدفع. تعديل تهيئة صغير قد يكسر تسجيل الدخول أو الإيميلات أو المدفوعات. حتى عندما يكون الإصلاح سهلاً، يزداد الضغط لأن المستخدمين يراقبون وكل دقيقة تبدو مكلفة.
يبدأ الذعر عندما يكون مسار التراجع غير واضح. الناس يسألون نفس الأسئلة في نفس الوقت: هل لدينا لقطة؟ أي نسخة كانت آخر نسخة جيدة؟ إذا رجعنا التطبيق، ماذا عن قاعدة البيانات؟ من يملك صلاحية القيام بذلك؟ عندما لا تكون الإجابات مكتوبة مسبقًا، يضيّع الفريق وقتًا في النقاش بدلًا من استعادة الخدمة.
التخمين أثناء الحادث له تكلفة حقيقية. تخسر وقتًا، يفقد المستخدمون الثقة، والتغييرات المتسرعة قد تسبب انقطاعًا ثانيًا فوق الأول. كما يتم سحب المهندسين في اتجاهات متعددة مرة واحدة: تصحيح الأخطاء، الرسائل، واتخاذ القرار.
التدريب العملي يغيّر المزاج لأنه يستبدل عدم اليقين بذاكرة عضلية. تمرين تراجع جيد ليس مجرد "هل نستطيع إعادة الكود". هو روتين قابل للتكرار: ماذا تلتقط، ماذا تستعيد، ماذا تتحقق منه، ومن المسموح له أن يتصرف. بعد بضعة تدريبات، يتوقف التراجع عن كونه فشلًا ويبدأ أن يكون أداة أمان.
إذا كان إعداد النشر لديك يدعم اللقطات والاستعادة بالفعل (بعض المنصات، بما في ذلك Koder.ai، تبني هذا في سير الإصدار)، تصبح التدريبات أسهل لأن "العودة إلى المعروف الجيد" إجراء عادي، وليس إجراء طارئ مخصص. الهدف في كلتا الحالتين هو نفسه: عند حدوث اللحظة، يجب ألا يقوم أحد بالارتجال.
"الاستعادة خلال 5 دقائق" لا يعني أن كل شيء مثالي مرة أخرى. يعني أنك تستطيع إعادة المستخدمين إلى إصدار يعمل بسرعة، حتى لو كان الإصدار الجديد لا يزال معطلاً.
الخدمة أولًا، الإصلاحات لاحقًا. إذا استطعت استعادة الخدمة سريعًا، تكسب وقتًا هادئًا للعثور على الخطأ الحقيقي.
الساعة تبدأ عندما تتفق: "نحن نتراجع الآن." لا تشمل نقاشًا طويلاً حول ما إذا كانت الأمور قد تتعافى من تلقاء نفسها.
قرّر مشغّل التراجع مسبقًا. مثال: "إذا ظلت أخطاء الدفع فوق X% لمدة 3 دقائق بعد النشر، نتراجع." عند تفعيل المشغل، اتبع السيناريو.
يجب أن تكون "الاستعادة" مجموعة صغيرة من الإشارات التي تُخبرك أن المستخدمين في أمان والنظام مستقر. اجعلها ضيقة وسهلة التحقق:
عندما تبدو هذه الإشارات جيدة، أوقف مؤقت الخمس دقائق. كل شيء آخر يمكن أن ينتظر.
للحفاظ على مصداقية التمرين، ضع صراحة ما الذي لن تفعله خلال مسار الخمس دقائق: تصحيح عميق، تغييرات كود أو نشرات تصحيح سريعة، وأي شيء يتحول إلى عمل هندسي.
التراجع يبدو سريعًا فقط عندما يكون القرار معدًا مسبقًا إلى حد كبير. اختر نهجًا واحدًا يعمل لمعظم الحوادث، ثم درّبه حتى يصبح مملاً.
يجب أن يجيب تمرينك عن أربعة أسئلة:
التراجع هو الأفضل عندما يضر الإصدار الجديد المستخدمين أو البيانات بشكل فعّال، ولديك بالفعل نسخة جيدة للعودة إليها. التصحيح السريع يصلح عندما يكون التأثير صغيرًا والتغيير معزولًا وواثقًا من أنه يمكن ترقيعه بأمان.
قاعدة افتراضية بسيطة تعمل جيدًا: إذا لم يستطع المستخدمون إكمال الإجراء الرئيسي (الدفع، تسجيل الدخول، التسجيل) أو ارتفعت معدلات الأخطاء، تراجع أولًا ثم أصلح بعد ذلك. احتفظ بالتصحيحات السريعة للحالات المزعجة ولكن غير الخطرة.
يجب أن يكون "الهدف" شيئًا يمكن لفريقك اختياره بسرعة، بدون نقاش. معظم الفرق تنتهي بثلاثة أهداف شائعة:
إذا كانت لديك لقطات نشر موثوقة، اجعلها الافتراضية لأنها الأكثر قابلية للتكرار تحت الضغط. احتفظ بمسار التراجع بالتكوين لحالات يكون الكود سليمًا لكن الإعداد خاطئًا.
حدد أيضًا ما الذي يُحتسب كـ "الجيد السابق." يجب أن يكون أحدث إصدار أكمل فحوصات المراقبة ولم يكن لديه حادث نشط، وليس "الذي يتذكره الناس."
لا تنتظر اجتماعًا أثناء الحادث. اكتب المشغلات التي تبدأ التراجع والتزم بها. المشغلات النموذجية تشمل تعطل المسار الرئيسي لأكثر من دقائق قليلة، عبور معدل الأخطاء أو زمن الاستجابة لعتبات متفق عليها، مخاطرة بيانات (كتابات خاطئة، رسوم مكررة)، وأي قلق أمني أو خصوصي أدخله الإصدار.
ثم قرّر من يمكنه الموافقة على التراجع. اختر دورًا واحدًا (قائد الحادث أو الدور المناوب)، بالإضافة إلى بديل. الجميع الآخر يمكنه النصيحة، لكن لا يمكنهم الحجب. عندما يضرب المشغل ويقول المُوافق "تراجع"، ينفّذ الفريق نفس الخطوات في كل مرة.
تمرين التراجع يعمل فقط إذا كنت تستطيع العودة لحالة معروفة جيدة بسرعة. اللقطات ليست "شيئًا جيدًا" فحسب، بل هي الإيصالات التي تثبت ما الذي كان يعمل، ما الذي تغيّر، وكيف تعود.
قبل كل إصدار، تأكد أنك تستطيع الحصول على هذه العناصر بدون البحث في سجلات الدردشة:
سلامة قاعدة البيانات هي الفخ الاعتيادي. تراجع التطبيق السريع لا يفيد إذا كانت قاعدة البيانات الآن تتوقع المخطط الجديد. للتغييرات الخطرة، خطط لإصدار من خطوتين (أضف حقولًا أولًا، وابدأ استخدامهن لاحقًا) حتى يبقى التراجع ممكنًا.
استخدم قاعدة تسمية واحدة في كل مكان، واجعلها قابلة للترتيب:
prod-2026-01-09-1420-v1.8.3-commitA1B2C3
ضمّن البيئة، الطابع الزمني، الإصدار، والـcommit. إذا دعمت أدواتك لقطات في واجهة مستخدم، استخدم نفس قاعدة التسمية هناك حتى يستطيع أي شخص تحديد نقطة الاستعادة الصحيحة أثناء الحادث.
يكون تمرين التراجع أسرع وأهدأ عندما يعرف الجميع نطاق مسؤولياتهم. الهدف ليس "قفز الجميع". هو أن يصدر شخص قرارًا، وشخص ينفّذ، وشخص يتأكد أنه نجح، وشخص يطلع الآخرين.
للفرق الصغيرة والمتوسطة، تعمل هذه الأدوار جيدًا (يمكن لشخص واحد أن يتولى دورين إذا لزم، لكن تجنب الدمج بين المنفّذ والمتحقق أثناء التمرين):
تحديد الصلاحيات يقرر ما إذا كانت هذه الخطة حقيقية أم مجرد وثيقة جميلة. قبل التمرين، اتفق من يسمح له بالتراجع في الإنتاج، وكيف تعمل حالات الطوارئ.
إعداد بسيط:
إذا كنت تستخدم منصة تدعم اللقطات والتراجع (بما في ذلك Koder.ai)، قرر من يمكنه إنشاء اللقطات، ومن يمكنه استعادتها، وأين يُسجَّل هذا الإجراء.
يعمل تمرين التراجع أفضل عندما يبدو كتمرين إطفاء حرائق: نفس الخطوات، نفس الكلمات، نفس الأماكن للنقر. الهدف ليس الكمال. هو أن أي شخص على المناوبة يستطيع استعادة النسخة الجيدة الأخيرة بسرعة، بدون نقاش حول الخيارات.
اختر مشغلًا واضحًا وقلّه بصوت عالٍ عند بدء التمرين. أمثلة: "تدفق الدفع يعيد 500 لأكثر من دقيقة" أو "معدل الأخطاء 5x الطبيعي بعد النشر." قولها بصوت عالٍ يمنع الفريق من الانجراف إلى وضع تصحيح الأخطاء.
احتفظ بقائمة إعداد قصيرة بجانب دليل التشغيل:
ابدأ المؤقت. يعلن شخص واحد المشغل والقرار: "نحن نتراجع الآن."
جمد التغييرات. أوقف النشرات الجديدة وامنع التعديلات غير الضرورية التي قد تغيّر النظام أثناء التراجع.
خذ لقطة أخيرة إن كانت آمنة وسريعة. هذا حماية في حال احتجت لإعادة إنشاء الحالة المعطلة لاحقًا. سمّها بوضوح وانتقل.
نفّذ إجراء التراجع تمامًا كما هو موثق. لا ترتجل. اقرأ رسائل التأكيد بصوت عالٍ حتى يسجل القارئ ما حدث.
أكد أن التراجع اكتمل في مكان موثوق واحد. استخدم شاشة واحدة وإشارة واحدة في كل مرة (عرض تاريخ النشر، تسمية "الإصدار الحالي"، أو مؤشر حالة واضح).
بعد الإجراء فورًا، التقط ما يهم بينما لا يزال طازجًا:
إذا استغرق التراجع أكثر من 5 دقائق، لا تبرر ذلك. جد الخطوة البطيئة، صحّح دليل التشغيل، وأعد التمرين.
التراجع "نجح" فقط عندما يشعر المستخدمون أنه نجح. لست تحاول إثبات أن النسخة القديمة نشرت، بل تُثبت أن الخدمة صالحة للاستخدام ومستقرة.
اجعل التحقق صغيرًا وقابلاً للتكرار. إذا كانت القائمة أطول من خمسة عناصر، سيتخطاها الناس تحت الضغط.
استخدم فحوصات يمكن تشغيلها بسرعة وبنتيجة واضحة:
بعد الفحوص الوظيفية، ألقِ نظرة على أبسط إشارة صحة نظام تثق بها. تريد رؤية معدل الأخطاء ينخفض إلى الطبيعي وزمن الاستجابة يتوقف عن الارتفاع خلال دقيقتين تقريبًا.
وتأكد أيضًا أن الأجزاء الأقل وضوحًا تعمل مرة أخرى. يجب أن تعالج الوظائف الخلفية الطوابير وأن لا تكون متراكمة. فحوصات قاعدة البيانات يجب أن تكون سريعة ومملة: اتصالات مستقرة، لا تراكم أقفال واضح، والتطبيق يستطيع الكتابة.
أخيرًا، اختبر العالم الخارجي حيث يهم. إذا كان ذلك آمنًا، قم باختبار دفع، أكد تسليم الإيميلات، وتأكد من قبول الويب هوكس (أو على الأقل لا تفشل).
اكتب جملة واحدة مسبقًا حتى لا يرتجل أحد:
"تم التراجع. تم التحقق من المسارات الأساسية (تسجيل الدخول + الدفع). معدل الأخطاء والزمن عاد إلى الطبيعي. المراقبة 30 دقيقة. التحديث التالي عند 14:30."
الساعة 10:02 يوم الثلاثاء. يصدر إصدار جديد، وخلال دقيقة يجد شريحة من المستخدمين صعوبة في تسجيل الدخول. بعضهم يرى "جلسة غير صالحة"، وآخرون يرون مؤشر تحميل لا ينتهي. التسجيلات الجديدة لا تزال تعمل، لذا المشكلة قد تُفوت في البداية.
الإشارة الأولى ليست عادة انقطاعًا دراميًا. إنها قفزة هادئة: تذاكر دعم، انخفاض في تسجيلات الدخول الناجحة، ورسائل غاضبة من مستخدمين حقيقيين. المناوبة ترى تنبيهًا: "معدل نجاح تسجيل الدخول انخفض 18% خلال 5 دقائق بعد التحديث"، والدعم ينشر: "3 مستخدمين لا يستطيعون تسجيل الدخول بعد التحديث."
لأن الفريق تدرب، لا يناقشون طويلًا. يؤكدون، يقررون، ويتصرفون.
ما الذي يُرجع: كود التطبيق والتهيئة لخدمات الويب وAPI. ما يبقى كما هو: قاعدة البيانات وبيانات المستخدمين.
إذا شمل الإصدار ترحيل قاعدة بيانات، قاعدة التمرين بسيطة: لا ترجع قاعدة البيانات في مسار الخمس دقائق. اجعل الترحيلات متوافقة مع الإصدارات السابقة، أو توقف واطلب نظرة ثانية قبل النشر.
أثناء التراجع، ينشر قائد الحادث تحديثات قصيرة كل دقيقتين: ماذا يرى المستخدمون، ما الإجراء الجاري، ومتى التحديث التالي. مثال: "نقوم بالتراجع عن الإصدار الأخير لاستعادة تسجيل الدخول. التحديث التالي خلال دقيقتين."
بعد التراجع، يُغلق الحلقة: "تسجيل الدخول عاد للوضع الطبيعي. مراجعة السبب الجذري جارية. سنشارك ما حدث وما غيرناه لمنع التكرار."
يجب أن يشعر تمرين التراجع بالملل. إن لم يكن كذلك، فالتمرين يُكشف عن ثغرات حقيقية: وصول، لقطات مفقودة، أو خطوات موجودة في رأس شخص واحد.
تمرينك يفترض وجود صلاحيات فعلية، لا يستخدمها. يكتشف الناس أثناء الحادث أنهم لا يستطيعون النشر، أو تغيير التهيئة، أو الوصول إلى لوحات التحكم. الحل: نفّذ التمرين بنفس الحسابات والأدوار التي ستستخدمها في الحادث.
اللقطات موجودة لكن ناقصة أو صعب العثور عليها. الفرق تلتقط التطبيق لكن تنسى تغيّرات البيئة، feature flags، أو التوجيه. أو اسم اللقطة لا معنى له. الحل: اجعل إنشاء اللقطة خطوة في الإصدار مع قاعدة تسمية وتحقق أثناء التدريبات أن اللقطة مرئية وقابلة للاستعادة بسرعة.
ترحيلات قاعدة البيانات تجعل التراجع غير آمن. تغيير مخطط غير متوافق يحول التراجع السريع إلى مشكلة بيانات. الحل: فضّل الترحيلات الإضافية. إذا كان تغييرًا قاطعًا محتومًا، خطط لإصلاح أمامي وسلِّم الإصدار بوضوح: “قابل للتراجع: نعم/لا”.
تعلن النجاح قبل التحقق مما يشعر به المستخدمون. النشر قد ينجح، لكن تسجيل الدخول ما يزال معطلاً أو الوظائف الخلفية متوقفة. الحل: اجعل التحقق قصيرًا لكن حقيقيًا وحدد زمنًا له.
التمرين معقد جدًا للتكرار. أدوات كثيرة، فحوصات كثيرة، أصوات كثيرة. الحل: قلّص التمرين إلى صفحة واحدة ومالك واحد. إذا لم يتم من دليل تشغيل واحد وقناة اتصال واحدة، فلن يحدث تحت الضغط.
تمرين التراجع الجيد عادة، لا عرض بطولي. إذا لم تستطع الانتهاء بهدوء، أزل خطوات حتى تستطيع، ثم أضف فقط ما يقلل المخاطرة فعليًا.
يعمل تمرين التراجع أفضل عندما يتبع الجميع نفس قائمة التحقق من صفحة واحدة. ثبّتها حيث ينظر فريقك فعلًا.
نسخة مدمجة يمكنك تشغيلها في أقل من 10 دقائق (بما في ذلك الإعداد والتحقق):
درّب بقدر يكفي ليصبح الخطوات طبيعية. شهريًا هو افتراضي جيد. إذا كان منتجك يتغير يوميًا، درّب كل أسبوعين، لكن اجعل التحقق مركزًا على مسار المستخدم الأعلى.
بعد كل تمرين، حدّث دليل التشغيل في نفس اليوم بينما الذاكرة حية. خزّنه مع ملاحظات الإصدار، وأضف سطرًا مؤرخًا "آخر اختبار" حتى لا يثق أحد بإجراء قديم.
قِس فقط ما يساعدك على التحسن:
إذا بنى فريقك على Koder.ai، عامل اللقطات والتراجع كعادة: سمّ اللقطات باستمرار، درّب الاستعادة في نفس الواجهة التي ستستخدمها في المناوبة، وضمن فحوص نطاق مخصص وتكاملات سريعة في خطوات المتحقق. ذكر هذا في دليل التشغيل ليبقى التمرين متوافقًا مع طريقة النشر الفعلية.
تمرين التراجع هو تجربة عملية حيث تحاكي إصدارًا سيئًا وتتبع روتينًا مكتوبًا لاستعادة آخر نسخة معروفة جيدة.
الهدف ليس "إصلاح الأخطاء بسرعة"—بل جعل استعادة الخدمة قابلة للتكرار وهادئة تحت الضغط.
استخدم مُحرّك قرار مُسبق حتى لا تجادل أثناء الحادث. الافتراضات الشائعة:
إذا وقع المشغل، ارجع أولاً ثم تحقق بعد أن يكون المستخدمون في أمان.
يعني أنه يمكنك إعادة المستخدمين لإصدار يعمل بسرعة — حتى لو كان الإصدار الجديد لا يزال معطلاً.
عمليًا، “تم استعادته” عندما تعود مجموعة صغيرة من الإشارات إلى حالة صحية (العملية الأساسية تعمل، معدل الأخطاء وزمن الاستجابة قرب الطبيعي، لا حلقة أعطال).
اختر هدفًا يمكنك تحديده خلال ثوانٍ وبدون نقاش:
عرف “الجيد السابق” كأحدث إصدار أظهر مراقبة طبيعية ولم يكن لديه حادث نشط — ليس ما يتذكره الناس.
على الأقل، التقط هذه الأمور قبل كل نشر:
تغييرات قاعدة البيانات هي الفخ الشائع — تراجع التطبيق قد لا يكفي إذا لم يكن المخطط متوافقًا.
سمّها بحيث تُرتّب وتُعثر عليها بسرعة، مثال:
prod-YYYY-MM-DD-HHMM-vX.Y.Z-commitABC123ضمّن البيئة + الطابع الزمني + الإصدار + commit. الثبات أهم من التنسيق الدقيق.
تقسيم بسيط وقابل للتكرار للفرق الصغيرة:
تجنّب أن يكون المنفّذ هو نفس المتحقق خلال التمرين؛ تريد فحصًا مستقلًا “هل فعلاً عاد للخدمة؟”.
اجعلها صغيرة وواضحة: أمثلة لفحوصات يجب أن تنجح:
ثم تحقق أن معدل الأخطاء والزمن استقرّا قرب الطبيعي وأن الطوابير/الوظائف الخلفية لا تتكدس.
لا تجعل "تراجع قاعدة البيانات" جزءًا من مسار الـ5 دقائق. بدلاً من ذلك:
هذا يحافظ على مسار التراجع السريع آمنًا ومتوقعًا.
إذا كانت منصتك تدعم اللقطات والاستعادة كجزء من سير الإصدار، تصبح التدريبات أسهل لأن "العودة إلى المعروف الجيد" تصبح إجراءً عاديًا.
في Koder.ai بالتحديد، قرر مسبقًا:
الأداة لا تحل محل الروتين: لا تزال بحاجة لأدوار ومشغلات وقائمة تحقق قصيرة.