امکان سنجی و اثبات مفهوم – بخش نخست

9 03 2009

درود بسیار بر دوستان گرامی

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

امکان سنجی

برخی کارها رو میشه کرد و نیازی به بررسی نداره؛ برای نمونه : “برنامه ای بنویسید که دو عدد را از رودی گرفته و مجموع آنها را در خروجی چاپ کند”. برخی کار ها رو شما نمیتونید بکنید اما کسانی هستند که با داشتن توانایی بیشتر میتونند اون کار رو بسادگی (یا شاید هم بسختی) انجام بدن برای نمونه: “سیستم عاملی چند وظیفه ای بنویسید”. برخی کارها ها هم اصولا شدنی نیست حالا چه شما بخواید انجام بدین چه حضرت ابوالفضل با امکانات متافیزیکی؛ برای نمونه: “برنامه ای بنویسید که به اسکیموها یخچال فریز امرسان بفروشد”. بنابراین زمانی که یکی میاد و میخواد که براش نرم افزاری بنویسید یا سایتی بسازید یا شرکتش رو به ریخت ویژه ای براش شبکه کنید نخست باید ببینید که این کار شدنی هست یا نه. این کار رو میگن : «بررسی امکان سنجی». اگر بررسی امکان سنجی نشون بده که اون کار شدنی است در اون صورت میتونید به سراغ قدمهای بعدی پروژه برید اما اگر بررسی های امکان سنجی نشون بدن که اون کار شدنی نیست یا راه حل واضحی براش نیست در اون صورت شما با یک ریسک بزرگ روبرو هستین و پروژۀ شما از همین نخست توی بحران رفته. نیازی به توضیح نداره که امکان سنجی از جمله مراحل بسیار حیاتی پروژه است و اگر در این مرحله خوب کار نکنید نتایجی که میگیرد گمراه کننده خواهند بود و بعداً توش میمونید. معمولا بلافاصله پس از صحبت های نخستین با مشتری و جمع آوری نیاز های اولیه و نکات مهم پروژه یک بررسی امکان سنجی انجام میشه تا آشکار بشه که آیا پروژه شدنی هست یا نه. خیلی از دشواری های فنی و ریسک های بزرگ خودشونو اینجا نشون میدن و تا بررسی ها امکان سنجی انجام نشه اون ریسکها و دشواری ها شناخته نمیشن

بررسی (مطالعه) و آزمون (تست) امکان سنجی

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

امکان سنجی از زوایای غیر فنی

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

  • کار شدنی : Feasible
  • انجام شدنی بودن : Feasibility
  • بررسی امکان سنجی : Feasibility ُُStudy
  • آزمون امکان سنجی : Feasibility Test
  • ریسک بزرگ، ریسک عمده : Major Risk
  • پر خطر : High Risk
  • بحران : Crisis
  • بعد فنی : Technical Aspect
  • زمان و هزینه : Time and Cost
  • بهره برداری از منابع بیرون سازمانی : Out-sourcing