अपनी सैलरी के लायक इंजीनियर का राज़: "अनजान चीज़ (Ambiguity)" को "जो किया जा सके" में बदलने की कला
(terriblesoftware.org)मुख्य बिंदु:
- Senior और mid-level engineer के बीच का निर्णायक अंतर अनिश्चित और अस्पष्ट समस्याओं को ठोस रूप देने की क्षमता है।
- Senior की असली वैल्यू केवल coding skill में नहीं, बल्कि project risk हटाकर उसे executable plan में बदलने में है।
- मौजूदा hiring practices (जैसे algorithm tests) इस क्षमता का आकलन करने में विफल हैं।
- असली growth की शुरुआत coding से पहले problem को साफ़-साफ़ define करने की practice से होती है.
परिचय: Senior engineer की परिभाषा पर फिर से विचार
- आम तौर पर senior engineer को architecture design, communication, leadership जैसी कई skills की सूची से परिभाषित किया जाता है।
- लेकिन title, salary, और अनुभव के वर्षों को हटाकर देखें, तो senior या उससे ऊपर के engineer को अलग करने वाली एक ही मुख्य skill है: 'अस्पष्टता को कम करने की क्षमता'।
- बाकी सारी क्षमताएँ, जैसे technical execution, इसी मुख्य skill पर आधारित नतीजे हैं।
मुख्य चर्चा
1. समस्या हल करने के तरीके का अंतर: स्पष्टता बनाम अस्पष्टता
- Mid-level engineer: जब साफ़ specification और constraints दिए जाएँ, तो बेहतरीन प्रदर्शन करता है। अच्छी तरह परिभाषित समस्याएँ हल करने में दक्ष होता है।
- Senior engineer: "performance improve करनी है", "user complaints बढ़ रही हैं", "scalability पर ध्यान देना है" जैसी धुंधली और abstract requirements मिलने पर अलग दिखता है।
- Senior engineer अस्पष्ट समस्या को सिर्फ़ execute नहीं करता, बल्कि उसका विश्लेषण करके उसे तोड़ता है और ठोस tasks में बदल देता है।
2. Senior की मुख्य भूमिका project risk हटाना है
-
Senior engineer बड़े और abstract problem के सामने नीचे दिए गए तरीकों से uncertainty कम करता है:
-
ऐसे बुनियादी सवाल पूछना जो दूसरे लोग नहीं पूछते।
-
महत्वपूर्ण signals और noise को अलग करना।
-
यह तय करना कि क्या तुरंत करना है और क्या बाद के लिए टालना है।
-
यह प्रक्रिया project का risk कम करती है (De-risking) और "हमें पता नहीं कि यह क्या है" जैसी स्थिति को "इसे छोटे executable projects और हटाए जाने वाले blockers में बाँटा जा सकता है" जैसी स्थिति में बदल देती है।
-
जब senior engineer यह काम अच्छी तरह करता है, तो project बाहर से बहुत smooth और आसान लगता है, लेकिन असल में यह पहले से किए गए बड़े पैमाने के 'अदृश्य काम' का परिणाम होता है।
3. अस्पष्टता दूर करने के लिए ठोस approach
- Senior engineer coding शुरू करने से पहले problem को साफ़ करने के लिए ऐसे सवाल पूछता है:
- समस्या की जड़: जो solution हम चाहते हैं, उसके बजाय वह असली मूल समस्या क्या है जिसे हमें हल करना है?
- User की परिभाषा: हम ठीक किस व्यक्ति की कौन-सी तकलीफ़ हल करना चाहते हैं? ("user" जैसे बहुत व्यापक शब्द से बचें)
- Assumption की जाँच: मौजूदा plan में कौन-सी गलत धारणाएँ छिपी हो सकती हैं?
- Risk assessment: अगर हमारा आकलन गलत निकला, तो सबसे बुरी स्थिति क्या होगी?
4. Hiring system की सीमाएँ और senior selection की समस्या
- ज़्यादातर कंपनियाँ tech stack की सूची या algorithm problem solving (LeetCode) पर ध्यान देकर hiring करती हैं।
- यह तरीका इस बात की जाँच नहीं कर पाता कि कोई engineer अस्पष्ट product requirements को executable plan में बदल सकता है या नहीं।
- नतीजतन ऐसे 'नाम के senior' engineers की भरमार हो जाती है जिनकी coding skill तो मज़बूत होती है, लेकिन अधूरी specifications के सामने वे कुछ नहीं कर पाते।
निष्कर्ष: growth के लिए सुझाव
- Architecture और communication skills महत्वपूर्ण हैं, लेकिन उनकी असली वैल्यू तभी दिखती है जब 'क्या बनाना है' यह पहले से स्पष्ट हो चुका हो।
- अस्पष्टता कम किए बिना technical excellence का मतलब अक्सर सिर्फ़ 'गलत समस्या को बहुत elegantly हल करना' रह जाता है।
- यह तय करने का पैमाना कि आप senior level पर हैं या नहीं, यह है कि abstract task मिलने पर क्या आप किसी और के clarification का इंतज़ार करते हैं, या खुद उसे इतना स्पष्ट बनाते हैं कि टीम execute कर सके।
- यह जन्मजात प्रतिभा नहीं, बल्कि practice का क्षेत्र है। इसलिए जब भी कोई अस्पष्ट ticket (काम) मिले, तो तुरंत coding शुरू करने के बजाय पहले problem को concretize करने की training शुरू करनी चाहिए।
5 टिप्पणियां
सीनियर डेवलपर को "algorithm coding test" से परखने की प्रक्रिया मुझे भी... hiring system की एक सीमा लगती है। मुझे लगता है कि जो लोग किसी समस्या के सार के करीब पहुँच चुके हैं, या पहुँच सकते हैं, वही अपनी salary के मुताबिक़ मूल्य देने वाले senior developer होते हैं।
इस लेख से पता चलता है कि देखने के नज़रिए के अनुसार बातें अलग-अलग हो सकती हैं। मेरे मानदंड से senior और mid-level engineer के बीच फर्क करने का आधार सिर्फ scope है. Ambiguity को ठोस रूप देना engineer की बुनियादी क्षमता है, और मुझे लगता है कि mid-level engineer से ही यह कर पाना ज़रूरी है ताकि उसे engineer का title देना उचित लगे। इसलिए मेरे लिए यह लेख mid-level engineer और शुरुआती (associate) engineer के बीच फर्क करने का एक मानदंड बन सकता है।
समस्या को स्पष्ट रूप से परिभाषित किए बिना
तकनीकी उत्कृष्टता सिर्फ़ 'गलत समस्या को खूबसूरती से हल करना' भर है।
वाकई रोंगटे खड़े कर देने वाली पंक्ति
सीनियर डेवलपर टेस्ट में programming test तक तो फिर भी समझ आता है
लेकिन अगर algorithm problems दे दें तो बहुत हैरानी होती है (इतना अजीब लगा कि ठीक से याद भी नहीं है)
1. सवाल पूछने की कला और सामाजिक पूंजी (Social Capital)
2. स्वायत्तता और risk management (Autonomy & Risk)
3. title inflation और hiring का संरचनात्मक विरोधाभास
4. केवल tenure बनाम जानबूझकर किया गया अभ्यास
If) को संभालने पर ध्यान देता है, जबकि सीनियर conditions बदल जाएँ तो (What-if) क्या होगा, यह मानकर पहले से तैयारी करता है।5. सीनियर title पर संदेहपूर्ण नज़रिया