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

در مدیریت جدید تیمهای نرمافزاری حتی اگر شما یک مجموعه بزرگ از برنامهنویسان را در اختیار داشته باشید، باز هم برای مدیریت بهتر آنها را به تیمهای کوچکتر تقسیم خواهید کرد. آرش میلانی در نوشته بسیار خوبی توضیح داده است که چرا اغلب کوچک بودن تیمها عامل حیاتی برای بقای شرکتها و سازمانها است.
اما یک تفاوت دیگر هم در ایجاد و مدیریت تیمهای نرمافزاری مدرن وجود دارد، آن هم کنترل تخصصهای موجود در تیم است. در گذشته اگر شما میخواستید یک نرمافزار تحت وب تولید بکنید و مثلاً یک تیم 20 نفره داشتید، کارهایی که برنامهنویسان انجام میدادند شامل گستره وسیعی از مهارتها میشد. برای همین است که اگر رزومه من و هم نسلهای من را نگاه کنید میبینید همه ما دارای مهارتهای مختلفی در توسعه نرمافزارهای تحت وب هستیم مثلاً تسلط کامل به html یا css یا jQuery و یک یا چند فناوری برای تولید صفحات پویا از قبیل ASP یا PHP یا ASP.NET MVC و ...
امروز اما برای نتیجهگیری بهتر، توسعهدهندهها تشویق میشوند که در حوزههای خاصی مهارتهای خودشان را گسترش بدهند، بنابراین همان 20 نفری که مثال زدم به جای اینکه 20 نفر همه کاره (حالا با سطح بالا و پایین) باشند، ممکن است ترکیبی از 3 تیم مختلف 6 یا 7 نفره باشند که هر تیم، به صورت تخصصی روی بخشی از پروژه کار میکند. یک تیم مثلاً روی رابط کاربری کار میکند و مثلاً برنامهنویسی کلاینت را انجام میهد، تیم دیگر برنامهنویسی سرور و پیادهسازی لایههای کار با داده را انجام میدهد و تیم سوم هم مثلاً ترکیبی از معماران و تستکنندهها و نویسندگان فنی است. البته درباره نقشهای مختف مورد نیاز در تیمهای نرمافزاری بیشتر خواهم نوشت.
ابزارهای مدیریت برای نیروی انسانی
مدیریت تیمهای نرمافزاری امروزین خودش موضوع نرمافزارهایی است که به صورت تخصصی برای مدیریت به روشهای جدید تولید شدهاند. این نرمافزارها که نسل جدید نرمافزارها و روشهای قدیمی هستند به تولید نرمافزار به شکل یک تولید صنعتی نگاه کرده و پروسه آن را کاملاً مکانیزه میکنند.
به یاد دارم زمانی در شرکتی کار میکردم که از سورس کنترل استفاده نمیکردند و هنگام کار با یک فایل مشترک همدیگر را صدا میکردند که فلانی مواظب باش تغییرات من رو override نکنی! لیست باگها را در یک فایل اکسل نگهداری میکردند و برنامهریزی کارها هم هیچ چشماندازی از زمان اتمام کارها نمیداد. البته این موضوع مربوط به چندین سال پیش است و شاید در آن شرایط و برای آن شرکت این روش جواب میداده ولی قطعاً در بازار بسیار رقابتی امروز جوابگو نیست.
وقتی در قسمت اول از تست جوئل درباره source contol میگفتم اشاره کردم که TFS را ترجیح میدهم و گفتم این انتخاب دلایل دیگری نیز دارد. در TFS فقط مساله source control نیست، ضمن اینکه اگر از source control مایکروسافت خوشتان نمیآید میتوانید در نسخههای جدید از git استفاده کنید.
TFS علاوه بر source control یک محیط یکپارچه برای تولید نرمافزار در اختیار تیمهای نرمافزاری قرار میدهد. با استفاده از مفاهیم اسکرام میتوانید تولید خود را برنامهریزی کنید یعنی backlog های خود را وارد کنید و برنامهریزی sprint ها را انجام دهید. TFS با Visual Studio کاملاً یکپارچه است و از داخل خود Visual Studio میتوانید bug یا task ایجاد کنید و یا درخواست code review داشته باشید. علاوه بر مواردی که مربوط به کد یا برنامهریزی است، میتوانید build ها را تعریف و مدیریت کنید و شکست یا موفقیت در تولید build را مشاهده کنید.
برای ذخیره مستندات مربوط به پروژه میتوانید از یکپارچگی که با شیرپوینت دارد استفاده کنید و در نهایت با کمک Microsoft Test Manager و یکپارچگی که با TFS دارد، میتوانید تست پلنها و تست کیسهای خود را که میتواند تست اتوماتیک یا تست انسانی باشد را تعریف و مدیریت کنید.
این نوشته ادامه دارد.