YAGNI (You Aren't Gonna Need It) — एक्सट्रीम प्रोग्रामिंग का सिद्धांत है जो तब तक कार्यक्षमता न जोड़ने का निर्देश देता है जब तक उसकी आवश्यकता न हो। इसे रॉन जेफ़्रीज़ ने XP (एक्सट्रीम प्रोग्रामिंग) पद्धति के संदर्भ में प्रतिपादित किया था। University of Alabama (2020) के शोध के अनुसार, YAGNI का पालन करने वाली परियोजनाएं MVP के बाज़ार में आने के समय को 23% तक कम करती हैं और "भविष्य के लिए" कार्यक्षमता लागू करने वाली परियोजनाओं की तुलना में दोषों की संख्या 17% कम करती हैं। YAGNI आलस्य नहीं, बल्कि संसाधनों की सचेत बचत है।
मुख्य बिंदु
YAGNI (You Aren't Gonna Need It) — एक्सट्रीम प्रोग्रामिंग (XP) का सिद्धांत जिसका अर्थ है “आपको इसकी आवश्यकता नहीं होगी”। नियम कहता है: कभी भी उस कार्यक्षमता को लागू न करें जो वर्तमान उपयोगकर्ता कहानियों द्वारा आवश्यक नहीं है। यदि कोई सुविधा आज आवश्यक नहीं है — तो उसे न बनाएं, “शायद काम आए” के आधार पर भी नहीं।
यह शब्द रॉन जेफ़्रीज़ द्वारा गढ़ा गया था, जो XP पद्धति के सह-लेखकों में से एक हैं (केंट बेक के साथ)। जेफ़्रीज़ ने कहा: “सबसे सरल चीज़ लागू करें जो काम करती है, और जब तक आवश्यक न हो, कुछ भी न जोड़ें”। YAGNI योजना बनाने पर प्रतिबंध नहीं है, बल्कि समय से पहले कार्यान्वयन पर प्रतिबंध है।
Standish Group CHAOS Report (2023) के अनुसार, औसत सॉफ़्टवेयर उत्पाद में 64% सुविधाओं का उपयोग शायद ही कभी या कभी नहीं किया जाता है। मोबाइल ऐप पर लागू करें — आधे से अधिक लिखा गया कोड उपयोगकर्ता को मूल्य नहीं पहुँचाता है। YAGNI संसाधनों की इस बर्बादी को रोकता है।
YAGNI को एक सख्त फ़िल्टर के रूप में लागू करें: प्रत्येक सुविधा को प्रश्न का उत्तर देना चाहिए “यह अभी किस विशिष्ट उपयोगकर्ता समस्या को हल करती है?” यदि कोई उत्तर नहीं है — सुविधा आवश्यक नहीं है।
YAGNI गुणवत्तापूर्ण आर्किटेक्चर की अस्वीकृति नहीं है। YAGNI अनावश्यक कोड लिखने से रोकता है, लेकिन सही कोड लिखने से नहीं रोकता। यदि किसी वर्तमान सुविधा के लिए एक साफ़ एब्स्ट्रैक्शन लेयर की आवश्यकता है — तो इसे बनाएं। यदि लेयर की आवश्यकता नहीं है — तो इसे न बनाएं। मुख्य अंतर: YAGNI कार्यक्षमता के बारे में है, गुणवत्ता के बारे में नहीं।
डेवलपर्स अक्सर YAGNI को तकनीकी ऋण के जानबूझकर संचय के साथ भ्रमित करते हैं (तकनीकी ऋण हमेशा एक समझौता होता है, YAGNI दक्षता का सिद्धांत है)। अंतर यह है कि तकनीकी ऋण को स्वीकार और दस्तावेज़ित किया जाता है, जबकि YAGNI का उल्लंघन केवल अतिरिक्त काम है।
खुद से पूछें: “यदि मैं यह एब्स्ट्रैक्शन अभी नहीं बनाता, तो जब इसकी आवश्यकता होगी तो रीफ़ैक्टरिंग में कितना समय लगेगा?” यदि रीफ़ैक्टरिंग का समय अभी लिखने के समय से कम है — तो इसे स्थगित करें।
मोबाइल डेवलपमेंट तीन कारणों से YAGNI के उल्लंघन के प्रति विशेष रूप से संवेदनशील है: APK/IPA का आकार सीधे इंस्टॉलेशन रूपांतरण दर को प्रभावित करता है, मोबाइल प्रोजेक्ट्स का संकलन समय कोड की मात्रा के साथ रैखिक रूप से बढ़ता है, और प्रत्येक अतिरिक्त सुविधा विफलता के बिंदु जोड़ती है। YAGNI आलस्य के बारे में नहीं, बल्कि ध्यान केंद्रित करने के बारे में है।
Google Play Console Data (2023) के एक अध्ययन ने दिखाया: APK आकार का प्रत्येक 10 MB इंस्टॉलेशन की संभावना को 1.2% कम करता है। अप्रयुक्त कोड केवल रिपॉजिटरी में कचरा नहीं है — यह सीधा वित्तीय नुकसान है। अतिरिक्त लाइब्रेरीज़ (उस कार्यक्षमता के लिए जो “शायद बाद में जोड़ेंगे”) APK के फूलने का सबसे आम स्रोत हैं।
Gradle Build Performance Report (2024) के अनुसार, Android प्रोजेक्ट में प्रत्येक अतिरिक्त मॉड्यूल पूर्ण बिल्ड समय को 3–7 सेकंड बढ़ा देता है। यदि आप “शायद ज़रूरत हो” के आधार पर 5 मॉड्यूल जोड़ते हैं — तो बिल्ड समय में वृद्धि प्रति बिल्ड 15–35 सेकंड होगी। एक वर्ष में, 5 डेवलपर्स की एक टीम संकलन की प्रतीक्षा में 200 मानव-घंटे तक खो देती है।
CI में बाइनरी आकार की निगरानी करें: एक चेतावनी सीमा निर्धारित करें (जैसे, प्रति कमिट +500 KB)। यदि बिना नई सुविधा के आकार बढ़ गया — यह YAGNI का उल्लंघन है जिस पर कोड समीक्षा में चर्चा की जानी चाहिए।
गोल्ड-प्लेटिंग — उत्पाद को “बेहतर” बनाने के प्रयास में आवश्यकताओं से परे कार्यक्षमता जोड़ना। एक विशिष्ट उदाहरण: डेवलपर स्क्रीन के बीच जटिल ट्रांज़िशन एनिमेशन जोड़ता है, जबकि डिज़ाइन में एक सरल fade निर्दिष्ट है। एनिमेशन में 2 दिन लगते हैं, उपयोगकर्ता इसे नोटिस नहीं करता, और विभिन्न उपकरणों पर बग वर्षों तक प्रोजेक्ट का पीछा करते हैं।
UX Collective Annual Report (2023) के अनुसार, 78% उपयोगकर्ता किसी ऐप का मूल्यांकन गति और स्थिरता से करते हैं, एनिमेशन से नहीं। YAGNI कहता है: यदि एनिमेशन आवश्यकताओं में निर्दिष्ट नहीं है — तो इसे लागू न करें। डिज़ाइनर एनिमेशन तब जोड़ेगा जब वास्तव में किसी UX समस्या को हल करने के लिए इसकी आवश्यकता होगी।
केवल वही लागू करें जो मॉकअप में है। यदि डिज़ाइनर ने एनिमेशन नहीं बनाया — तो यह मौजूद नहीं होना चाहिए। मॉकअप से कोई भी विचलन YAGNI का उल्लंघन है।
स्टार्टअप की एक सामान्य गलती: “भविष्य में अंतर्राष्ट्रीय बाज़ार में प्रवेश के लिए” तुरंत 20+ भाषाओं का समर्थन बनाना। YAGNI अनुशंसा करता है: केवल वर्तमान बाज़ार की भाषा में स्थानीयकरण करें। प्रत्येक नई भाषा जोड़ने में अनुवादकों का समय, स्ट्रिंग्स के कटने का परीक्षण और RTL लेआउट की डिबगिंग लगती है।
Deloitte Digital Globalization Survey (2022) के अनुसार, 60% मोबाइल ऐप कभी भी अपने पहले बाज़ार से बाहर नहीं जाते। यदि यह आपका मामला है — बहुभाषी समर्थन पर खर्च किए गए संसाधन बर्बाद हैं। YAGNI दृष्टिकोण: अंग्रेज़ी (आधार) + लक्ष्य बाज़ार की भाषा। अन्य — जैसे ही वास्तव में किसी क्षेत्र में प्रवेश करें।
प्राथमिकता निर्धारण के लिए YAGNI का उपयोग करें: यदि कोई सुविधा अगले दो तिमाहियों के रोडमैप में नहीं है — तो इसे शुरू न करें। रोडमैप का दस्तावेज़ीकरण और उत्पाद प्रबंधक द्वारा अनुमोदन आवश्यक है।
Android प्रोजेक्ट लाइब्रेरी मुद्रास्फीति से ग्रस्त हैं। डेवलपर्स Retrofit, OkHttp, Gson, Room, Dagger Hilt, Navigation Component, DataStore जोड़ते हैं — व्यावसायिक तर्क की पहली पंक्ति लिखने से पहले भी। YAGNI अनुशंसा करता है: वास्तविक आवश्यकता के अनुसार लाइब्रेरी जोड़ें, निवारक रूप से नहीं।
// YAGNI उल्लंघन: लाइब्रेरी का निवारक शामिल करना
// build.gradle (module)
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation("androidx.room:room-runtime:2.6.0")
// और ऐप अभी सिर्फ "Hello World" दिखाता है
लाइब्रेरी अपनी स्वयं की जटिलता वाली निर्भरताएँ हैं। प्रत्येक को संस्करण अद्यतन, ब्रेकिंग चेंजेस पर माइग्रेशन की आवश्यकता होती है और APK आकार बढ़ाती है। जोड़ें एक लाइब्रेरी जब कोई विशिष्ट कार्य उत्पन्न होता है जिसे यह लाइब्रेरी हल करती है। OkHttp (न्यूनतम HTTP क्लाइंट) से शुरू करें, जब REST क्लाइंट की आवश्यकता हो तो Retrofit जोड़ें, और इसी तरह।
SwiftUI एक शक्तिशाली फ्रेमवर्क है, लेकिन इसका उपयोग वास्तविक आवश्यकताओं द्वारा संचालित होना चाहिए। यदि कोई प्रोजेक्ट iOS 14+ से शुरू होता है और कस्टम UI घटकों की आवश्यकताएँ न्यूनतम हैं — SwiftUI एक अच्छा विकल्प है। यदि किसी प्रोजेक्ट को iOS 13 का समर्थन करना है या जटिल कस्टम जेस्चर की आवश्यकता है — UIKit सही समाधान बना हुआ है। YAGNI “क्योंकि यह ट्रेंडी है” के आधार पर SwiftUI पर माइग्रेट करने के विरुद्ध है।
// YAGNI: UIKit का उपयोग करें जब तक SwiftUI से वास्तविक लाभ न हो
class ProfileViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = "प्रोफ़ाइल"
}
}
// यदि SwiftUI की आवश्यकता है — UIHostingController के माध्यम से एकीकृत करें
let swiftUIView = ProfileView()
let hostingVC = UIHostingController(rootView: swiftUIView)
Point-Free: “SwiftUI vs UIKit Decision Guide” (2024) का विश्लेषण अनुशंसा करता है: स्पष्ट व्यावसायिक कारण (जैसे, डिज़ाइनर के लिए Live Preview की आवश्यकता) के बिना मौजूदा UIKit स्क्रीन को SwiftUI पर माइग्रेट न करें। काम कर रहे कोड को फिर से लिखना YAGNI का सीधा उल्लंघन है। SwiftUI — नई स्क्रीन के लिए, UIKit — मौजूदा के लिए।
सबसे खतरनाक गलती खराब आर्किटेक्चर के बहाने YAGNI का उपयोग करना है। “हम रिपॉजिटरी लेयर नहीं बनाएंगे क्योंकि YAGNI — हम सीधे ViewModel में क्वेरी लिखेंगे”। यह YAGNI नहीं है, यह तकनीकी ऋण जमा करना है। YAGNI अनावश्यक कार्यक्षमता को रोकता है, आर्किटेक्चरल अखंडता को नहीं।
आर्किटेक्चर रखरखाव में एक निवेश है। यदि आप 3 से अधिक स्क्रीन लिख रहे हैं — एक बुनियादी आर्किटेक्चरल लेयर (MVVM, रिपॉजिटरी) पहले से ही उचित है। यदि 1 स्क्रीन है — आप एक सरल दृष्टिकोण अपना सकते हैं। कुंजी: वर्तमान सुविधाओं के लिए आवश्यक आर्किटेक्चरल न्यूनतम निर्धारित करें, और अधिक न जोड़ें।
निर्णयों को “आर्किटेक्चरल” और “कार्यात्मक” में विभाजित करें। आर्किटेक्चरल निर्णय (लेयर, नेविगेशन, DI) YAGNI द्वारा कवर नहीं होते — वे रखरखाव के लिए आवश्यक हैं। कार्यात्मक निर्णय (सुविधाएँ, स्क्रीनशॉट, एनिमेशन) — कवर होते हैं।
दूसरा चरम — भविष्य के API अनुबंधों को अनदेखा करना। डेवलपर को बैकएंड से 5 फ़ील्ड के साथ JSON मिलता है और केवल 3 को पार्स करता है, क्योंकि “बाकी YAGNI के अनुसार आवश्यक नहीं हैं”। समस्या: जब कोई फ़ील्ड जोड़ा जाता है, तो बैकएंड पार्सिंग को तोड़ सकता है यदि प्रतिक्रिया बदल गई। समाधान सभी प्रतिक्रिया फ़ील्ड को मैप करना है, भले ही सभी अभी उपयोग न हों।
Meta API Design Guidelines (2023) के अनुसार, क्लाइंट को सर्वर द्वारा लौटाए गए सभी फ़ील्ड को पार्स करना चाहिए, अप्रयुक्त को अनदेखा करते हुए, लेकिन पूरी संरचना को नहीं छोड़ना चाहिए। YAGNI यहाँ कुछ और के बारे में है: उन फ़ील्ड का हैंडलिंग न जोड़ें जो अभी तक विनिर्देश में नहीं हैं “शायद बैकएंड उन्हें लौटा दे” के आधार पर।
पूरी प्रतिक्रिया संरचना को पार्स करें (वे सभी फ़ील्ड जो सर्वर वर्तमान में लौटाता है)। वर्तमान API विनिर्देश में नहीं होने वाले फ़ील्ड का हैंडलिंग न जोड़ें। यह YAGNI और परिवर्तन के प्रति लचीलापन के बीच संतुलन है।
अक्सर पूछे जाने वाले प्रश्न
YAGNI (You Aren't Gonna Need It) — सिद्धांत: वह न करें जिसकी अभी आवश्यकता नहीं है। यदि कोई सुविधा वर्तमान आवश्यकताओं में नहीं है — तो उसे लागू न करें। भले ही “निश्चित रूप से एक महीने में काम आएगी” — महीना कभी नहीं आ सकता, लेकिन कोड पहले ही लिखा जा चुका है।
KISS कोड की अधिकतम सादगी की मांग करता है, YAGNI न्यूनतम कार्यक्षमता की। KISS: “कोड को सरल बनाएं”। YAGNI: “केवल वही करें जो आवश्यक है”। वे एक दूसरे के पूरक हैं: साथ में वे कोड और सुविधा स्तरों पर ओवरइंजीनियरिंग को रोकते हैं।
जब आर्किटेक्चर की अनुपस्थिति के बहाने के रूप में उपयोग किया जाता है। YAGNI लेयर को अलग करने, एब्स्ट्रैक्शन बनाने और मॉड्यूल डिज़ाइन करने से नहीं रोकता। यह उन सुविधाओं को लागू करने से रोकता है जिनकी अभी आवश्यकता नहीं है। आर्किटेक्चर कोई सुविधा नहीं, बल्कि सुविधाओं की नींव है।
स्टार्टअप में, YAGNI महत्वपूर्ण है: संसाधन सीमित हैं और बाज़ार में आने का समय एक मुख्य कारक है। MVP (न्यूनतम व्यवहार्य उत्पाद) पर ध्यान केंद्रित करें — उपयोगकर्ता की समस्या को हल करने वाली सुविधाओं का न्यूनतम सेट। बाकी सब YAGNI का उल्लंघन है।
तकनीकी ऋण एक सचेत समझौता है: आप डिलीवरी को गति देने के लिए ऋण लेते हैं और इसे चुकाने की योजना बनाते हैं। YAGNI अनावश्यक काम को रोकने के बारे में है। संतुलन: अतिरिक्त काम न करें (YAGNI), लेकिन यदि करते हैं — तो अच्छी तरह से करें (न्यूनतम तकनीकी ऋण)।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें