فريق ال Agile ليس كباقي الفرق في منهجيات التطوير التقليدية، حيث لا يوجد اهتمام كثيراً بالألقاب ولا بالأدوار الثابته، اي شخص يستطيع القيام بأكثر من دور ، قد تظن ان هذه عشوائية بسبب عدم وجود الرسميات والمناصب بين اعضاء الفريق Hierarchy ولكن في الحقيقة فريق ال Agile بهذا الشكل يستطيع انتاج منتجات ذو جودة عالية ، في هذه المقالة سوف نتعرف على ما يميز فريق الAgile ، وما هي مواصفات فريق ال Agile الجيد، وكيف يبدوا هذا الفريق، وكيف يمكن أن تكون فريق من الاعضاء الجيدين Quality Players قبل أن تبدأ نقطة البدايه في المشروع.
لأخذ نظرة عن السلسة كل ما تحتاجه عن ال Agile:
- ما هي ال Agile
- فريق التطوير في ال Agile (المقالة الحالية)
- كيف تبدأ الخطوة الأولى في المشروع
- كيف تخطط في مشروع ال Agile
ماذا يميز فريق ال Agile ولماذا هو مختلف؟
اول نقطة هي في أدوار اعضاء الفريق حيث تتقلص الالقاب بشكل كبير في المشروع، والكل يعمل حتى في اشياء اخرى لا تتعلق بمسماه الوظيفي (التشبيه الصحيح بفريق ال Agile هو كأن الفرد يعمل ضمن شركة ناشئة صغيرة Mini-Startup حيث ستعمل على أي شيء مهما كان اذا كان ذلك يسبب في نجاح المشروع بغض النظر عن وظيفتك الحقيقية).
بالطبع مهارات كل شخص ستكون موجودة ويستفاد منها في محلها المعروف، ولكن في فريق ال Agile لا يوجد الالتزام الكامل بدور واحد وتجاهل الاخر في حال كان هناك نقص بسبب أنه لا يخصك ولا يأتي تحت مسماك الوظيفي. وهذا ما يجعل الفريق يعمل بروح واحدة لانتاج المشروع وليس ان يعمل كل فرد على جزئيه ولا يساعد في اي شيء اخر لأنه انهى عمله ، الصورة التالية تبين خفة الادوار وتقليصها في الفريق.
ثانياً الشيء الذي يميز فريق ال Agile هو أن التحليل Analysis والتصميم Design والبرمجة Coding والاختبارات Testing هي عمليات مستمرة دائما continuous activities لا تتوقف ابدأً. ولا وجود للفصل التام بين هذه العمليات كما في المنهجيات التقليدية بل بالعكس سيتم العمل عليها بشكل يومي طوال فترة المشروع، الصورة التالية توضح الفريق بين ال Agile والطريقة التقليدية ولاحظ أن هذه العمليات مستمرة دائماً في ال Agile ولا تتوقف.
ثالثاً في فريق ال Agile لا توجد محاسبة لفرد واحد بل الفريق بالكامل مسؤول في التطوير، فاذا وجدت مشكلة Bug في التطوير فلن تسمع السؤال : “كيف لم يتمكن أفراد QA ايجاد هذه المشكلة اذا هم السبب“، فالجميع مسؤول والجميع يقوم بالعمل بأفضل اداء لذلك ال Quality Assurance موجودة في كل مرحلة في التطوير.
هكذا، تقليص المسميات و القيام بعمليات التطوير بشكل مستمر وجعل الفريق بالكامل مسؤول عن التطوير هو ما تتوقع ايجاده في أي فريق يسمى نفسه Agile وهو ما ستقوم به في حال اردت الوصول لذلك، لنتعرف الآن على ما يجعل فريق ال Agile فريق ناجح بكل المقاييس.
مواصفات فريق ال Agile الناجح
قبل البدء بمشروع ال Agile هناك بعض الأشياء يمكن ان تقاتل من أجلها من أجل نجاح المشروع:
اقتراب اعضاء الفريق Co-Location
اذا كان هناك شيء واحد سوف يزيد من انتاجية الفريق فسوف يكون هو جلوس الفريق مع بعضهم Sitting Together، فالفرق المتقاربة تعمل أفضل، يتم اجابه الأسئلة أسرع، تحل المشاكل بمجرد اكتشافها، ويتم بناء الثقة بين الفريق سريعاً، حقيقة من الصعب منافسه فريق ال Agile الصغير الذين يعملون مع بعضهم البعض.
بالطبع اذا تعسر ان يكون الفريق متقارب ووجب ان يكون متباعد Distributed فيمكن القيام ببعض الأمور لتقليص الفجوة مثلاً ان تقوم بحجز مبلغ من الميزانيه في اول المشروع لغرض جلب جميع اعضاء الفريق مع بعضهما البعض وحتى اذا كانت لعدة ايام، فهذا الوقت الذي سيتم قضاؤه للتعرف وتبادل المزح وتناول الطعام مع بعضهما سوف يفيد على المدى الطويل في بناء فريق عالي الأداء، لذلك حاول بأقصى ما تستطيع جلب الجميع على طاولة واحدة منذ البدايه.
بعد ذلك يمكن استخدام طرق الاتصال المتوفرة (سكايب Skype ، اجتماعات الفيديو Video Conferencing ، الشبكات الاجتماعية .. الخ) وذلك لجعل الفريق البعيد يبدوا كالقريب وحتى هم في دول ومناطق مختلفة.
عميل متواجد Engaged Customers
العميل المتواجد هو الذي نبني له المشروع و الذي نريه عرض البرنامج Demo وهو الذي يجيب على الأسئلة ويضع ملاحظاته Feedback خلال فترة تطوير المشروع، وهو يعتبر في ال Agile من ضمن أعضاء الفريق المهمين حيث كيف يمكن أن تبنى مشروع للعميل غير المتواجد خلال فترة التطوير؟، لذلك المنهجيات التي تعتبر ضمن ال Agile مثل Extreme Programming أو Scrum تحاول بأقصى ما تستطيع ان تدخل العميل في التطوير اليومي (وتطلق على On-Site Customer أو ب Product Owner) وهو حقاً دور مهم وسوف نتعرف على طبيعة عمل هذا العميل بعد قليل.
قد تتسائل “ماذا اذا لم يتوفر العميل المتواجد في التطوير” ربما فقد حضر العميل منذ بدايات المشروع واختفى، وربما يظن العميل انه لم يعد بحاجه لهذا المشروع أو حتى الأسوء انك لن تستطيع القيام به وتُنجح المشروع. وبغض النظر عن المشكلة فاذا كنت تريد من العميل ان يكون اكثر يقيناً باستمرار العمل Build Customer Credibility فأخبر العميل بمجرد ان تراه بأنك خلال فترة الاسبوعين القادمين سوف تقوم بحل المشاكل الفلانية في المشروع، وقم بها وعد اليه بعد اسبوعين واريه كيف قمت بالعمل المشكلة والحل الذي قمت به، وهكذا اعد هذه العملية وقم بالعمل على مشكلة أخرى وقم بحلها. ربما تحتاج للقيام بذلك 3 أو 4 مرات وربما اكثر حنى تبدأ بالحصول على الانتباه Attention وفي الأخير سوف تحصل عليه وسيلتفت اليك بمنظور اخر وسوف يراك على حقيقتك: فريق أو مبرمج صادق يمكن الاعتماد عليه في انهاء المشروع.
ربما تكون اسباب عدم توفر العميل اخرى مثلاً لم تستطيع وضع التصورات الجيدة منذ بدايه المشروع وبدء العميل بالشك في تقديراتك، أو كان مشغول بالفعل، ولكن في النهايه حتى تحصل على انتباهه وحضوره فقم ببناء الثقه بالتدريج مجدداً رويداً رويداً وسوف تفوز بذلك حتماً.
الفريق المنظم من تلقاء نفسه Self-Organizing
أعضاء فريق ال Agile يفضلوا أن يعطوا المشكلة أو الهدف الرئيسي ومن ثم جعل كل فرد في الفريق يفكر كيف يمكن ان يصل لذلك الهدف، وللقيام بذلك يحتاج الفريق ان يعرف طريقة تنظيم نفسه حتى يستطيع الوصول لذلك الهدف. تنظيم الفريق لنفسه Self-Organizing يعني ان تضع أنانيتك Ego خارج الغرفه (مع احتفاظك على مهاراتك وابداعاتك) وتفكر كفريق في كيف يمكن الوصول لأفضل حل واخراج المشروع Deliver في افضل وجه.
مثال على ذلك يمكن ان يلعب الدور الشخص المناسب بناء على رؤية الفريق:
“بالتأكيد محمد يستطيع كتابه الكود، ولكن هو لديه نظره خاصه في التصميم لذلك هو سوف يساعد في بعض عمل التصميمات الأولية على الورق Mock-up”
“نعم عادل هو من أفضل المختبرين Testers لكن ملاحظاته دقيقة عندما يتحدث مع العميل ويضع تقديرات جيدة “
هذا لا يعني ان المطورين Developers يجب أن يكونوا محترفين في التصميم أو المختبرين Testing سوف يعملوا على ادارة المشروع، ولكن هو اتجاه حول جعل العمل يختار الشخص المناسب وليس ان تختار الشخص للعمل Let the role fit the person instead of making the person fit the role ، السؤال هنا يمكن ان تجعل الفريق منظماً بهذا الشكل :
- دع الفريق بالكامل يضع خطة التطوير plan ويصل للتحديد المدة الزمنية وتقديرها Estimation وجعلهم يدركوا دورهم الحيوي في المشروع.
- تقليل المسميات والألقاب في اثناء التطوير والاهتمام أكثر بالانتاج المستمر الصحيح والذي تم اختباره continuous production of working, tested software.
- أن تدع الفريق يعمل وكأنهم خبراء في رحلتهم وليس ان يجلسوا في انتظار الأوامر، فكلما اعطيتهم الثقة فكلما انتج الفريق بشكل افضل.
افضل بنية برمجية Architectures واستخلاص للمتطلبات Requirements وتصميم للمشروع سوف تحصل عليه من الفريق المنظم Self-Organizing Teams
الآن بعدما اعطيتهم الثقة تبقت نقطة متعلقه بها وهي
المحاسبة والصلاحيات للفريق Accountable and Empowered
فريق ال Agile الجيد يعلم انه مسؤول عن النتائج التي يخرجها، وأن العميل يعتمد عليهم في تطوير العمل لذلك هم لا يتهربوا من المسؤلية (طريقة التسليم المتكرر للعميل من الطرق الجيدة لزيادة مسؤولية الفريق وجعلهم يدركوا ان هناك من يعتمد على ذلك العمل)، وفي المقابل يحتاج الفريق الصلاحيات اللازمة واختيار الخيارات المتنوعه اثناء التطوير فهذا يعطيه حريه أفضل وايضاً يؤدي لزيادة الأحساس بالمسؤولية، وكما ذكرنا اذا وجدت ان الفريق لديه مشكلة في موضوع المسؤولية فقم بأسهل حل وهو عمل عرض تجريبي Demo مع العميل، هكذا ستضعهم امام عميل حقيقي وتجربة للبرنامج وهذا سيزيد احساس المسؤولية بشكل كبير، والأمر يزيد ويتضح في حال كان العرض سيئ والبرنامج لا يعمل جيداً فهذا سيزيد من اهتمام الفريق نحو جودة العمل ومحاولة ايصاله بشكل افضل.
الفريق متعدد المهارات Cross Functional
الفريق متعدد المهارات هو الذي يستطيع تطبيق اي خاصية يطلبها العميل من البدايه الى النهايه، وهذا يعني ان الفريق لديه المهارات والخبرات اللازمة في جوانب المشروع، لذلك عندما توظف اعضاء الفريق فاحرص على جلب المبرمج الذي يستطيع العمل بأكثر من لغه وتقنية مختلفة Generalists (سواء كان Front-End أو Back-End) واحرص على جلب المختبر الذي يستطيع الاختبار طوال فترة المشروع وهكذا بالنسبة للمحللين وبقية اعضاء الفريق، هناك حالات تتطلب خبرة في اشياء معينة (مثلاً عمل ضبط للقاعدة البيانات للحصول على اداء افضل Database Tuning) ولكن في اغلب الأحوال يعمل الفريق مع بعضهم البعض وربما يستطيع حلها بدون الاستعانه بالخبرات.
بعد أن تحدثنا عن مواصفات الفريق الناجح، السؤال هو كيف يمكن أن يعمل هذا الفريق مع بعضهم البعض، والجواب عن طريق لعب الدور بشكل جيد، سواء كان العضو يعمل في اكثر من دور اذا لم يكن هناك فريق مكتمل (مثلاً ان تعمل بنفسك أو مع شخص أخر، حينها عليك ان تلعب اكثر من دور) أما اذا كان فريقك مكتمل وان الأدوار مكتملة ولا تحتاج لشخص ان يلعب اكثر من دور فحينها هناك مهمه رئيسية لكل دور في الفريق وهو ما سنتناوله فيما يلي حتى يتم القيام به شكل صحيح.
الأدوار Roles في فريق ال Agile
عندما نتحدث عن المشاريع فكل ما يهم ان هناك مشروع سوف نقوم به نحن فريق التطوير Development Team و نريد بنائه للعميل Customer
فريق التطوير لا يضم فقط المطورين Programmers بل يضم المختبرين Testers والمحللين Analysts وكل ما يدخل في تطوير المشروع، فكلهم ضمن المشروع ولا تهتم ال Agile بمن يلعب ذلك الدور بل جل الاهتمام هو القيام بالدور بالشكل الصحيح، ولنلقى نظرة على أدوار فريق ال Agile ولنبدأ بأحد أهم الأدوار وهو العميل Customer
العميل Agile Customer
العميل هو الذي نأخذ منه المتطلبات وهو الذي يريدهذا المشروع عندما ننتهي منه، وهو على علم بتفاصيل العمل Subject-Matter ويهتم بكيف سيكون شكل البرنامج وكيف سيعمل، وهو الذي يجيب على الأسئلة ويطرح الملاحظات للفريق، كما انه يقوم بتحديد الأولويات في التطوير فقد يريد هذه الخاصية الآن بشكل عاجل بينما الأخرى فيما بعد (عملية تحديد الأولويات تحتاج ان تكون مع فريق التطوير وذلك لأن بعض الخصائص قد لا يمكن تنفيذها الا بعد تنفيذ خصائص أخرى، ولذلك تحديد الأوليات تحتاج للعميل والفريق بسبب الأمور الفنية في المشروع).
للقيام بكل ذلك تحتاج أن يتوفر العميل بشكل دائم On-Site Customer والا فاذا لم يتوفر (كما هو الحال في الغالب) فقم بقدر الامكان بمحاولة جلبه بشكل مستمر واجعله يفهم طبيعة دوره في المشروع وان قراراته Decisions مهمه جداً في سير المشروع ونجاحه بشكل عام.
الصورة التالية تبين دور العميل في المشروع:
لنلقى الأن نظره على فريق التطوير:
هذه المجموعه هي التي ستقوم بتحويل ما يطلبه العميل من ال features الى برنامج جاهز للعمل Production-Ready ، وهو يشمل اي شخص يعمل في المشروع، ولنبدأ بالمحلل.
المحلل Analyst
عندما يبدأ العمل على ال Feature فسوف يبدأ المحلل بالعمل ويقوم بمعرفة التفاصيل لكل شيء متعلق بهذه الخاصية، وسيعمل كمحقق مع العميل لكي يستخرج كل المعلومات المطلوبة للمشروع، كما أن له أدوار أخرى في المشروع حيث يساعد في كتابه ال user stories، وهو الذي يقوم بالتحليل الشامل لكل Feature يراد تطويرها، ايضاً يمكن أن يساعد في اعداد شكل البرنامج على الورق Mock-Ups والPrototypes (سوف نتحدث عن هذا الدور بشكل موسع وكيف يمكن استخراج المعلومات وكتابه ال user stories في المقالات التالية ان شاء الله).
المبرمج Programmer
هو من يقوم بتحويل الخاصية Feature الى شيء يعمل عن طريق البرمجة، مبرمج ال Agile يهتم كثيراً باختبار الأكواد حتى يحصل على كود ذو جودة عالية وجاهز للعمل وذلك عن طريق كتابه الاختبارات Unit Testing وأحياناً يستخدم تلك الاختبارات كموجه له في تصميم هيكلة المشروع باستخدام طريقة كتابه الأختبار قبل كتابه الكود Test Driven Development، ايضاً يقوم المبرمج بعمليات التحسينات Refactoring الدائمة للمشروع من ناحية الهيكلة Architecture ، ويستخدم بعض الأدوات للتأكد من جاهزية الكود للعمل في اي لحظة باستخدام أدوات ال Continuous Integrations، وبالطبع سوف يعمل مع العميل ايضاً مع غيره من اعضاء الفريق حتى يتأكد من ما تم بنائه وانهم في الطريق الصحيح. (سوف نتحدث عن هذا الدور بشكل موسع والأدوات المستخدمه في المقالات التالية ان شاء الله).
المختبر Tester
المختبر هو من يتأكد من ان البرنامج يعمل بشكل صحيح، لذلك هو يعمل منذ البدء مع الفريق ويتأكد من انه كل user story تعمل بشكل صحيح، ولأن كل Feature تحتاج للاختبار فسوف يتواجد المختبر في كل المراحل اثناء التطوير، حيث ستجد المختبر يعمل مع العميل لكي يستخرج المتطلبات التي يحتاجها في اختبار المشروع، وسيعمل المختبر مع المطورين ويساعدهم في كتابة الاختبارات ويقوم بايجاد الاخطاء عن طريق تطبيق انواع الاختبارات المختلفة (اختار الوظائف Functional Testing والاداء Performance and Scalability وغيرها). (سوف نتحدث عن هذا الدور في أحد المقالات التالية ان شاء الله).
مدير المشروع Project Manager
مدير المشروع يعلم انه لكي ينجح في عمله فيجب ان ينجح فريقه في العمل، لذلك يقوم مدير المشروع بكل ما يلزم حتى يبعد كل ما يقف بين الفريق ونجاح المشروع، ولديه كثير من المهام سنتعرف عليها فيما بعد (التخطيط في المشروع، اعادة وتعديل الخطة بما بلزم على حسب سير المشروع) ويقوم بعمل التقارير وسير الفريق للادارة او ال stakeholders ومن مهامه المهمه هو عزل الفريق من الضغوط الخارجية وبناء العلاقات الطيبة بين افراد الفريق.
المدير الجيد هو من لا يخبر الفريق بما يجب ان يفعلوه لأن الفريق ليس بحاجه لذلك، فهو يساعد في بناء البيئة الجيدة والتي سيعمل فيها الفريق حتى لو غاب المدير لمدة اسبوع. (سوف نتحدث عن هذا الدور بشكل موسع وكيف يمكن كتابه الخطة وأدارة المشروع في المقالات التالية ان شاء الله).
المصمم UX Designer
وهو من يقوم بانشاء واجهات الاستخدام المفيدة للعميل، في العاده المصمم يكون لديه حس في التصميم وحماس في سهوله الواجهات Usability وايضاً يجتمع مع الفريق ليعرف كيف يمكن ان يخرج افضل واجهه ممكن للمشروع، ويكون تصميمه بالتوازي مع تطوير المبرمجين بحيث لا يسبق الفريق بخطوت كثيرة ولا أن يقوم بتصميم كل شيء منذ البدء. اذا كان المصمم يعرف عمله جيداً فسوف تحصل على واجهات احترافيه سهله الاستخدام user experience.
اعضاء الفريق الأخرين
اعضاء الفريق الأخرين لهم أدوارهم المهمه مثلاً مسؤول قواعد البيانات Database Administrators (أو DBA) ومسؤول النظام System Administrators ، والكتاب التقنيين Technical Writers والمدربين Trainers ومسؤول الِشبكات، فهكلم ضمن فريق التطوير مثلهم مثل البقية.
في منهجية ال Scrum هناك دور يسمى Scrum Master وهو يمكن تشبيه بالمدرب Coach الذي يساعد الفريق الذي يعمل على ال Agile لأول مرة، فهو يوضح لهم مفاهيم ال Agile وفلسفتها ويضمن ان الفريق يعملوا على العادات الجيدة ولا يعودوا للعادات القديمة اثناء التطوير. والمدرب يكون فائدته اكبر للفرق الجديدة اكثر منه للفرق التي لديها خبرة في هذه المنهجية.
الأمر المهم والذي يجب أن يعلمه جميع افراد الفريق أن الشخص يمكن ان يلعب اكثر من دور في اثناء تطوير المشروع، مثلاً ليعلم المحلل ان المطور سوف يتحدث مع العميل ، وليعلم المختبر بأن المطور سوف يقوم بكتابه الاختبارات، ومثلاً اذا لم يتوفر مصمم للمشروع فهذا لا يعني انه لا يتواجد اي Usability بها ولكن سيلعب الدور احد افراد الفريق.
اختيار وتوظيف فريق الأجايل Forming Agile Team
اخيراً، بقى الحديث عن كيفية اختيار هذا الفريق وتوظيفه Forming Agile Team، والأفضل هو أن تبحث عن من يستطيع العمل بأكثر من أداة أو تقنية Generalists فهم يناسبوا طبيعة هذه المنهجية ولأنهم قد يعملوا بأكثر من شيء مثلاً كتابه الأكواد ومن ثم اجراء تحليل للمتطلبات وربما القيام ببعض الاختبارات في يوم أخر, ايضاً تأكد من ان اعضاء الفريق مرتاحين في العمل مع المتطلبات غير المكتملة بشكل 100% والتي تتطلب ان تكتشفها اثناء التطوير والتي قد تغير في الخطة الموضوعه أو طريقة تنفيذ المشروع حتى يتعامل مع الاحداث الجديدة، ايضاً ابحث عن من لديه روح الفريق والعمل الجماعي القابل للانسجام والتعلم والتطوير مع الاخرين في الفريق.
وصلنا لنهايه هذه المقالة ، واصبحت تعرف مفاهيم ال Agile بشكل عام وتكونت لديك خلفية عن الفريق وكيفية تكوينه والمميزات التي تكون في الفريق الجيدة، الأن انت جاهز لبدايه مشروعك الأول Kick start وهذا هو عنوان المقالة التالية ان شاء الله (كيف تبدأ مشروعك Agile Project Inception).
ربنا يوفقك
السلام عليكم أخي
و بارك الله فيكم على هدا الموضوع القيم و على مجهوداتكم أخي الحبيب
تحياتي
هذا الشرح على انه قبل كم سنه لكنه جدا جدا افادني ومتأكده انه افاد الكثير
جهد مشكور ……….بارك الله فيك
ما شاء الله. معلومات مفيدة وجاءت في وقتها بالنسبة لي. بارك الله فيك.
حبيبنا وجدي كل الشكر ليك.
صديقك
Ahmed M. Elzubair