فتش عن الإجابة بين المبرمجين ستجد أحد الإجابتين:

  1. جودة عالية تعني مدة أطول
  2. أو سرعة عالية تعني جودة أقل.

بتلاقي كل فريق بيشد الحبل لجهته، وكأننا أمام "مقايضة" لا مفر منها. لكن هل هذه الإجابة "النموذجية" فعلاً صحيحة أو منطقية؟ من وجهة نظري لا أؤمن بالإجابتين، بل أعتقد بأن السؤال بالأساس خاطئ!

السؤال بيفترض إن السرعة والإتقان شيئين منفصلين، لكن الحقيقة هي إنه لا يمكن تحقيق السرعة أصلاً إلا عن طريق الإتقان.

أنك دخلت مطبخاً لأول مرة لتحضر وجبة بـ 10 مكونات. الوجبة المفروض تاخد نص ساعة، لكنها أخذت معك ساعة كاملة!

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

وبعد 10 مرات، الطبخة ما رح تاخد منك مجهود ذهني، ورح تبلش تلاحظ "أنماط" (Patterns) كانت بتسبب لك عائق وبتضيع وقتك؛ فممكن الصحون بعيدة عن الغاز، أو البراد بمكان مو مريح. هون بتبلش تطور "النظام" ككل وليس المنتج (الطبخة) فقط، لتقليل الاحتكاك (Frictions) والوصول لأقصى سرعة ممكنة.

هذا بالضبط ما يحدث في عالم البرمجة؛ لما نطلب من مبرمج بناء نظام (Authentication) لأول مرة بمشروع، ممكن ياخد أسبوع ليفهم القصة ويدمجها. لكن الخبير بالمشروع رح يعملها بوقت قياسي، مو لأنه بيكتب كود أسرع، بل لأنه بيعرف "المطبخ" كله وكيف بيتحرك.

مشكلتنا دائما هي إهمالنا لـ "بيئة العمل" (Ecosystem) اللي بنشتغل فيها بشكل يومي. بنركز عالتاسك وبننسى تماماً "كيف" أصلا بنشتغل، وهالبيئة بتشمل عوامل تقنية مهمة جداً مثل الـ CI/CD pipeline، وبيئة (Testing environment)، وتجربة المطور (Developer Experience)، ,و الـ Local Setup، وعملية Code Review، وصولاً إلى (Observability). لما تكون هالبيئة مكركبة (مطبخ وسخ)، الإنتاج رح ياخد ضعف الوقت المفترض. وهون بيصير المبرمج تحت الضغط، وما بيلاقي مخرج إلا إنه "يضحي بالإتقان" ويطلع بمنتج مليان (Bugs).

الخلاصة:

الموضوع فلسفي في البداية.. المشاكل نفسها اللي بنحلها كل يوم متغيرة جداً ولايمكن قياسها بمعيار واضح لكن بيئة العمل ثابتة ويمكن تطويرها.

في النشرة القادمة، رح نحكي بلغة "الأرقام والمقاييس" عن العوامل اللي بتحدد جودة بيئة العمل، لأنه ببساطة لا يمكن تصحيح مسار أو تطوير أي نظام دون معرفة المقياس الواضح اللي بنمشي عليه خصوصاً هلا مع الـ AI

دمتم سالمين 🫡