التعامل مع الاستثناءات الواقعية يبدأ بأمثلة حقيقية. تعلّم كيف تجمع الموافقات المتأخرة، والبيانات المفقودة، والحالات الخاصة قبل كتابة منطق التطبيق.

مخطط سير نظيف يبدو جيدًا لأنه يفترض أن الناس يتصرفون بالترتيب الصحيح، ويقدّمون البيانات المطلوبة وفي الوقت المناسب. العمل الحقيقي نادرًا ما يكون هكذا. قد يقدم أحدهم نموذجًا متأخرًا، أو يكون المدير مريضًا، أو يترك العميل تفصيلًا مهمًا، أو يحتاج الدفع إلى موافقة خاصة لم يذكرها أحد في البداية.
لهذا السبب يمكن أن تبدو النسخة الأولى من التطبيق مكتملة في عرض توضيحي ثم تبدأ في التعطل فور استخدام الناس الحقيقيين له. المسار السعيد يعمل. العمل اليومي لا يبقى على المسار السعيد طويلاً.
أأمن نقطة بداية هي افتراض أن النسخة النظيفة غير مكتملة. طلب بسيط يمكن أن يتغير سريعًا عندما يخطئ تفصيل صغير. حقل واحد مفقود، أو عميل غير عادي، أو موافقة متأخرة يمكن أن توقف العملية بأكملها وتترك الأشخاص يتساءلون ماذا يفعلون بعد ذلك.
الأخطاء الشائعة عادة بسيطة:
هذا أكثر من إزعاج بسيط. حالة غريبة واحدة يمكن أن تحجب كل ما خلفها. يبدأ الموظفون باستخدام حلول بديلة عبر الدردشة أو الجداول أو البريد الإلكتروني، ويتوقف التطبيق عن كونه المكان الوحيد للعمل.
هدف أفضل هو بسيط: اجمع الاستثناءات قبل أن تكتب القواعد. اسأل ماذا يحصل عند غياب بيانات، عند التأخر في التوقيت، وعندما لا يناسب الطلب المسار القياسي. تلك الأمثلة الفوضوية ليست تفاصيل هامشية. هي ما يقرر ما إذا كان تطبيقك سيعمل في الواقع.
المشاكل الأولى التي يجب التقاطها ليست حالات نادرة. هي الأحداث الفوضوية التي تحدث كل أسبوع وتكسر سير العمل النظيف بهدوء. إذا أردت نسخة أولى أقوى، فابحث عن الأماكن التي يتأخر فيها العمل أو يتعطل أو تُنسخ إليه مهمة شخص لأن النظام لا يستطيع أن يقرر.
الموافقات المتأخرة عادة تكون في أعلى القائمة. يوافق المدير على طلب بعد المهلة النهائية، بعد إغلاق كشوف الرواتب، أو بعد أن تم إعادة طلب المخزون. يحتاج التطبيق إلى قاعدة لذلك اللحظة. هل يعيد فتح الطلب؟ هل ينشئ طلبًا جديدًا؟ هل يخطر المالية؟ أم يرسله للمراجعة بدلًا من التظاهر بأن الموافقة وصلت في الوقت المناسب؟
البيانات المفقودة هي عائق شائع آخر. قد يُقدَّم نموذج بدون رقم ضريبي، أو إيصال، أو تاريخ تسليم، أو جهة اتصال للعميل. إذا كان الخطوة التالية تعتمد على ذلك الحقل، فلا ينبغي أن يفشل التدفق بخطأ غامض. يجب أن يتوقف، ويعرض ما هو مفقود، ويجعل إصلاحه سهلًا.
الحالات الخاصة مهمة لأنها تكشف حدود المسار العادي. ربما معظم المبالغ المستردة بسيطة، لكن المبالغ فوق حد معين تحتاج إثباتًا إضافيًا. ربما يتبع قسم واحد قاعدة موافقة مختلفة. هذه الحالات لا تحتاج تطبيقًا جديدًا بالكامل، لكنها تحتاج تفرعات واضحة.
مرور أول مفيد هو البحث عن أربعة أنماط: الموافقات التي تصل متأخرة لتتبع المسار الأصلي، التفاصيل المفقودة التي تحجب الإجراء التالي، الطلبات غير العادية التي تحتاج قاعدة مختلفة، ولحظات يجب أن يتوقف فيها النظام ويطلب تدخل إنساني.
المراجعة البشرية ليست فشلًا. غالبًا ما تكون الخيار الأكثر أمانًا عندما يرى التطبيق بيانات متضاربة أو استثناءً في السياسة أو إجراء مكلفًا. قائمة مراجعة متوقفة عادة أفضل من خطأ صامت.
إذا وجدت هذه الاستثناءات مبكرًا، ستشعر النسخة الأولى بأنها أكثر واقعية وأقل هشاشة.
أسرع طريقة لتفويت استثناء سيء هي سؤال المدير الذي صمم العملية فقط. المشاكل الحقيقية عادة تقيم مع الأشخاص الذين يقومون بالعمل كل يوم. هم يعرفون أي الخطوات تُهمل، أي الحقول غالبًا ما تكون فارغة، وأي الموافقات تحدث متأخرة أو خارجة عن النظام.
ابدأ بمحادثات قصيرة. اطلب من الناس أن يشرحوا حالة عادية، ثم اسأل ماذا تغيّر في المرة الأخيرة التي تعثرت فيها الأمور. لا تطلب آراء عامة عن العملية. اطلب قصصًا حقيقية: ماذا حدث، ما الذي كان مفقودًا، من أصلح الأمر، وماذا اضطروا لفعل يدويًا.
العمل القديم مصدر جيد أيضًا. رسائل البريد الإلكتروني القديمة، تذاكر الدعم، رسائل الدردشة، وملاحظات نقل المهام غالبًا ما تُظهر اللحظة التي انكسر فيها المسار النظيف. هذه السجلات مفيدة لأنها تلتقط لغة الناس عند وقوع خطأ، وليس النسخة المصقولة من وثيقة العملية.
تحقق أيضًا من الأدوات الجانبية التي يستخدمها الناس. إذا احتفظ أحدهم بجدول بيانات، أو قائمة على ملصقات لاصقة، أو مستند خاص لتتبع الاستثناءات، فهذا إشارة قوية. الحلول المؤقتة موجودة لسبب. غالبًا ما تكشف عن قواعد سيحتاجها تطبيقك من اليوم الأول.
أفضل المصادر لمراجعتها أولًا عادة تكون الأنظمة الظلية مثل الجداول وقوائم التحقق الشخصية، سلاسل البريد الإلكتروني حيث يطلب الناس تفاصيل مفقودة أو موافقات يدوية، محادثات الدردشة حول الإصلاحات العاجلة، تذاكر الدعم التي تذكر التأخيرات أو الإدخالات المرفوضة، وآخر الحالات التي فشلت مع الجدول الزمني الكامل.
المصدر الأخير أهم مما يبدو. الحالات الفاشلة الأخيرة غالبًا أفضل من الملخصات القديمة لأنها تُظهر سلسلة الأحداث بالضبط. قد تجد أن الموافقة وصلت بعد الموعد النهائي، أو أن العميل لم يرسل ملفًا مطلوبًا، أو أن شخصًا استخدم قاعدة خاصة لم يوثقها أحد.
إذا كنت ترسم نسخة أولى في منشئ قائم على الدردشة، اجمع هذه الأمثلة قبل أن تولد المنطق. من الأسهل بكثير بناء تدفقات أكثر أمانًا عندما تكون الحالات الفوضوية مرئية مبكرًا.
ابدأ بقصة حقيقية واحدة، لا بنظرية. اكتبها كما يشرحها شخص لزميل: ماذا كانوا يحاولون فعل، ما الذي انحرف، من تدخل، وكيف انتهى الأمر.
قصة فوضوية مثل "تعطّل الطلب لأن المدير كان في إجازة، ثم وافقت المالية لاحقًا مع حقل مفقود" أكثر فائدة من مخطط انسيابي نظيف. تُظهر نقاط الانكسار التي تفشل فيها التطبيقات عادة.
لكل حالة، استخرج أربعة حقائق: ماذا حدث، من اتخذ القرار، لماذا اتخذه، وماذا يجب أن يفعل التطبيق بعد ذلك.
هذا يبقي التركيز على السلوك، وليس فقط الشاشات. الهدف ليس تغطية كل حالة غريبة في اليوم الأول. الهدف هو اكتشاف الأنماط المتكررة.
بمجرد أن تجمع عدة قصص، قسّم تلك التي تبدو متشابهة. سلات بسيطة عادة تظهر من تلقاء نفسها: موافقة متأخرة، معلومات مفقودة، الشخص الخطأ طُلب منه، طلب مكرر، أو موافقة خاصة فوق حد معين.
ثم حوّل كل سلة إلى أبسط قاعدة تعمل. هذه القاعدة لا تحتاج دائمًا لأتمتة كاملة. أحيانًا تكون أفضل قاعدة تحذيرًا، أو إيقافًا مؤقتًا، أو خطوة مراجعة يدوية.
مثلاً، إذا كانت الموافقة متأخرة لأن المسؤول في إجازة، قد يرسل التطبيق تذكيرًا بعد 24 ساعة، يعيد التعيين بعد 48 ساعة، أو يطلب من مُوافق بديل المراجعة. إذا كان حقل مهم مفقودًا، الخيار الأفضل قد يكون حفظ كمسودة يُعاد فتحها بدلًا من إيقاف صارم. هذا يبقي العملية متحركة دون إخفاء المشكلة.
إذا كنت تبني في أداة قائمة على الدردشة مثل Koder.ai، الأمثلة بلغة بسيطة تساعد كثيرًا. تعطي النظام شيئًا ملموسًا للعمل منه، فتكون أول نسخة من سير العمل مبنية على قرارات حقيقية بدلًا من تخمين منظم لكنه غير واقعي.
قبل أن تقفل المنطق، شغّل حالتين أو ثلاثة من القصص الحقيقية عبره. اطرح أسئلة بسيطة. هل يصل التدفق إلى نفس النتيجة التي حدثت فعليًا؟ هل يفشل بأمان عندما تكون المعلومات مفقودة؟ هل يعرف متى يتوقف ويطلب إنسانًا؟
إذا كان الجواب لا، لا تضف تعقيدًا فورًا. أعد كتابة القاعدة بكلمات أبسط أولًا. القواعد الواضحة عادة تؤدي إلى تدفقات عمل أفضل من قواعد ذكية لا يستطيع أحد شرحها.
ابدأ بالنسخة النظيفة. موظف يقدم مصروف تاكسي بقيمة 42$ بعد زيارة عميل. يضيف التاريخ، المبلغ، اسم المشروع، والإيصال. المدير يوافق قبل إغلاق كشوف الرواتب، والمالية تضمّه في دورة التعويض التالية.
هذا المسار سهل النمذجة، لكنه ليس كل المهمة.
أضف الآن الاستثناء الأول. الموظف قدم الطلب في الوقت، لكن المدير وافق بعد يوم من إغلاق الرواتب. يجب ألا يدفع التطبيق بالأمر كأن شيئًا لم يكن، ويجب ألا يرفض المطالبة أيضًا.
استجابة أفضل هي نقل الطلب إلى حالة واضحة مثل "موافق بعد الإغلاق". من هناك، يمكن للتطبيق تعليق الدفع إلى دورة الرواتب التالية، إخطار الموظف بتاريخ الصرف الجديد، وتوجيه الحالة إلى المالية فقط إذا سمحت السياسة بدفع خارج الدورة.
هذا يعني أن التطبيق يحتاج لتخزين أكثر من تاريخ واحد. يجب أن يتتبع متى قُدم المصروف، متى تمت الموافقة، وأي إغلاق فُوِّت.
أضف الآن الاستثناء الثاني. الموظف نسي الإيصال، فوافق المدير بالاعتماد على الشرح فقط. بعد يومين وصل الإيصال.
إذا بُني التطبيق جيدًا، لا يختفي الطلب أو يعاد من البداية. ينتقل إلى حالة "في انتظار الإيصال"، يرسل تذكيرًا، ويظل مفتوحًا. عندما يُحمّل الإيصال لاحقًا، يعيد التطبيق فتح الحالة ويرسلها فقط إلى الخطوة التي لا تزال تحتاج إجراءً.
قد يمر هذا التدفق بعدة حالات بسيطة: مقدّم، في انتظار موافقة المدير، موافق بعد الإغلاق، معلق لانتظار الإيصال، وأعيد فتحه لمراجعة المالية.
هذا ما يبدو عليه التعامل مع الاستثناءات الواقعية عمليًا. التطبيق لا يقرر نعم أو لا فقط. يقرر متى يحجز، يوجّه، أو يعيد فتح حالة دون فقدان السياق أو التواريخ أو المسؤولية.
المعلومات المفقودة أمر طبيعي، ليس حالة نادرة. إذا افترض تطبيقك أن كل نموذج سيُملأ بالكامل من المحاولة الأولى، فسيتعطل التدفق بمجرد أن يصادف المستخدم فجوة. قاعدة أفضل بسيطة: اطلب فقط ما تحتاجه للخطوة التالية.
خطط خطوة بخطوة. اسأل ما الذي يجب أن يعرفه التطبيق الآن، وما الذي يمكن تأجيله لاحقًا. قد يحتاج طلب مصروف المبلغ واسم الموظف قبل الإرسال، لكن قد يحتاج الإيصال النهائي قبل الدفع. هذا يحافظ على تقدم العمل دون التخلي عن الرقابة.
يجب أن يتمكن المستخدمون من حفظ التقدّم حتى لو كانت بعض التفاصيل مفقودة. مسودة يمكن إعادة فتحها أفضل بكثير من نموذج يضطر الناس لإعادة ملؤه من البداية. هذا مهم أكثر عندما تعتمد المعلومات المفقودة على شخص آخر، مثل مدير أو مورد أو فريق المالية.
الحالات الواضحة تساعد الجميع على فهم ما يحدث. اجعلها قصيرة وسهلة المسح: في انتظار معلومات، محجوز بسبب مستند مفقود، بحاجة لمراجعة، جاهز للموافقة، أو أُعيد لإجراء تحديث.
تؤدي هذه التسميات وظيفتين في آنٍ واحد. تُظهر الحالة الحالية، وتخبر المستخدم نوع المشكلة التي تحتاج انتباهاً.
كل عنصر مفقود يحتاج أيضًا إلى مالك. إذا كان رقم ضريبي مفقودًا، من يضيفه؟ إذا كان الإيصال غير واضح، من يستبدله؟ إذا كانت ملاحظة الموافقة غائبة، من يمكنه توفيرها؟ عندما لا يمتلك أحد إصلاح المشكلة، تبقى السجلات في حالة تعطل.
مثال بسيط يوضح ذلك. تخيل أن موظفًا قدم مصروف سفر بدون إيصال لأن الفندق لم يرسله بعد. يجب أن يسمح التطبيق لهم بالحفظ والإرسال مع حالة مثل "في انتظار الإيصال". يمكن للمالية مراجعة الباقي، يعرف الموظف ما المفقود، ولا يختفي الطلب إلى خطأ صامت.
الأتمتة تعمل بشكل أفضل عندما يؤدي نفس المدخل إلى نفس النتيجة في معظم الحالات. إذا يتبع الطلب نمطًا واضحًا، امنحه قاعدة. إذا كانت الإجابة تعتمد على سياق مفقود أو توقيت غير عادي أو حكم شخصي، أرسله إلى إنسان.
هذا الانقسام مهم. يجب أن يتحرك التطبيق بسرعة في الحالات العادية ويتباطأ في غير الواضحة. قرار آلي خاطئ يمكن أن يخلق عملًا أكثر من مراجعة يدوية قصيرة.
اختبار بسيط يساعد: هل سيأخذ شخصان مختلفان نفس القرار من نفس البيانات؟ إذا كان الجواب نعم، أتمتة. إن لم يكن، احتفظ بإنسان في الحلقة.
مرشحو الأتمتة الجيدون هم النماذج المكتملة بكل الحقول المطلوبة، الطلبات المتطابقة مع حدود السياسة، الإجراءات المتكررة ذات المواعيد النهائية الواضحة، والموافقات التي تتبع دائمًا نفس المسار.
بعض الحالات لا يجب التخمين فيها مطلقًا: التفاصيل الأساسية مفقودة، الطلب يكسر نمطًا طبيعيًا، تتعارض قاعدتان، التكلفة أو المخاطرة عالية، أو يحتاج شخص لشرح استثناء.
تخيل طلب سفر بلا وجهة، وتاريخ عاجل، وتكلفة أعلى من الحد المعتاد. يجب ألا يحاول التطبيق أن يكون ذكيًا. عليه وسم الحالة، إيقاف التدفق، وتوجيهها إلى الشخص المناسب.
ومهم بنفس القدر، احتفظ بسبب كل استثناء مرئيًا. عرض لماذا توقف التطبيق، أي قاعدة فُعّلت، وما المعلومات المطلوبة. هذا يجعل المراجعات أسرع ويساعد الفريق على تحسين سير العمل لاحقًا.
الكثير من مشاريع التطبيقات تفشل قبل كتابة أي منطق. الفريق يرسم مسارًا نظيفًا، يفترض أن الناس سيتبعه، ويتجاهل الحالات الغريبة التي تحدث أسبوعيًا. هكذا تتحول التدفقات البسيطة إلى تذاكر دعم، تصحيحات يدوية، ومستخدمين محيرين.
الخطأ الأول هو التصميم بناءً على افتراضات فقط. إذا خمَّنت كيف تعمل الموافقات أو الحقول المفقودة أو الاستثناءات، ستفوت الحالات الأكثر أهمية. يوافق المدير متأخرًا، يصل سجل عميل ناقص، أو يحتاج الدفع مراجعة إضافية لأن المبلغ غير عادي.
خطأ آخر هو إخفاء مواقف مختلفة داخل قاعدة غامضة واحدة. قاعدة مثل "أرسل للإدارة إذا بدا شيء خاطئًا" تبدو مرنة، لكنها تخلق مشاكل جديدة. من هو المسؤول؟ ما الذي يُعد خطأ؟ ماذا يحدث إذا لم يرد أحد لمدة يومين؟
يضُرُّ المستخدمين أيضًا عندما يجبر التطبيق على إعادة البدء بالكامل. إذا كان مستند واحد مفقود أو رفض مُوافق خطوة، لا يجب أن يعيد الناس إدخال كل شيء من البداية. تدفق أفضل يحفظ التقدّم، يعلّم بالمشكلة بوضوح، ويتيح للمستخدم إصلاح الجزء المحجوز فقط.
مشكلات أخرى سهلة التغافل عنها لأنها تبدو ثانوية: التوقيت، الملكية، والسجل التاريخي. ليست ثانوية. إذا وصلت الموافقة بعد المهلة، يجب أن يعرف التطبيق ما إذا كان يقبلها أو يُصعّدها أو يعيد فتح الطلب. إذا تعطل طلب، يجب أن يتملك شخص الإجراء التالي. إذا تغيرت الحالة، يحتاج الناس لرؤية من غيّرها ولماذا.
سجل التدقيق مهم لأسباب بسيطة. يحتاج الناس لمعرفة من غيّر قيمة، من وافق على استثناء، ومتى تحركت الحالة.
قبل أن تحول سير العمل إلى قواعد، توقف وتحقق هل مدخلاتك تتطابق مع العمل الحقيقي. المخططات النظيفة غالبًا ما تفوت الحالات الغريبة التي تسبب تأخيرات أو ارتباك أو تصحيحات يدوية لاحقًا.
مراجعة سريعة تساعد:
حالة اختبار بسيطة غالبًا تكشف المنطق الضعيف. تخيل طلب شراء قُدم بدون اسم المورد، ثم وافق عليه قائد القسم متأخرًا. هل يمكن لمقدّم الطلب إصلاح الحقل المفقود؟ هل يعرف التطبيق ما إذا كان ينبغي إعادة فتح الطلب أو المتابعة أو طلب مراجعة من المالية؟
هذا هو مستوى التفاصيل الذي تريد قبل توليد المنطق. القصص القصيرة والحقيقية تقود إلى إصدارات أولى أكثر أمانًا وأقل مفاجآت عند بدء استخدام الناس للتطبيق.
ابدأ صغيرًا. اختر سير عمل واحد، لا كل الأعمال. ثم اجمع خمس حالات استثناء حقيقية من الأشخاص الذين يقومون بالعمل يوميًا، مثل موافقة متأخرة، إيصال مفقود، مدير في إجازة، طلب مكرر، أو حالة تحتاج تدخل المالية.
ابنِ النسخة الأولى حول ذلك التدفق الضيق وتلك الحالات الخمس. اجعل القواعد سهلة القراءة. إذا كان الطلب غير مكتمل، أظهر ما المفقود. إذا كانت الموافقة متأخرة، قرر متى تذكّر، متى تصعِّد، ومتى توقف. إذا لا يتطابق الطلب مع المسار الطبيعي، بيّن من يحتاج للمراجعة.
ثم اختبرها مع الأشخاص المعنيين: مقدّم الطلب، أول مُوافق، الشخص الذي يصلح الاستثناءات، المدير الذي يستلم التصعيدات، وأي شخص يرى النتيجة النهائية.
راقب أين يتوقفون أو يخمنون أو يطلبون مساعدة. تلك اللحظات أهم من ما سار بسلاسة. إذا توقف ثلاثة أشخاص عند نفس الخطوة، فالقواعد أو الشاشة بحاجة لتغيير.
قد يعمل تطبيق مصروفات جيدًا حتى يقدم أحدهم إيصال تاكسي بدون كود المشروع أو يرسله بعد الإغلاق الشهري. نسختك الأولى لا تحتاج حل كل الحالات النادرة. تحتاج أن تلتقط الاستثناءات الشائعة، تشرح الإجراء التالي، وتترك مسارًا واضحًا للمراجعة البشرية.
ثم عدّل القواعد بجولات صغيرة. احذف الخطوات التي تخلق التباسًا. أضف حقولًا فقط عندما تمنع مشاكل متكررة. غيّر توقيت الموافقات إذا كانت التذكيرات مبكرة جدًا أو متأخرة جدًا. التعديلات الصغيرة بعد اختبار حقيقي عادة أفضل من إضافة منطق حالات خاصة معقّد مبكرًا.
إذا أردت نموذجًا سريعًا، أداة بناء قائمة على الدردشة مثل Koder.ai يمكن أن تساعد في تحويل هذه الأمثلة الحقيقية إلى تطبيق عملي خطوة بخطوة. المفتاح يبقى نفسه: ابدأ بالقصص الفوضوية أولًا، ثم ابنِ القواعد حولها.
أفضل طريقة لفهم قوة Koder هي تجربتها بنفسك.