سورس کد / بخریم یا بفروشیم!

سورس کدطی سال های گذشته و تجربیاتی که در حوزه نرم افزار کسب کردیم همیشه داستان فروش سورس کد و یا خرید سورس کد چالشی عجیب بین کارفرما و پیمانکاران بوده.در این نوشته سعی شده چالش ها، نگرانی ها و پیشنهاد های مربوط به ارائه و یا عدم ارئه سورس کد در قراردادهای خدمات نرم افزار ارائه شود. امید است موضوع مطرح شده راه گشای بسیاری از بن بست های ارائه خدمات نرم افزاری گردد.نگرانی هانگرانی های کارفرمااگر شرکت دیگه فعالیتش را ادامه نداشت، نرم افزاری که ما تهیه کردیم بعد از مدتی بلا استفاده میشه چون که احتمال داره باگ های اساسی داشته باشه یا مشکلی داشته باشد و یا نیاز های ما طی زمان تغییر کنه.اگر به هر دلیلی ما نخواهیم با شرکت کار کنیم باید بتونیم در صورت لزوم نیاز های سازمانی جدید دیده شده را در نرم افزار پیاده سازی کنیم.پولشو دادیم باید سورس کد هم تحویل بشه.نگرانی های پیمانکارچه لزومی داره که کارفرما سورس کد داشته باشه؟ شاید بعدا دیگه خدمات پشتیبانی را نداشته باشند و خودشون شروع به تغییر کد داشته باشند.آیا ارزش مادی و معنوی نرم افزار حفظ میشه؟آیا کارفرما خودش تبدیل به رقیب برای ما نمیشه؟ارائه سورس کد به کارفرما ارزش مالی داره یا خیر!تعاریفهمونطور که همه اطلاع داریم نرم افزارها و سامانه ها از منظر بیزینس به 2 قسمت نرم افزارهای سفارش مشتری و محصول گرا تقسیم بندی می شوند.نرم افزارهای سفارش مشتری نرم افزارهایی هستند که ابتداعاً توسط کارفرما نیازسنج احساس شده و درخواست را در غالب مناقصه، استعلام، ترک تشریفات و ... به پیمانکاری جهت پیاده سازی اون ارجاع داده می شود.جهت تولید این دسته از نرم افزارها بهتر است ابتداعا RFP توسط کارفرما تهیه شده و هر چه این سند دقیق تر و جزیی تر باشد در ادامه راه از بوجود آمدن سوتفاهم ها و کج فهمی ها جلوگیری خواهد شد. پس از بررسی RFP توسط پیمانکار معمولا سند PRP (پروپوزال) توسط پیمانکار تهیه شده و به کارفرما ارجاع داده خواهد شد. جهت بررسی بیشتر در این خصوص ارجاع به اسناد "نماتن" تهیه شده توسط شورای عالی انفورماتیک. این دسته از نرم افزارها معمولاً مشتری خاص و در برخی موارد صرفاً یک مشتری (کارفرما) خواهند داشت و مدت زمان پیاده سازی نرم افزار از مدل بعد به مراتب کمتر خواهد بود.نرم افزارهای محصول محور نرم افزارها و یا سامانه هایی هستند که ابتداعاً توسط شرکت سازنده نیازسنجی بازار انجام شده و معمولاً توسط تیم خود شرکت شروع به تولید می شود که در این حالت معمولا از متدولوژی های MVP و چرخه های توسعه محصول جهت بهبود مستمر استفاده شده و در نهایت در فازهای مختلف بازاریابی و فروش انجام میشود. بدیهی است این گونه از نرم افزارها معولا دارای گستره وسیع تری از مشتریان را شامل خواهد شد و در بیشتر موارد به دلیل توسعه و بهبود مستمر دوره پیاده سازی و توسعه محصول از مدل سفارش مشتری به مراتب بیشتر خواهد بود. همانند نرم افزارهای مختلف Enterprise، حسابداری، سامانه های کاربردی همانند مدیریت ناوگان و ... .چالش های ارائه و عدم ارئه سورس کدقبل از هر چیز این جمله را از کارفرماها خیلی شنیدم "پولشو دادیم سورس کد هم باید تحویل بشه"، مثل این می مونه که بگید چون ویندوز را خریدم (به فرض محال در کشور ما) باید مایکروسافت سورسش را بده، یا مثلا چون گوشی آیفون را خریدم باید اپل سورس کدش را بده (عجب). کارفرمایان عزیز بهتر است مطلع باشیم صرفاً زمانی می توانیم درخواست سورس کد را داشته باشیم که در متن صریح قرارداد ذکر شده باشد و همچنین در هر صورت مالکیت معنوی برنامه متعلق به پدیدآورنده می باشد. حتی در صورتیکه به صورت صریح در قرارداد ذکر شده باشد که مالکیت مادی و معنوی متعلق به خریدار است، با توجه به ماده 10 آیین نامه اجرایی قانون حمایت از حقوق پدیدآورندگان نرم افزارهای رایانه ای نقص قانون تلقی شده و اجرایی نمی باشد. کارفرمایان می توانند با توافق طرفین مالکیت مادی برنامه را تا 30 سال با درج در قرارداد متعلق به خود بدانند.با توجه به دسته بندی ارائه شده در خصوص نرم افزارها، در صورتیکه نرم افزار سفارش مشتری را از منظر ارائه سورس کد بنگریم، ارائه آن کد به کارفرما امری منتقی و عرف می تواند باشد، مگر در شرایط خاص.بنابراین در صورتیکه کارفرمایی هستید که نرم افزار خاص خود شما را درخواست داده اید، می توانید و بهتر است در RFP مورد نظر درخواست سورس کد را داشته باشید. به طور مثال در صورتیکه در سازمانی هستید که نیاز به نرم افزار اندروید خاص خود سازمان دارید (فرضاً سازمان بازیافت درخواست نرم افزار اندروید جمع آوری بازیافت توسط مردم) و یا سایت شرکت خود را می خواهید برون سپاری کنید بهتر است دریافت سورس کد را در برنامه خود داشته باشید.ولیکن چالش اصلی زمانی است که کارفرما درخواست سورس کد های نرم افزارهای محصول محور را داشته باشد.در هر صورت باید مد نظر گرفت که ارائه سورس کد برای محصول های پیچیده هیچگاه تضمین نخواهد کرد که نگرانی های کارفرما مرتفع شود. زیرا حتی با فرض اینکه پیمانکار سورس کد کامل و مستندات راهنمای کامل برنامه نویسی و کامنت گذاری دقیق را انجام داده باشد، مدت زمان بسیار طولانی تری نسبت به تولید کننده اصلی می بایست سپری شود تا پروژه توسط تیم جدید آموزش و به اصطلاح سوار کار شوند و عملاً توسعه محصول در این روش بسیار زمان گیر، پیچیده و حتی در برخی موارد مشاهده شده که کارفرما لقا را به عطا بخشیده و مجدد نرم افزار جدید تهیه کرده است.راه حل چیست؟ 1- انتخاب پیمانکار و شرکت با سابقه و خوش نام قطعاً می بایست اولین و اصلی ترین رکن انتخاب باشد، معمولاً شرکت های خوش نام برای آینده خود برنامه ریزی های متعددی را خواهند داشت حتی به خروج و یا انحلال نیز فکر کرده و پاسخ گوی مناسبی خواهند بود.2- ارائه تضامین مختلف جهت پشتیبانی و خدمات پس از فروش، بایستی در نظر گرفت که بقای سازمانی شرکت های نرم افزاری در ارائه خدمات مناسب پس از فروش نیر می باشد همانطور که در بورس کشور نیز چند شرکت نرم افزاری وجود دارند و در صورتیکه اسناد مالی و فروش آنها را بررسی کنید متوجه خواهیم شد که بسیاری از آنها بیشتر درآمدشان از قسمت خدمات پشتیبانی خواهد بود. اگر کارفرما هستید هیچ گاه به دنبال نرم افزار بدون خدمات پشتیبانی نباشید زیرا قطعا پول خود را هدر خواهید داد. نرم افزار وسیستم های مربوط همانند یک موجود زنده است که نیاز به تغییر و بروز شدن دارند ( در بهترین حالت ویندوز از نسخه 3.1 تا 11 را در نظر داشته باشید). بهترین ارائه دهنده خدمات پشتیبانی نیز شرکت سازنده نرم افزار خواهد بود. ( به دنبال راه درو نباشیم ;)