قسمت سوم EventStorming: برگزاری اولین جلسه

در قسمت اول از این سری با کلیات Event Storming و اینکه چرا باید با این روش آشنا باشیم و از آن استفاده کنیم آشنا شدیم. سپس در دومین قسمت به سراغ بررسی شرایط برگزاری جلسه رفتیم و دیدیم قبل، هنگام و بعد از برگزاری جلسه چه کارهایی باید انجام دهیم. حالا در سومین قسمت می‌خواهیم به بررسی یک جلسه واقعی بپردازیم.1. مقدمه: حال که با شرایط کلی برگزاری یک جلسه Event Storming ‌آشنا شدیم بد نیست شرایط برگزاری یک جلسه واقعی را با هم بررسی کنیم. با توجه به ماهیت این جلسات و اینکه این جلسات با حضور و تعامل افراد معنی پیدا می‌کنید، بررسی این جلسات روی کاغذ نه کار ساده است و نه دید کافی و کاملی ایجاد می‌کند، ولی به هر حال بررسی کلی کار می‌تواند به درک صحیح‌تر ما از Event Storming کمک کند. 2. صورت مسئله:خوب این روز‌ها بحث استارت‌آپ‌ها بسیار داغ است و یکی از ساده‌ترین‌ کارها(البته در ظاهر) کپی‌برداری از یک استارت‌آپ موفق و رفع ایرادات آن است تا به موفقیت برسیم. برای همین، شرکتی که تا امروز کار خرید و فروش اجناس دست دوم را انجام می‌داده، با الگوبرداری از سایت دیوار، تصمیم به راه اندازی کسب و کاری آنلاین در حوزه کاری خود یعنی معامله اجناس دست دوم گرفته اند. برای انجام این کار از من، علیرضا ارومند برای همکاری در کار تحلیل و شناخت مسئله دعوت کردن تا برای رسیدن به هدف به تیم کمک کنم. بعد از اینکه کمی در سازمان بالا و پایین رفتم و اطلاعات از خواسته‌های آن‌ها و نحوه کارکرد فعلی آن‌ها بدست آوردم دست به کار می‌شوم و میخواهم اولین جلسه Event Storming را ایجاد کنم. برای این کار باید از شرکت کنندگان دعوت به عمل بیاورم.3. معرفی شرکت کنندگان:به عنوان اولین نفر از آقای اسکروچ مدیر‌عامل مجموعه خواهش می‌کنم که در جلسه حضور داشته باشن. ایده اولیه این کار توسط آقای اسکروچ ارائه شده و معتقد هستن که با توجه به شرایط بد اقتصادی و نیاز مردم به کالاهای مختلف، حتما ارائه یک برنامه ساده و کاربردی در زمینه معامله اجناس دست دوم برگ برنده شرکت خواهد بود.به عنوان دومین نفر به سراغ نیما حسینی میروم، طراح و گرافیست شرکت که برای طراحی خروجی اپلیکیشن قرار هست با تیم همکاری داشته باشه و نیاز هست برای طراحی هرچه بهتر اپلیکیش در جریان جزئیات سیستم قرار بگیرید.سومین مهمان جلسه آقای حمید صابری، مسئول تحقیق بازار هستن که قبل از شروع کار کمی در مورد اپلیکیشن‌های موجود بررسی کردن و از شرایط بازار و نیازمندی‌های اولیه و برگ‌های برنده اپلیکیشن با خبر هستن.حتما از نوشته‌های قبلی به یاد دارید که تیم فنی و توسعه یکی از مهم ترین شرکت کنندگان در جلسه هستن، برای همین از تیم برنامه نویسی آقای امید قربانی خواهش می‌کنم تا به همراه دو نفر توسعه دهنده دیگری که در تیم خودشون دارن یعنی امیر الماسی و پسرخاله در جلسه شرکت کنند.آخرین نفری که تصمیم به دعوت از ایشون دارم، آقای رمضانی هست. فردی که معمولا کارهای پشت صحنه و اصلی شرکت را انجام میده و به قول معروف سرش تو حساب و کتاب هست و مواظب هست که همه کار‌ها به خوبی پیش رفته و خدای نکرده شرکت دچار ضرر و زیان نشود.4. شروع جلسه: بالاخره روز جلسه فرا میرسد و افراد در ساعت مقرر به جلسه می‌آیند. کمی فضا برایشان غریب است. به دنبال صندلی برای نشستن می‌گردند اما صندلی وجود ندارد. فقط دو میز کوچک گوشه اتاق که روی یکی فاسک چای و مقداری بیسکوئیت و نسکافه وجود دارد و میز دیگر پر از Stickyها در رنگ‌ها و سایز‌های مختلف است و به تعداد 10 عدد ماژیک مشکی با اندازه مناسب نوشتن روی Stickyهای موجود. با توجه به ابعاد اتاق و اینکه اتاق کمی مستطیل شکل بود، یک ضلع طولی اتاق را با کاغذ بزرگی پوشانده‌ام که آماده نصب Stickyها باشد و در گوشه ای دیگر یک وایت برد کوچک روی سه پایه قرار داده‌ام تا برای چسباندن راهنما‌ها از آن استفاده کنم. خوب شرایط تا اینجام به خوبی پیش رفته و شرکت کنندگان که کمی شبیه علامت سوال هستند در حالی چشمانشان به اطراف می‌چرخد هر از چندگاهی به من نگاه می‌کنند و بدون اینکه حرفی بزنند سوالاتشان را با نگاه از من میپرسند. حالا وقت دست به کار شدن است. پس خیلی سریع و کوتاه توضیح می‌دهم:علیرضا ارومند: "به اولین جلسه Event Storming شرکت خوش آمدید. در این جلسه قصد داریم بررسی کنیم که به چه شکلی قرار است کارهای سازمان را انجام دهیم و کسب و کار ما چگونه کار می‌کند. امیدوارم در پایان این جلسه همه حاضرین درک مشترکی از کاری که باید انجام دهیم داشته باشند."خیلی سریع به سراغ مرحله بعدی میروم و یک Sticky نارنجی برمیداریم و رو آن می‌نویسم "Domain Event - اتفاقی که در سیستم رخ داده است." و آن را روی تخته وایت برد می‌چسبانم. به صفحه کاغذی و نموداری در خط افق کشیده شده است اشاره می‌کنم و می‌گویم:" وقایع مختلفی در سیستم ما اتفاق می‌افتد و قصد داریم این وقایع را با هم پیدا کنیم. این وقایع در طول زمان و با تقدم و تاخر متفاوتی اتفاق می‌افتند و برای همین منظور لازم است این تقدم و تاخر را روی نمودار نیز رعایت کنیم."کاغذ خالی از هیچ واقعه روی دیوار - با تشکر از miroدر ادامه خیلی سریع مقداری Stickyبه هرکدام از شرکت کنندگان به همراه یک ماژیک می‌دهم تا بتوانند خیلی سریع کار خودشان را شروع کنند. کماکان همه نگران به نظر میرسن و با کمی نگاه در صورتشان می‌توانم متوجه پر از علامت سوال برای شروع کار هستن.با توجه به اینکه حمید صابری بیشتر از بقیه از جریانات کسب و کار خبر جدید با خبر هست و روحیه برون‌گرا و حرف زنی هم داره خیلی سریع سر رشته صحبت را به دست میگیره و میگه:"خوب معلومه، باید از اول کار شروع کنیم، یعنی ثبت نام کاربر". با توجه به اینکه شرکت کنندگان دید کاملی از مسئله ندارن بحث شروع شده و هر کدام از شرکت کنندگان ظری ارائه می‌کنند ولی هیچ کس جرات نوشتن اولین domain event و نصب آن روی دیوار را ندارد. پس خودم دست به کار می‌شوم و روی یک sticky نارنجی می‌نویسم، "آگهی منتشر شد" و آن‌را جایی در میانه دیوار نصب می‌کنم. نصب اولین Stickyبا این کار بحث هم شروع می شود و هرکس شروع می‌کند نظری ارائه کند، و بعد از چند دقیقه صحبت کلی افراد شروع به ثبت اولین domain eventهایی می‌کنند که به نظرشان باید قبل از انتشار آگهی وجود داشته باشند. کارهایی مثل: ثبت آگهی، ویرایش توضیحات آگهی، تغییر عنوان آگهی و ...اضافه شدن domain eventهای جدید توسط شرکت کنندگاننیما که یک UX کار حرفه ای هست با یک نگاه اجمالی به مدل فعلی به این نتیجه رسیده که یک جای کار ایراد داره. پس خیلی سریع توضیح میده که: " ویرایش کل آگهی کار درست و اصولی نیست، آگهی شامل قسمت‌های متفاوتی است که می‌تواند به طور جداگانه به روز رسانی شود و کاربری و استفاده بهتری خواهد داشت، مثلا می‌توانیم عنوان را جداگانه ویرایش کنیم و قیمت را هم جداگانه ویرایش کنیم، به این شکل هنگامی که قیمت ویرایش می‌شود اگر قیمت کاهش یافته بود، می‌توانیم به افرادی که آگهی را نشان کرده اند هم خیلی سریع Notification ارسال کنیم و احتمال فروش کالا بالاتر می‌رود. پس بهتر است به جای یک فرم ویرایش، کارهای تخصصی ویرایش انجام دهیم."در گوشه‌ای دیگر از اتاق اسکروچ که خیلی به بخش تولید و مدیریت آگهی علاقه‌ای ندارد در حال صحبت کردن با امید است و به او می‌گوید: "باید امکانی داشته باشیم که خریداران و فروشندگان بتوانند بعد از معامله به همدیگر و آگهی‌ها و معامله‌ای که انجام داده‌اند امتیاز بدهند." امید رشته کلام اسکروچ را پاره می‌کند و می‌گوید:" خریدار و فروشنده از نظر من تفاوتی نداره، من یک کاربر در سامانه طراحی می‌کنم که بتواند با نام کاربری و کلمه عبور در سیستم لاگین کند و بعد با توجه به دسترسی‌هایی که دارد بتواند کارهای متفاوتی در سیستم انجام دهد." اسکروچ با خود فکر می‌کند: "کاربر؟ کاربر دیگر کیست؟ به من چه که چطور در سیستم لاگین می‌کنند و پروفایل خود را چگونه تنظیم می‌کنند. برای من مهم است بدانم چه کسی خریدار است و چه کسی فروشند. من خریدار و فروشنده را میشناسم این کاربر از کجا پیدایش شد؟"در این زمان احتمالا شرایط دیوار مانند تصویر زیر است:تصویر دیوار بعد از گذشت 55 دقیقه از جلسه به نظر می‌رسد شرکت کنندگان خسته شده‌اند و نیاز به استراحت و تمرکز دارند، پس همینجا با صدای بلند اعلام می‌کنم: " جنگ و جدل کافیه، بهتره چند دقیقه ای استراحت کنیم."بعد از چند دقیقه استراحت برمیگردیم تا جلسه را ادامه دهیم و قبل از اینکه فرصت صحبت کردن داشته باشم،‌امید شروع به صحبت کردن می‌کنه:" در زمان استراحت با پسرخاله داشتیم فکر می‌کردیم همچین سیستمی اگر نظارتی روی آگهی‌ها نداشته باشیم و هر کسی هر آگهی ثبت کند، به زودی سر و کله اسپمر‌ها در سیستم پیدا می‌شود و خیلی زود اعتبار ما در بازار از دست می‌رود. بهتر است هر آگهی قبل از انتشار بررسی شود و در صورت عدم وجود مشکل کار ادامه پیدا کند. اگر اتفاقی که برای تبلغات خودرو در سایت دیوار افتاد برای اپلیکیش ما هم رخ دهد باید چکار کنیم؟ چطور با دلال‌هایی که آگهی‌های غیرواقعی ثبت می‌‌کنند مقابله کنیم؟"بحث شروع می‌شود و هر کدام از شرکت کنندگان نظری می‌دهد، مسعود می‌گوید:"امکان جذب نیرو و پرداخت هزینه برای این‌کار نداریم و چاره‌ای نداریم جز اینکه یا ریسک این کار را بپذیریم یا یکی از خود ما مسئول این کار شود یا به صورت اتوماتیک این کار انجام شود.". امید کلام مسعود را قطع می‌کند و میگوید:" اصلا می‌دانی برای انجام اتوماتیک این کار چه سطحی از هوشمندی باید در برنامه پیاده سازی شود؟ اصلا به زمان توسعه و ... فکر کرده ای؟". اوضاع رو به وخامت می‌رود، سریع وارد عمل می‌شوم و از شرکت کنندگان خواهش می‌کنم فعلا این نکته را روی یک sticky یادداشت کنند و تصمیم در مورد نحوه انجام کار را به بعد موکول کنند.شرایط دیوار بعد از بررسی چند event مختلف و مشکلات تحلیلی و کاریتوجهم به امیر الماسی جلب شد، از اول جلسه گوشه ای ایساده و تو هیچ بحثی شرکت نکرده. پیش امیر میروم و سعی می‌کنم امیر هم وارد بازی بشود. این طور سر حرف را با امیر باز می‌کنم: "امیر چی شده؟ چرا اینقدر ساکت و ناراحتی؟ اگر مشکلی داری بگو بدونیم" و امیر که گویا منتظر توجه بود بحث را ادامه می‌دهد:" ای بابا، چی بگم؟ دلتون خوشه‌ها، سه ماهه حقوق نگرفتیم و داریم یه سیستم طراحی می‌کنیم و اصلا معلوم نیست این سیستم کجا قراره به پول برسه. اصلا اگر همین روزها شرکت یه سرمایه گذار پیدا نکنه و نتونه پول به مجموعه تزریق کنه همه باید دنبال یه کار جدید باشیم نه اینکه به فکر توسعه سیستم جدید باشیم.". همه از شنیدن صحبت‌های امیر شکه شدن، مسعود و حمید و آقای اسکروچ که مدت‌ها در مورد این موضوع فکر کرده بودن از اینکه تبیین موضوع به این مهمی را چطور فراموش کردن، متعجب شدن. مسعود:" نگران نباش، در این باره کاملا فکر کردیم. امکانات اولیه اپلیکیشن کاملا رایگان در اخیتار همه قرار خواهد گرفت. اما قرار هست ویژگی‌هایی در نظر بگیریم که برای ارائه این ویژگی‌ها از کاربران پول دریافت خواهیم کرد. مثلا آگهی‌های ویژه خواهیم داشت که همیشه بالاتر از سایر آگهی‌ها نمایش داده خواهد شد و برای این آگهی‌ها پول دریافت می‌کنیم." حمید:" ثبت تصویر فقط در ابعاد کوچک و یک تصویر برای آگهی‌های رایگان امکان پذیر هست و اگر کسی تمایل داشته باشه چند تصویر و با کیفیت بالا بارگذاری کنه باید حتما مبلغی به عنوان حق عضویت پرداخت کرده باشه". اینجا آقای اسکروچ وارد بحث شده و این طور توضحی می‌دهد:" امکان معامله رایگان فقط برای اشخاص حقیقی و برای کالاهای کوچک امکان پذیر هست. سود اصلی ما هنگام است که سازمان‌ها بخواهند برای خرید و فروش از سیستم ما استفاده کنند و برای کاربران حقوقی حتما حق عضویت بالایی در نظر خواهیم گرفت. در ضمن ما فقط در بازار اجناس دست دوم توقف نخواهیم کرد و هدف من استفاده از این سیستم برای بازار مسکن است. برای معاملات مسکن من با دوستان خودم در شهرداری و وزارت مسکن و سازمان ثبت صحبت کردم و استعلام‌هایی به صورت وب سرویس در اختیار ما قرارخواهند داد تا خریدار از صحت داده‌ها خاطر جمع باشد، مسلما این تبلیغات و استفاده از این امکانات رایگان ارائه نخواهد شد. کسی که قصد دارد 2 میلیارد برای خرید خانه پرداخت کند، مسلما ناراحت نخواهد شد اگر در ازای دریافت 100 هزارتومان خیالش را بابت صحت اطلاعات راحت کنیم."کمی که بحث ادامه پیدا می‌کند، چند رخداد دیگر شناسایی می‌شوند مثل ثبت سفارش و تایید پرداخت و ... که بسیار مهم هستند و برای انجام شدن نیاز به استفاده از سیستم‌های خارجی مثل درگاه‌های پرداخت و استعلام‌ها دارند. در این زمان احتمالا مدل ما به شکل زیر خواهد بود.آخرین وضعیت از اولین جلسهزمان جلسه همینجا به پایان می‌رسد، اعضا به نظر خسته می‌رسند و آقای صابری باید به جلسه دیگری برود. پس همینجا جلسه را قطع می‌کنم و تا جلسه آینده از اعضا خدا‌حافظی می‌کنم.5. بعد از جلسه:جلسه پرکاری بود و مطالب زیادی در مورد دامنه خود یاد گرفتیم. بعضی موارد کاملا مشهود بود. برخی نکات پیدا شد که اصلا قبل از این در مورد آن صحبت نشده بود، مثل اینکه نیاز داریم به روشی تشخیص دهیم آگهی‌ها مشکل دار نباشند. نکات دیگری هم وجود داشت که برای برخی شرکت کنندگان واضح بود و برای سایرین اصلا قابل تصور نبود، مثل اینکه برای کسب درآمد از این سیستم راهکارهای متوعی در نظر گرفته شده است که لازم است توسط افراد مختلف برای رسیدن به این اهداف کارهایی انجام شود.6. جمع بندی:جلسات Event Storming می‌تواند خیلی تعامل سازنده‌ای بین اعضای تیم‌های ایجاد کند. برقراری این جلسات لزومی به DDD ندارد و برای هرکاری می‌توان از این نوع جلسات استفاده کرد. این جلسات هم برای تحلیل کسب و کارهای موجود مناسب است و هم برای ایده‌پردازی برای کسب و کار‌های نوظهور. دقت کنید که جلسات Event Storming در سطوح مختلفی برگزار می‌شود. در این جلسه یک تصویر و درک کلی و کامل از کسب و کار برای همه افراد ایجاد شد. اما از این جلسات برای شناخت جزیئات دامنه و مدل‌سازی آن نیز می‌توانیم استفاده کنیم و مدل ما اجزای بیشتری پیدا خواهد کرد که در قسمت‌های بعد بررسی خواهیم کرد.پ.ن: برای مطالعه بیشتر در این حوزه پیشنهاد می‌کنم حتما فیلم ارائه آقای brandolini را اینجا مشاهده کنید.پ.ن 2: یک کتاب هم در حال تالیف دارن که هنوز منتشر نشده که اینجا سرفصل‌های کتاب اینجا قابل مشاهده است. اگر این کتاب با کیفیت بالا و جدید به دست کسی رسید سپاسگذار می‌شوم در اختیار من هم قرار بده.