المقايضات البرمجية
كل خيار تصميم تتخذه يغلق الباب أمام خيار آخر. تعمل البرمجيات من خلال المقايضات. يجب أن تتخذ هذه الخيارات عن قصد، وإلا ستتخذها عن طريق الخطأ.
المقايضات الشائعة التي ستواجهها:
• الوظائف مقابل الأداء الكود النظيف غالبًا ما يكون أبطأ في التنفيذ. والكود السريع غالبًا ما يصعب قراءته. استخدم كودًا سهل القراءة لعمليات الدفعات (batch processes) التي تعمل مرة واحدة يوميًا. واستخدم كودًا مُحسَّنًا للمسارات التي تعمل آلاف المرات لكل طلب.
• المرونة مقابل البساطة التجريدات المعقدة تجعل الكود صعب الفهم. اكتب أبسط كود ممكن ليؤدي المهمة. وابنهِ بطريقة تسمح لك بتوسيع نطاقه لاحقًا.
• القابلية للتوسع مقابل التكلفة التصميم لاستيعاب حركة مرور هائلة يتطلب المزيد من المال الآن. قياس معدل نموك يساعدك على اتخاذ القرار. إذا كنت تنمو بنسبة 20% كل شهر، فخطط للمستقبل. أما إذا كان رأس مالك محدودًا، فكن حذرًا بشأن تكاليفك.
• الأمان مقابل سهولة الاستخدام الأمان المفرط قد يفسد تجربة المستخدم. لقد فرضنا ذات مرة استخدام الرموز المادية (hardware tokens) لأداة إدارية، فانخفضت نسبة نجاح تسجيل الدخول من 98% إلى 84%. كما تعرض المهندسون للإغلاق (locked out) أثناء حالات الطوارئ. انتقلنا بعد ذلك إلى إشعارات الهاتف المحمول (mobile push notifications)، لتعود معدلات النجاح إلى 96%. اهدف إلى تحقيق أمان معقول، وليس أمانًا مطلقًا.
كيف تتخذ قرارات أفضل:
- كن واضحًا بشأن هدفك.
- اعتمد على قياس البيانات بدلاً من التخمين.
- ابدأ بحل بسيط.
- لا تقم بالتحسين إلا عندما تملك دليلًا.
- وثّق سبب اتخاذك لهذا الخيار.
حاولت ذات مرة تحسين مُسلسل JSON (JSON serializer) لتوفير أجزاء من الميكروثانية، مما تسبب في تسريب للذاكرة (memory leak) نما بمقدار 300 ميجابايت. أظهرت أداة تحليل الأداء (profiler) أن عمليات الإدخال والإخراج للشبكة (network I/O) كانت هي عنق الزجاجة الحقيقي. استخدم دائمًا أداة تحليل الأداء قبل إعادة كتابة الكود.
الدين التقني (Technical debt) حقيقة واقعة. الاختصار اليوم سيكلفك وقتًا غدًا. عندما ورثنا خدمة فوضوية، لم نقم بإعادة كتابتها بالكامل، بل استخدمنا تغييرات صغيرة ومستمرة. رفعنا تغطية الاختبار (test coverage) من 30% إلى 78%، مما قلل وقت إصلاح الأخطاء من 4 أيام إلى 1.2 يوم.
المقايضات ليست دائمة. راجع قراراتك. تحقق مما إذا كانت تحسيناتك لا تزال ذات أهمية. التعامل بوعي وقصد يمنع بناء نظام يكون متوسط الأداء في كل شيء.
Source: https://dev.to/lavkeshdwivedi/software-tradeoffs-44e7
Optional learning community: https://t.me/GyaanSetuAi