सॉफ़्टवेयर ट्रेडऑफ़्स

आपके द्वारा किया गया हर डिज़ाइन विकल्प किसी अन्य विकल्प का रास्ता बंद कर देता है। सॉफ़्टवेयर ट्रेडऑफ़्स (trade-offs) के माध्यम से काम करता है। आपको ये चुनाव जानबूझकर करने चाहिए। यदि आप ऐसा नहीं करते हैं, तो आप अनजाने में ये चुनाव कर लेंगे।

सामान्य ट्रेडऑफ़ जिनका आप सामना करते हैं:

• फंक्शनलिटी बनाम परफॉरमेंस (Functionality vs Performance) साफ़ कोड (Clean code) अक्सर धीमा चलता है। तेज़ कोड अक्सर पढ़ने में कठिन होता है। उन बैच प्रोसेस के लिए पठनीय कोड का उपयोग करें जो दिन में एक बार चलते हैं। उन पाथ्स (paths) के लिए ऑप्टिमाइज़्ड कोड का उपयोग करें जो प्रति रिक्वेस्ट हज़ारों बार चलते हैं।

• लचीलापन बनाम सरलता (Flexibility vs Simplicity) जटिल एब्स्ट्रैक्शन (abstractions) कोड को समझना कठिन बना देते हैं। जो काम करे, ऐसा सबसे सरल कोड लिखें। इसे इस तरह बनाएं कि आप बाद में इसका विस्तार कर सकें।

• स्केलेबिलिटी बनाम लागत (Scalability vs Cost) भारी ट्रैफिक के लिए डिज़ाइन करने में अभी अधिक पैसा खर्च होता है। अपनी विकास दर (growth rate) को मापना आपको निर्णय लेने में मदद करता है। यदि आप हर महीने 20% बढ़ते हैं, तो भविष्य के लिए योजना बनाएं। यदि आपके पास पूंजी कम है, तो अपनी लागत पर नज़र रखें।

• सुरक्षा बनाम उपयोगिता (Security vs Usability) अत्यधिक सुरक्षा उपयोगकर्ता अनुभव (user experience) को खराब कर सकती है। हमने एक बार एक एडमिन टूल के लिए हार्डवेयर टोकन अनिवार्य कर दिए थे। लॉगिन सफलता दर 98% से गिरकर 84% हो गई। आपातकालीन स्थिति के दौरान इंजीनियरों का एक्सेस लॉक हो गया। हमने मोबाइल पुश नोटिफिकेशन पर स्विच किया। सफलता दर वापस बढ़कर 96% हो गई। उचित सुरक्षा का लक्ष्य रखें, अधिकतम सुरक्षा का नहीं।

बेहतर निर्णय कैसे लें:

  • अपने लक्ष्य के बारे में स्पष्ट रहें।
  • अनुमान लगाने के बजाय डेटा मापें।
  • एक सरल समाधान से शुरुआत करें।
  • केवल तभी ऑप्टिमाइज़ करें जब आपके पास प्रमाण हो।
  • दस्तावेज़ (document) बनाएं कि आपने वह चुनाव क्यों किया।

मैंने एक बार माइक्रोसेकंड बचाने के लिए एक JSON सीरियलाइज़र (JSON serializer) को ऑप्टिमाइज़ करने की कोशिश की थी। इसके कारण एक मेमोरी लीक (memory leak) हुआ जो 300 MB तक बढ़ गया। एक प्रोफाइलर (profiler) ने दिखाया कि नेटवर्क I/O ही असली बाधा (bottleneck) थी। कोड को फिर से लिखने से पहले हमेशा प्रोफाइलर का उपयोग करें।

टेक्निकल डेट (Technical debt) वास्तविक है। आज का शॉर्टकट कल समय की कीमत चुकाएगा। जब हमें एक अव्यवस्थित (messy) सर्विस मिली, तो हमने उसे पूरी तरह से फिर से नहीं लिखा। हमने छोटे, निरंतर बदलावों का उपयोग किया। हमने टेस्ट कवरेज को 30% से बढ़ाकर 78% कर दिया। इससे बग फिक्स करने का समय 4 दिनों से घटकर 1.2 दिन हो गया।

ट्रेडऑफ़ स्थायी नहीं होते हैं। अपने निर्णयों पर पुनर्विचार करें। जाँचें कि क्या आपके ऑप्टिमाइज़ेशन अभी भी मायने रखते हैं। सचेत (intentional) रहने से एक ऐसे सिस्टम से बचा जा सकता है जो हर चीज़ में औसत दर्जे का हो।

स्रोत: https://dev.to/lavkeshdwivedi/software-tradeoffs-44e7

वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi