سكرم (تطوير البرمجيات)

نبذة تاريخية

في عام 1986 تم تعريف سْكْرَمْ لأول مرة من قبل هيروتاكا تاكوتشي (بالإنجليزية: Hirotaka Takeuchi) و إكوجيرو نوناكا  (بالإنجليزية: Ikujiro Nonaka) في مقالة نشرت في مجلة هارفارد بزنس ريفيو بعنوان "لعبة جديدة جديدة لتطوير المنتجات"، بأنه "استراتيجية شمولية مرنة لتطوير المنتجات حيث يعمل فريق تطوير كوحدة للوصول إلى هدف مشترك" في مقابل "النهج المتسلسل التقليدي". ذكر تاكوتشي ونوناكا في وقت لاحق في "The Knowledge Creating Company" أنه هو شكل من أشكال "خلق المعرفة التنظيمي" وهي مفيدة خصوصا في إحداث الابتكار باستمرار، تدريجيا وبشكل حلزوني". ووصف الكتاب استراتيجية جديدة لتطوير المنتجات التجارية والتي من شأنها أن تزيد من السرعة والمرونة، استناداً إلى دراسات في شركات تصنيع السيارات، وآلات تصوير المستندات والطابعات. و
التسمية : 
سُمِّيت سْكْرَمْ نسبةًإلى طريقة لإعادة بدأ لعبة الرغبي بعد مخالفة بسيطة، فيتم تنفيذ العملية برمتها من قبل فريق واحد متعدد الوظائف عبر مراحل متداخلة متعددة، حيث يحاول الفريق "قطع المسافة كوحدة واحدة، وتمرير الكرة ذهابا و ايابا".
في 1990s في وقت مبكر،استخدم كين شوابر (بالإنجليزية: Ken Schwaber) ما يمكن اعتباره أسلوب سكرم في شركته Advanced Development Methods. كما ان كل من جيف ساذرلاند (بالإنجليزية: Jeff Sutherland) وجون سكمنيوتالس وجيف ماكينا وضعوا نهجا مماثلا في مؤسسة ايزل Easle Corporation، وكانوا أول من أشار إليها باستخدام واحدة كلمة سكرم.
وفي عام 1995، قدم ساذرلاند شفابر بالاشتراك ورقة تصف منهجية سكرم في ورشة عمل حول تصميم وتنفيذ المنتجات التجارية Business Object Design and Implementation Workshop  والتي عقدت كجزء من دورة اوبسلا للبرمجة الغرضية التوجه والنظم واللغات والتطبيقات Object-Oriented Programming, Systems, Languages & Applications '95 (OOPSLA '95)  في أوستن، تكساس، و كان هذا أول عرض علني لها.
ثم تعاون كل من شفابر وساذرلاند خلال السنوات التالية لدمج الكتابات المذكورة أعلاه، و دمج تجاربهم، وأفضل الممارسات الصناعية إلى ما يعرف الآن باسم سكرم.
في عام 2001 عمل شفابر Schwaber مع مايك بيدل Mike Beedle  لوصف الأسلوب في كتاب الاجايل تطوير البرمجيات مع سكرم Agile Software Development with Scrum.
ونص نهجه في التخطيط وإدارة المشاريع علي دمج صناع القرار والسلطة في مستوى الخصائص العملية واليقين.
على الرغم من أن كلمة SCRUM ليست اختصاراً، إلا أنه من المعروف أن بعض الشركات تكتبها بحروف كبيرة SCRUM. قد يكون هذا عائداً لأحد هذه الأوراق التي كتبها كين شفابر Schwaber في وقت مبكر و ذكرها كذلك في العنوان.
وفي وقت لاحق، قام كين شفابر Schwaber بانشاء تحالف  Scrum Alliance و عمل برنامج Certified Scrum Master programs و مشتقاته.
في خريف عام 2009، غادر كين شفابر تحالف سكرم وأسس Scrum.org لزيادة تحسين نوعية وفعالية سكرم.

الأدوار في سكرم

هناك ثلاثة أدوار أساسية ومجموعة من الأدوار الثانوية. 
الأدوار الأساسية يشار إليه سابقا بالبقر والأدوار الثانوية بالدجاج (كما في قصة الدجاج والبقر: ففي عجة البيض بالبسطرمة تحتاج التضحية بالبقر فدورها فيها اساسي و لكن الدجاج دوره ثانوي و ان كان كل منهما مهما).
الأدوار الأساسية هي تلك التي تدخل في تعريف سكرم في عملية إنتاج المنتج (الهدف من المشروع). وهم يمثلون فريق سكرم . 
وعلى الرغم من ان أدوار أخرى يمكن أن تدخل في بعض المشاريع الحقيقية، الا ان سكرم لا يقوم بتعريف أي أدوار الفريق غير تلك الموضحة أدناه:

فريق التطوير

فريق التنمية مسؤولة عن تقديم زيادات (اصدارات) محتملة ممكن تسليمها من المنتج Potentially Shippable Increments (PSIS) في نهاية كل سبرنت (هدف السبرنت). ويتكون من 3-9 أفراد ذوي مهارات متعددة الوظائف الذين قيام بهذا العمل الفعلي (تحليل وتصميم وتطوير واختبار، والاتصالات، التقنية، وثيقة، وما إلى ذلك). فريق التنمية في سكرم هو ذاتي التنظيم ، على الرغم من أنه قد يكون هناك مستوى معين من التفاعل مع مكاتب إدارة المشاريع (PMOS).

سكرم ماستر

السكرم ماستر أو مدير السكرم أو منسق السكرم ويكون مسؤولا عن تسهيل أعمال السكرم، فيكون مسؤولا عن إزالة العوائق التي تَحُول دون قدرة الفريق على تقديم أهداف المنتج وإنجازها. والسكرم ماستر ليس قائدا للفريق (بالإنجليزية: team leader) أو مدير مشروع (بالإنجليزية: project manager)، ولكن يعمل بصفته منطقة عازلة بين الفريق وأي تأثيرات تشتيتية. والسكرم ماستر يضمن أن يتم استخدام عملية سكرم على النحو المنشود. والسكرم ماستر هو المنفذ لقواعد نظام السكرم، وغالبا ما يترأس الاجتماعات الرئيسة، ويتحدى ويشجع الفريق ليتحسن. 
كما يمكن اعتبار الدور على أنه الزعيم الخادم لتعزيز وجهات النظر المزدوجة. والسكرم ماستر يختلف عن مدير المشروع في أن هذا الأخير يقوم بإدارة الأفراد وعليه مسؤوليات لا علاقة لها بدور سكرم ماستر. يستبعد دور ماستر سكرم أي من هذه المسؤوليات الإضافية. في الواقع، ليس هناك دور مدير المشروع في سكرم، وممارسة سكرم مع وجود مدير مشروع قد يسبب صعوبات. [ 13 ]

سبرنت

السبرنت (بالإنجليزية: sprint) وتعني حرفياً "فترة زمنية شهرية" هي الوحدة الأساسية للتطوير في السكرم. وهي جهد محدد المدة مسبقاً (بالإنجليزية: timeboxed) اي يقتصر على مدة محددة. وعادة ما تكون بين أسبوع واحد وشهر واحد، على الرغم من ان أسبوعين هي النموذجية.
يتم تحديد اهداف كل سباق في اجتماع التخطيط، حيث يتم تحديدالمهام وتقدير الالتزامات كهدف من السبرنت، و تنتهي باجتماع مراجعة واجتماع تقييم للسبرنت، حيث يتم مراجعة التقدم والدروس المستفادة للسباق المقبل والتي تم تحديدها. سكرم يبرز في نهاية سبرنت العمل الذي "تم انجازه" (done.) في حالة من البرمجيات، يعني هذا نظام متكامل، تم اختباره بشكل كامل، وتوثيقه للمستخدم النهائي ، و قابل للشحن او التسليم.

صقل قائمة مهام المنتج (Product backlog)

تراكم الصقل هو عملية مستمرة لمراجعة بنود تراكم المنتجات والتأكد من انهم الأولوية بشكل مناسب وأعدت بطريقة يجعلها واضحة وقابل للتنفيذ لفرق بمجرد دخولهم سباقات السرعة عن طريق النشاط التخطيط العدو. ويمكن تقسيم العناصر تراكم المنتجات إلى عدة أصغر حجما، ويمكن توضيح معايير القبول، أو الأعمال التحضيرية جديد مثل توضيحات بشأن احتياجات العميل أو طفرات تقنية يمكن تحديد.
تراكم الصقل ليس سكرم الممارسة الأساسية ولكن اعتمد كوسيلة لإدارة نوعية المواد المتراكمة الدخول في سباق.

إدارة قائمة مهام المنتج  بين مالك المنتج و فريق التطوير

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

قائمة مهام سبرنت Sprint backlog

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

نمو المنتج Product Increment

النمو (أو الاضافةالقابلة للتسليم، potentially shippable increment PSI) هي مجموع جميع التطويرات او البنود بقائمة المنتج التي أنجزت خلال سبرنت معين و جميع سباقات السبرنت السابقين. في نهاية السبرنت، يجب أن يتم النمو وفقا لمعايير فريق سكرم التي تضع تعريفا لانجاز البنود Definition of Done (DoD).
يجب أن تكون الزيادة في حالة صالحة للاستعمال بغض النظر عن ما إذا كان مالك المنتج يقرر التسليم فعلا.

رسم بياني للإنجاز Burndown chart

رسم سبرنت البياني ينشر علنا و يوضح العمل المتبقي في السبرنت
و يتم تحديثه كل يوم، وأنه يعطي لمحة بسيطة عن تقدم السبرنت. كما يقدم تصوير سريع للمراجع.
وهناك أيضا أنواع أخرى من الرسم البياني (burndown)، على سبيل المثال  الرسم البياني للاصدارات (burndown release)  
التي تظهر حجم العمل المتبقي لاستكمال الالتزام كهدف لإطلاق المنتج (تمتد عادة من خلال دورات متعددة).
وهناك  الرسم البياني للاصدارات البديلة  (alternative release burndown chart) "'، 
الذي يقوم في الأساس نفسه، ولكن من الواضح يبين التغييرات مجالا لإطلاق سراح المحتوى، عن طريق إعادة خط الأساس.
لا ينبغي الخلط بينه ومع الرسم البياني للقيمة المكتسبة.

الادوات Tooling

مثل أساليب آجايل الأخرى، فإن سكرم يمكن تنفيذها من خلال مجموعة واسعة من الأدوات.
العديد من الشركات تستخدم الأدوات العالمية، مثل جداول البيانات (spreadsheets) لبناء وصيانة الاساسيات  مثل r. وهنقائمة مهام سبرنت 
كم يوجد أيضا عديد من البرمجيات ذات المصدر المفتوح مخصصة لإدارة المنتجات في إطار عملية سكرم.
شركات أخرى تنفذ سكرم دون استخدام أي أدوات البرمجيات، وتنفيذ الاساسيات في أشكال ورقية مثل الورق و السبورات والملاحظات اللاصقة.

القيود Limitations

من الشائع عمل تهجين في نموذج سكرم ، حيث ان سكرم لا يغطي دورة حياة كامل لتطوير المنتجات .
لذا، تجد المنظمات في حاجة إلى إضافة عمليات إضافية لخلق تنفيذ أكثر شمولا.
على سبيل المثال، في بداية المشروع، تضيف المنظمات عادة توجيه لعملية جمع المتطلبات و تحديدالأولويات، 
والتصميم الأولي على المستوى العام، والميزانية 
وجدول التنبؤالزمني .
ورغم ذلك، فإن إطار سكرم لا يسمح صراحة بإضافة نقاط من هذا النوع؛ وبالتالي، فإن تحقيقا أكثر شمولا لدورة حياة البرمجيات يتطلب توسيع الإطار بدلا من تمثيله