تطوير مخصص

بعض المشكلات لا يحلّها موقع إلكتروني. حين يكون العمل أداة، أو تطبيقًا، أو تكاملًا، أو عملية لم يعد يجدر تنفيذها يدويًا، نبني ذلك بدلًا منه.

فريق صغير وخبير، وصريح في تحديد النطاق. إن كان منتج موجود يحل مشكلتك، سنخبرك بذلك بدل أن نحاسبك على إعادة بنائه.

السجل

أنواع الأعمال التي نتولاها

طريقة مفيدة لوصف البرمجيات المخصصة هي عبر المشكلة التي تُزيلها. هذه هي الأنماط الأكثر تكرارًا، وما ننتهي عادةً إلى بنائه لها.

أنماط المشكلات وحلولها المعتادة
المشكلة ما نبنيه
المهمة اليدوية نفسها، كل يوم، يؤديها شخص أكبر من أن يقوم بها بنفسه أداة داخلية تُرمَّز خطواتها مرة واحدة: نموذج، وقائمة انتظار، وسجل تدقيق واضح، وصلاحيات تطابق طريقة عمل الفريق فعليًا.
نظامان لا يتواصلان مع بعضهما تكامل يتولى المطابقة بينهما، ويعيد المحاولة بأمان حين يتعطل أحد الطرفين، ويخبرك حين يحتاج الأمر إلى تدخل بشري.
عمل تجاري يقوم على جدول بيانات لا يجرؤ أحد على لمسه تطبيق ويب صغير خلفه نموذج بيانات حقيقي، بحيث يستطيع شخصان العمل في آنٍ واحد، ولا يمكن الكتابة فوق أرقام الربع الماضي عن طريق الخطأ.
تقرير يجمعه أحدهم يدويًا كل أسبوع مهمة مجدولة تجمع البيانات، وتتحقق منها، وتوصل التقرير إلى من يحتاجه، مع سجل لكل عملية تشغيل.
عمل يحدث بعيدًا عن المكتب: على هاتف، أو في شاحنة، أو في أرضية معمل تطبيق جوّال على الأساس نفسه الذي يقوم عليه بقية النظام، يشارك نموذج بياناته، ومعيار مراجعته، وفحوصه الآلية، بحيث لا يختلف الهاتف وسطح المكتب أبدًا حول الحقائق.
مسار عمل للعملاء أُلحق بموقع تسويقي إلى أن تعطّل تطبيق كامل على عنوانه الخاص، يشارك نظام تصميم الموقع نفسه فيبقى الإحساس بشركة واحدة.
أمر لا يستطيع أحد تسعيره لأن أحدًا لم يحدد نطاقه خطوة اكتشاف قصيرة: أصغر نسخة عاملة تُحدَّد كتابيًا، مع سرد صريح للأجزاء التي لن نبنيها.

التقدير

كيف نقرر ما نبنيه

  • أصغر شيء يعمل، أولًا. أداة محدودة في بيئة الإنتاج تُعلّمك خلال أسبوعين أكثر مما تُعلّمك مواصفة كاملة خلال ربع سنة، ويمكن توسيعها متى عرفت الأجزاء المهمة فعلًا.
  • تقنية مملة عن قصد. نختار الخيار المُثبَت على الخيار المثير. تُقاس البرمجيات المخصصة يوم يحتاج أحدهم إلى تعديلها، لا يوم إطلاقها.
  • اضبط نموذج البيانات مبكرًا. إعادة رسم الواجهات رخيصة، أما إعادة هيكلة البيانات فمكلفة، لذا يُحسم شكل البيانات قبل الشاشات.
  • اشترِ قبل أن تبني. إن كان منتج مرخَّص يغطي حالتك، فالتوصية الصادقة هي استخدامه. نفضّل أن نبني القطعة الصغيرة التي تربطه على أن نحاسبك على إعادة اختراعه.
  • صمّم من أجل المطوّر الثاني. شيفرة قابلة للقراءة، وإعداد موثَّق، وفحوص تشرح القصد منها. مقياس العمل هو قدرة شخص آخر على تعديله بأمان.
الشكل 1: الواجهة، والخدمة، والجدولة، والتخزين، تُرسَم قبل كتابة أي سطر منها.

المكدس التقني

التقنية التي نستخدمها فعليًا

تسميتها جزء من الصدق بشأن النطاق. المشتري التقني يجب أن يستطيع معرفة ما إن كنا الاستوديو المناسب من شاشة واحدة، وغير التقني يجب أن يستطيع تسليم هذا القسم لمطوّره الخاص والحصول على إجابة واضحة.

اللغة

TypeScript من البداية إلى النهاية

الواجهات

Astro، وHTML وCSS خالصين، وReact حيث يحتاج التطبيق إليها، إضافة إلى تطبيقات الجوال

الخدمات

Node وCloudflare Workers

البيانات

قواعد بيانات متوافقة مع Postgres، وترحيلات SQL مُرقَّمة بإصدارات

المنصة

Cloudflare Pages وWorkers وتخزين الكائنات ومُشغِّلات مجدولة

الفحوص

Playwright وVitest وأنواع ساكنة وتدقيق آلي لإتاحة الوصول

  • لغة واحدة عبر النظام كله. TypeScript للواجهة، وواجهة البرمجة، والمهام المجدولة، والفحوص، مع تدقيق الأنواع عند كل تعديل. لغة واحدة تعني سلسلة أدوات واحدة ومعيار مراجعة واحد، وبلا طبقة ترجمة بين المتصفح والخدمة خلفه.
  • طريقة العرض تُختار بحسب المهمة. يُصرَّف المحتوى إلى HTML ساكن. أما الواجهة التي تحتاج فعليًا إلى حالة من جانب المستخدم فتحصل على إطار عمل قائم على المكوّنات، محصورًا في الجزء الذي يحتاجه من الشاشة، بدل إطار عمل يُغلّف محتوى لا يتغيّر أبدًا.
  • تطبيقات الجوال، بالانضباط نفسه. حين ينتمي العمل إلى يد المستخدم لا إلى تبويب متصفح، نبني التطبيق بالمعيار نفسه الذي يحكم كل شيء آخر: سلسلة الأدوات القائمة على TypeScript نفسها، ومعيار المراجعة نفسه، والفحوص الآلية نفسها، ونموذج البيانات نفسه الذي تعتمده الخدمة خلفه بدل نسخة ثانية من الحقيقة. أما التقنية التي يجب أن يعتمدها تطبيق بعينه فقرار نتخذه معك أثناء كتابة النطاق، لا تفضيلًا ثابتًا نطبّقه على كل مشروع.
  • قاعدة بيانات علائقية، لا خليط مستندات. قاعدة بيانات متوافقة مع Postgres بطبقة استعلامات مُصنَّفة الأنواع، وتغييرات في المخطط تُراجَع، وتُطبَّق بترتيبها، ويمكن التراجع عنها. لا أحد يعدّل مخطط بيئة الإنتاج يدويًا.
  • بلا خادم افتراضيًا، لأنه لا يوجد خادم لتنسى أمره. تعمل الشيفرة على منصة Cloudflare الطرفية، مع تخزين كائنات للملفات، ومُشغِّلات مجدولة لكل ما يجب أن يحدث في وقت محدد. لا جهاز خاص بك يحتاج ترقيعًا في منتصف الليل، ولا سعة تحتاج إلى تخمين.
  • تكاملات عبر واجهات موثَّقة. نصل إلى الأنظمة الأخرى عبر واجهات برمجتها وWebhooks، مع إعادة محاولة، وضمان عدم التكرار، وسجل لكل استدعاء. وحين لا يوفر مزوّد الخدمة واجهة برمجية، يكون الملف أو تغذية البيانات المجدولة هو الحل البديل المتعمَّد، لا استخلاص محتوى من الشاشة يتعطل في الربع القادم.
  • البيئات والأسرار كإعداد، لا كأعراف شفهية. البنية التحتية مُعرَّفة داخل المستودع، وبيانات الاعتماد تعيش في مخزن أسرار وتصل إلى الخدمة قيد التشغيل كقيم بيئة، ويمكن لجهاز جديد تشغيل المشروع في العصر نفسه.
  • حزمتك التقنية، إن كانت لديك واحدة بالفعل. إن كان فريقك يصون شيئًا معقولًا، فالحل الصحيح غالبًا هو العمل ضمنه بدل إدخال طريقة ثانية لفعل كل شيء. وإن كان ما لديك هو المشكلة فعلًا، سنخبرك بذلك أيضًا.

المعايير

الأساس الهندسي نفسه الذي تحصل عليه المواقع

الأساس لا يتغيّر بين خطي الخدمة، لأن الأداة الداخلية يستخدمها أشخاص لسنوات ولا خيار آخر أمامهم. شيفرة قياسية داخل مستودع بتاريخه الكامل، وفحوص آلية توقف أي نشر فاشل، وإصدارات بأمر واحد يمكن التراجع عنها بخطوة واحدة، وواجهات سهلة الوصول (فالموظفون يستحقون المعيار نفسه الذي يحصل عليه العملاء)، وأسرار بعيدة عن الشيفرة، وبلا منصة مملوكة لجهة خاصة تحت كل ذلك. كل هذا مُفصَّل تحت مواقع الشركات بدل تكراره هنا.

أمران يحملان وزنًا أكبر في البرمجيات مقارنةً بالمواقع، ويستحقان أن نُسمّيهما على حدة.

البيانات تعيش أطول من الشيفرة

الواجهات تُستبدَل؛ أما السجلات فتبقى. لذا تكون تغييرات المخطط ترحيلات داخل المستودع، تُطبَّق بترتيبها ويمكن التراجع عنها، والنسخ الاحتياطي مهمة المنصة لا سكربتًا كتبه أحدهم مرة واحدة، وبياناتك قابلة للتصدير بصيغة يمكن تحميلها في مكان آخر تمامًا.

النظام قيد التشغيل يجب أن يكون قابلًا للمراقبة

كل ما يحدث بلا مراقبة يترك سجلًا: ما الذي عمل، ومتى، وماذا مسّ، وأين فشل. المهمة المجدولة التي تتوقف عن العمل بصمت تُخبرنا بذلك، بدل أن يكتشفها بعد شهر من تساءل عن سبب غياب تقريره.

النطاق

أين نتوقف

الوضوح بشأن الحدود جزء من الجدارة بالثقة. نحن فريق صغير وخبير، فنقبل الأعمال التي نستطيع إتقانها ونعتذر عن التي لا نستطيعها.

لا نُعيد بيع منصات مرخَّصة، ولا نوفر أفرادًا لمشروع لا نبنيه نحن، ولن نقدّم رقمًا لمشكلة لم تُحدَّد بعد. حين يخص جزء من العمل اختصاصيًا آخر، سنخبرك بذلك بصراحة بدل أن تكتشف ذلك على حسابك.

الحدود التقنية محددة بالقدر نفسه:

  • استخدام نموذج نعم، علم بيانات لا. سنستدعي نموذجًا مُستضافًا أو خدمة قائمة من تطبيقك، ونبني الواجهة والبنية الداعمة حوله. أما تدريب النماذج والتحليل الإحصائي وخطوط أنابيب البيانات بحجم مستودعات، فليست ما نقوم به.
  • منصات مُدارة نعم، خوادمك الخاصة لا. ننشر على منصات طرفية وبلا خادم مُدارة. وإن كان العمل يجب أن يعمل في مركز بياناتك الخاص، أو على أجهزة تديرها بنفسك، أو على نظام تشغيل يحتاج أحدهم لترقيعه باستمرار، فنحن الاستوديو الخطأ وستسمع ذلك في أول مكالمة.
  • الأنظمة المعتمدة تحتاج اختصاصيًا إلى جانبنا. نطبّق هندسة أمان حقيقية كأمر بديهي، لكن التدقيق الرسمي مقابل نظام امتثال معتمد معيّن ليس اختصاصًا نبيعه. وإن احتاج مشروعك إلى ذلك، سنخبرك قبل أن توقّع أي شيء، لا بعده.
  • البرمجيات الثابتة، وإعادة البيع. البرمجيات الثابتة المضمّنة ليست اختصاصنا، وكذلك أي شيء تكون قيمته ترخيصًا نُعيد بيعه لا عملًا ننجزه.

التشغيل

من يبقيه يعمل بعد ذلك

البرمجيات المخصصة لا تكتمل عند إطلاقها. تُستخدم، ثم تحتاج إلى تعديل. ومن يشغّله ومن يعدّله يجب أن يكونا جزءًا من النطاق منذ البداية، لا في رسالة بريد محرجة بعد ستة أشهر.

نستضيفه ونُبقيه يعمل

هذا هو الترتيب الافتراضي: نستضيف النظام ونُشغّله مقابل رسم شهري، والتعديلات بعد الإطلاق تتبع الحلقة نفسها التي يتبعها البناء، أي فرع، ومعاينة، ومجموعة الفحوص كاملة، ونشر يمكن التراجع عنه بخطوة واحدة. الأشخاص الذين كتبوا النظام هم أنفسهم من يراقبونه في بيئة الإنتاج، وهذا عادةً الفارق بين إصلاح هادئ ونقاش طويل حول مسؤولية الخلل.

كوننا فريقًا صغيرًا وخبيرًا له تكلفة، ونفضّل ذكرها بصراحة: لا نُشغّل مناوبة استعداد على مدار الساعة، ولا نبيع وعدًا باستجابة تُقاس بالدقائق. وإن كان ما تبنيه يحتاج فعليًا إلى ذلك، أخبرنا مبكرًا وسنقول لك بصراحة إن كنا نستطيع تلبيته.

أو يتولاه فريقك الخاص

حين يتضمن عقدك ذلك، يمكن نقل البرمجية إلى استضافتك ومطوّريك الخاصين: شيفرة قياسية، والفحوص، والإعداد الموثَّق، ونشر بأمر واحد. وهذا بالضبط ما يخدمه مبدأ التصميم من أجل المطوّر الثاني المذكور أعلاه. إنه خيار نكتبه حين تريده، لا الترتيب الافتراضي.

تساعد المنصة هنا أيضًا. الموقع الساكن والخدمة بلا خادم لا يحتاجان خادمًا للترقيع ولا نظام تشغيل للمحافظة عليه محدَّثًا، فما يتبقى هو تحديثات الاعتماديات والمنصة: تغيير مجدول وقابل للمراجعة لا حالة طارئة.

صف المشكلة sales@wwi.dev

لا تحتاج إلى مواصفة لتبدأ. تواصل معنا عبر نموذج التواصل أو على sales@wwi.dev وصف العمل بلغة بسيطة.