شاهد الفيديو (دقيقتان):
وافق أول عميل حقيقي لك للتو. المشروع موقع حجز كامل، وأنت مسؤول عنه وحدك. أنت سعيد، ثم يسألك العميل: "إذن… كم التكلفة؟"
وفجأة لا تجد جوابًا.
يمر كل مطور مبتدئ بهذه اللحظة. والخبر الجيد أن التسعير ليس سحرًا. فهو يعتمد على سؤالين فقط:
- ما حجم العمل؟ (التقدير)
- كيف ستحاسب العميل عليه؟ (نموذج التسعير)
أجب عنهما بهذا الترتيب. بعد ذلك احمِ نفسك بعقد وجدول للدفعات.
الجزء 1: قدّر حجم العمل
1. عدد أسطر الشيفرة (LOC / KLOC) ونموذج COCOMO
الطريقة التقليدية لقياس حجم البرمجيات هي عدّ أسطر الشيفرة (Lines of Code – LOC). وكل ألف سطر تساوي KLOC واحدًا.
في عام 1981 نشر باري بوهم (Barry Boehm) نموذج COCOMO (النموذج البنائي للتكلفة Constructive Cost Model). يحوّل هذا النموذج حجم المشروع بوحدة KLOC إلى جهد عمل. والصيغة الأساسية للمشروع الصغير الذي يعرف الفريق مجاله (ويُسمّى المشروع "العضوي" Organic) هي:
Effort (person-months) = 2.4 x KLOC^1.05
وفي عام 2000 جاء نموذج COCOMO II فطوّر هذه الصيغة، وأضاف إليها عوامل مؤثرة في التكلفة (Cost Drivers)، مثل خبرة الفريق والأدوات المستخدمة ومستوى الموثوقية المطلوب.
لماذا لا تناسبك هذه الطريقة كثيرًا وأنت مستقل؟
- عليك أن تخمّن عدد الأسطر قبل أن تكتبها.
- يتغير عدد الأسطر كثيرًا حسب اللغة وإطار العمل (Framework) وأسلوب كتابة الشيفرة. فتطبيق مبني بـ Laravel أو Next.js ينجز الكثير بأسطر قليلة.
- مع أطر العمل وأدوات الذكاء الاصطناعي لكتابة الشيفرة، لم يعد كثرة الأسطر تعني قيمة أكبر أو عملًا أكثر.
من المفيد أن تعرف هذه الطريقة، فهي تظهر في الامتحانات وفي الشركات الكبيرة والعقود الحكومية. لكنك تحتاج إلى طريقة أكثر عملية عند تسعير موقع لعميل.
2. تقسيم العمل إلى وحدات: الطريقة التي ننصحك بها
قسّم المشروع إلى وحدات (Modules)، وقدّر عدد الساعات لكل وحدة. هذا مثال لموقع حجز مواعيد في عيادة:
| الوحدة | الساعات |
|---|---|
| التصميم (واجهة المستخدم، التصميم المتجاوب) | 12 |
| تسجيل الدخول والحسابات | 8 |
| الحجز (التقويم، المواعيد المتاحة) | 20 |
| لوحة تحكم المدير | 16 |
| المدفوعات | 10 |
| الاختبار والإطلاق | 10 |
| المجموع | 76 |
بعد ذلك أضف 20 إلى 30% للمفاجآت، مثل المتطلبات غير الواضحة، وجولات ملاحظات العميل، والأخطاء البرمجية، ومشكلات النشر. فالمفاجآت تحدث دائمًا.
76 ساعة x 1.3 = نحو 100 ساعة.
نصيحة: التقدير بثلاث نقاط. إذا لم تكن متأكدًا من وحدة ما، فقدّرها بثلاثة احتمالات: متفائل (O)، والأكثر احتمالًا (M)، ومتشائم (P). ثم استخدم صيغة PERT (تقنية تقييم البرامج ومراجعتها):
Estimate = (O + 4 x M + P) / 6
بالنسبة لوحدة الحجز: (14 + 4 x 18 + 34) / 6 = 20 ساعة.
3. التقدير بالمقارنة (قارن بمشروع مشابه)
هل بنيت شيئًا مشابهًا من قبل؟ اجعله مقياسك. إذا استغرق موقع حجز لنادٍ رياضي 90 ساعة في العام الماضي، فموقع حجز لعيادة بقائمة ميزات مشابهة سيستغرق غالبًا وقتًا قريبًا من ذلك. عدّل التقدير بعد ذلك حسب الفروق بين المشروعين، مثل المدفوعات والأدوار الإضافية للمستخدمين والصفحات الزائدة.
تُسمّى هذه الطريقة التقدير بالمقارنة (Analogous Estimating). وهي سريعة، وتزداد دقتها مع كل مشروع تتابع ساعاته. لذلك سجّل ساعاتك الفعلية في كل عمل تنجزه.
4. نقاط الوظائف
بدلًا من عدّ الأسطر، يقيس تحليل نقاط الوظائف (Function Point Analysis) ما يراه المستخدم وما يفعله. طوّر هذه الطريقة آلان ألبرخت (Allan Albrecht) في شركة IBM عام 1979، وهي اليوم معيار تعتمده منظمة IFPUG. وتشمل العناصر المقيسة: الشاشات، والمدخلات، والمخرجات والتقارير، والاستعلامات، وملفات البيانات التي يحتفظ بها النظام. يأخذ كل عنصر وزنًا حسب درجة تعقيده، ثم يُحوَّل المجموع إلى جهد عمل بالاعتماد على بيانات مشاريع سابقة.
هذه الطريقة لا تعتمد على لغة البرمجة، ولهذا تستخدمها الشركات الكبيرة والحكومات في العقود. أما أنت كمستقل فيمكنك استخدامها قائمةَ تحقق: عدّ كل شاشة ونموذج وتقرير يضمن لك ألا تنسى شيئًا عند تقسيم العمل.
الجزء 2: اختر طريقة المحاسبة
بالساعة (الوقت والمواد Time and Materials)
يدفع العميل مقابل الساعات التي تعملها فعلًا. ولتحديد سعر ساعتك استخدم هذه الصيغة:
Hourly rate = (monthly income goal + business costs) / billable hours per month
مثال: تريد أن تكسب $3,000 شهريًا، وتكاليف عملك $300 (الحاسوب المحمول، والبرامج، والاستضافة، والإنترنت، ومبلغ تدّخره للضرائب)، ويمكنك أن تحاسب العملاء على نحو 100 ساعة في الشهر:
($3,000 + $300) / 100 = $33، ونقرّبه إلى $35 للساعة
الساعات القابلة للفوترة (أي الساعات التي تحاسب العميل عليها) أقل دائمًا من ساعات العمل الكلية. فأنت تقضي وقتًا أيضًا في الرسائل والاجتماعات والتعلّم والبحث عن عملاء. خطّط لأن تحاسب على 50 إلى 70% من وقتك.
الأنسب لـ: النطاق غير الواضح أو المتغير.
السعر الثابت
رقم واحد مقابل نطاق عمل (Scope) محدد ومكتوب. يعرف العميل التكلفة مسبقًا، وتتحمل أنت المخاطرة إذا كان تقديرك خاطئًا. ولهذا يهمّ هامش الاحتياط كثيرًا. وكل ما يقع خارج النطاق يصبح طلب تعديل (Change Request) له سعر مستقل.
الأنسب لـ: النطاق الواضح الذي قدّرته بتقسيم العمل إلى وحدات.
التسعير حسب القيمة
يتبع السعر هنا القيمة التي يحققها المشروع للعميل، مثل زيادة الحجوزات أو توفير الساعات أو تحقيق إيرادات جديدة، وليس عدد ساعاتك. إذا كان نظام الحجز الإلكتروني سيجلب للعيادة $2,000 إضافية كل شهر، فسيقبل العميل بسهولة سعرًا قدره $5,000.
الأنسب لـ: المطورين ذوي الخبرة، والمشاريع ذات الأثر التجاري الواضح والقابل للقياس.
الاشتراك الشهري (Retainer)
مبلغ شهري مقابل قدر متفق عليه من الدعم والصيانة بعد الإطلاق، مثل التحديثات والنسخ الاحتياطي والتعديلات الصغيرة وإصلاحات الأمان. يمنحك هذا النموذج دخلًا ثابتًا كل شهر.
الأنسب لـ: مرحلة ما بعد الإطلاق.
دليل سريع: أي نموذج تختار؟
| الحالة | النموذج |
|---|---|
| النطاق واضح | السعر الثابت |
| النطاق غير واضح | بالساعة |
| أثر تجاري كبير | التسعير حسب القيمة |
| بعد الإطلاق | الاشتراك الشهري |
الجزء 3: أرسل عرض السعر
يتحول مثالنا إلى عرض سعر بسيط:
عرض السعر رقم #001: موقع حجز لعيادة
إعداد: Abd Almouhimen Shamout · mouhimen.dev
التقدير: 100 ساعة
السعر: $35 / ساعة
الإجمالي: $3,500
صالح لمدة 14 يومًا
أضف قائمة الوحدات من تقسيم العمل، وما يشمله العرض وما لا يشمله، والجدول الزمني.
الجزء 4: احصل على مستحقاتك بأمان
- وقّع عقدًا. يحدد العقد نطاق العمل، والجدول الزمني، وجدول الدفعات، وطريقة التعامل مع التعديلات.
- خذ دفعة مقدمة قبل أن تكتب سطرًا واحدًا من الشيفرة. النسبة المعتادة بين 30 و50%. في مثالنا: 40% = $1,400.
- اربط باقي المبلغ بمراحل الإنجاز (Milestones). 30% ($1,050) عند العرض التجريبي، و30% ($1,050) عند الإطلاق.
- سلّم الملفات المصدرية وبيانات الدخول بعد الدفعة الأخيرة. تنتقل الملكية إلى العميل عندما تحصل على مستحقاتك.
- ميزة جديدة؟ عرض سعر جديد. تمدد النطاق (Scope Creep)، أي إضافة طلبات جديدة باستمرار دون اتفاق، هو أسرع طريقة لتخسر المال في مشروع بسعر ثابت.
قائمة التحقق
- قسّم المشروع إلى وحدات وقدّر الساعات لكل وحدة
- أضف هامش احتياط بنسبة 20-30%
- قارن بمشروع سابق مشابه
- اختر نموذجًا: بالساعة، أو سعر ثابت، أو حسب القيمة، أو اشتراك شهري
- احسب سعر ساعتك من هدفك وتكاليفك وساعاتك القابلة للفوترة
- أرسل عرض سعر مكتوبًا يحدد النطاق وتاريخ الصلاحية
- وقّع عقدًا
- خذ دفعة مقدمة قبل البرمجة، ثم دفعات عند كل مرحلة
- سلّم الملفات بعد الدفعة الأخيرة
- سعّر كل ميزة جديدة بعرض سعر جديد
شاهد الفيديو:
المصادر
- نظرة عامة على نموذج COCOMO: https://www.geeksforgeeks.org/software-engineering/software-engineering-cocomo-model/
- شرح نموذج COCOMO: https://medium.com/@rafsan_sadman/cocomo-estimation-understanding-the-constructive-cost-model-e6678ff915e7
- ما نقاط الوظائف؟ (Total Metrics): https://totalmetrics.com/function-point-resources/what-are-function-points.html
- التقدير بثلاث نقاط بطريقة PERT: https://pmstudycircle.com/pert-calculator/
- استخدام PERT للحصول على تقديرات أدق (TechRepublic): https://www.techrepublic.com/blog/it-consultant/use-pert-technique-for-more-accurate-estimates/
- نماذج تسعير تطوير البرمجيات (Dreamix): https://dreamix.eu/insights/software-development-pricing-models/
- نماذج التسعير في تطوير البرمجيات المخصصة (Taazaa): https://taazaa.com/?p=12044
- تسعير المشاريع للمستقلين وأصحاب الوكالات (Smashing Magazine): https://shop.smashingmagazine.com/2024/08/pricing-projects-freelancer-agency-owner/
- الاشتراك الشهري مقابل التسعير حسب المشروع: https://acquaintsoft.com/blog/monthly-retainer-vs-project-based-pricing-python-development
- كيف تحدد سعر ساعتك كمستقل: https://everhour.com/calculators/how-to-set-freelance-hourly-rate
- جداول الدفعة المقدمة والدفعات المرحلية: https://dev.to/olubunminelson/how-to-structure-a-deposit-and-milestone-payment-schedule-for-fixed-price-freelance-projects-ghj
- الدفعات المرحلية للمستقلين: https://ruul.io/blog/milestone-payments-freelancers
هذا المقال ترجمة عربية للمقال الأصلي باللغة الإنجليزية للكاتب عبد المهيمن شموط على mouhimen.dev.
