كل ما تختصره الصفحة الأولى: كل دور، وكل نظام، والأرقام خلفه، وكيف أفكّر في الذكاء الاصطناعي حين يمسّ المال. اقرأها إن كنت تفكّر في ائتماني على شيء مهم.
الدار البيضاء، المغرب · الإنجليزية والعربية والفرنسية عند الحاجة · مشروع واحد في كل مرة، والبدء التالي في يناير
المسار
أربعة أدوار، وخيط واحد
عملت حيث الرقم الخاطئ ليس خطأً برمجياً: مدفوعات عبر مئات الكيانات القانونية، ورواتب لمجموعات مصحات، ومنتجاتي الخاصة في الإنتاج.
Ruby on RailsGraphQLReactTypeScriptPostgreSQLSidekiqClaudeDatadog
OysterHR منصّة توظيف عالمية، وأحد روّاد التوظيف عبر طرف ثالث (EOR)، وتوظّف عبرها شركات في أكثر من 180 دولة، عبر مئات الكيانات القانونية للعملاء وبعدة عملات. أتولّى أتمتة الحسابات الدائنة: المسار الذي يقرأ فواتير المورّدين، ومنتج المراجعة، ومسار المال خلفهما.
الذكاء الاصطناعي داخل مسار المال
مقيساً على الفواتير التي عولجت حتى الآن، الوفر السنوي بمعدّله الحالي نحو 300 ألف دولار في السنة على بضعة آلاف فاتورة في الشهر. والعملية التي استبدلها البرنامج كانت شخصين يقرآن ملفات PDF.
تعليمات لكل مورّد محفوظة كبيانات: إضافة مورّد تغيير بيانات لا نشراً جديداً، وإصدار التعليمات يسافر مع كل استدعاء.
مخرجات منظّمة بـ JSON Schema مع تحقّق في الكود، فلا يصل استخراج مشوّه إلى نظام محاسبة.
بوّابة موافقة بشرية قبل الدفع، وسجل تدقيق لكل استدعاء قد يمسّ المال: النموذج، إصدار التعليمات، التوكنات، زمن الاستجابة، بصمة المستند.
التكلفة مهندسة بقصد: التوجيه والتخزين المؤقت للتعليمات وحدود السياق تُبقي فاتورة النموذج دون كلفة العملية التي حلّ محلّها.
مسار المال
مطابقة idempotent (إعادة التنفيذ لا تُضاعف الأثر) للفواتير، وخرائط محاسبة، وكتابة إلى ERP في كود حتمي، لا مخرجات نموذج.
المدفوعات، والتحقّق من المستفيدين والحسابات البنكية، وwebhooks المزوّدين، والمطابقة عبر شركاء مصرفيين: مفاتيح idempotent لكل دفعة، ومطابقة ليلية تُغلق حالات الإشعار المكرّرة (webhook) وتبديل المستفيد.
تغييرات الحالة الحرجة تُثبَّت في معاملة واحدة، والكتابة المُعادة تُسوّى مع السجل نفسه بدل الدفع مرتين.
كيف يشحن الفريق
أتمتة من المواصفة إلى طلب مراجعة عبر الوكلاء، مع مهارات مخصّصة وتكاملات MCP. وطابور المراجعة صار أقصر لا أطول، وهذه هي النتيجة الوحيدة التي كانت تهمّني.
فرز دعم آلي وإصلاح اختبارات متذبذبة، تحت ضوابط التكلفة نفسها.
حين ينكسر شيء
حوادث إنتاج مصعّدة ضمن اتفاقية مستوى الخدمة، وأسباب جذرية متتبَّعة عبر Datadog وSentry والبيانات، تُغلق بإصلاحات دائمة وأدلة تشغيل.
Ruby on RailsHotwirePythonPostgreSQLRedisClickHousedbtAirbyteLangChainDocker
Mibtech تبيع برمجيات الموارد البشرية والمصحات لمجموعات خاصة في المغرب. تولّيت منتج إدارة الوقت في نظامها متعدّد المستأجرين: طرفيات البصمة عند الباب، ومدخلات الرواتب في الطرف الآخر. مجموعات مصحات خاصة عملت عليه: أكثر من 20 قاعدة بيانات، وأكثر من 80,000 حدث حضور يومياً. وهذا الرقم عمره سنة ولم أعِد قياسه.
نشر أكديتال
أكديتال أكبر مجموعة مصحات خاصة في المغرب، وتتوسّع اليوم في السعودية والإمارات وإفريقيا. بنيت لها نشر الحضور والانصراف في مصحاتها واختبرت حمله قبل أن يوقّع أحد. والمجموعة لم تُكمل: توقّف المشروع في المشتريات، لا في الكود.
واختبار الحمل هو الجزء الذي يستطيع أي أحد التحقّق منه: 200,000 حدث حضور في اللحظة نفسها على خادم صغير واحد. حمل الاستعلامات مُدار لكل مستأجر، ومفاتيح تقسيم مختارة بحيث تبقى حركة المصحة نفسها معاً، وحمولات الطرفيات الخام محفوظة في MongoDB، وتوقيت دقيق بما يكفي لأن بدل العمل الليلي لم يتحرّك. لم يضِع شيء.
الذكاء الاصطناعي في الإنتاج
وكيل دعم بالذكاء الاصطناعي أمام موظفين حقيقيين: نطاق استرجاع لكل موظف على حدة، واستدعاءات أدوات مغلقة من جهة الخادم، ولا إجابة إلا من مستندات كان المستخدم قادراً على فتحها بنفسه.
الإجابة الخاطئة هنا مشكلة امتثال، فكل ردّ يحمل الاستشهاد الذي بُني عليه.
الحضور والانصراف
أحداث الطرفيات تُطابَق مع الورديات، وبدل العمل الليلي، والساعات الإضافية، وصولاً إلى مدخلات الرواتب التي تنتجها.
كشوف الدوام، ومسارات الإجازات، والتنبيهات الحيّة، ولوحات المتابعة: من المخطّط إلى الواجهة، لكل مستأجر.
البيانات
أكثر من 20 قاعدة بيانات مصحات متناثرة دُمجت في مستودع ClickHouse واحد على ELT مبني بـ dbt، بتغذية من Airbyte.
الاستيعاب أسرع ثلاث مرات بعد إصلاح اختناقات PostgreSQL ومجمّع الاتصالات من الجذر.
الأداء
سطح واحد تدهور حتى حلّت تذاكر الدعم محل العروض التجريبية. صارت الصفحات أسرع بنسبة 70%، والنقاط الحرجة في حدود 50 مللي ثانية، عبر التخزين المؤقّت في Redis وتفريغ المهام وإعادة تصميم الاستعلامات.
دون إرخاء عزل المستأجرين، وهو القيد الذي جعلها مثيرة.
الأجهزة
أكثر من 50 طرفية تحكّم بالدخول صارت تدفع أحداث الشارات بدل الاستعلام كل دقيقة: بوّابة IoT وتطبيق قارئ شارات لسطح المكتب.
تعمل في الإنتاج تحت Prometheus وGrafana وSentry، والتنبيهات تصل إليّ، وبالتالي الإصلاحات.
WebCK / Topela
مهندس برمجيات، بدوام جزئي · عن بُعد
من 2022 إلى 2023
React NativePythonFlask
قبل الباقي: شرائح ميزات من أولها إلى آخرها في تطبيق React Native متعدّد المنصّات وواجهته البرمجية بـ Flask، ضمن فريق موزّع.
مستقل
مؤسّس-مهندس · منتجات أملكها
منذ 2022
RustNext.jsReactPythonPostgreSQLClickHouse
أكثر من 40 نظاماً سلّمتها في أربع سنوات، معظمها تحت اتفاقية سرية. هذه أربعة أعرضها. وبناء منتجاتي وتشغيلها هو ما يُبقي حسّ الإنتاج صادقاً.
Citadel
منصّة عمليات للوكلاء بـ Rust (axum وsqlx): تنسيق متعدّد الوكلاء، وطبقة أدوات MCP، ومجدول، وذاكرة، وواجهة تحكّم React.
تشغّل عملي كل يوم: المشاريع والملاحظات والمهام والأتمتة.
Pochetta
متجر تجارة مغربي وعمليات طلبات، يعمل ويستقبل الطلبات.
كتالوج، ودفع عند الاستلام، وحالات الطلبات، وإدارة.
Li7abiti
منصّة تجارة بالدفع عند الاستلام: Next.js 16، ومخطّط PostgreSQL من 146 جدولاً، ومصادقة OTP، وعربية أولاً باتجاه RTL.
Semsar
مسار معلومات سوقية: جمع مجدول، وتطبيع أسعار عبر مصادر، وتقارير.
تحت الغطاء
أربعة أنظمة، وما يحدث حين تتعطّل
الحجم سهل الادّعاء وصعب التحقّق. وكل رقم هنا يمكن لأحد مراجعيّ تأكيده في مكالمة: ماذا يحمل كل نظام، وماذا يفعل في يوم سيّئ.
النظامما يحملهحين يتعطّل
استخراج الفواتير · OysterHR
ما يحمله
آلاف المستندات شهرياً عبر مئات الكيانات القانونية، مع مجموعة تقييم لكل مورّد قبل نشر أي تعليمات، وميزانية زمن لكل دفعة.
حين يتعطّل
الاستخراج الخاطئ يصبح مهمة مراجعة، لا دفعة. رسائل ميتة وإعادة محاولة ومطابقة عند الإقفال.
الحضور والانصراف · Mibtech
ما يحمله
أكثر من 80,000 حدث يومياً، وأكثر من 50 طرفية، وأكثر من 20 قاعدة بيانات مصحات، وقواعد ورديات وساعات إضافية لكل مستأجر.
حين يتعطّل
إن سقطت البوّابة، تخزّن الطرفيات الأحداث وتعيد إرسالها؛ ومعرّفات الأحداث المكرّرة تُسقَط قبل وصول أي شيء إلى الرواتب.
مستودع المصحات · Mibtech
ما يحمله
أكثر من 20 قاعدة بيانات مصدر في مستودع ClickHouse واحد على ELT مبني بـ dbt، يُحمَّل ليلاً.
حين يتعطّل
فشل تشغيل النموذج يُفعّل فحص حداثة البيانات ويوقف التقرير، ولا يمكن أن يتسرّب إلى مدخل راتب.
منصّة الوكلاء · Citadel
ما يحمله
Rust (axum وsqlx)، وطبقة أدوات MCP، ومجدول، وسجل تشغيل، وذاكرة؛ قيد الاستخدام اليومي.
حين يتعطّل
استدعاء أداة معلّق يستهلك ميزانية إعادة المحاولة ثم يُحال إلى رسالة ميتة؛ والخطوات تُعاد بشكل idempotent من سجل التشغيل.
المنهج
كيف أفكّر في الذكاء الاصطناعي داخل الإنتاج
هذه القواعد خرجت من الإنتاج. كل قاعدة منها جاءت من مشاهدة ميزة ذكاء اصطناعي تموت في الإنتاج، وبعضها ميزتي أنا.
01
النموذج يقرأ، والكود يقرّر.
كل ما يثبّت مالاً أو حالة هو كود حتمي بسجل تدقيق. النموذج يقترح، والإنسان يوقّع، والنظام يسجّل. في اللحظة التي يوقّع فيها نموذج، تملك مسؤولية لا تستطيع إعادة بنائها.
02
المملّ يتغلّب على الذكي.
المخرجات المنظّمة، والتحقّق بالمخطّط، وإعادة المحاولة، والرسائل الميتة. هذه تُنقذ مشاريع أكثر مما يُنقذها أي تعليمات أفضل. الأجزاء المملّة هي المنتج.
03
التكلفة ميزة.
توجيه، وتخزين مؤقّت، وضبط السياق، وتجميع حين يناسب. إن كان الاستدلال أغلى من العملية التي استبدلها، فهو تجربة بفاتورة لا نظام.
04
قيّم قبل أن تَعِد.
مجموعة ثابتة من مستندات حقيقية بإجابات معروفة، تُشغَّل مع كل تغيير في التعليمات. بدونها كل «تحسين» تخمين، وكل تراجع مفاجأة.
05
صمّم الفشل.
ماذا يرى المستخدم حين يكون النموذج مخطئاً أو بطيئاً أو متوقّفاً؟ إن كان الجواب «رسالة خطأ تقنية»، فهو ليس في الإنتاج بعد.
06
أبقِ طبقة التكامل رقيقة.
النماذج تتغيّر كل ستة أشهر. يجب أن يصمد التكامل دون إعادة كتابة: واجهة واحدة، وتعليمات مُرقّمة بإصدارات، وتقييمات تسافر مع الميزة.
قائمة الوكلاء: النموذج، وبيئة التشغيل، والصلاحيات، والوكلاء الفرعيون، وتُضبط لكل مشروع على حدة.اللوحة التي أفتحها كل صباح: المشاريع، والعمل المفتوح، وحالة الخادم، وما ينتظرني.سير عمل: مُشغِّل، وخطوات، وشروط، وكل تشغيل مسجّل. هذا ما أعنيه بعملية أستطيع الإشارة إليها.
الأدوات
ما احتاجه العمل
لا أرتهن لتقنية بعينها: الأنظمة هي الحجّة، والأدوات ما احتاجه النظام تلك السنة.
اللغات
Ruby، Python، TypeScript، SQL · Rust (axum وsqlx): Citadel مكتوب به ويعمل يومياً