چگونه تیم توسعه نرم افزار مناسب تشکیل دهیم؟

چگونه یک تیم توسعه نرم افزار مناسب تشکیل دهیم؟

تشکیل تیم توسعه نرم افزار، همواره برای بسیاری از استارتاپ ها دغدغه بزرگی بوده است. در این مقاله قصد داریم 5 تکنیک کارامد ارائه دهیم تا با استفاده از آنها بتوانید مناسب ترین تیم توسعه نرم افزار را ایجاد کنید. این تکنیک ها نه تنها هنگام تشکیل تیم کارایی دارند، بلکه به شما کمک خواهند کرد پس از تشکیل تیم، اعضاء تیم خود را بهتر مدیریت کرده و کارایی آنان را افزایش دهید.

  • اندازه تیم خود را مشخص کنید

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

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

بنابراین باید قبل از تکمیل تیمتان، دقیقا مشخص کنید که چه بازه ای برای شما مناسب است. تجربه نشان داده، تیم های 4 الی 7 نفره بهترین تناسب میان میزان تولید و عملکرد را دارند.

البته که کسب وکار های بزرگتر، نیازمند اعضا بیشتری هستند. در چنین شرایطی شما می توانید به تعداد مورد نیاز نیرو ی کار جذب کنید و سپس آنها را به گروه های کوچکتری متناسب با نوع توانایی و کاری که باید انجام دهند، تقسیم کنید. تجربه ثابت کرده داشتن 2 تیم 5 نفره بسیار کاراتر از داشتن یک تیم 10 نفره می باشد.

پس به طور خلاصه می توان گفت بهتر است یک تیم 4 الی 7 نفره تشکیل دهید و همواره در نظر داشته باشید که هرچه تعداد افراد بیشتر شود، میزان کارایی افت می کند و ارتباطات بیشتری برقرار می شود.

  • نوع تیم خود را مشخص کنید.

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

  • افراد متخصص در چند حوزه (Generalist)

برخی افراد در چند حوزه ی مختلف دانش و مهارت دارند که بسته به نیاز و شرایط مختلف،‌ می توانند از ابزار های مختلفی استفاده کنند. یا وظایف گوناگونی را به عهده بگیرند. چنین افرادی در صورت لزوم می توانند مهارت های جدید را یاد بگیرند. و یا با توجه به اینکه دید کلی نسبت به حوزه های مختلف دارند، می توانند با سایر اعضا تیم توسعه نرم افزار ارتباط بهتری برقرار نمایند. در حوزه توسعه نرم افزار اغلب به چنین افرادی توسعه دهندگان فول استک (Full-stack developer) گفته می شود. درصورتی که محصولی که قصد توسعه آن را دارید نیازمند داشتن مهارت در چندین حوزه مختلف می باشد، قطعا کمک گرفتن از یک توسعه دهنده فول استک توصیه می شود.

  • افراد متخصص در یک حوزه

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

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

  • حالت ترکیبی

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

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

نکته: متخصصین T شکل متخصصینی هستند که از پس انجام کارها در چند حوزه مختلف بر می آیند ولی در یک حیطه کاری تخصص دارند. سعی کنید در تیم خود از کمک چنین افرادی استفاده نمایید. همانطور که در تصویر زیر دیده می شود، خط عمودی طولانی حرف T بیانگر دانش عمومی متخصص است، درحالی که خط افقی  که در امتداد دانش کلی او قرار دارد،‌ بیانگر تخصص عمیق او در آن حیطه است. برای مثال برنامه نویسان Back-end که به زبان PHP کد نویسی می کنند (تخصص اصلی) می توانند دانش کلی در مورد JavaScript داشته باشند (دانش کلی در موضوعی دیگر). دقت کنید که این متخصصین با متخصصین دسته ی اول (متخصصینی که در حوزه های مختلف توانایی دارند) فرق دارند.

  • وظایف هر فرد را به طور مستند و مکتوب شرح دهید.

سعی کنید شرح وظایف و سمت هر کدام از اعضا تیم توسعه خود را قبل از استخدام به صورت مکتوب و مستند داشته باشید. برای مثال تیم توسعه نرم افزاری می تواند متشکل از معمار،‌ مهندس دوآپس (DevOps Engineer)، مدیر توسعه فناوری اطلاعات و … باشد. بنابراین سعی کنید قبل از تکمیل تیم خود، با در نظر گرفتن نوع کاری که قرار است انجام دهید موقعیت شغلی افراد مورد نیاز را مشخص کنید و سپس بر اساس مستندات خود و به صورت هدفمند نیرو استخدام نمائید. سوالات زیر می توانند به شما کمک کنند دقیق تر مشخص کنید که به حضور چه متخصصینی نیازمندید:

  • در تیم توسعه نرم افزارتان چه سمت هایی خالی هستند؟
  • از متخصصی که قرار است در موقعیت x قرار بگیرد، چه انتظاراتی دارید؟ 2 الی 3 هدف را برای هر سمت مشخص کنید.
  • هر فرد به چه منابعی جهت رسیدن به اهداف خود نیاز دارد؟
  • هر فرد در سمت خود با چه مشکلات و چالش هایی روبرو است؟

 

  • نوع مدیریت خود را انتخاب کنید:‌ مدیریت سختگیرانه و یا سهل گیرانه

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

مراحل تکامل تیم توسعه :

هر تیم توسعه به طور کلی 5 مرحله را برای تکمیل شدن پشت سر می گذارد:

  1. شکل گیری: این اولین مرحله تکمیل یک تیم توسعه می باشد. در این مرحله اعضا جدید با یکدیگر آشنا می شوند. عموما رفتار کارکنان بسیار محترمانه و دوستانه است و هیچ کشمکشی میان اعضا وجود ندارد. در این مرحله رهبر تیم نقش بسیار مهمی را بازی می کند.
  2. طوفان: این مرحله پس از این که هیجانات ملاقات اولیه فروکش کرد، پدیدار می شود. در این مرحله افراد همدیگر را بهتر می شناسند،‌ نقاط ضعف، شیوه کار کردن و دیدگاه های مختلف یکدیگر را می شناسند. تمام این موارد می توانند در آینده به ایجاد کشمکش در تیم بیانجامند و شما به عنوان رهبر تیم وظیفه دارید امور را اصلاح کنید و شرایط را تحت کنترل گرفته و آب ها را روان کنید. توصیه می شود هنگام ایجاد تعارضات، سرسری از روی این امور عبور نکنید و سعی کنید این تعارضات را به دقت شناسایی کرده و حل نمایید. در غیر این صورت در آینده مجبور خواهید بود چندین برابر زمان بیشتری برای حل مشکلات صرف کنید.
  3. مرحله تعادل: در این مرحله تیم به صورت یک واحد یکپارچه در می آید و بر روی اهداف خود متمرکز می شود. تعاملات بین اعضا تیم بهبود می یابد و تعارضات کمتری پیش می آید.
  4. اجرا: این مرحله ای است که تیم شما اعتماد به نفس کسب می کند و با انگیزه و دقت خودش اداره امور را در دست می گیرد و به عبارتی روی غلطک می افتد. در این مرحله رهبر تیم می تواند برخی وظایف کنترلی و مدیریتی را به دیگر اعضا تیم بسپارد و زمان آزاد بیشتری را برای خود کسب کند. سپس می تواند این زمان آزاد را صرف توسعه کسب و کار و یا ارتقا هرچه بهتر سطح کیفیت تیم خود نماید.
  5. شکستن: این مرحله به تیم هایی مربوط می شود که تصمیم می گیرند همکاری با یکدیگر را متوقف کنند. در این مرحله تیم به تمامی اهداف خود رسیده است، پروژه تکمی شده است و یا متوقف گشته است. در این مرحله رهبر تیم وظیفه دارد از تک تک اعضا خود تشکر نماید.

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

سعی کنید رهبر خوبی باشید.

یک مدیر توسعه محصول باید توانایی های ارتباطی خوبی داشته باشد. باید بتواند اهداف و نیازمندی ها را به دقت وضع کند و بتواند تعارضات را حل کند. همچنین یک مدیر پروژه خوب باید بتواند به طور شفاف شرح وظایف هر توسعه دهنده ای را به وی ابلاغ نماید. بدین ترتیب توسعه دهندگان به طور مشخص سمتشان و همچنین وظایف مورد انتظار از آنها را خواهند شناخت.

چگونه تعارضات میان تیم توسعه نرم افزارتان را حل کنید؟

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

روش استفاده از تکنیک “5 چرا” :

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