داستان ساخت تیم نرم‌افزاری: جی‌پلاس (گلدیران)

افرادی که من رو می‌شناسن می‌دونن یکی از کارهایی که من انجام می‌دم، درست کردن تیم‌های نرم‌افزاری برای شرکت‌هاست، حالا چه شرکت‌های ایرانی یا شرکت‌های خارجی. ولی نه هر تیمی!از نظر من یه تیم نرم‌افزاری فقط شامل چند برنامه‌نویس که باید استخدام بشن تا کد بنویسند نیست؛ همچین تیمی اگر هم بتونه محصولی تولید کنه، اون محصول و تیم پایدار نخواهد موند. برنامه‌نویس‌ها میان و می‌رن، تکنولوژی‌ها عوض می‌شه، تعداد مشتری‌ها بیشتر می‌شه و معمولا تیم‌های نرم‌افزاری آماده مواجه شدن با چنین اتفاقی نیستن و چیزی که تیم بیزنس می‌بینه اینه که باز هم نشد!برای داشتن یه تیم برنامه‌نویسی، باید یک «اکوسیستم تولید نرم‌افزار» داشت. برنامه‌نویس‌ها فقط یکی از قطعات پازل لازم برای موفقیت هستند. یک اکوسیستم تولید نرم‌افزار بدون داشتن قطعات دیگه پازل دیر یا زود با مشکلات زیادی مواجه می‌شه.برای داشتن یه تیم نرم‌افزاری موفق، داشتن چند برنامه‌نویس که کد بزنن کافی نیست؛باید یک «اکوسیستم تولید نرم‌افزار» داشت.کار من ساخت تیم‌های نرم‌افزاری کاملا «ریموت» است. ولی این بار این تیم ریموت قرار است در یک سازمان که ذاتا یک شرکت حضوری است و تجربه ریموت موفق ندارد اجرایی شود. بنابراین با توجه به صحبت‌هایی که داشتیم تصمیم گرفتیم این حرکت را قدم به قدم طراحی کنیم و تیم نرم‌افزاری به مرور ریموت شود.و اما سوال ترسناک «چطور روی یک تیم ریموت حساب کنیم؟»، تجربه تلخی که بسیاری بیزنس‌ها، چه ایرانی و چه خارجی آن را داشته اند. چگونه این تجربه دردناک باید به یک موفقیت لذت‌بخش برای یک سازمان تبدیل شود. جواب این سوال همان خلق «اکوسیستم تولید نرم‌افزار» به جای «استخدام تیم برنامه‌نویسی» است. کاری که من معمولا در سه لایه «فرایند‌ها»، «تکنولوژی» و «تیم سازی» در شرکت‌ها انجام می‌دهم.سوال تلخ «چطور روی یک تیم ریموت حساب کنیم؟»، سوالی که پاسخ آن بسیاری از ناکافی‌بودن‌ها و شکست‌ها را توضیح می‌دهد.اکثر برنامه‌نویسانی که با هم این تیم را ساختیم از طریق برنامه #cs_internship آموزش دیده‌اند و این کمک بسیار زیادی برای ساخت سریع‌تر و با کیفیت‌تر تیم کرد.داستان تیم Beyondتیم Beyond، نام تیمی است که در شرکت «مدیا پردازش» (زیر مجموعه گلدیران) ساخته شده و هدف آن خلق محصولات نسل جدید برای این شرکت است. من افتخار این رو دارم که به عنوان مشاور مدیرعامل، مسئولیت خلق اکوسیستم تولید نرم‌افزار رو برای این تیم ایفا کنم. هدف اولیه این تیم ساخت یک App Suite برای گوشی‌های Gplus تولید شده در این شرکت است.کار من از اول مهر ۱۴۰۰ شد، با «قول خلق یک تیم کوچک اما کارا» در قدم اول. و ساخت اولین اپ موبایل برای گوشی‌های جی‌پلاس که به صورت builtin در آنها نصب شده باشد. برای این کار فقط ۶ ماه فرصت داشتیم و این اپ باید و روی گوشی‌هایی که در فروردین ۱۴۰۱ تولید خواهند شد نصب می‌شدند. این اپ قرار است یکی از مجموعه اپ‌های Gplus App Suite باشد.یکی از مهمترین فاکتورهای یک تیم نرم‌افزاری موفق «قول دادن» است. تیم‌های حرفه‌ای یاد گرفته‌اند که قول بدهند، و به قول خود برسند و در این راستا کاملا با تیم‌های بیزنسی هماهنگ باشند.امروز که در حال نوشتن این گزارش هستم، نسخه اول اپ با موفقیت و دقیقا در زمانی که به آن متعهد بودیم آماده شد و در اختیار کارخانه قرار گرفت. تمامی فرایندهای تیمی، Task Management و CI/CD از طریق Azure DevOps انجام می‌شود و تیم از طریق این ابزارها فکر می‌کنند، مدیریت کارها از طریق این ابزار انجام می‌شود. تمامی جلسات روی بستر Microsoft Teams برگزار می‌شود. برنامه‌نویسان یاد گرفته‌اند که چطور با هم Pair Programming انجام دهند، در حالی که ریموت هستند. همچنین همه مستندات این شرکت از طریق Microsoft 365 مدیریت می‌شود.همکاری با سایر تیم‌هامثل هر پروژه موفق، موفقیت به تنهایی به دست نمیاد و ما در کنارمون افراد و تیم‌های فوق‌العاده‌ای داریم که همکاری باهاشون مثل همیشه لذت‌بخشه. در مرحله اول، این یه همکاری شیرین بین من، شروین مشایخ (مشاور مجموعه) و علیرضا دیلمی (مدیرعامل) هست که هر سه هدف مشترکی داریم. برای هر تغییری در یک سازمان نیاز هست که لایه‌های بالای مدیریتی هدف مشترک و همراستایی داشته باشن. با اینکه ما با هم جلسات خیلی زیادی نداشتیم، ولی در همون جلسات کم، تصمیمات کلیدی گرفتیم و از همه مهمتر، این تصمیمات با قدرت اجرایی شدن. برای مثال در سازمانی که به هیچ وجه تجربه کار ریموت نداشته، استخدام یک فرد در یک شهر دیگه می‌تونه خیلی چالش‌برانگیز باشه. حتی یه مسئله مثل تهیه کامپیوتر و گوشی موبایل تست برای یه فرد ریموت هم یک چالش بزرگ محسوب می‌شه؛ که خوب این‌ها مسائلی بودن که به خاطر قدرت مدیریتی در سازمان خیلی خوب تونستن هندل بشن.برنامه CS Internshipبرای ساخت یک تیم نرم‌افزاری نیاز به افراد با کیفیت داریم. قشری از افراد که در ایران دسترسی به آنها ساده نیست. ساختار آموزشی مدارس و دانشگاه‌های ایران به هیچ وجه طوری نیست که رفتار حرفه‌ای و تیمی به افراد آموزش داده شود.برنامه CS Internship برنامه‌ای است که با هدف کمک به افراد با انگیزه ایجاد شده تا بتوانند در مدت یک سال به مهارت‌های مناسب تعاملی و حرفه‌ای برسند. و اینطوریه که من جرئت می‌کنم یک تیم بسازم و روی نتیجه اون تیم متعهد باشم و قول بدم. همونطور که گفتم بیشتر این تیم با کمک بچه‌های CS Internship ساخته شده و من از این بابت خیلی خوشحالم.تیم دیزاین استودیودر چند سال اخیر کار کردن با یه تیم طراحی حرفه‌ای به یکی از استانداردهای من تبدیل شده. من به هیچ وجه وارد پروژه‌ای نمی‌شم که ساختار طراحی محصول و طراحی تجربه کابری توش وجود نداره. چون هر چقدر هم تیم برنامه‌نویسی فوق‌العاده باشه، نتیجه کار خوب نخواهد بود و زحمات همه به هدر خواهد رفت. در این پروژه این تیم فوق‌العاده تیم دیزاین استودیو هست که مسئولیت طراحی اپ‌ها رو به عهده داره.تیم Bitدر این پروژه ما تکنولوژی‌های ما همه بر پایه .NET بودند کار را برایمان بسیار راحت‌تر و لذت‌بخش‌تر کرد. از آنجاییکه با این تکنولوژی در حال حاضر می‌توان روی همه محیطها (Android, iOS, Backend, Frontend, Desktop) کد نوشت و باعث می‌شود افراد تیم بتوانند در تیپ‌های مختلف پروژه کمک کنند. از طرفی ما در این پروژه از فریم‌ورک Bit که یک فریم‌ورک اوپن‌سورس و بسیار سبک و سریع است استفاده کردیم و مثل همیشه «یاسر» رو به عنوان مشاور کنار تیم داریم.افشین (خودش یه تیمه!)در هر پروژه‌ای درصدی از کارها بسیار خاص و پیچیده هستند که هر کسی از پس آنها بر نمی‌آید. در اپلیکیشنی که این تیم روی آن کار می‌کرد پیچیدگی‌های زیاد پرفورمنسی و یکپارچه شدن با سیستم عامل Android وجود داشت که مثل همیشه «افشین» همه آنها را برطرف کرد.تیم فنی ملک‌رادارهمچنین در این پروژه از ظرفیت تیم ملک‌رادار در برنامه‌نویسی و مشاوره هم استفاده زیادی کردیم تا بتوانیم خیلی سریع تیم‌ نرم‌افزاری Beyond را تشکیل بدهیم. با توجه به اینکه تیم برنامه‌نویسی ما در ملک‌رادار همیشه در حال توسعه هست، معمولا ظرفیت برنامه‌نویسی بیشتری داریم که از این ظرفیت برای کمک به ساخت تیم‌های دیگه استفاده می‌کنیم.و در آخرساخت یک تیم جدید همیشه برای من یک چالش جدید و منحصر بفرد است. به این معنی که ساخت هیچکدام از تیم‌هایی که تا به حال ساختم شبیه هم نبوده و به هیچ وجه اینطور نبوده که بتونم یک الگو را مجددا تکرار کنم. هر شرکت شرایط منحصربفردی دارد که قابل مقایسه با شرکت‌های دیگر نیست. به همین دلیل ساخت هر تیم جدید برای من یعنی یک تجربه کاملا متفاوت، ارتباط با افرادی منحصربفرد که قبلا مشابه‌شان را ندیدم و حل مسائلی کاملا جدید.بعضی وقت‌ها هم در مورد چیزهایی که در این پروژه‌ها یاد می‌گیریم داستان‌سرایی می‌کنم و در بلاگم به زبان انگلیسی می‌نویسم. اگر علاقمند بودید می‌تونین بعضی از این داستان‌ها رو در بلاگم (mehrandvd.me) بخونین. بعضی از پرخواننده‌ترین داستانام تا الان اینا بودن:داستان اختراع مجدد قورباغه! (Reinventing the Frog)داستان بچه‌ای که هیچوقت به دنیا نیامد! (The story of a child that is never born)داستان یک تصمیم به اندازه کافی خوب! (Good Enough Decision towards Best Decision)امیدوارم که از داستان‌ها هم لذت ببرین :)