ساختار تیم‌های مدرن نرم‌افزار قسمت اول: رابطه کار و پول

می‌خواهیم ببینیم تیم‌های مدرن نرم‌افزاری چطوری کار می‌کنند؟ یکی از مواردی که می‌شه بررسی کرد اینه که رابطه کار و پول چطوریه؟ پروژه‌ای، استخدامی، ساعتی؟

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

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

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

صنعت نرم‌افزار صنعتی متکی به نیروی انسانی

نرم‌افزار جزء صنایعی است که برای ارائه محصول نیاز به ماده اولیه ندارد و بیشترین سهم هزینه در این صنعت مربوط به نیروی انسانی است. در واقع نیروی انسانی هست که با فکر و کار خود، محصول نرم‌افزاری را ایجاد می‌کند.
در صنایع دیگر برای تولید یک واحد از یک محصول شما باید زمان، نیروی انسانی، انرِژی و ماده اولیه را به نسبت مشخصی هزینه کنید. مثلاً برای تولید یک خودکار، باید ماده اولیه بدنه و جوهر و نوک قلم توسط انسان/ماشین به همراه انرژی و وقت مشخصی صرف شود تا یک خودکار آماده عرضه به بازار شود. برای تولید خودکار دوم، مجدداً باید همان پروسه تکرار شود. اما در تولید نرم‌افزار اینگونه نیست، ما می‌توانیم یک نرم‌افزار را یک بار با صرف وقت و با استفاده از تحلیل مشخص آماده کنیم و ده‌ها نسخه از آن را به راحتی به بازار عرضه کنیم، بدون اینکه نیاز باشد دوباره وقتی صرف شود.

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

هزینه نیروی انسانی در تیم‌های نرم‌افزاری چگونه محاسبه می‌شود؟

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

  • استخدام در یک شرکت یا تیم نرم‌افزاری و دریافت حقوق ماهیانه برای انجام تعداد ساعت مشخصی کار
  • استخدام به صورت پروژه‌ای برای انجام یک یا چند پروژه خاص
  • استخدام به صورت ساعتی برای انجام خدمات یا تولید کدهای سفارشی

اما اساس هر سه روش بالا، استفاده از تخمین نفر/ساعتی برای تولید نرم‌افزار است. اجازه بدهید یک مثال بزنم. فرض کنیم یک شرکت یا تیم نرم‌افزاری در حال مذاکره برای گرفتن یک پروژه تولید نرم‌افزار انبارداری است.

اگر شرکت یا تیم نرم‌افزار از روش اول استفاده کند یعنی از تعدادی برنامه‌نویس یا توسعه‌دهنده که به صورت تمام وقت برایش کار می‌کنند استفاده کند، محاسبه قیمت پروژه بر اساس نفر/ساعت تولید نرم‌افزار + سربار هزینه‌هایی است که به واسطه مواردی مثل بیمه یا مالیات مربوط به افراد و قرارداد برای شرکت ایجاد می‌شود. اگر شرکت یا تیم نرم‌افزاری متشکل از افراد ثابت دارید باید توجه داشته باشید که ریسک بی‌کار ماندن افراد تیم (به واسطه نبود پروژه یا محصول جهت کار) به هزینه‌های شما اضافه می‌کنند، بالاخره دولوپر سر ماه حقوقش را از شما می‌خواهد چه کاری انجام داده باشد چه نداده باشد!

روش دوم و سوم ممکن است در ظاهر هزینه کمتری داشته باشد، اما ریسک انجام پروژه را بالا می‌برد. در واقع در روش اول چون نیروی کار از طریق پروسه گزینش نیرو به تیم اضافه شده و تضمین‌های لازم از نظر قدرت و تعهد به کار از وی گرفته شده و به نوعی صلاحیتش احراز شده،‌ انتظار می‌رود که محصول ارائه شده کیفیت مطلوب‌تری داشته باشد. اما در روش‌های دوم و سوم که عمدتاً‌ به صورت outsource کردن تمام یا بخشی از پروژه به افراد freelance (آزادکار) اجرایی می‌شود، هیچ وقت صد در صد نمی‌توان در مورد صحت عملکرد مجری کار مطمئن شد.

در این مورد در نوشته‌های بعدی بیشتر صحبت خواهیم کرد.

تنظیم رابطه مالی بر اساس انجام وظایف

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

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