تطوير Full Stack في المغرب
من طنجة أصمم المعمارية والواجهات البرمجية والواجهات والإنتاج — أقصر طريق من مشكلة أعمال إلى برنامج يُستخدم.
يشمل العمل النموذجي منصات SaaS وأدوات داخلية ووحدات ERP وتطبيقات موجهة للعملاء. الحزمة هي Laravel وReact وTypeScript وPostgreSQL — اختيرت لأنها تبقى قابلة للصيانة بعد الإطلاق.
تبدأ كل مهمة من سير العمل لا من قالب جاهز. هذا ما يبقي المنتج مفيداً بعد ستة أشهر.
على مستوى الخلفية يعني ذلك واجهة Laravel بنموذج مجال يعكس سير العمل الحقيقي بدل هيكل CRUD عام، مدعومة بـ PostgreSQL للبيانات التي يجب أن تبقى متسقة تحت الكتابة المتزامنة، وRedis حيث يبرر الحمل طابوراً أو تخزيناً مؤقتاً فعلاً. على الواجهة، يُبقي React مع TypeScript الواجهة صادقة حول شكل البيانات المتوقعة، وهو أمر مهم بمجرد أن يلمس أكثر من مطور نفس الكود.
الإنتاج جزء من التسليم لا فكرة لاحقة: Docker حتى تكون البيئة المُختبرة هي نفسها التي تُنشر، ونسخ احتياطي اختُبرت باستعادتها فعلاً لا افتُرض أنها تعمل، وسجلات كافية لتشخيص عطل دون تخمين. بُني BROC ServiceOS وMatarTaxi بهذه الطريقة — كامل من نموذج البيانات إلى نشر إنتاجي يستطيع شخص آخر تشغيله بعد التسليم.
ليست كل المشاريع تحتاج هذا. إن كان الهدف صفحة هبوط بسيطة بلا حسابات ولا نموذج بيانات ولا تشغيل خلفها، فالتطوير الكامل هندسة مفرطة، وسأقول ذلك قبل كتابة أول سطر كود.
مشاكل الأعمال
- موقع لا يتحول إلى منتج: بلا واجهة برمجية يُبنى عليها، ولا نموذج مصادقة، ولا أساسيات تشغيلية — نسخ احتياطي وسجلات وبيئات — فيعني أول طلب ميزة حقيقي إعادة بناء لا توسيعاً لما هو موجود.
- خلفية وواجهة يملكهما أشخاص مختلفون بلا نموذج مجال مشترك، فيُعرَّف المفهوم نفسه — عميل أو طلب أو حالة — مرتين وينحرف بمجرد أن يغيّره أحد الطرفين دون إخبار الآخر.
- إطلاق بلا مسؤول عن الإنتاج: لا أحد يراقب معدلات الأخطاء، ولا نسخة احتياطية اختُبرت فعلياً باستعادتها، ولا خطة لما يحدث عند أول عطل حقيقي.
- منتج لا يعمل إلا في ذهن المؤسس، بلا توثيق ولا مطور ثانٍ يستطيع متابعته إن غاب الأول لشهر.
- بيئات تنحرف — خادم تجريبي يشغّل إصداراً مختلفاً من PHP أو Node عن الإنتاج — فيهدر خطأ يظهر في بيئة واحدة فقط يوماً كاملاً قبل أن يفهم أحد السبب.
- كود يعني فيه "Full Stack" فعلياً إطاراً واحداً يفعل كل شيء بشكل سيئ — سكربت Node يولّد HTML يدوياً، أو تطبيق PHP مُلصق عليه jQuery — بدل حد واضح بين الواجهة البرمجية والواجهة.
- لا بيئة تجريبية على الإطلاق، فيختبر كل تغيير مستخدم حقيقي في الإنتاج، ويكون كل تراجع حادثة حية لا خطوة مخطط لها.
منهج التطوير
- ارسم سير العمل أولاً — من يفعل ماذا وبأي ترتيب وبأي بيانات — ثم الكيانات المنبثقة عنه، ثم شريحة رفيعة قابلة للنشر والاستخدام بدل إطلاق ضخم بعد ستة أشهر.
- واجهة Laravel أو Node، وواجهة React وTypeScript، وPostgreSQL للبيانات التي يجب أن تكون دقيقة، وDocker في الإنتاج لبيئة قابلة للتكرار، وRedis حين يبرر الحمل وجود طابور أو تخزين مؤقت.
- أطلق مبكراً على سير عمل حقيقي صغير، ثم وسّع وحدة تلو الأخرى مع نمذجة الجزء التالي من العمل، بدل محاولة نمذجة الشركة كاملة قبل أن يعمل أي شيء في الإنتاج.
- كتابة نموذج المجال قبل أول ترحيل قاعدة بيانات، حتى يكون مخطط القاعدة ترجمة لنموذج متفق عليه لا مسودته الأولى.
- إضافة فحوصات سلامة وسجلات منظّمة منذ أول نشر لا بعد أول حادثة، حتى تنتج مشكلة الإنتاج أثراً للخطأ لا تخميناً.
- إبقاء الواجهة البرمجية والواجهة وحدتين قابلتين للنشر منفصلتين مرتبطتين بعقد موثّق، حتى عندما يبنيهما شخص واحد، حتى يمكن استبدال أي جانب لاحقاً دون إعادة كتابة الآخر.
- تشغيل بيئة تجريبية قريبة بما يكفي من الإنتاج بحيث يكون خطأ يُكتشف هناك خطأ اكتُشف قبل أن يراه عميل لا بعده.
ما تحصل عليه
- شخص واحد مسؤول عن المعمارية والواجهة والنشر، حتى لا يتنقّل الخطأ بين فريق واجهة وفريق خلفية يتجادلان حول من كسر العقد.
- كود منظَّم حول المجال لا حول درس الإطار الذي بدأ منه، تستطيع فرق مغربية وأوروبية قراءته ومواصلة توسيعه بعد التسليم دون إعادة كتابة.
- عمليات الإنتاج — نسخ احتياطي وسجلات ونشر — مُجهَّزة منذ اليوم الأول بدل إضافتها بعد أول حادثة.
- سجل git واحد وخط نشر واحد بدل ثلاثة مستودعات وثلاث طرق لإطلاق تغيير.
- تسليمات أقل بين أشخاص لا يتشاركون السياق، وهو عادة المكان الذي ينزلق فيه الجدول الزمني فعلياً.
- خط واضح بين الخلفية والواجهة يصمد حتى لو انضم مطور ثانٍ لاحقاً، لأن العقد بينهما صُمم لا افتُرض.
- مشاكل تُكتشف في البيئة التجريبية بدل أن يجدها عميل، لأن البيئتين متقاربتان بما يكفي للثقة بالفرق بينهما.
مشاريع مختارة
أسئلة شائعة
What does a full stack developer actually deliver?
A working product: database, API, authenticated interface, deployment and the operational basics (logs, backups, environments).
Do you work with existing codebases?
Yes. I take over Laravel and React systems, stabilize them, then extend them without a rewrite unless the architecture is genuinely blocked.