بهطور خلاصه در هرمینال، کل هزینه براساس حجم و نیازمندیهای پروژه سنجیده میشود؛ و ماهیت پروژه بایستی بهطور کامل و شفاف مشخص گردد. در ادامه عوامل اصلی تعیینکننده قیمت ذکر شده است.
هزینهی برنامهنویسی یک پروژه و بهویژه پروژههای اختصاصی چیزی نیست که توسط دولت یا ارگان خاصی مشخص شده باشد. بهطور خلاصه این امر بیشتر به توسعهدهنده یا توسعهدهندگان آن پروژه وابسته است که با چه هزینهای بخواهند یک کار را انجام دهند. این تصمیمگیری نیز به عوامل زیادی وابسته است.
بیایید با یک مثال جلو برویم. تلگرام و واتساپ را فرض کنید، هردو پیام رسان هستند ولی این دو همانند یکدیگر نیستند. بنابراین در حالت استاندارد نمیتوان از یک برنامهنویس با بیان این سوال که هزینهی ساخت یک پیامرسان چقدر است به یک قیمت مشخص و ثابتی رسید؛ مگر در شرایطی خاص. مثلا آن برنامهنویس مدل مشخصی از یک پیامرسان در ذهنش وجود دارد و احتمالا کف قیمت را در نظر میگیرد و دقیقا میخواهد همان را به مشتری عرضه کند و بعدا برای امکانات بیشتر نیز هزینههای مجزایی را دریافت خواهد کرد؛ که ممکن است مبالغ آن چندین و چند برابر شوند. اما در حالت کلی نیاز است که توسعهدهنده، به کلیت محصولی که قرار است بسازد آگاه باشد تا با درک ماهیت پروژه بتواند قیمتی را تعیین کند. البته این امر تنها مختص حوزهی توسعه و برنامهنویسی نیست و در بیشتر چیزها اینگونه است.
دلایل تفاوت قیمتها بین فریلنسرها
موارد زیادی نیز در مشخص کردن هزینهها نقش دارند؛ و گاهی ممکن است قیمتهای کاملا متفاوتی به شما پیشنهاد شود. برای مثال شخصی بگوید با 1 میلیون کار شما راه میافتد، اما توسعهدهندهی دیگری برای همان سفارش مبلغ 20 میلیون را پیشنهاد دهد. چرا اینگونه است؟! و حتی ممکن است خروجی هردو نیز یکسان به چشم آید!
این مورد دلیل ثابتی ندارد؛ اما میتوان موارد زیر را بهطور عمومی عنوان کرد:
- نحوه پیادهسازی: برای مثال یک شخص یک وبسایت فروشگاهی را با چیزهای آمادهای که وجود دارند پیادهسازی میکند؛ ولی شخص دیگر همان وبسایت فروشگاهی را از پایه کدنویسی میکند. گرچه این مورد را باید خود مشتری تعیین کند؛ اما همه اطلاع کافی ندارند.
- آماده بودن از قبل: ممکن است ایدهی شما برای یک پروژهی اختصاصی کاملا منحصر به فرد نبوده و از قبل شخصی آن را ساخته باشد. در این صورت آن شخص احتمالا قیمت کمتری را به شما پیشنهاد دهد. اما الزاما این همان چیزی نیست که شما نیاز دارید.
- کیفیت کار: کیفیت موارد زیادی را در برمیگیرد. این واژهای نیست که بتوان آن را در یک یا دو خط کاملا توضیح داد. اما مسئله مهمتر این است که همیشه قیمت بیشتر برابر با کیفیت بهتر نیست و یا قیمت کمتر بهمعنای عدم کیفیت نیست. این دو هیچ ارتباط مستقیمی به یکدیگر ندارند.
- عدم آگاهی از قیمتهای دیگران: وقتی از بازار خبر نداشته باشی، یک قیمتی خواهی گفت. این یک امر طبیعی است؛ اما بهمعنی بیتجربه یا نداشتن مهارت در یک شخص نیست.
- اخلاقیات: مواردی از جمله میزان انتظارات، قناعت و انصاف … اینها چیزهایی هستند که به شخصیتِ اخلاقی توسعهدهنده بستگی دارند.
- نیاز مالی: شاید یک شخص میداند هزینهی یک کار زیاد است، اما بهعلت نیاز مالی مجبور است آن را با هزینهی کمتری انجام دهد.
- شانسی و تصادفی: ممکن است یک شخص قیمتی کاملا تصادفی و بدون هیچ محاسبهی خاصی را به مشتری بگوید!
عوامل اصلی تعیین کننده قمیت پروژه برنامه نویسی در هرمینال
در اینجا به عوامل تعیین کنندهی قیمت در هرمینال میپردازیم؛ اما نکته مهم تمام آنها این است که میزان ساعت کاری تاثییری ندارد و کل هزینه براساس حجم و انتظارات پروژه سنجیده میشود.
مشخص شدن ماهیت کامل یک پروژه
این مورد جزء مهمترین و اصلیترین عامل تعیین کننده در قیمت پروژه است و همانطور که در بالا گفته شد، بایستی کلیت محصولی که قرار است توسعه داده شود مشخص گردد. برای این مورد به سوالاتی از جمله موارد زیر پاسخ داده میشود:
- پروژه درباره چیست؟
- پروژه چه کار یا کارهایی انجام میدهد؟
- پروژه چه امکانات و ویژگیهایی دارد؟
- پروژه دقیقا قرار است چگونه باشد؟
- و …
یک مثال نسبتا کوتاه ولی کامل از نحوهی بیان و تعیین ماهیت یک پروژه توسط مشتری یا کارفرما:
یک افزونه وردپرس برای ثبت نام و ورود با شماره تلفن در سایت. شامل یک فرم است که بهجای فرم ورود وردپرس (wp-login) نمایش داده میشود. در این فرم، یک قسمت در بالای آن برای لوگوی سایت، در زیر آن یک فیلد شماره تلفن و یک دکمه قرار دارد. کاربر فقط میتواند شماره ایرانی وارد کند. پس از کلیک برروی دکمه، یک پیامک به او ارسال میشود و سپس فیلدِ وارد کردن کد تایید نمایش داده میشود. امکان ارسال مجدد نیز پس از گذشتن یک تایم یا مدتزمان از آخرین ارسال نیز وجود دارد. فیلد وارد کردن کد تایید باید 5 خانه داشته و بهصورت یک فیلد تکی نباشد.
بیایید همین مثال که شاید فکر کنید بهطور کامل ذکر شده است را بررسی کرده و نواقصی که احتمالا بهدلیل عدم دقت یا عدم وجود تخصص از سمت مشتری/کارفرما بیان نشدهاند را بررسی کنیم. این موارد را برنامهنویس میتواند پرسیده و یا بهعنوان ویژگیهای بیشتر اعلام کند.
- از چه پنل پیامکی قرار است استفاده شود؟ آیا یک مورد یا چند مورد؟
- آیا نتایج ارسال پیامکها برای ادمین نمایش داده شود؟ بهچه صورت؟
- ارسال درخواست به سمت سرور به صورت آجاکس است یا خیر؟
- آیا سایت ممکن است در آینده شمارههای غیرایرانی داشته باشد؟
- فرمت شماره باید چگونه وارد شود؟ با 98، بدون آن یا همه حالتها؟
- هربار که کاربر صفحه را پس از درخواست ارسال کد رفرش کرد چه اتفاقی رخ دهد؟ آیا به ابتدا برگردد یا از همان مرحله نمایش دهد؟
- اگر کاربر بهطور پیوسته درخواست ارسال شماره تلفن کرد چه اتفاقی رخ دهد؟ سیستم تشخیص اسپم وجود داشته باشد و به چه صورت باشد؟
- آیا کد تایید در هربار ارسال مجدد ریست شود یا هربار در ارسال مجدد یک کد جدید ارسال شود؟ (این مسئله امنیتی نیز میباشد)
- در صورتی که کاربر ثبت نام نکرده است، پس از ورود اولیه آیا فیلدهایی جهت وارد کردن نام و سایر اطلاعات نمایش داده شوند؟
- ایمیل و نام کاربری پیشفرض کاربر چگونه باشد؟ چرا که با شماره تلفن وارد میشود.
- آیا شماره کاربران در لیست کاربران و یک ستون مجزا نمایش داده شود؟
- آیا امکان ویرایش شماره کاربران توسط ادمین وجود داشته باشد؟
- یک کاربر در یک روز مجاز است چند بار ورود کند؟
- آیا موقع ورود اولیه بایستی یک رمز عبور تصادفی برای کاربر ارسال شود یا نیازی به رمز عبور نبوده و ورود همواره با شماره تلفن است؟
- و …
جدای از این موارد بالا که هم میتواند توسط برنامهنویس و هم سفارشدهنده اعلام شوند، بهتر است یک شکل و نمای کلی از پروژه بهصورت ترسیم شده (مثلا با مداد و کاغذ) انجام و با همان شکلهای ساده فرآیند کلی برنامه نمایش داده شود. برخی کاربران واقعا این مسائل را چیز سخت و پیچیدهای میدانند درحالی که بسیار ساده بوده و بهتر است انجام داده شود تا همه چیز طبق اصول مشخصی پیادهسازی گردد.
البته گاهی سفارشدهنده شکل و ظاهر (UI یا رابط کاربری) را که ممکن است در نرمافزارهایی مثل فیگما طراحی شده باشند در اختیار توسعهدهنده قرار میدهد تا دقیقا ظاهر برنامه به همان شکل کدنویسی گردد. در غیر اینصورت این مورد نیز برعهده توسعهدهنده یا توسعهدهندگان خواهد بود.
نوع خروجی دریافتی
مشتری قصد دارد چه نوع خروجی دریافت نماید؟ که این مورد بهطور معمول شامل دو حالت زیر است:
- کدِ اصلی و فایلهای کامل پروژه بهصورت Open Source. (قیمت بیشتر)
- بههمراه مستندات و توضیحات تکمیلی. (قیمت بیشتر)
- نیازی به مستندات و توضیحات نیست و فقط کد کافی است. (قیمت کمتر)
- خروجی قابل اجرا و عدم امکان ویرایش تمام کد یا بخش مورد نیازی از کد. (قیمت کمتر)
در این حالت و در برخی پروژهها از جمله اسکریپتهای PHP امکان در اختیار گذاشتن بخشی از کد و یا قابلیت اضافه کردن کد جدید نیز میتواند وجود داشته باشد. همچنین باید مشخص شود که آیا کد میتواند در همه جا اجرا شود یا فقط محدود به یک هاست، سرور و یا دامنه است؟ یا آنکه خروجی دارای کد فعالسازی مختص یک دامنه، هاست یا سیستم میباشد؟