الأنظمة تموت من الحوكمة لا من الكود
نمط الفشل مألوف: إطلاق قوي، وستون مكوّنًا، وعرض داخلي مبهر — وبعد ثمانية عشر شهرًا هناك أربعة أنواع من الأزرار تعيش خارج المكتبة، وفرق المنتج فرّعت النظام بهدوء. لا شيء من ذلك تقريبًا مشكلة تقنية. المشكلة أن لا أحد امتلك الإجابة عن سؤال: «أحتاج شيئًا لا يوفّره النظام، فماذا أفعل يوم الخميس؟». النظام يحتاج مالكًا محدّدًا بالاسم بساعات عمل حقيقية، ومسار مساهمة موثّقًا، والتزامًا بزمن استجابة — 48 ساعة للوصول إلى نعم أو لا أو حلّ بديل. أخفِق في هذه النافذة وستطلق الفرق نسختها الخاصة، وهي محقّة، لأن لديها موعدًا نهائيًا. وانشر أيضًا ما لن يغطّيه النظام. النظام الذي يدّعي حلّ كل شيء يُلام على كل شيء، وعبارة «التخطيطات التسويقية لمرة واحدة خارج النطاق» تمنع من التفريعات أكثر من أي قاعدة lint.
ثلاث طبقات من tokens، لا طبقة واحدة
مجموعات tokens المسطّحة تتوقّف عن التوسّع عند الثيم الثاني. استخدم ثلاث طبقات. الأوّليات قيم خام بلا معنى مرتبط بها: blue-600، وspace-4، وقيمة hex حرفية. tokens الدلالية تربط الأوّليات بالنيّة: colour-action-primary، وcolour-surface-raised، وcolour-text-muted. وtokens المكوّنات تربط الدلالات بأجزاء محدّدة: button-primary-background. يجوز لكود المنتج أن يشير فقط إلى tokens الدلالية وtokens المكوّنات — ففي اللحظة التي يستورد فيها مكوّن blue-600 مباشرةً، يصبح الوضع الداكن عملية بحث واستبدال عبر قاعدة الكود كلها. المردود ملموس: إضافة ثيم داكن تعني إعادة تعريف طبقة دلالية واحدة، نحو 40 قيمة، بدل تدقيق 600 موضع استخدام. أبقِ التسمية مملّة ومولّدة آليًا حيثما أمكن، وزامنها من مصدر واحد إلى خصائص CSS المخصّصة ومتغيّرات أداة التصميم، ولا تدع الاثنين ينحرفان أبدًا إلى قائمتين منفصلتين تُصانان يدويًا.
قاعدة الاستخدامين
جرِّد عند الاستخدام الحقيقي الثاني، لا الأول ولا الثالث. في الاستخدام الأول أنت تخمّن أي الأجزاء يتغيّر، والتخمين الخاطئ ينتج مكوّنًا بأحد عشر prop يصعب استخدامه أكثر من الترميز الذي حلّ محلّه. وبحلول الثالث تكون ثلاثة فرق قد أطلقت نسخًا غير متوافقة ويصبح التوحيد عملية ترحيل. استخدامان حقيقيان هما النقطة التي يصبح فيها محور التباين مرئيًا بينما تظلّ كلفة التغيير منخفضة. و«الحقيقي» يعني أُطلق في الإنتاج على يد أشخاص مختلفين لأغراض مختلفة — البطاقة نفسها المستخدمة مرتين في صفحة واحدة استخدام واحد. ونتيجة لازمة: بعض الأشياء لا ينبغي تجريدها أبدًا. تخطيط يُستخدم مرة واحدة، أو رسم توضيحي، أو حركة خاصة بصفحة بعينها. النسخ واللصق أرخص من التجريد الخاطئ، وحذف كتلة مكرّرة أسهل من فكّ تشابك كتلة مشتركة.
اجعل التبنّي هو المسار الأسهل
التبنّي لا يُكسَب أبدًا بقرار إلزامي؛ يُكسَب بأن تكون المكتبة أسرع طريق لإنجاز العمل. وهذا يعني تثبيتًا بأمر واحد، ومثالًا عاملًا يمكن لصقه، وprops تطابق طريقة تفكير الناس أصلًا. قِس ذلك بصدق — سكربت يحصي استيرادات المكتبة مقابل العناصر الخام في كل مستودع يعطيك رقم تغطية، وتغطية كل فريق تخبرك أين يخفق النظام. انشر ذلك الرقم. ثم أغلِق الفجوة بإمكانية الوصول: إذا كان عنصر select في المكتبة قابلًا للتنقّل بلوحة المفاتيح، ومُسمّى لقارئات الشاشة، ومحكم حصر التركيز، فإعادة بنائه أسبوع لا يرغب أحد في إنفاقه. هذه هي الخندق الحقيقي. وأخيرًا، أصدر الإصدارات بقصد، وأرفق codemods مع التغييرات الكاسرة، ولا تجبر فريقًا أبدًا على الاختيار بين الترقية وإطلاق خارطة طريقه.