چرا پروژه های نرم افزاری شکست می خورند؟ – قسمت یکم

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

1. رویکرد توسعه

1.1. توسعه نرم افزار در حوزه هایی که حداقل ابزار جهت انجام کارها وجود دارد!

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

1.2. اطلاعات در زمان تولید آن، دریافت نمی شوند!

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

1.3. طراحی User Experience) UX) برای کاربران انجام نمی شود!

فرم های دریافت اطلاعات برای کاربران نیاز به طراحی دارند. این طراحی ها بر اساس نوع کاربران، شغل، میزان تخصص و سایر مواردی که در این حوزه به آن باید توجه شود، انجام می شوند. طراحی UX باعث ایجاد سرعت در فرآیند ها می شود.

1.4. یک مدیر برای دو پروژه به همراه سایر مسولیت ها!

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

2. تعامل تیم نرم افزار با مشتری

موارد قابل توجهی که در تیم های نرم افزاری در خصوص تعامل با مشتری مشاهده می شود در زیر آمده است:
• عدم وجود نظم و دستورالعمل در ارتباط با مشتری
• نحوه برگزاری جلسات: مطرح شدن چندین موضوع ، نبود دستور جلسه مشخص، بی نتیجه ماندن موضوعات جلسه، عدم وجود صورتجلسه
• ارایه زمان های غیر منطقی تحویل به مشتری در جلسات
• عدم توانایی “نه” گفتن به مشتری
• قبول کردن هر نیازی از مشتری خارج از توان تیم و ارایه زمان تحویل غیر واقعی
• دور بودن تیم توسعه از مشتری و عدم تعامل آنها با یکدیگر
• عدم ارایه مستندات مانند BPMN(Business Process Model and Notation) به مشتری جهت شناخت بیشتر فرآیند ها و به حداقل رساندن دوره های تحویل
در توسعه پروژه های نرم افزاری مدرن تعامل با مشتری اهمیت بیشتری نسبت به سایر موضوعات مطرح شده دارد. نباید تولیدی انجام شود مگر اینکه ارزشی برای مشتری خلق کند و فرآیندی پیاده سازی نمی شود مگر اینکه برای تستی از یک فرآیند مشتری باشد که با موفقیت پاس نشده است و کدی نوشته نمی شود مگر برای پاس شدن یک تست واحد از یک فرآیند باشد. هیچ تیم نرم افزاری نمی تواند سالها تجربه مشتری را در چند جلسه دریافت کند و آن را توسعه دهد. مدیریت ارتباط با مشتری و برقراری ارتباط موثر خطر شکست پروژه ها را بسیار کاهش خواهد داد.

پایان قسمت یکم


So, what do you think ?