علامات مبكّرة أن مشروعك البرمجي يتعثّر
ما يغيب قبل أن يُخلَف الموعد بأشهر، وما ينبغي أن تطلبه عند كل علامة.
مشروع في شهره الرابع من جدول مدّته ستة أشهر. عُقدت اجتماعات أسبوعية، وأُنجز ملف تصميم يضمّ كل الشاشات، وقُدّم عرضان تقديميان، وظلّت حالة المشروع منذ الأسبوع الثالث «تسير وفق الخطة مع تأخّر طفيف». وما لم يحدث هو أن يفتح أحد من خارج فريق التنفيذ عنوانًا يرى فيه النظام يعمل. ولم يُخلَف موعد بعد، لأن الموعد الحقيقي الوحيد هو الأخير. هكذا يبدو المشروع المتعثّر من موقع العميل: ليس انهيارًا مفاجئًا، بل مدّة طويلة يتعذّر فيها التحقّق من شيء.
المواعيد مؤشّر لاحق لا سابق؛ فحين يُخلَف الموعد تكون أغلب الميزانية قد أُنفقت وصار كل خيار متبقٍّ مكلفًا. أمّا المؤشّرات التي تستحقّ المتابعة فتظهر قبل ذلك بأشهر، ومعظمها مقروء لعميل لا خلفية تقنية له. وهي ليست حكمًا على جودة الشيفرة، بل على إمكان معاينة العمل أصلًا.
غياب نسخة تعمل مؤشّر يعلو على سواه
بعد الأسابيع الأولى من التنفيذ، يؤدّي سؤال واحد ما لا يؤدّيه غيره: هل ثمّة عنوان أفتحه، على جهاز لا يتحكّم به المنفّذ وحده، يعرض النظام وفيه بيانات تشبه بياناتي؟ الإجابة بنعم، ولو كانت نسخة ناقصة رديئة الشكل، تُنهي أكثر الشكوك. والإجابة بلا، إذا تكرّرت أسابيع، ترجح على كل طمأنة تُقال بجوارها.
هنا تختبئ العروض. فالعرض التقديمي الذي يصف النظام ليس النظام، وملف التصميم الذي يُنقر عليه ليس النظام كذلك؛ إنما هو رسم له، والرسوم تُنتَج بوتيرة لا صلة لها بوتيرة البناء. أمّا التسجيل المرئي من جهاز أحد المطوّرين فيقع بين الاثنين: أفضل من العرض، لكنه يُظهر ما اختار صاحبه إظهاره في اللحظة التي اختارها. والفرق أنك في العنوان تضغط زرًّا آخر.
والصلاحيات وجه آخر للمؤشّر نفسه. فإن لم يكن لديك حساب، ولا بيئة اختبار (Staging)، ولا حتى صلاحية اطّلاع، صار كل تقرير حالة غير قابل للتحقّق؛ والتقارير غير القابلة للتحقّق تميل إلى التفاؤل من غير أن يقرّر أحد الكذب.
التقدّم الموصوف بنسبة مئوية ليس تقدّمًا
«أنجزنا نحو تسعين في المئة» جملة لا تحمل معلومة؛ لا يمكن التحقّق منها، ولا إثبات خطئها، ويمكن تكرارها مدّة طويلة. أمّا الصيغة التي تحمل معلومة فمختلفة: يمكن إنشاء الطلب وتعديله وإلغاؤه، ويُعالَج إشعار الدفع، ولم يبدأ العمل على المرتجعات. قدرات مسمّاة، كلٌّ منها منتهٍ أو غير منتهٍ.
وراقب كم تعيش النسبة الأخيرة. فالبناء الذي ظلّ «على وشك الاكتمال» ستة أسابيع ليس على وشك الاكتمال. الغالب أن الأجزاء المفهومة أُنجزت سريعًا، وأُجّلت الأجزاء التي لم يفهمها أحد، وهي بعينها التي تحمل المخاطر: عمليات الربط، والصلاحيات، وسلوك بياناتك الحقيقية، وما يفعله قسم الحسابات في نهاية الشهر.
من تحادثه ليس من ينفّذ
وجود مدير مشروع بينك وبين المهندسين أمر طبيعي في أي حجم. غير الطبيعي أن يمرّ شهر دون أن يحضر معك أحد ممن يكتبون الشيفرة. المتطلّبات تتآكل في الطريق، ويبقى هذا التآكل غير مرئي من جهتك حتى ترى النتيجة. والاختبار زهيد: اطلب حضور المهندس المنفّذ في المراجعة القادمة. الفريق الذي ينفّذ يُحضره، والفريق المتأخّر يُحضر مبرّرات.
توقّفت الأسئلة عن تفاصيل عملك
في أسابيع المشروع الأولى تُسأل أسئلة غير مريحة. ماذا يحدث للمرتجع بعد إصدار الفاتورة؟ أيّ السجلّين هو العميل الحقيقي؟ ماذا يصنع المحاسب بخصم آخر الشهر؟ هذه الأسئلة لا تنفد في الأسبوع الثالث، لأن الأنظمة الحقيقية تصطدم دائمًا بتفاصيل لا يحسمها إلا أنت. فإذا توقّفت الأسئلة، فإمّا أن الفريق كفّ عن البناء وفق عمليّاتك، وإمّا أنه بدأ يخمّن.
تعديلات النطاق التي لا تكلّف شيئًا
طلب تعديل يُقبَل في الحال، بلا نقاش لما يزيحه، ليس كرمًا. إمّا أن أحدًا لا يتابع الخطة بدقّة تكفي لمعرفة الأثر، وإمّا أن الأثر يُستوعَب صامتًا ليعود بعد حين تفسيرًا لتأخير، أو فاتورة لم تكن في الحسبان. أمّا الفريق المُمسك بزمام العمل فيقابل التعديل بمقايضة: هذا يضيف أسبوعًا، أو يحلّ محلّ تلك الميزة، أو يؤجَّل إلى المرحلة الثانية. وهذا الحوار علامة عافية حتى حين تكون إجابته غير مريحة، وفيه تحديدًا يتقرّر كم يكلّف نظام مخصّص.
وللقرارات موضع ينبغي أن توجد فيه. فإذا كان سجلّها الوحيد مكالمة ومحادثة على واتساب، تذكّر الطرفان في الشهر الخامس اتفاقين مختلفين، وكلاهما صادق. أسطر مكتوبة قليلة بعد كل قرار، تُرسل إلى الجهتين، تكلّف دقائق وتُلغي بابًا كاملًا من الخلاف.
تأجيل الربط إلى النهاية هو الشكل التقليدي للتعثّر
عبارة «نحن الآن في مرحلة الربط» حين تأتي في آخر المشروع تحذير بنيوي لا تفصيل جدولة. فالربط (Integration) موضع اصطدام الافتراضات بأنظمة الآخرين: بوابة الدفع، ونظام تخطيط موارد المؤسسة (ERP)، وصيغة ملف البنك، وواجهة شركة الشحن، وإرسال الفاتورة الإلكترونية. وهناك يقيم المجهول: بيانات الاعتماد تستغرق أسابيع لتُصدَر، وبيئة التجربة تسلك سلوكًا يخالف بيئة التشغيل، ووثائق الطرف الآخر تصف نقطة اتصال لم تعد تعمل كما كُتبت.
والفريق الذي يؤجّل ذلك كلّه يكون قد قدّم العمل المريح وأخّر المخاطر القابلة للاكتشاف إلى المدّة التي لم يبقَ فيها من الميزانية ولا من الوقت ما يستوعبها. والشكل الأسلم عكسه: أضيق مسار ممكن من طرف إلى طرف، مبكّرًا. طلب واحد حقيقي يمرّ في بيئة تجربة الدفع الفعلية خلال الأسابيع الأولى، بلا تجميل، ثم يُبنى الاتّساع فوق طريق ثبت أنه سالك.
والسؤال المطلوب ضيّق: بأيّ نظام خارجي اتّصلتم فعلًا، وفي أيّ بيئة، وفي أيّ تاريخ نجح أول اتصال؟ والإجابة المُرسَلة على عواهنها عن سؤال ضيّق هي نفسها إجابة.
الصعوبة الطبيعية تبدو مختلفة عن التعثّر
ليس كل مشروع صعب مشروعًا متعثّرًا. التقديرات تتحرّك، والمرحلة التي قُدّرت بأسبوعين تستغرق ثلاثة. والعرض التجريبي يُنتج إعادة عمل، وهذا عين وظيفته. وقائمة الأخطاء تطول أثناء الاختبار، ولهذا يُختبَر النظام.
وكثير من التأخير سببه العميل نفسه: بيانات لم تكن جاهزة، أو مدير عمليات مسافر، أو طرف ثالث استغرق شهرًا ليُصدر الصلاحيات. وقد تظلّ الشاشات ناقصة الشكل أسابيع والمنطق تحتها سليم، وأحيانًا يكون هذا الترتيب مقصودًا.
| الصعوبة الطبيعية | علامة التعثّر |
|---|---|
| يتحرّك التقدير وتُبلَّغ به في أسبوع تحرّكه | يبقى الموعد ثابتًا حتى أسبوع استحقاقه |
| إعادة عمل بعد عرض تجريبي | لا عرض تجريبي يُبنى عليه ردّ |
| تطول قائمة الأخطاء أثناء الاختبار | لا توجد بيئة يُختبر فيها |
| تتوالى الأسئلة التفصيلية عن عملك | توقّفت الأسئلة منذ أسابيع |
| يعود تعديل النطاق ومعه وقت أو كلفة | تُقبل تعديلات النطاق صامتة |
| الشاشات ناقصة والمنطق يعمل | الشاشات مكتملة ولا شيء خلفها |
المشروع السليم يُبلّغ بالخبر السيّئ مبكّرًا، بعبارة محدّدة، ومعه خيار. والمشروع المتعثّر تبقى أخباره طيّبة إلى أن تصير كارثية.
فليست الصعوبة هي المؤشّر، بل شكل الإبلاغ.
ما تطلبه، بترتيب تصاعدي
خذ هذه الخطوات بالتسلسل. كلّ خطوة معقولة في ذاتها، وكلّ واحدة تُنتج معلومة أيًّا كانت الإجابة.
- بيئة تعمل. اطلب عنوانًا وبيانات دخول، على استضافة لا يتحكّم بها المنفّذ وحده، خلال عدد أيام محدّد. اقبلها ناقصة، ولا تقبل تسجيلًا مرئيًا بديلًا عنها.
- تقرير مكتوب مقابل النطاق الأصلي. قائمة المُخرَجات كما اتُّفق عليها، أمام كلٍّ منها: منجَز، أو قيد التنفيذ، أو لم يبدأ، مع التواريخ. ولا تقبل مستندًا جديدًا يصف مشروعًا آخر؛ فالمقارنة بالمتّفق عليه هي المقصد كلّه.
- الوصول إلى الشيفرة والحسابات. المستودع البرمجي (Repository)، وحساب الاستضافة، والنطاق، وقاعدة البيانات. فإن لم تكن باسم مؤسّستك فاطلب نقلها الآن. والرفض عند هذه الخطوة أخطر إجابة في هذا المقال، وينبغي أن يغيّر ما تفعله بعدها.
- مراجعة تقنية مستقلّة. مهندس مستقلّ، يُتعاقد معه أيامًا معدودة، ويُمنح صلاحية الاطّلاع على المستودع والبيئة، ويُسأل ثلاثة أسئلة ضيّقة: هل يعمل، وما المبنيّ فعلًا، وما المتبقّي حتى يصير النظام صالحًا للاستعمال. كلفتها جزء يسير من كلفة شهر من التنفيذ، ومدّتها أيام لا أسابيع في العادة.
- التوقّف. يصير التوقّف أرخص الخيارات المتبقية حين تمرّ أشهر من الفوترة دون نسخة تعمل، أو يُرفض منحك الصلاحيات، أو تخلص المراجعة إلى أن المنجَز لا يصلح للبناء عليه، أو يتجاوز ما بقي إنفاقه كلفةَ البدء من جديد بما تعلّمته. فإذا أنفقت 700 ألف جنيه من ميزانية مليون ولا شيء يعمل، فالسؤال ليس كيف تُنقذ السبعمئة، بل ماذا تشتري بالثلاثمئة الباقية، هنا أو عند غيرك.
وما يبقى في يدك عند التوقّف أكثر مما يبدو وقتها: المتطلّبات، والقرارات، ونموذج البيانات، ومعرفة الربط، ومواصفة أدقّ بكثير من التي بدأت بها. والمحاولة الثانية أسرع عادةً، لأن التعلّم الغالي دُفع ثمنه.
ما يُحسم قبل بدء المشروع القادم
معظم ما سبق يمكن اتّقاؤه في مرحلة التعاقد، ولا يحتاج الإصرار عليه إلى معرفة تقنية.
- مراحل دفع مرتبطة بشيء يعمل. الدفع مقابل حالة قابلة للعرض على بيئة مشتركة، لا مقابل «انتهاء مرحلة التصميم». وتعريف ثلث المراحل على هذا النحو يكفي لتغيير الحوافز في المشروع كلّه.
- الحسابات باسمك من اليوم الأول. الاستضافة، والنطاق، وحساب المستودع، وبوابة الدفع، ومفاتيح الواجهات البرمجية (API). يُمنح المنفّذ صلاحية الوصول، وتبقى الملكية لك. وهذا البند وحده يغيّر مآل المشروع المتعثّر أكثر من أي بند سواه.
- صلاحية الاطّلاع على المستودع منذ أول إيداع. لست مضطرًّا إلى قراءة الشيفرة؛ فسجلّ الإيداعات (Commits) أرخص تقرير حالة متاح، وثلاثة أسابيع من السكون فيه تقول ما لا يقوله تقرير.
- سجلّ مكتوب للقرارات، وبند إنهاء ينصّ صراحةً على ما يُسلَّم عند إنهاء التعاقد: الشيفرة، وبيانات الاعتماد، والتوثيق، وتعليمات النشر.
في Softwiro يُسلَّم المشروع وهو قيد التشغيل وموصول ببنية تحتية ندير تشغيلها، ولا يُسلَّم شيء بوصفه ملف تصميم أو نموذجًا أوليًا. وهو معيار يُختبر أثناء الاختيار لا في النهاية؛ ويتناول كيف تختار شركة برمجة لمشروعك ما يُسأل عنه قبل التوقيع، ويتناول ما بعد التسليم ترتيبات الدعم والملكية التي تليه.
السؤال الذي يُطرح هذا الأسبوع
إن كنت في مشروع الآن ولا تستطيع أن تقول أين تعمل النسخة الحيّة، فاطرح السؤال هذا الأسبوع لا بعد شهر؛ فثمنه اليوم زهيد وبعد ثلاثة أشهر باهظ. ولتحديد نطاق نظام جديد، أو لمراجعة مشروع قائم بصراحة، راسلنا.
أسئلة يطرحها هذا الموضوع
متى ينبغي أن أرى نسخة تعمل من نظامي؟
خلال أسابيع لا أشهر. فبعد بدء مرحلة التنفيذ، توجد عادةً في الشهر الأول بيئة يمكن فتحها، فيها شاشات قليلة وبيانات حقيقية، وإن كان معظم المزايا ناقصًا. والمهمّ ليس اكتمالها، بل وجودها على استضافة تفتحها بنفسك، حتى يصير كل تقرير حالة لاحق قابلًا للمقارنة بشيء ملموس بدلًا من تصديقه.
هل من المعقول أن أطلب الشيفرة والحسابات أثناء سير المشروع؟
نعم، وموضعه الصحيح الأسبوع الأول. فالاستضافة والنطاق والمستودع وحسابات الدفع تُسجَّل باسم مؤسّستك، ويُمنح المنفّذ صلاحية الوصول إليها. وطلبها في منتصف المشروع معقول أيضًا، والإجابة عنه تكشف الكثير: الفريق الذي لا يخفي شيئًا ينجز النقل في يوم أو يومين.
الفريق يعمل بجدّ واضح لكن المشروع يبدو مضطربًا. كيف أفرّق بين الصعوبة والتعثّر؟
انظر إلى شكل الإبلاغ لا إلى مقدار الجهد. المشروع السليم ينقل الخبر السيّئ مبكّرًا بعبارة محدّدة ومعه خيار: هذه المرحلة تحتاج أسبوعًا إضافيًا، أو هذه الميزة تنتقل إلى المرحلة الثانية. والمتعثّر تبقى أخباره طيّبة حتى يحلّ الموعد. اطلب تقريرًا مكتوبًا مقابل النطاق الأصلي؛ والفجوة بين المستندين هي الإجابة.
لديك نظام تريد بناءه؟
تُصمّم Softwiro الأنظمة وتنفّذها وتتولّى تشغيلها في بيئة الإنتاج. اكتب لنا ما تحتاجه، ويصلك نطاق عمل محدّد لا عبارة تسويقية.
ابدأ مشروعًا