ضد الگو ها – در توسعه محصولات چابک


ضد الگو ها (Anti pattern) مواردی هستند که وجودشان روی توسعه محصولات اثر منفی می گذارد. ما در مدیریت محصول به صورت اجایل از ابزار های متفاوتی استفاده می کنیم. که همه اینها میتوانند به ما در رسیدن به موفقیت کمک کنند اما لازم است با خطراتی که یک "محصول بسیار خوب برنامه ریزی شده" را میتواند "خراب" کند آشنا باشیم.

ممکن است خطرات زیادی از جهات مختلف برای محصولات وجود داشته باشد که ما حتی روحمان از وجود آنها اطلاعی ندارد و پیش خود فکر می کنیم که همه چیز به صورت کاملا درستی در حال پیشرفت است. تنها در صورت شناخت این موارد است که می توانیم برای کم کردن اثرات آنها کاری انجام دهیم.

تمامی مواردی که خدمت شما ارائه خواهم کرد براساس تجربه من باعث به وجود آمدن پیامد های منفی می شود. اگر بخواهیم آنها را به صورت اجمالی دسته بندی کنیم میتوانیم بگوییم بخشی از آنها مربوط به مدیریت، برخی مربوط به معماری و برخی مربوط به عدم ایجاد زبان مشترک و فهم دقیق از "منظور" صحبتهای افراد است.

در اینجا میخواهیم تا بر مواردی که در دسته بندی مشکلات مدیریتی قرار میگیرند تمرکز بیشتری داشته باشیم هرچند که لازم است بدانیم این موارد و مشکلات بر اساس پارامتر های مختلفی می توانند در سازمان ها و تیم ها متفاوت بوده و حتی بیشتر از مواردی باشند که در اینجا ذکر می کنیم.

عمده مشکلاتی که در زمینه مدیریت وجود دارد پیرامون نقاطی است که "افراد" در آن دخیل هستند و کمتر مشکلات سیستمی و ساختاری وجود دارند هرچند که آنها را نیز نمیتوانیم نادیده بگیریم. در اینجا تمرکز اصلی در جهت مواردی که محصولات در نتیجه "رفتار و تصمیم گیری های افراد" شکست می خورند، است.


ناتوانی در تحلیل:

اولین موردی که در اینجا به آن اشاره می کنم زمانی اتفاق می افتد که اعضای تیم در تجزیه و تحلیل مشخصات و نیازمندی ها به مشکل می خورند. مدیران محصول (یا مالکان محصول) در این شرایط بخاطر تلاش زیادی که برای تجزیه و تحلیل کامل نیازمندی های مشتریان انجامم می دهند نمی توانند در مورد جهت و PLC چرخه عمر محصول تصمیم بگیرند. زیرا نیاز دارند تا تمامی تجزیه و تحلیل های اولیه را به درستی انجام دهند.

در اینجا دو اتفاق می افتد، یا نیاز مندی ها به صورت صحیح تحلیل نشده و به صورت ناقص در اختیار تیم توسعه قرار می گیرد، یا اینکه زمان زیادی صرف تجزیه و تحلیل نیاز ها می شود (علاقه به بی نقص بودن) و باعث می شود زمان اثر مخرب خود را بر توقف فعالیت های تیم توسعه گذاشته و این خطر را ایجاد کند که احتمالا نیازمندی ها در طی این زمان طولانی دستخوش تغییرات شود.

تاثیر منفی موضوع روی تیم توسعه این خواهد بود که بدلیل وجود Gap(فاصله) در برنامه کاری آنها و به ثمر ننشستن تلاش هایشان، دچار نا امیدی می شوند. زیرا تیم توسعه همواره این آمادگی را دارد که در جهت تجزیه و تحلیل های انجام شده توسط شما، گام های توسعه ای خود را بردارد اما زمانی که شما این گام ها را براساس تحلیل ناقص تعریف کرده باشید و یا زمان بیش از حدی را صرف عالی ساختن آن کرده باشید، در حقیقت ریتم منظم "خوراک" برای فعالیت تیم توسعه را با فواصل خالی مواجه کرده اید و یا برای آنها دوباره و چند باره کاری تراشیده اید.

تجزیه و تحلیل ایده آل گرایانه زمانی رخ می دهد که شما در انتخاب یک راه برای شروع، شجاعت و اطمینان کافی را ندارید، متاسفانه این مورد بیشتر در تیم هایی رخ می دهد که مدیران یا مالکان محصول به صورت جداگانه از سایر مالکان و مدیران محصول فعالیت می کنند و به صورت منظم به اشتراک گذاری اطلاعات و دیدگاه ها رخ نمی دهد (فرد گرایی به جای کار تیمی) در نتیجه دیدگاه محدود و انفرادی در مدیران و مالکان محصول ایجاد شده و قدرت تصمیم گیری بهتر تحت تاثیر خرد جمعی را از آنها سلب می کند.

در حقیقت توسعه محصول به صورت Iterative به همین دلیل در چارچوب اجایل مورد استفاده قرار می گیرد که هر گونه اشکال و اشتباهی در تحلیل با ارائه هر نسخه از Working Products قابل رصد و اصلاح باشد.

فراموش نکنیم که ما نیاز نداریم همه چیز را از ابتدا بدانیم حتی اگر Domain Expert هستیم ممکن است مواردی باشد که در وسعت دید ما نبوده و ما را دچار خطا کند. توسعه محصول به صورت Iterative به شما انعطاف پذیری خوبی می دهد تا در بازه های کوتاه بتوانید با تصفیه موارد اشتباه، انتخاب های درست انجام دهید و در نتیجه به سمت محصولی بهتر گام بردارید. می توانید به این نکته هم توجه کنید که تیم های توسعه نرم افزار از بوجود آمدن چنین پیشرفت هایی و همچنین دیده شدن تلاش هایی که می کنند بسیار خرسند خواهند بود.

تاکید زیاد بر چیزایی که بعدا خیلی بدردبخور هستند ولی الان نه چندان:

به این معنا که بر روی مواردی که باید در فاز ها/اسپرینت های بعدی به انجام آنها فکر کنیم، تاکید زیادی صورت بگیرد. در این حالت میتوان گفت که اولویت بندی به درستی انجام نشده است زیرا مثال ساده آن این است که زمان و توانایی بسیار با ارزش توسعه دهنده ها روی مواردی صرف می شوند که در حال حاضر ضرورتی ندارند و ارزش چندانی ایجاد نمی کنند.

در صورتی که این اشکال وجود داشته باشد، تیم ها پس از هر اسپرینت، تعدادی امکانات نرم افزاری پراکنده با اولویت های گوناگون را توسعه داده اند که در کنار هم، ایجاد هماهنگی و همخوانی درستی برای ارائه بعنوان Working Product نمی کند. در این شرایط وظیفه مدیران یا مالکان محصول به خوبی روشن می شود که در زمینه روشن سازی نیازمندی های ذینفعال و همچنین همکاری با آنها برای تعیین اولویت های هر مورد باید فعالیت بیشتری انجام دهند.

تاثیر فکر شاخص بر تفکر گروه:

این مشکل یکی دیگر از مواردی است که میتواند بر موفقیت محصولات تاثیر منفی بگذارد. برای توضیح بیشتر لازم است بگویم یکی از باگ های کار تیمی این مورد است، که از نظر علم روانشناسی بیان می کند "افراد تمایل بیشتری به پیروی از نظرات عمومی مطرح شده در گروه را دارند" به این معنا که حتی اگر نظری مخالف با اکثریت گروه داشته باشند ترجیح می دهند درباره آن صحبت و بحث نکنند و از راهی که گروه پیش گرفته، پیروی کنند.


این اشکال در اکثر موارد زمانی رخ می دهد که فردی با دانش بیشتر و یا با شیوه رفتار Bold (برجسته) تر نظرات خود را بیان می کند به گونه ای که باعث ساکت شدن افراد دیگر می شود و بحث و صحبت در آن لحظه خاتمه می یابد. سکوت افراد حاضر در جلسه به این معنا نیست که آنها تمایلی برای ابراز نظر های خود ندارند بلکه با شرایط پیش آمده ترجیح می دهند نظر خود را برای جلوگیری از هر گونه برخورد احتمالی از هر نوع، نزد خود نگه دارند.

افرادی ساکت، همان همکاران ما هستند که تجربه های بسیار با ارزش و متفاوتی دارند و موضوعات را از دیدگاه های مختلفی نسبت به ما می بینند و می توانند با نظرات ارزشمند خود به ما در زمینه فعالیت گروهی و توسعه محصول کمک بسیار کنند. بنابراین یکی دیگر از توانایی های مهم افراد حاضر در تیم ها به زمینه های Soft Skill بر می گردد، تا بتوانند درگیر شدن افراد در انجام کار تیمی را به حداکثر برسانند و همچنین در بیان حرف ها و نظرات خود طوری عمل کنند که باعث سکوت افراد نشده بلکه به نتیجه گیری برسند.

یکی از راهکار هایی که برای جلوگیری از بروز این مشکل از آن استفاده می شود این است که راه حل ها به صورت جداگانه توسط هر فرد تعریف شود، حتی در سازمان های بزرگ برای ارائه راه حل برای مشکلات، تیم ها به صورت جداگانه با هم کار می کنند و راه حل های خود را ارائه می دند. همین کار را می توانیم به صورت انفرادی نیز انجام بدیم. در موارد خاصی که میدانیم نظر جمعی و تفکری بالاتر از فکر یک نفر مورد نیاز است (که امیدوارم در سازمان ها همیشه به این صورت باشد) افراد به صورت جداگانه راهکار ها یا نظرات خود را می نویسند و سپس تمامی آنها را جمع آوری می کنیم و تک تک روی آنها بحث خواهیم کرد.

پایان قسمت اول

http://vrgl.ir/UokFT
http://vrgl.ir/7bI5b
http://vrgl.ir/05BAu
http://vrgl.ir/0Dyzz