یادگیری کانبان (3)

  • یوسف مهرداد بی‌بالان

مترجم‌ها: یاسر کازرونی، مریم معصومی‌راد

مارکوس گفت: «عالیه! اون طرف یه اتاق پیدا کردم که تابلو هم داره. یوآخیم، یادداشت­‌هات همراهته؟»

یوآخیم نگاهِ عاقل اندر سفیهی به او کرد و گفت: «بله! البته». او مربیِ متدهای چابک است؛ پس حتماً یادداشت‌­ها را همیشه همراهش دارد.

«عالیه، پس بیایید برویم.» مارکوس این جمله را گفت و راه افتاد.

وقتی به تابلو رسیدند و کنارش جمع شدند، یوآخیم پرسید: «کی می‌تونه به ما بگه که تیم‌تان چه‌کار می‌کنه؟»

whiteboard

سزار در حالی که لپ­‌تاپ رو در می‌آورد گفت: «اون نفر احتمالاً منم.»

اریک با ناراحتی فریاد زد: «نه! لطفاً اسلاید نه! به سزار بگید برای این کارا وقت نداریم.»

سزار با کمی دستپاچگی گفت: «بله، حق با شماست. اما این نسخه­‌ی خلاصه‌شده است.»

تیم ما یک تیم کوچکِ توسعه‌ی نرم‌افزار است که اعضای آن، همین افرادی‌اند که در اینجا حضور دارند. ما برای یک شرکت بیمه‌­ی بز‌‌‌‌‌‌رگ‌ ‌‌‌کار می­‌کنیم مسئولیت نرم­‌ا‌‌فز‌‌‌‌‌ار موبایل بانکِ شرکت که به­‌تازگی هم منتشر شده با ماست. چون تیم، خیلی کوچک است، افراد می‌توانند در مورد خیلی از بخش‌ها خودشان تصمیم‌گیری کنند. اگرچه گزارش­‌هایی به بخش­های دیگر شرکت ارسال می‌گردد ولی افراد می‌توانند درباره‌ی کارهای خود تصمیم‌گیری کنند؛ ولی حرف آخر را در تصمیم­‌های مهم، سزار می‌زند. مسئولیت پیاده‌سازی ویژگی­‌های جدید، پشتیبانی و نگهداری نرم­‌افزار موبایل بانک بر ­عهده­‌ی تیم است.

مارکوس پرسید: «چرا به کمک ما نیاز دارید؟» و درحالی‌­که منتظر پاسخ بود، شروع کرد به نوشتن عنوان چالش‌ها­ روی فلیپ­‌چارت[۱].

فرانک، رهبر پروژه[2] جلو آمد و گفت: «من می­‌تونم بخشی از این سؤال را جواب بدم. ما در هماهنگ کردن خودمان با سرعت مورد انتظار براي تحويل­دادنی­­‌ها مشکل داریم. تعداد زیادی شکایت از ذینفعان مختلف در سازمان دریافت کردیم که ویژگی­‌های درخواستی خودشون رو به موقع تحویل نگرفته‌اند.»

سزار گفت: «دقیقه به دقیقه وضع بدتر می‌شه. دیگه كسي به کیفیت كار ما اعتماد نداره و قطعاً به برآوردها و تاریخ‌های تحویل ما هم اعتماد ندارن

دافنه گفت: «برخی از ما در این تیم احساس می­‌کنیم که در باتلاقی از کارها گیر کردیم و نمی­‌دونیم چه کاری را باید اول انجام بدیم. تلاش برای راضی نگهداشتن همه باعث می­شه تندتند اولویت‌­ها تغییر کنه و همه­‌ی کارها بشه «اولویت شماره یک».»

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

  • ما معمولاً کارها را دیر انجام می‌دهیم
  • بیشتر اوقات برآوردها غلط هستند
  • تیم در باتلاقی از کارها گیر کرده است
  • اولویت­ها مشخص نیستند
  • از هرجایی کار به تیم سپرده می‌­شود
  • معلوم نیست که کی چه كار می‌کند

فرانک که دیگر بی‌قرار شده بود گفت «خوب! بیایید برگردیم سرِکارمون. از کجا شروع کنیم؟»دافنه حرف بقیه را قطع کرد: «دست شما درد نکنه، فکر کنم بس باشه. زمان داره مي­گذره و می­‌دونید که فقط دو ساعت وقت داریم، درسته؟ بیایید کار مفیدی انجام بدیم.»

یوآخیم پاسخ داد: «درك مي­‌كنيم که شما دوست دارید زودتر شروع کنیم. ولی باید بفهمید که کانبان کمی با روش­های دیگه متفاوته. برای نمونه، اسکرام[3] یا آر یو پی[4] (از پیش) تعیین کرده‌اند که چه نقش‌­هایی[5] در تیم وجود داشته ­باشه، چه جلسه­‌هایی برگزار بشه و حتی چگونه جلسه‌ها را برگزار کنید. ولی کانبان از جایی که هستید شروع می­‌کنه و کمک می­‌کنه تا وضعیت جاری خودتون رو بفهمید و قدم‌های بعدی رو برای بهبود شناسایی و تعیین کنید.»

مارکوس از ترس این که مبادا صحبت­های یوآخیم بیش از اندازه تئوری به نظر بیاید، حرف او را قطع کرد و گفت: «بله، این برای ما و شما خیلی مهمه که بفهمیم الان در چه وضعیتی هستید تا بتونیم به شما کمک کنیم. اما قطعاً می‌تونیم همین الان شروع کنیم تا شما بیش­تر وضعیت جاری خودتون رو بفهمید. فهرست چالش­‌ها رو هم به ­عنوان سرفصل کارهایی که قراره در این زمان کوتاه با هم انجام بدیم، نگه می‌­داریم.»

یوآخیم پرسید: «راستی، اسم تیم­ شما چیه؟»

فرانک با یک لهجه‌ی کاملاً مکزیکی گفت: «از این به بعد تیم را صدا می‌کنیم: تیم کانبانِروسِ[6] !». اعضای گروه ­خندیدند و مارکوس نام تیم را روی فلیپ‌­چارت نوشت.

یوآخیم شروع کرد: « بیایید با نمایش و گفتگو[7] شروع کنیم تا کارمون کمی بیشتر تصویری[8] بشه؛ همه موافق هستند؟»
بخش بعدی
بخش قبلی

[1] Flipchart [2] Project leader [3] Scrum [4]Rational Unified Process (RUP) [5] Role [6] Kanbaneros [7] Show-and-tell [8] Visual

خاطرات امیر (آشغال ها را دوست داشته باش)

  • یوسف مهرداد بی‌بالان

پیش‌گفتار:
جدیدترین نامه‌ی امیر را در ادامه آورده‌ام امیدوارم برای همه ما درس بزرگی باشد.

گفتار:
۵ سال قبل بود که شروع کردم به نوشتن مقاله در Codeproject, بار اول که مقاله را فرستادم, یک جواب ناراحت کننده گرفتم : “این مقاله یک آشغال کد است”.

اینطور بود که مقاله ریجکت شد و من پرت شدم به جای اولم. فکر کردم اگر کسانی هستند که میتوانند, پس لابد من هم میتوانم. عقب نشینی کردم و باز تدارک دیدم و دوباره شروع کردم.

امروز سال ها از آن روز که کار تحقیقاتی کوچولویم با عنوان “آشغال” نام برده شده میگذرد. اگرچه روزی خبر از Codeproject میدادم و شما به من با تشویق هایتان دلگرمی میدادید, حالا اما خبر بزرگتری دارم.

نتایج تحقیقات ۳ سال گذشته را در قالب ۲ مقاله در زمینه استفاده از الگوریتم های یادگیری ماشین به کنفرانس کاربرد مهندسی در پزشکی و بیولوژی (EMBC) با قدمت ۳۸ ساله فرستادم. این کنفرانس که مهمترین کنفرانس در زمینه مهندسی در پزشکی در جهان است, هر ساله در کشور آمریکا برگزار میشود و پذیرای قشر متنوعی از محققان و پزشکان از دانشگاه های و مراکز تحقیقاتی از سراسر دنیاست.

ترسیدم که بگویند این ۲ تا آشغالت را بردار و برو پی کارت. اما میدانستم که آشغال ها را باید دوست داشت. گفتم اگر هم شکست خوردم, بر میگردم و تدارک میبینم و دوباره میفرستم. اما امشب نتایج بررسی ۳ ماهه مقالات آمد و هر ۲ مقاله در کمال نابوری ام پذیرفته شد.
میگویم میخواهم یک راز مهمی با شما در میان بگذارم. فقط هیس!! بیایید جلوتر. بیشتر…. بیشتر… ” آشغال ها بهترین دوستان ما هستند.. آشغال ها را دوست داشته باش! “.
گزیده:
«موفقیت یک نتیجه است نه یک هدف» گوستاو فلوبر

گفتگویی در گروه تلگرامی نیازمندیها

  • یوسف مهرداد بی‌بالان

پیش‌گفتار

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

دوستان عزیزی که علاقه‌مند به حضور در این گروه هستند، می‌توانند به این آدرس مراجعه فرمایند: گروه تلگرامی نیازمندیها

گفتگوی تلگرامی

آقای قاقالو:

حس کردم گروه خیلی سوت و کوره هست گفتم یه بحث کوچیکی تو حوزه تحلیل شروع کنیم. اونم اینکه:

برای تحقق مورد کاربرد در سطح تحلیل چه کارهای باید انجام بدیم؟

من این کارها رو انجام میدم:

۱- یک مورد کاربرد انتخاب میکنم.

۲- سه نوع کلاس سطح تحلیل با کلیشه entity, boundary و control رو پیدا میکنم.

۳- رفتارها و صفات مربوط به هر کلاس سطح تحلیل رو شناسایی میکنم.

۴- روابط بین کلاس های سطح تحلیل رو مشخص میکنم.

نتیجه ۴ گام بالا میشه یک نمودار کلاس با سه نوع کلاس سطح تحلیل که صفات و رفتار هر یک شناسایی شده و روابط بین کلاس های سطح تحلیل نیز مشخص شده است.

نمودار کلاس روابط ساختاری و ایستای کلاس های مربوط به مورد کاربرد را مشخص میکنه.

۵- در این گام در صورت نیاز به مشخص کردن روابط پویایی بین نمونه های کلاس های سطح تحلیل اقدام به آماده کردن نمودار توالی میکنم.

۶- گام های بالا رو برای هر یک از موارد کاربرد تکرار میکنم.

۷- در گام آخر هم نمودار کلاس حاصل از تحقق هر مورد کاربرد را با هم ترکیب میکنم.

نتیجه کارم میشه یک نمودار کلاس سطح تحلیل مربوط به کل نرم افزارم که قرار است توسعه داده بشه

شما چطور عمل میکنید؟

مهرداد:

ضمن تشکر از آقای قاقالوی عزیز، اگر اجازه بفرمایید من هم نظرم را عرض کنم.

با گامهای دو به بعد برای تحلیل گر سیستم موافق نیستم.

اگر اشتباه نکنم در خود آر یو پی، این کار به تحلیلگر سیستم سپرده نشده است.

گام دو به بعد “فضای طراحی و تکنولوژی شی گرایی” دارد که لااقل در ایران تحلیل گران فاقد این مهارت هستند

آقای نوذری:

سلام وقت بخیر. من نظر آقای قاقالو رو قبول دارم. فقط باید به یک مساله مهم توجه کرد. همونطور که ایشون نوشتن، باید دقت شود که فعالیت های 2 به بعد “در سطح تحلیل” انجام شود. با توجه به اینکه تحلیل از نظر انتزاع سطحی بالاتر از طراحی دارد، اگر این دقت نظر انجام شود در فضای “طراحی” نخواهیم افتاد. موضوع یا نگرانی که استاد عزیزم مهندس مهرداد، با عنوان “فضای طراحی و تکنولوژی شی گرایی” اشاره فرمودن نگرانی به جایی هست. ولی مانع از انجام گام های 2 به بعد که جناب قاقالو ذکر کردن نخواهد شد. به نظر من باید نگرانی مهندس مهرداد رو صرفا با عبارت “جلوگیری از افتادن در فضای تکنولوژی” بیان کرد. چون (1) طراح کسی هست که Artifact تحلیلگر رو می گیره و روی اون تکنولوژی سوار می کنه و (2) تحلیل رو با رویکرد شیئ گرایی و در سطح بالایی از انتزاع هم میشه انجام داد.

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

موضوع یا توضیحی که باید به نوشته آقای قاقالو اضافه بشه این هست که با این مراحل ما داریم System Analysis رو انجام میدیم. ولی اگه بخوایم Business Analysis انجام بدیم اون وقت موضوع متفاوت خواهد بود.

آقای قاقالو:

اگر بخواهیم با دقت بیشتری به موضوع مطرح شده نگاه کنیم میبینیم که در RUP یک فعالیتی با نام use case analysis وجود داره و نقشی که مسول انجام این فعالیت هست Designer می باشد. در این فعالیت تقریبا تمام گام هایی که در بالا ذکر شد انجام میشه اما توسط طراح و نه تحلیلگر سیستم.

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

اساسا تحقق مورد کاربرد در سطح تحلیل که در فعالیت use case analysis انجام میشه وظیفه طراح هست و نه تحلیلگر سیستم. اما تحلیلگر سیستم میتونه نقش مثبت و موثری در این فعالیت داشته باشه.

در مقابل فعالیت use case analysis فعالیتی دیگر با عنوان use case design وجود داره که که مسئولیت انجام اون با طراح هست و این جایی هست که به طور واقعی حرف از تکنولوژی به میان میاد یعنی به عنوان مثال زبان برنامه نویسی و کیفیت مطرح میشه.

مهرداد:

خوشحال هستم که این گفتگو شکل گرفته است.

اگر اجازه دهید چند نکته را عرض کنم.

1) به نظرم قیاس مدل «تحلیل نرم‌افزار» بر مبنای «تکنولوژی شیءگرایی» با «مدل منطقی پایگاه داده» ما را به اشتباه خواهد انداخت.

در مدل منطقی پایگاه داده اثری از «رفتار» (behaviour) و «کارکرد» (function) نیست. ما فقط «ساختار» را در مدل مفهومی پایگاه داده داریم.

در مدل تحلیل نرم‌افزار ما علاوه بر ساختار، کارکرد و رفتار را نیز خواهیم داشت. به عبارت ساده‌تر، شما علاوه بر شناسایی، کلاسها، صفات کلاسها، روابط ساختاری باید متدهای کلاسها و نحوه‌ی تعامل آنها را برای تحقق سناریوی مد نظر «شناسایی» یا «اختراع» کنید.

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

تحلیل نرم‌افزار یعنی این که:

– کلاسها، صفات و روابط ساختاری بین کلاسها را پیدا کنید

– تعیین کنید که هر کلاس باید چه متدها و مسئولیتهایی داشته باشد

– تعیین کنید که کلاسها چگونه با یکدیگر تعامل کنند تا سیستم بتواند قیمت ردیف و قیمت کل فاکتور را نشان دهد.

 

برای نمونه به سوالهای زیر پاسخ دهید

– کلاس فاکتور و قلم فاکتور چه متدهایی دارند؟ (لطفا از ذخیره، ویرایش، حذف، … نام نبرید) چگونه این متدها را پیدا می‌کنید؟

– قیمت ردیف و قیمت کل فاکتور را کدام کلاس محاسبه کند؟ فاکتور + فاکتور، قلم فاکتور + یک کلاس جدید + …

-این کلاس برای آن که بتواند قیمت کل و قیمت ردیف را حساب کند باید با کدام کلاسها پیغام پسغام کند؟

 

بی‌شک برای پاسخ به این پرسشها، داشتن «دانش» و «مهارت» در «تکنولوژی شیءگرا» ضروری است.

از نقش تحلیل‌گر سیستم چنین انتظاری نمی‌رود. اگر بخواهیم کمی صادقانه صحبت کنیم، تعداد کمی از برنامه‌نویسان دارای این مهارت هستند، چه رسد به تحلیل‌گران.- کلاس فاکتور و قلم فاکتور چه متدهایی دارند؟ (لطفا از ذخیره، ویرایش، حذف، … نام نبرید) چگونه این متدها را پیدا می‌کنید؟

– قیمت ردیف و قیمت کل فاکتور را کدام کلاس محاسبه کند؟ فاکتور + فاکتور، قلم فاکتور + یک کلاس جدید + …

-این کلاس برای آن که بتواند قیمت کل و قیمت ردیف را حساب کند باید با کدام کلاسها پیغام پسغام کند؟

بی‌شک برای پاسخ به این پرسشها، داشتن «دانش» و «مهارت» در «تکنولوژی شیءگرا» ضروری است.

از نقش تحلیل‌گر سیستم چنین انتظاری نمی‌رود. اگر بخواهیم کمی صادقانه صحبت کنیم، تعداد کمی از برنامه‌نویسان دارای این مهارت هستند، چه رسد به تحلیل‌گران.

آقای نوذری:

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

منظور از چیزی که نوشتم مقایسه تحلیل نرم افزار با مدلسازی دیتابیس نبوده. من فقط می خواستم به نوعی این موضوع رو بگم که فعالیت هایی از جنس تحلیل رو میشه پیدا کرد که توی سطحی پایین تر، طراح هم با اونها سر و کله میزنه. به نظر من واسه این که بحث قوام بگیره بیایید از انتها حرکت کنیم تا به ابتدای صحبت برسیم. به این معنا که یه سری از Term ها را روش بحث کنیم. تا بتونیم نهایتا به تعریفی روشن از تحلیل و فعالیت هایی که تحلیلگر باهاشون درگیر هست برسیم. استاد من با فرمایش شما: “بی‌شک برای پاسخ به این پرسشها، داشتن «دانش» و «مهارت» در «تکنولوژی شیءگرا» ضروری است.

از نقش تحلیل‌گر سیستم چنین انتظاری نمی‌رود. اگر بخواهیم کمی صادقانه صحبت کنیم، تعداد کمی از برنامه‌نویسان دارای این مهارت هستند، چه رسد به تحلیل‌گران.” کاملا موافقم. ولی به نظر من حتی اگه بخش از چند فعالیتی که شما اسم بردید مثل شناسایی و تعامل کلاس ها(البته در سطح تحلیل) و … به طراح سیستم سپرده شود، در اصل و اساسا بخشی از فعالیت تحلیلگر به او سپرده شده است.

شاید به نوعی بتوان گفت تحلیل سیستم در واقع به نوعی “طراحی اولیه” یا به عبارتی “طراحی در سطح بالایی از انتزاع” می باشد. این مطلب در کتاب زیر به تفصیل آمده است:

Use Case Driven Object Modeling with UML, Theory and Practice. By: Doug Rosenberg and Matt Stephens

این کتاب فصلی با عنوان ROBUSTNESS ANALYSIS دارد. در این بخش از کتاب هدف از ROBUSTNESS ANALYSIS این طور بیان شده است:

To get from use cases to detailed design (and then to code), you need to link your use casesto objects. The technique we describe in this chapter, robustness analysis, helps you to bridgethe gap from analysis to design by doing exactly that. In a nutshell, it’s a way of analyzing youruse case text and identifying a first-guess set of objects for each use case. These are classifiedinto boundary objects, entity objects, and controllers (which are often more like functionsthan objects).

همچنین در ادامه بیان شده است که تحلیل یا تکنیکی که نویسنده از آن با عنوان Robustness Analysis نام برده است برای پر کردن فاصله یا گپی است که بین تحلیل و طراحی وجود دارد:

نویسنده کتاب در ادامه در خصوص شکل فوق و تشریح Robustness Analysis این توضیح را بیان نموده است:

Looking at Figure 5-1, robustness analysis sort of takes place in the murky middle groundbetween analysis and design. If you think of analysis (i.e., the use cases) as the “what” anddesign as the “how,” then robustness analysis is really preliminary design. During this phase,you start making some preliminary assumptions about your design, and you start to thinkabout the technical architecture (also see Chapter 7) and to think through the various possibledesign strategies. So it’s part analysis and part design.

همچنین وی برای مدلسازی و ترسیم نمودارها نیز چنین اصطلاحی را با توضیح زیر بیان می نماید:

… a robustness diagram is an object picture of a use caseAnatomy of a Robustness DiagramA robustness diagram is somewhat of a hybrid between a class diagram and an activity diagram.It’s a pictorial representation of the behavior described by a use case, showing bothparticipating classes and software behavior, although it intentionally avoids showing whichclass is responsible for which bits of behavior. Each class is represented by a graphical stereotypeicon (see Figure 5-2). However, a robustness diagram reads more like an activity diagram(or a flowchart), in the sense that one object “talks to” the next object. This flow of action isrepresented by a line between the two objects that are talking to each other.

There’s a direct 1:1 correlation between the flow of action in the robustness diagram andthe steps described in the use case text.

مهرداد:

پیشنهاد می‌کنم ابتدا چند عبارت زیر را از هم تفکیک کنیم

تحلیل سیستم

تحلیل نیازمندی‌ها

تحلیل (در ادبیات ما در ایران)

تحلیل نرم‌افزار

طراحی نرم‌افزار

 

آن چه در ایران به نام تحلیل شناخته می‌شود به «تحلیل نیازمندی‌ها» و به عبارت درست‌تر «نیازمندی‌ها» نزدیک‌تر است (requirements)

تحلیل نیازمندی‌ها کاری است که ما از «تحلیل‌گر سیستم» انتظار داریم.

دقت بفرمایید که «تحلیل نرم‌افزار» به کلی با «نیازمندی‌ها» متفاوت است. (به پسوند نرم‌افزار دقت بفرمایید)

تحلیل نرم‌افزار همان طور که فرموده بودید «پیش طراحی» است. به عبارت ساده‌تر تکنیکی است برای گذار از نیازمندی‌ها و ورود به طراحی نرم‌افزار.

روباست‌نس آنالسس، تکنیکی است در «تحلیل نرم‌افزار» که به طراح نرم‌افزار کمک می‌کند کلاسها، آبجکت‌ها و مکانیزمها و … را شناسایی کند بدون آن که درگیر موضوعات کیفی و تکنولوژی ساخت محصول گردد. همان طور که در شکل به روشنی مشخص است، «تحلیل نرم‌افزار» قرار است شکاف بین نیازمندی‌ها (در شکل یوزکیس‌ها) به طراحی‌ نرم‌افزار را پرکند.

همان طور که عرض کردم فکر می‌کنم که «تحلیل نرم‌افزار» به مهارتها و دانش طراحی نرم‌افزار نزدیک‌تر است تا دانش و مهارت «تحلیل‌گر سیستم».

البته این فقط یک دسته‌بندی مفهومی است. ما می‌توانیم افرادی را پیدا کنیم که به خوبی از عهده‌ی همه‌ی این کارها بر آیند. ولی باید بدانیم که «جنس» این کارها با هم متفاوت است.

جمع‌بندی بنده از فرمایشات حضرتعالی این است که ما برداشت‌های یکسانی از واژه‌ها نداریم، وگرنه در باقی قضایا هم‌نظر هستیم.

سپاسگزارم از این که چراغ این خانه را روشن نگه می‌دارید و امیدوارم که بقیه‌ی دوستان نیز مشارکت بیشتری داشته باشند.

شاد باشید

آقای نوذری:

مرسی استاد از صحبت هاتون. خیلی استفاده کردیم.

با شما و فرمایشتون: “جمع‌بندی بنده از فرمایشات حضرتعالی این است که ما برداشت‌های یکسانی از واژه‌ها نداریم، وگرنه در باقی قضایا هم‌نظر هستیم.” کاملا موافقم. توی پست قبلی هم اشاره کرده بودم. چه قدر قشنگ از لحاظ مفهومی چندتا Term بالا رو از هم تفکیک کردین. اجازه بدین من هم یه موضوع دیگه رو به نقل از پرسمن اشاره کنم. و اون “مهندسی کردن سیستم” قبل از شروع “مهندسی کردن نرم افزار” هست:

Software engineering occurs as a consequence of a process called systemengineering. Instead of concentrating solely on software, system engineeringfocuses on a variety of elements, analyzing, designing, and organizing thoseelements into a system that can be a product, a service, or a technology for thetransformation of information or control.

The system engineering process is called business process engineering whenthe context of the engineering work focuses on a business enterprise. When aproduct (in this context, a product includes everything from a wireless telephoneto an air traffic control system) is to be built, the process is called productengineering…

… Before software can be engineered, the ”system” in which it resides must be understood. To accomplish this, the overall objective of the system must be determined; the role of hardware, software, people, database, procedures, and other system elements must be identified; and operational requirements must be elicited, analyzed, specified, modeled, validated, and managed. These activities are the foundation of system engineering.

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

گزیده:

The most difficult part of requirements gathering is not the act of recording what the user wants, it is the exploratory development activity of helping users figure out what they want. Steve McConnell

Technical Debt: From Metaphor to Theory and Practice

  • یوسف مهرداد بی‌بالان

Introduction

The metaphor of technical debt in software development was introduced two decades ago by Ward Cunningham to explain to nontechnical product stakeholders the need for what we call now “refactoring.” It has been refined and expanded since, notably by Steve McConnell in his taxonomy, Martin Fowler with his four quadrants, and Jim Highsmith and his colleagues from the Cutter Consortium with their model of the impact of technical debt on the total cost of ownership.

Consequently, the concept of technical debt in software development has become somewhat diluted lately. Is a new requirement, function, or feature not yet implemented “requirement debt”? Do we call postponing the development of a new function “planning debt”? The metaphor is losing some of its strength.

Organizing the Technical Debt Landscape

95_Q1_Technical_Debt_01Figure 1. The technical debt landscape. On the left, evolution or its challenges; on the right, quality issues, both internal and external.

95_Q1_Technical_Debt_02

Figure 2. Four colors in a backlog.

The element areas reconcile four types of possible improvements—the tasks to attend to in the future to increase value, such as adding new features (green) or investing in the architecture (yellow), and to reduce the negative effects on value of defects (red) or technical debt (black).

A Unified Theory?

Kevin Sullivan suggested that a simple model for tackling technical debt represents a software development endeavor as a sequence of changes, most of them improvements.9 At a given point in time, the past set of changes is what defines the current state of the software. Some of these past changes are the events that triggered the current debt: the change or the way it was implemented isn’t quite right from the current perspective.

The main issue facing the software development organization is how to decide about future changes: What evolution should the software system undergo, and in which sequence? This evolution is, in most cases, constrained by cost: the resources available to apply to making these changes, most likely driven by value, as viewed by external stakeholders.

The decision-making process about which sequence of changes to apply could be the main reconciling point across the whole landscape shown in Figure 1, from adding new features and adapting to new technologies to fixing defects and improving the quality, intrinsic or extrinsic. Because this decision process is about balancing cost and value, perhaps economic or financial models could become the unifying concept behind the whole landscape.

A few have already been explored to some degree:

  • Net Present Value (NPV) for a product, from the finance world;
  • Opportunity cost;
  • Real option analysis (ROA), or valuation;
  • Total cost of ownership (TCO) for an IT system.

These four models were discussed in a recent ICSE workshop on technical debt,9 with one of them (NPV) offering the most promise: it’s better formalized than opportunity cost and simpler and less proprietary than TCO, while ROA can be seen as a probabilistic extension to NPV.

Reference:

Technical Debt: From Metaphor to Theory and Practice
Philippe Kruchten, University of British Columbia, Vancouver; Robert L. Nord and Ipek Ozkaya, Software Engineering Institute
Quote:

“Improving daily work is even more important than doing daily work.” Gene Kim,

یادگیری کانبان (2)

  • یوسف مهرداد بی‌بالان

مترجم‌ها: یاسر کازرونی، مریم معصومی‌راد

به کانبان کاربردی خوش آمدید!

شما سفری آموزشی درباره‌ی کانبان را شروع کرده‌اید و این فصلِ دیباچه، اصول کانبان را با روایت داستانی به شما می‌آموزد. نیازی به هیچ‌گونه پیش‌زمینه­‌ای درمورد کانبان نداريد. شما نيز مربیان داستان یعنی مارکوس و یوآخیم (هِی! ما اینجاییم) را دنبال كنید؛ آنها کانبان را به تیم توسعه­ي نرم­افزار آموزش مي­­دهند و به آنها کمک می­کنند تا آموخته‌های خود را در کارشان استفاده كنند.

هدف از روایت این داستان ساختگی این است که مقدمه­ای برای کمک به شما باشد تا اصول کانبان را به راحتی و کم‌کم یاد بگیرید. در این فصل، روش استفاده از تکنیک‌­های تصویرسازی[1] مانند تابلوی کانبان و اقلام آن را مي‌­آموزيد تا درك بهتری از نتایج کانبان داشته باشید. همچنین یاد می­گیرید که چگونه مقدار کار در جریان را محدود کنید و می‌فهمید که چگونه چنین کاری، سرعت جریانِ کارهایتان را افزایش می‌دهد و كمك مي‌کند تا فرصت­های بهبود را شناسایی كنيد. همچنین تاحدودی روش استفاده از معیارهای بهبود را یاد می‌گیرید.

بازخوردهاي دریافت‌شده درباره‌ی این فصل به دو دسته تقسیم می‌شدند. بعضی از افراد رویکرد داستانی را می­‌پسندیدند و برخی نیز علاقه‌ی چندانی به آن نداشتند. اگر نمی‌خواهید با خواندن داستان کارتان را شروع کنید، می­توانید مستقیماً به فصل­های بعدی بروید. موضوعات اشاره‌شده در این فصل با جزئيات بيش­تری در فصل‌های بعدی بررسی می‌شود. ولی امیدواریم این فصل را بخوانید و برایتان مفید باشد. پس از خواندن این فصل، با به‌کارگیری اصولی که ما در داستان به تیم می­‌آموزیم، باید بتوانید اجرای کانبان را شروع کنید.

در فصل‌های بعدی کتاب به جزئیاتي مانند اصول حاکم در کانبان، روش‌های پیشنهادی و تجربه‌های مطرح‌شده توسط تیم‌های کانبان در سراسر دنیا خواهیم پرداخت. اگر پس از خواندن بخش اول، احساس کردید که برخی از پرسش‌ها بی­‌پاسخ گذاشته شده است، مطمئن باشید که پاسخ تمامي پرسش‌ها را در بخش­های بعدی کتاب پیدا خواهید کرد.

اما کارها را باید به ترتیب اولویت انجام داد؛ بیایید به داستان بازگردیم.

مقدمه

اعضای تیم در اتاق كناری جمع شده­‌اند. آنها سعي مي‌­كنند با توصیف ویژگی‌های همدیگر، خودشان را به مارکوس و یوآخیم معرفی ­کنند، تکنیکی که به نظر می‌رسد تجربه‌ی ماهرانه‌ای است و با قضاوتی اغراق‌آمیز و طنزآمیز همراه است.

k4

«آدام[2] آزمون­گره. مدت­ زیادیه که به این کار مشغوله و تقریباً به همه‌­چيز مشكوکه: به موضوعات جدید، به قابلیت‌های­ دیگران و بیش­ از همه به کیفیت کاری که دیگران انجام می­دن. او سعی می­کنه انتقادهای خودش رو به­شکلی دوستانه مطرح کنه و معمولاً در این کار موفقه».

«آدام دوست داره به­ روش خودش کار کنه. او تغییر را دوست نداره؛ تغییر از نظر اون یعنی آزمون رگرسیونِ[3]».

k5

«بِث[4] کارمند جدیده. او مسئول تحلیل نیازمندی­ها در تیمه. کارش شامل موضوعات زیادیه؛ از پرسیدن خواسته‌های کسب‌­وکار و نوشتن آن­ها گرفته تا کسب اطمینان از اینکه توسعه ­دهنده­‌ها درست فهمیدن چی رو باید انجام بدن».

«بِث همیشه دنبال کشف راه‌های جدید برای انجام کاراست.»

k6

«سزار[5] مسئول کسب‌­وکاره. مدت­ها قبل و به‌‌تنهایی، اولین نسخه‌­ي اینترنت بانک رو که تیم الان روی اون کار می­کنه، نوشته.»

« حالا دیگه بخش آی‌تی رو ول کرده و مسئول بخش کسب­‌وکار در واحد عملیاته[6] سزار دوست داره هنوز خودش رو یک توسعه‌­دهنده بدونه و البته اکثراً «در صحنه» حضور داره!»

k7

«دافنه یک توسعه­‌دهنده­‌ی محشره. او به این معروفه که می­تونه توی یک ساعت بیشتر از کد یک‌هفته‌ی خیلی از توسعه­دهنده‌­ها کد بزنه.»

«ولی اون دوست داره فقط تنهایی کار کنه؛ بقیه­ی افراد فقط سرعتش رو کم می­کنند. اگر از دافنه بپرسید که بهترین روش کارکردن چیه، به شما می‌گه: با سزار دوتایی بشینیم و در مورد طراحی سیستم تصمیم­ بگیریم. بعدم که همه‌چیز فراموش می­شه. همه‌ی این تشریفات و سلسله ‌مراتب‌ اداری مانع کارشند.»

k8

«اریک[7] توسعه‌دهنده‌ایه که فقط روزا کار می­کنه … چون مجبوره. اما شب­ها، گیتاریست معروفیه که در سالن­ها و محافل موسیقی گیتار می­زنه. به زودی بخت و اقبال بهش رو می‌کنه. به‌زودی!»

«کدنویسی خیلی خوبه ولی فهمیدن این‌که چرا داریم این کار رو می­‌کنیم معمولاً خیلی سخته.»

«اریک دوست داره کارهاش رو تمام کنه تا بتونه به سؤالات سایت http://guitar.stackexchange.com بیشتر پاسخ بده.»

k10

«فرانک[8] مدیر بخش آی‌تی در واحد عملیاته. 36 نفر تحت مدیریت او هستن و سعی می­کنه حداقل ماهی یک بار با تک‌تک‌ آن­ها جلسه داشته باشه؛ اما جلسات دیگه‌ای هم داره که باید توش شرکت کنه.»

«او به محصول خیلی اهمیت می‌­ده، اما خیلی براش سخته که پا به پای ویژگی­های جدید محصول حرکت کنه. فرانک اوقات فراغت خود را صرف توسعه‌ی نیروی انسانی و کارمنداش مي‌­كنه.»

بخش بعدی

بخش قبلی

[1] Visualization Techniques

[2] Adam

[3] Regression test

[4] Beth

[5] Cesar

[6] Business part of the operation

[7] Eric

[8] Frank

گزیده:

“kanban is something you strive to get rid of, not to be proud of” 😯
a Toyota person

یادگیری کانبان (1)

  • یوسف مهرداد بی‌بالان

مترجمان: یاسر کازرونی، مریم معصومی‌راد

پیشگفتار

بخشهایی از کتاب Kanban in Action نوشته مارکوس هامربرگ و یوآخیم ساندن به فارسی برگردانده شده است؛ قسمتهایی از آن به مرور در اینجا منتشر خواهد گردید.

بخش اول

بخش اول کتاب به معرفی کاربردی کانبان می‌پردازد. هدف بخش اول این است که شما بتوانید اجرای کانبان را شروع کنید و در کنار آن، درک اولیه‌ای از اصول حاکم بر کانبان پیدا کنید و با بعضی از موضوعات پیشرفته‌ی آن نیز آشنا شوید تا اشتیاق‌تان ­برای ادامه‌ی این مسیر بیشتر شود.

با یک داستان کوتاه شروع می‌کنیم که داستانِ آشنایی یک تیم توسعه‌­ي نرم‌­افزاری با کانبان و استفاده از آن را روایت می­کند. اگر رویکرد داستانی را دوست ندارید، می­‌توانید از این فصل بگذرید و مستقیماً به سراغ فصل بعد بروید؛ نگران نباشید، بخش عمده‌ای از مطالب فصل یک با جزئیات بیش­تری در فصل‌های بعد بررسی می‌شوند.

گروه كانبانِروس[1] كار خود را شروع مي­‌كند

مارکوس[2] و یوآخیم[3] در حال سخنرانی در یک گردهمایی‌اند که موضوع آن، «معرفی کاربردی کانبان» است. سخنرانی در حال اتمام است. بیایید به آن­ها ملحق شویم.

k1

«جمع‌بندی: کانبان رویکردي برای توسعه­ي نرم­افزاره که مبتنی بر اصول نابه[4]. خیلی از شرکت‌های دنیا به سرعت کانبان رو انتخاب کردند. شما هم می­تونید كانبان رو انتخاب کنید! از فردا شروع کنید، باید شروع کردن رو متوقف کنید و تمام کردن رو شروع کنید.». یوآخیم سخنرانی را با این جمله تمام کرد: «معرفی کوتاه و كاربردي ما درباره‌ی کانبان تمام شد. ولی گفته‌های قبلی ما رو فراموش نکنید؛ شما می­‌تونید از فردا شروع کنید. شروعش سخت نیست. اجراش می‌تونه اثرات شگفت‌­انگیزی روی بهره­وری شما داشته­ باشه.»

مارکوس در حالی‌که تلاش می‌­کرد سخنانش را تمام کند تا برای یک بار هم که شده ارائه‌اش را سروقت تمام کند، گفت: «از همه­‌ي شما که تشریف آوردید متشکرم! اگه سوالی داشتید ما برای چند دقیقه‌ای همین دور و برا هستیم.»

k2

یوآخیم مشغول پاک کردن تابلو و جمع کردن یادداشت­ها از روی دیوار شد؛ مارکوس درحالي­‌كه به سمت درب خروج می‌رفت، به تعدادی از پرسش‌های کوتاه، پاسخ داد و به بعضی از افراد هم گفت که برای پیدا کردن پاسخ پرسش‌های خود، اسلایدها را دانلود کنند. هنوز چند قدم بیشتر نرفته بود که وسط راه، ناگهان خانمی جلوی او را گرفت.

زن مانند کسی که کلاه سرش رفته با ناامیدی نگاهی ‌کرد و گفت: «اینجا چه خبره؟ چرا دارید می‌­رید؟ به من نگید که سخنرانی رو کلاً از دست دادیم؟»

مارکوس پاسخ داد: «چی رو از دست دادید؟ سخنرانی رو؟ بله، سخنرانی همین الآن تموم شد، ولی می‌­تونید فیلمش رو آنلاین ببینید.»

زن شروع کرد به گریه: «اوه نه!». با سرش به مردی که گروهی را به داخل اتاق راهنمایی می­کرد اشاره کرد و گفت: «ما فقط برای این سخنرانی اینجا اومدیم! اون رو ببین! شبیه کسی‌ یه که فقط چند دقيقه‌ی ابتدایی یک سخنرانی رو از دست داده.»

k3

مارکوس در­حالی­که سعی می­کرد مشکل را حل کند گفت: «خب، اگه دوست دارید در سخنرانی حضور داشته باشین، احتمالاً توی پاییز سخنرانی دیگه‌ای داریم.»

زن با چهره‌ای واقعاً غمگین گفت: «این حرفها مشکل ما رو حل نمی­کنه؛ ما می‌­خواستیم فوراً کار رو شروع کنیم! همه‌ی تیم هم اینجان؛ حتی بچه‌های کسب­‌وکار هم به توصیه‌­ي من، برای این دوره‌ی آموزشی همراه ما اومدند. راستی! سلام، من دافنه[5] هستم.»

یوآخیم به آنها ملحق شد، خودش را به دافنه معرفی کرد و بعد پیشنهاد داد: «خب؛ اگر عجله دارید، چرا من یا مارکوس رو برای گرفتن مشاوره، یک روز به شرکت‌تون دعوت نمی‌کنید؟»

مرد محترمی که خودش را به دافنه رسانده بود گفت: «خب، ما می­‌تونیم این کار رو بکنیم اما در حال حاضر، شکایت­‌های زیادی هم از طرف تیم و هم افرادی که با ما کار می‌­کنند وجود داره. می­‌خواستیم کاری برای حل آنها انجام بدیم و امیدوار بودیم که امروز چیزی یاد بگیریم که توی این کار به ما کمک کنه».

یوآخیم پرسید: «منظور شما چه نوع مشكلاتيه؟»

مرد خیلی صریح و رک گفت: «تیم حس می­‌کنه در باتلاقی از کارها گیر کرده و افرادی هم که در انتظارند تا کارها رو تحویل بگیرند، فکر می­کنند این کارها حالا حالاها تمام نمیشه و تا ابد طول می‌کشه».

دافنه وسط حرفهای او پرید و گفت: «با وجودی که کارهای زیادی برای انجام داریم، درباره‌ی اینکه کدام پروژه­ مهم‌تره و اول باید شروع بشه بحث­‌های طولانی داریم. با همه‌ی این کارها، باز هم در انتخاب پروژه­ی درست­ اشتباه می­کنیم».

مرد گفت: «و … خب، مشکلات که زیاده ولی نمی­خواهیم وقت شما رو بگیریم.» و در حالی که منتظر پاسخ بود پرسید: «داشتید می­‌رفتید؟ آره؟»

مارکوس خیلی‌ سریع جواب داد: «بله! مگر اين­كه شما پیشنهاد بهتری داشته باشید». و گفتن این جمله، شروع یک چالش جذاب بود.

رییس محترم گفت: «این کاری است که ما می‌خواهیم انجام بدیم! همین الآن و همین جا شما دو نفر را به عنوان مشاور استخدام می‌کنم. روی اسلایدی كه روی پرده است نوشته «از فردا شروع کنید». به شما فرصت می­دم که نشان بدید به حرف­هایی که می­زنید اعتقاد دارید؛ دو صد گفته چون نیم کردار نیست. چقدر مي­تونيد وقت بذاريد؟» سپس سکوت کرد و به چشم‌های مارکوس و یوآخیم خیره شد.

یوآخیم به ساعتش نگاه كرد و گفت: « هنوز دو ساعت تا زمان حرکت ما مونده.»

ریيس دستش را دراز کرد و گفت: «خب! اگه این طوره: کانبان را در دو ساعت راه می‌اندازیم».

یوآخیم به مارکوس نگاه ­کرد و گفت: «نمي­‌تونيم همه‌ی مسأله‌ها را حل کنیم، فقط می‌­تونیم شما را توی مسیر درست قرار بدیم». آنها به یکدیگر نگاه کردند و سرشان را به نشانه‌ی تأیید تکان دادند و گفتند: «خب! دو ساعت وقت داریم. چالش پیشنهادی شما پذیرفته شد!»

بخش بعدی

[1]Kanbaneros

[2] Marcus

[3]Joakim

[4] Lean

[5] Daphne

گزیده:

“Those who cannot change their minds cannot change anything.” George Bernard Shaw

سال نو مبارک

  • یوسف مهرداد بی‌بالان

 

کای تازه بهار عالم افروز
هر روز تو عید باد و نوروز

بخت تو بهار بی‌خزان باد
عالم ز تو رشگ بوستان باد

 

دوستان و همراهان گرامی، سال نو بر شما خوش باد

در سال نو،
دلی خوش، لبی خندان، تنی سالم، آرزوهای زیبا، روزهایی قشنگ، پیروزی‌های پی‌درپی و آینده‌ای درخشان
برایتان آرزومندم

 

بهار 1395 خورشیدی

برای خروج از جستجو کلید ESC را بفشارید