یک سوال
اغلب شرکتهایی که تیم نرمافزاری دارند در دوره حیات خود درگیر چالشهایی میشوند که برای حل آن نیاز به یک نرمافزار دارند , و اینجا یک سوال میان مدیران به وجود میآید که این نرمافزار را بخریم یا بنویسیم؟این سوال به ظاهر ساده ولی پیچیده درگیر زیادی با مفاهیم مدیریت پیدا میکند و پاسخ دادن به آن اصلا ساده نیست چرا که فاکتورهای زیادی در پیدا کردن پاسخ آن نقش دارند و از طرف دیگر منافع افراد زیادی با آن درگیر است مثلا ممکن است مدیر بازرگانی نفعش در این باشد که این نرمافزار را به فلان شرکت آشنا بدهد تا پورسانت بگیرد و مدیر فنی نفعش در این باشد که کار را بگیرد و انجام دهد تا ارزش و اعتبارش در سازمان بالا برود. همین درگیری منافع باعث مهآلود شدن فضا میشود و مغلطهها و سفسطههایی را به جلسه میآورد که پروسه انتخاب را سردرد آور میکند. در این مقاله میخواهیم فضا را کمی شفاف کنیم تا انتخاب برای شما سادهتر شود و بتوانیم به تصمیم گیری بهتر شما کمک کنیم.
چرخ را از اول اختراع نمیکنند
نوشتن یک نرمافزار کار راحتی نیست، هزینه توسعه ساده ترین مسئله است چرا که در یک محیط پیچیده و پر تلاطم شما نیاز به ایجاد یک محصول بدون مشکل را دارید پس باید همه چیز را به بهترین شکل انجام دهید که از جذب نیروی انسانی خبره در چند تخصص مختلف شروع میشود و بعد باید در تلاطم پر از طوفان بازار یک محیط آرامش بخش فراهم کنید سپس در این افراد انگیزه ایجاد کنید و بعد از آن نیز مالک محصول خوب پیدا کنید که هم بازار شما را و هم تیم نرمافزاری را بشناسد و هم با فرهنگ کاری و نظرات مدیران هماهنگ باشد، بعد از آن قدم به قدم هزینه مالی و زمانی و فکری بگذارید تا کار به سرانجام برسد.در این میان بدعهدیهای تیم فنی در تحویل محصول، سختی مدیریت منابع انسانی knowledge worker ها، تغییرات بازار و نیازها در طول زمان، پر هزینه بودن حفظ و نگهداری سیستم، فرسوده شدن نرمافزار (wear out) در طول زمان و نیاز به بازسازی مداوم آن و… عواملی هستند که ما را مجاب میکند که یک نرمافزار را از ابتدا ننویسیم و چرخ را از اول اختراع نکنیم؛ در عوض برویم و خیلی شیک یک نرمافزار آماده بخریم.تصور کنید در خانه خود، ماست و پنیر خانواده را خودتان تهیه میکرده و از فروشگاه نمیخریدید، درخت میوه خودتان را داشتید و از آن استفاده میکردید، لباس تنتان را خودتان میدوختید و هر چه لازم داشتید را از منابع خودتان تامین میکردید.
- آیا این زندگی ایده آل شماست؟
- آیا خودتان میتوانید همه این کارها را انجام دهید؟
- آیا اصلا تخصص انجام آنها را دارید؟
- آیا اصلا وقت میکنید این همه کار را با هم انجام دهید؟
با ابن تفاسیر چگونه میخواهید یک کار بسیار پیچیده مثل توسعه نرمافزار که به چندین تخصص مختلف و همکاری بالای آنها احتیاج دارد را خودتان انجام دهید؟ دیوانه شدید؟ نرمافزار را بخرید و خود را از این همه عذاب راحت کنید.من یک دلال نیستم یک کارآفرین هستمیک سوال مهم این است که چرا برای هر وعده غذایی خود به رستوران نمیروید؟ غذای حاضر و آماده و بدون زحمت همیشه آنجا هست. چرا غذای خانگی را به غذای آماده و فست فودهای بیرون ترجیح میدهید؟ چه چیزی میان این دو متفاوت است؟ جواب در چند گزینه خلاصه میشود
- هزینه بالای تهیه غذا از رستوران
- کیفیت پایین مواد اولیه رستورانها
- شفاف نبودن فرآیند پخت
- عدم توجه به ذائقه مشتری و تنها توجه به ذائقه عام
- استفاده از روغن و نمک زیاد و مواد مضر دیگر برای خوشمزگی غذا
اینها بخشی از دلایل ما برای استفاده از غذای خانگی است. غذایی که با محبت مادر و همسر و برای خانواده تهیه میشود، مطابق با ذائقه ماست، سلامتی ما بیش از هر چیزی برای آشپز مهم است و از همه مهمتر هزینه مالیات و اجاره و سود فروشنده در آن نیست و به لحاظ قیمتی به صرفهتر است.هنگامی که میخواهیم یک نرمافزار بخریم باید به این نکته آگاه باشیم که شرکت فروشنده نرمافزار نیز یک بنگاه اقتصادی است و سود نقش اصلی را در تصمیمهای او بازی میکند. ما به عنوان مشتری هم عامل سودآوری برای او هستیم پس او نه تنها همه هزینههای تولید یک نرمافزار را تقبل کرده بلکه سود زیادی نیز باید ببرد و ما قرار است همه اینها را پرداخت کنیم. جدای از این برای پشتیبانی و نگهداری نرمافزار نیز به او وابسته خواهیم بود و این ممکن است هزینههای ناخواسته زیادی برای ما ایجاد کند.از طرف دیگر شرکت ثالث نرمافزار را مطابق ذائقه ما تولید نمیکند پس به احتمال زیاد تعداد زیادی از خواستههای ما با پاسخ "نه" او مواجه خواهند شد.
اگر خواسته ای داشته باشید که در پلن توسعه ای آنها نباشد و برایشان سود آور نباشد و مشتری دیگری جز شما خواهان آن نباشد یا نه میگویند یا هزینه گزافی برایتان خواهد داشت پس اگر نیاز شما کمی خلاقانه و متفاوت از روند استاندارد بازار است باید به دنبال جمع کردن تیم باشید چرا که دو حالت دارد: یا او نرمافزار را اختصاصی فقط برای شما مینویسد که احتمالا هزینه آن وحشتناک بالاست و یا یک نرمافزار مینویسد که به صد نفر بفروشد و سود خود را با تعداد مشتری بالا جبران کند که در آن صورت برایش مهم است که اگر یک فیچر اضافه میکند یا یک معماری را توسعه میدهد 100 مشتری برای آن وجود دارد پس روند خاص شما را پیاده نخواهد کرد.تفاوت محسوس کیفیت هم یکی از فاکتورها است، از نظر شرکت فروشنده نرمافزار کیفیت یعنی نرمافزاری که خوب بفروشد و کمترین زمان develop و هزینه توسعه و نگهداری را داشته باشد پس سعی میکند یک نرمافزار پر از featureها و امکانات رنگارنگ بسازد که در هنگام دمو و بازاریابی شما را مست و مدهوش کند ولی اینکه بعدا این نرمافزار چقدر مشکل ایجاد میکند یا چه سناریوهایی را تحمل نمیکند دیگر مشکل او نیست مشکل شماست. مثلا در یک نرمافزار مالی اینکه چقدر تراز نامهها و مغایرتها را کنترل میکند، چقدر واقعا امنیت دارد، تا چند هزار رکورد و کاربر آنلاین را پشتیبانی میکند، از چه جایی کند میشود، چقدر کاربر پسند است و… دردسرهای او نیستند. پس او سعی میکند ابعادی را از شما پنهان و ابعادی را برای شما بزرگنمایی کند تا بفروشد و غذایی چرب و پر سس به شما خواهد داد که کبد شما را از کار میاندازد ولی لذت لحظه ای حضور در رستوران به شما میدهد.فساد مامور خرید و ارزیابی هم چیز جدیدی نیست، ممکن است مدیران شما و یا متخصصان شما از پشت صحنه لابی کنند و با ارزیابی غلط، یک نرمافزار را با چند برابر قیمت و با کیفیت خیلی پایین بخرند و بعد فرار کنند. واقعا کنترل چنین موضوعی سخت است و دقت مضاعف شما را میطلبد که مواظب فسادهای پشت صحنه باشید و متخصصان و کارشناسانی امین داشته باشید.و نکته آخر اینکه کسی که یک نرمافزار را به شما میفروشد میتواند آن را به 1000 نفر دیگر هم بفروشد. قراردادهای فروش انحصاری و چیزهای مشابه هم تاثیر زیادی بر این روند ندارند چرا که هزار راه دور زدن دارند و تازه معمولا نفرات بعدی نرمافزار کاملتر و بهتری نسبت به شما دریافت خواهند کرد چرا که نرمافزار به مرور زمان توسعه میابد و بهتر میشود ولی شما صاحب نسخه قدیم آن هستید. بر اساس همین موضوع حواستان باشد که اگر داشتن آن نرمافزار مزیت رقابتی شماست باید فکری هم به حال توسعه آن در آینده و حفظ مزیت رقابتی کنید یا حضور رقیب را تحمل کنید به هر حال هوای بازار بسیار خشن است و رقابت سنگین و کشنده و بازار مرام و معرفت نمیشناسد.
خرید سورس نرمافزار چطور
کارفرماها برای اینکه هم مزیت سرعت ورود به بازار را بدست بیاورند و هم امکان توسعه در آینده و حفظ مزیت رقابتی در آینده را داشته باشند اقدام به خریدن سورس کد (source code) نرمافزار میکنند. چند حقیقت تلخ در مورد کدهای نرمافزار هست که باید بدانید:
1- کد یک نرمافزار بدون حضور برنامه نویس آن ارزش چندانی ندارد. وقتی یک مهندس معمار نقشه یک ساختمان را میکشد و بعد از رفت آمدهای زیاد با کارفرما و مجری و… آنرا نهایی میکند تنها اوست که به طور عمیق علل وجود خطوط در جاهای مختلف پلان را میداند، اینکه چرا مثلا فضای راهرو کوچک شده چون مثلا تاسیسات ساختمان به فضای زیادی برای عبور احتیاج داشتند یا مثلا برای نورگیری بهتر پذیرایی آشپزخانه کوچک شده و… یعنی اگر هر کس از بیرون نگاه کند میتواند کلی ایراد بگیرد ولی اگر بخواهد آن را درست کند باید زمان زیادی صرف کند تا علت تک تک جا گیریها و چینشها را متوجه شود تا بعد بتواند بهبود آن را شروع کند. در خیلی از مواقع معمار جدید با نگاهی متفاوت به خانه نگاه میکند مثلا از نظر او بزرگی آشپزخانه اهمیت بیشتری نسبت به نوگیری پذیرایی دارد پس اگر قلم بلند کند و تغیررات را شروع کند احتمالا نقشه را زیر و رو میکند و. شما را مجاب مبکند که باید از اول ساختمان را طراحی کنید. این ذات مهندسی است که افراد کار نفر یا تیم قبلی را فاقد ارزش بدانند و بخواهند کار خود را انجام دهند و احتمالا شما نتوانید فرد دیگری برای توسعه کد پیدا کنید مگر اینکه فرد بیاید کار را ماستمالی کند و برود تا صرفا پولش را بگیرد یا با درصد احتمال پایینی فرد جدید نگاه و سطح سواد نزدیکبه نفر قبل را داشته باشد.
2- کدها در گذر زمان ارزش خود را از دست میدهند چرا که تکنولوژیها و ابزارها به سرعت در حال تغییر هستند و یک کد که به روز نشود احتمالا بعد سه یا چهار سال پر از مشکل خواهد بود و حتی پیدا کردن دولوپری که حاضر شود با تکنولوژیهای منسوخ آن کار کند هم سخت خواهد بود و هر قدر نرمافزار شما پیچیدهتر باشد سرعت این کهنه (deprecate) شدن بیشتر خواهد بود و برای همین شما معمولا کنار این کدها نیاز به تیم فعال برای به روز نگه داشتن آن کدها دارید.3- کد خوبِ قابل توسعه را سخت میفروشند. یعنی اگر کسی کدی دارد که خیلی خوب معماری شده که دیگران میتوانند بدون مشکل آن را توسعه دهند و بداند که شما بی نیاز به آن شرکت خاص و دولپرهای آن میتوانید آن را توسعه دهید احتمالا آن را به شما نخواهد فروخت. چون چنین کدی با خون دل بدست آمده و قیمت کمی ندارد و قاعدتا شخص نمیخواهد شما رقیب او در بازار شوید و کد او را توسعه دهید و روی آن بیزینس کنید یا حتی دوباره آن را بفروشید پس احتمالا آن کد خوب فروشی نیست و آنچه فروشی است و راحت به شما میدهند کد ای است که وابستگیهای خاص به شرکت یا دولپر دارد و یا با خون دل بدست نیامده و ساده است و به قولی شبیه پروژههای دانشجویی است که تنها کار میکند و پس مدتی شما را زمینگیر میکند.
حالا چه کار کنیم
وقتی این همه نکات منفی را پشت هم ردیف کنیم احتمالا هر کس از شروع هر کاری پشیمان شود. واقعیت این است که هر دو مسیر، مسیرهای راحتی نیستند همانطور که راه اندازی هر کسب و کاری ریسکها و مشکلات خودش را دارد اینجا هم با مشکلاتی طرف هستیم که برای تصمیم گیری باید گزینهها را مقایسه و راه حلها را موازنه کنیم تا بتوانیم تصمیم بگیریم کدامیک برایمان بهتر است. یک فاکتور مهم در تصمیم گیری شما این است که مزیت رقابتی شما کجاست؟ مثلا اگر در حال ساختن یک فروشگاه اینترنتی هستید قاعدتا حداقل در چند سال اول کار شما با یک سایت ساده و با امکانات معمول راه میافتد پس لازم نیست یک نرمافزار اختصاصی بنویسید، مزیت رقابتی شما در یک فروشگاه شبکه تامین کالای شماست که بتوانید کالا را با قیمت پایین و کیفیت بالا تامین کنید و از طرفی نیاز به لجستیک قوی برای توزیع دارید. پس شاید لازم نباشد یک نرمافزار مانند دیجی کالا داشته باشید. تولید کنندههای نرمافزار هم اصولا توانایی درگیر شدن با بازار و تامین و توزیع و انبار داری را ندارند و برای همین اصلا رقیب شما نیستند، در چنین سناریویی طبیعتا خرید نرمافزار به صرفهتر است مگر اینکه بعد از مدتی آنقدر رشد کنید که نیاز به یک سیستم یکپارچه بزرگ خاص داشته باشید که آن روز میتوانید استارت تولید نرمافزاری متناسب با نیاز خود را بزنید و مانند دیجی کالا تیم بزرگ خود را داشته باشید ولی تا زمانی که بازار را تست نکردید و واقعا به سود نرسیده اید تولید نرمافزار اختصاصی عاقلانه نیست و حتی بهتر است از اینستاگرام و فروشنده ثالث دیجی کالا و با سلام و… کار را شروع کنید و بعد حتی یک سیستم فروشگاهی بخرید.در نرمافزارهای پلتفرم پایه کمی شرایط متفاوت است، مثلا طرف به شما یک نرمافزار تاکسی اینترنتی میفروشد طبیعتا اینجا نرمافزار نقش اش بسیار پر رنگ است و باید از خود بپرسید چرا فرد دارد به جای اینکه خودش از این نرمافزار سود بسازد و با آن تجارت کند، دارد آن را دارد به شما میفروشد، نرمافزارهایی مانند بلیط فروشی آنلاین، خدمات کرایه هتل و منزل، بازار خرید و فروش کریپتو یا تحلیل بورس یا هر پلتفرمی واسط دیگری معمولا در زمانی فروخته میشوند که فرد خودش در راهاندازی یک کسب و کار با آن نرمافزار ناموفق بوده و حالا درصدد است تا حداقل هزینههای سوخته خود را جبران کند و یا اینکه دارد آن را میفروشد تا هزینههای توسعه خود را تامین کند و اطلاعات کسب کند و به قولی روی سر و کله شما یاد بگیرد تا در نهایت کسب و کار خودش را بسازد و از آنجا که نرمافزار را خودش توسعه داده و تیم برای اوست در روز موعود میتواند رقیب شما شود و از شما پیشی بگیرد. در کنار این مورد نیاز بازار در مورد این پلتفرمها مدام در حال تغییر است و شما باید مدام به روز شوید و معمولا با گذر زمان رقبای شما هم زیاد میشوند و شما نیاز به نوآوری و تغییر زیاد دارید پس سعی کنید در این شرایط نرمافزار نخرید یا اگر برای سریعتر وارد شدن به بازار آن را خریدید. سعی کنید بلافاصله یک تیم تشکیل دهید تا به موازات استفاده از نرمافزار قدیمی توسط شما آنها یک سیستم اختصاصی و با کیفیت برای شما توسعه دهند که نیازهای شما را به صورت به روز برطرف کند.یک مورد دیگه نرمافزارهای ابزار محور هستند مثل سیستم حسابداری، مدیریت پروژه، ERP، انبار داری، مدیریت مشتریان و… که تقریبا در تمامی سناریوها باید آنها را خرید. این نرمافزارها مثل ابزار کار هستند شاید در سناریوهایی مجبور باشید که ابزار کار اختصاصی خود را بسازید ولی در اغلب موارد شما به همان ابزارهای استاندارد بازار احتیاج دارید، هماطور که کسی یک مکانیک یا تعمیر کار را به خاطر ابزارش استخدام نمیکند و مهارت فرد نقش اساسی را در انتخاب او به عنوان مکانیک ایفا میکند و ابزار تنها میتواند کمک کننده باشد شما هم محصول و ارزش خودتان را خلق میکنید ولی تلاش میکنید بهترین ابزار را تهیه کنید پس داشتن ابزار خوب مهم است ولی ابزار توانایی و ارزش شما نیست. از آنجا که داشتن ابزار خوب هم در کنار مهارت مهم است لطفا قبلا از خرید حسابی تحقیق کنید و انتظارات خود را از نرمافزار شفاف کنید چون این نرمافزارها بازار به شدت شلوغ و عجیبی دارند و حجم فساد در قراردادهای آنها به خصوص در زمان دادن کمیسیون به افراد تصمیم گیر و مامور خرید و… در آن بالا است و مواظب باشید گیر فروشندههای زیر زمین پاساژ علائدین نیفتید که در ظاهر گوشی را ارزانتر میفروشند اما در واقع هزار بار بیشتر در پاچه شما فرو خواهند کرد، پس لطفا ارزان خری نکنید و ملاکهای کیفی را به دقت ارزیابی کنید.نکته آخر اینکه به عنوان کسی که سالهاست در تیمهای مختلف بودهام و نرمافزارهای خوب و بد زیادی نوشتهام به شما میگویم که فضای روحی تیم توسعه دهنده تاثیر زیادی روی کیفیت نرمافزار خواهد داشت، شرکتهایی که حال روحی خرابی دارند پر از دولوپرهایی هستند که میآیند و میروند، هیچ کس در این شرکتها دلسوز نرمافزار نیست اگر هم باشد مدتی بعد خسته میشود و یا تف مالی میکند یا سازمان را ترک میکند. این شرکتها توان جذب افراد با سابقه و مهندسهای توانمند را ندارند و معمولا افراد کم تجربه برای پر کردن رزومه و کسب تجربه به آنجا میروند و وقتی یادگرفتند از آنجا فرار میکنند. هر نرمافزار یک پدر دلسوز میخواهد که با دقت آن را مهندسی و طراحی کند و حواسش به امنیت و سرعت اجرای آن باشد. یک تیم پر از افرادی که مواظب کیفیت هستند و زمان میخرند تا برنامه را به طور منظم بروز کنند و محصول را برای خودشان میدانند، توسعه یک نرمافزار خوب، یک تیمِ با فرهنگ همکاری و دوستی میخواهد که از موفقیت نرمافزار خوشحال شود و موفقیت شرکت و محصول را موفقیت خودش بداند. پس چه نرمافزار را میخرید چه خودتان میسازید به این فاکتور توجه جدی کنید که شاید مهمترین فاکتور مشخص کننده کیفیت است و یادتان باشد کیفیت تصادفی نیست و حاصل تلاش زنجیره بزرگی از آدمهاست که به طور یکپارچه برای آن جنگیدهاند.