Technical Excellence یکی از مبحث های Agile می باشد که یا مورد محبت زیاد و یا کم مهری بیش از اندازه قرار می گیرد . البته این مسئله صرفا برای ایران نیست و تیم های تازه کار Agile با این مشکل مواجه می شوند. در آیه شماره 9 اصول توسعه چابک آمده است :
Continuous attention to technical excellence
and good design enhances agility
معنی لفظی این آیه : توجه مداوم به برتری فنی و طراحی خوب باعث افزایش چابکی می شود . اگر بخواهیم این اصل را از اصول توسعه چابک تفسیر نماییم به این نقطه خواهیم رسید که در توسعه چابک مسائل تکنیکی و فنی ( که در متدلوژی های دیگر در نظر گرفته نمی شدند) با ارزش و کلا جزو پروسه چابک سازی نامیده شده اند . به عبارت ساده تر در این اصل تیم های Agile را به حفظ برتری فنی و تکنیکی مداوم دعوت کرده اند و در این حد این قضیه مهم خوانده شده است که گفته اند : “باعث افزایش سطح چابکی می شود ” که در هیچ یک از اصول توسعه چابک به صراحت به این مسئله اشاره نشده است یعنی این مورد تاثیر بیشتری نسبت به بقیه خواهد داشت .
ولی طبق تجربه من عرض می کنم که این اصل را قبول ندارم و این را می توان بیان کنم که : ” بدون Technical Excellence چابک بودن امکان پذیر نخواهد بود ” . و دغدغه نوشتن پستی فقط و فقط بیان لزوم برتری فنی برای تیم های Agile می باشد .
قبل از بیان لزوم برتری فنی لازم است تعریفی از Technical Excellence داشته باشیم :
Technical Excellence یا همان برتری فنی به معنی استفاده از ابزارها , روش ها , تکنیک ها , متد ها و … برتر در پروسه طراحی , تست و کد نویسی می باشد . از جمله Technical Excellence ها مورد بحث و مهم در زمینه چابک Unit Testing , Refactor , Continues Integration , Clear Code , Automated Tests , TDD , … .و البته که تمام موارد فنی جزو این برتری فنی حساب خواهند شد .
برای اثبات مطلب ارائه شده (بدون Technical Excellence چابک بودن امکان پذیر نخواهد بود) کافی است با هم یک مثال کوچک را بررسی نماییم : در ارزش 4 ام بیانیه توسعه چابک آمده است :
Responding to change over following a plan
بیان شده است که ما به عنوان یک تیم چابک باید بتوانیم پذیرای تغییرات باشیم .
همانطور که می دانید تغییرات آفت توسعه نرم افزار هستند و این تغییرات باعث شکست پروژه های خیلی بزرگ شده اند و البته اگر بتوانیم این تغییرات را کنترل و مدیریت کنیم علاوه بر رضایت مشتری به سود آوری خوبی خواهیم رسید .دقیقا دو روی یک سکه هستند یک رو رضایت مشتری و سود آوری و یک روی دیگر نارضایتی و ضرر و زیان .
فرض کنید ما یک تیم Agile هستیم که اعتقادی به Technical Excellence نداریم و این را هم می دانیم که برای پذیرایی از تغییرات باید کد های تمیزی داشته باشیم . برای داشتن کد تمیز باید کدها Refactor شده باشند . برای رفاکتور شدن کد های نیاز به تست های اتوماتیک و کلا Unit Testing داریم . Unit Test ها باید برروی یک Continues Integration قرار بگیرند .
حالا ما به عنوان یک تیم Agile چگونه می خواهیم بدون Technical Excellence پذیرای تغییرات باشیم ؟ اگر نمی خواهیم پذیرای تغییرات باشیم , پس چگونه اسم خودمان را تیم Agile یا چابک نامیده ایم ؟
این فقط یک مثال کوچک از لزوم Technical Excellence بود که خواستم از این طریق عرض کنم : موارد و اصولی که در بیانیه توسعه چابک بیان شده است , همینطوری کشکی نیست و نمی شود گفت که این به درد ما نمی خورد بنداز دور . نوشتن چنین نوشته هایی از آنجایی برای من اهمیت پیدامی کند که می شنوم : ” ما Agile کار می کنیم , ولی Unit Test نداریم . “
البته این معضل فقط برای Agile نیست , بنده تیم هایی (گردن کلفت) را دیدم که ادعای کار با RUP را می کردند ولی در واقع همان سنت حسنه Waterfall را ادامه می دادند . پیشنهاد من این است که Agile کار نکنیم بلکه Agile باشیم که اینگونه همه چیز حل خواهد شد .
به امید تیم های Agile در سرتاسر جهان .
یاشیاسیز
مطالب مرتبط با این بحث :
3 دیدگاه در “آیا Agile نیازی به Technical Excellence دارد؟”