aidoc.uz

7-qism · DevOps va yetakchilik·18-bob

Team Leading — texnik yetakchilik va jamoa boshqaruvi

Tech Lead lavozimiga intervyu — kodni yozishdan jamoani yo'naltirishgacha: texnik qaror qabul qilish, baholash, texnik qarz, 1-on-1, incident boshqaruvi va relizlarni muvofiqlashtirish bo'yicha aniq, amaliy javoblar.

Senior Flutter dasturchi ma'lum bosqichda "Tech Lead" yoki "Lead Developer" lavozimiga intervyu topshiradi, va u yerda savollar butunlay boshqacha shaklga kiradi: endi "qanday kod yozasiz" emas, "jamoa qanday ishlashini qanday tashkil qilasiz" so'raladi. Bu 14-bobdagi xulq-atvor savollaridan farqi shunda — u yerda "arxitektura qarorini qanday tushuntirasiz", "kod review falsafangiz nima" kabi shaxsiy amaliyot so'raladi, bu yerda esa butun jamoa darajasidagi jarayon: qaror qabul qilish tizimi, baholash madaniyati, texnik qarz siyosati, inqiroz boshqaruvi. Intervyuchilar bu savollarni so'raganda umumiy "muloqot muhim" javobini emas — aniq, takrorlanadigan texnikani kutishadi. Bu bobda aynan shunday, amaliyotda sinalgan yondashuvlar keltiriladi.

1. Qo'l bilan kod yozish va yetakchilik orasidagi muvozanat#

Tech Lead lavozimidagi eng ko'p uchraydigan noto'g'ri tasavvur — "endi kod yozmayman, faqat boshqaraman" yoki aksincha "unvon o'zgardi, lekin ishim o'sha-o'sha". Ikkalasi ham xato.

Jamoa kattaligiga qarab taxminiy nisbat:

Jamoa kattaligiTech Lead'ning kod yozishga sarflaydigan vaqti
2-4 dasturchi60-70% — hali ham asosiy funksiyalarni yozadi, lekin arxitektura qarorlarini ham qabul qiladi
5-8 dasturchi30-50% — ko'proq review, blokerlarni yechish, kelishuvlarga vaqt ketadi
8+ dasturchi (odatda 2+ jamoa)10-20% — asosiy vaqt muvofiqlashtirish, arxitektura nazorati va boshqa lead'lar bilan ishlashga ketadi

Muvozanat buzilganining ikki aniq belgisi bor:

Bottleneck bo'lib qolish — barcha "qiziqarli" yoki qiyin vazifalarni o'ziga olib, jamoaning qolgan a'zolari faqat oddiy topshiriqlar bilan qoladi. Natijada: jamoa o'smaydi, Tech Lead esa ta'til olganda hech kim murakkab masalani hal qila olmaydi — bu "bus factor 1" degan xavfli holat.

Texnik obro'ni yo'qotish — butunlay boshqaruvga o'tib, kod bazasidan uzoqlashish. Olti oydan keyin jamoa "u endi kodni bilmaydi" deb his qila boshlaydi, texnik muhokamalarda uning fikri vazn yo'qota boshlaydi. Buning oldini olish uchun ko'plab Tech Lead'lar har hafta kamida bitta kichik, lekin real vazifani o'zlariga oladi — katta feature emas, balki texnik qarzni tozalash yoki kichik bug fix, shunda kod bazasi bilan aloqa uzilmaydi.

2. Texnik qaror qabul qilish va ADR#

Jamoa kattalashgani sari "eng yaxshi yechim"ni yolg'iz o'zi tanlash ham, hamma bilan cheksiz muhokama qilib vaqtni yo'qotish ham ishlamaydi. Amaliyotda ishlaydigan jarayon:

  1. Muammoni yozma shaklda ta'riflash

    Og'zaki muhokamadan oldin qaror talab qiladigan muammo bir necha jumlada yoziladi — bu ko'pincha muammoning o'zi noto'g'ri qo'yilganini darhol ochib beradi.

  2. 2-3 ta variantni qisqa taqqoslash

    Har bir variant uchun asosiy afzallik/kamchilik, taxminiy migratsiya narxi. Bu bosqichda hamma narsani puxta tekshirish shart emas — maqsad variantlar maydonini toraytirish.

  3. Tegishli odamlardan qisqa fikr so'rash

    Butun jamoa emas — bu qarordan bevosita ta'sirlanadigan 2-4 kishi (masalan, shu modulni ko'p o'zgartiradigan dasturchilar). Fikr-mulohaza uchun aniq muddat qo'yiladi (masalan, 2 kun) — "committee by consensus" holatiga tushib qolmaslik uchun.

  4. Qaror qabul qilish va ADR yozish

    Tech Lead yakuniy qarorni qabul qiladi (kelishuv bo'lmasa ham) va uni Architecture Decision Record (ADR) sifatida hujjatlashtiradi.

ADR — nima uchun aynan shu qaror qabul qilinganini keyinchalik (olti oydan keyin ham) tushunish imkonini beruvchi qisqa hujjat. Minimal shablon:

# ADR-014: State management uchun Riverpod'ga o'tish
 
## Holat
Qabul qilindi — 2026-03-12
 
## Kontekst
Hozirgi Provider-asoslangan yechim katta ekranlarda runtime xatolarga olib
kelmoqda (ProviderNotFoundException), chunki context daraxti chuqurlashgan.
 
## Qaror
Yangi modullar Riverpod bilan yoziladi. Eski modullar migratsiya qilinmaydi —
faqat tegilganda (touch) qayta yoziladi.
 
## Oqibatlar
+ Compile-time xavfsizlik, test qilish osonlashadi
- Jamoa 1-2 hafta o'rganish davridan o'tadi
- Ikki yondashuv vaqtincha bir loyihada yashaydi (migratsiya davrida)

Muhim jihat — qaror keyinchalik noto'g'ri chiqsa, ADR'ni "kim aybdor" emas, "nima o'zgardi, nega qayta ko'rib chiqamiz" nuqtai nazaridan yangilash kerak. Yangi ADR eskisini "bekor qiladi" (supersedes), lekin eskisi o'chirilmaydi — qaror tarixi saqlanib qoladi, bu kelajakda xuddi shunday muhokamani qaytadan boshidan o'tkazmaslikka yordam beradi.

3. Code review — jamoaviy standart sifatida#

14-bobda shaxsiy review odatlari haqida yozgan edik; bu yerda gap — butun jamoa uchun review standartini o'rnatish haqida.

Birinchi qadam — bloklovchi va bloklamaydigan izohlarni aniq ajratish. Ko'p jamoalar buni konvensiya bilan belgilaydi:

PrefiksMa'nosi
blocking:Merge qilishdan oldin albatta tuzatilishi kerak
nit:Kichik, ixtiyoriy taklif — muallif e'tiborsiz qoldirishi mumkin
question:Tushunmovchilik, javob talab qiladi, lekin o'zi bloklamaydi

Bunday konvensiya bo'lmasa, har bir izoh og'irligi noaniq bo'lib qoladi — yangi dasturchi "nit" darajasidagi izohni ham "blocking" deb qabul qilib, ortiqcha vaqt sarflashi yoki aksincha muhim muammoni e'tiborsiz qoldirishi mumkin.

Ikkinchi masala — ikki jamoa a'zosi orasida review'da kelishmovchilik chiqsa. Tech Lead'ning vazifasi darhol "hakam" bo'lib kirish emas — avval ikkalasiga sinxron (masalan, 15 daqiqalik qo'ng'iroq) muhokama qilishni taklif qilish, chunki ko'p kelishmovchiliklar yozma matnda kontekst yo'qligidan kelib chiqadi. Agar shundan keyin ham kelishuv bo'lmasa, Tech Lead texnik asosga tayanib qaror qabul qiladi va nega shu tomonni tanlaganini ochiq yozadi — bu ikkala tomonni ham obro'sizlantirmaydi.

Uchinchi — review'ni bilim tarqatish vositasi sifatida ishlatish. Agar bitta modulni doim bitta dasturchi yozib, boshqa hech kim review qilmasa — bilim "silos"ga aylanadi. Amaliy usul: navbat bilan review tayinlash (round-robin), hatto notanish sohada ham, va murakkab PR'larda "ikki kishi tasdiqlashi shart" qoidasini qo'yish — bu nafaqat sifatni oshiradi, balki bilimni jamoa bo'ylab tarqatadi.

4. Baholash (estimation) va rejalashtirish#

Dasturiy ta'minotni baholash tabiatan noaniq — bu zaiflik emas, haqiqat. Muammo baholashning o'zida emas, uni noto'g'ri ifodalashda: "3 kun" deganda ko'pchilik buni va'da deb qabul qiladi, holbuki bu ehtimollik taqsimoti.

Amaliy texnikalar Flutter jamoasi uchun:

  • Kichik bo'laklarga bo'lish — "profil ekranini qilish" emas, "profil ma'lumotini ko'rsatish", "tahrirlash formasi", "rasm yuklash", "validatsiya xabarlari" kabi alohida, bir-ikki kunlik bo'laklarga. Kichik bo'lak noaniqlikni kamaytiradi va progress'ni ko'rinadigan qiladi.
  • T-shirt sizing planning poker'ga qaraganda tezroq — jamoa vazifalarni S/M/L/XL deb belgilaydi, XL avtomatik ravishda "yana bo'lish kerak" degan signal.
  • Platformaga xos noaniqliklarni alohida hisoblash — do'kon review muddati (Apple 1-3 kun, ba'zan qayta yuborish kerak bo'ladi), eski qurilmalarda kutilmagan xatti-harakat, native plugin integratsiyasidagi kutilmagan muammolar. Bularni asosiy baholashga qo'shmasdan, alohida "risk buffer" sifatida ko'rsatish kerak.

Yuqoriga (mahsulot/menejment tomonga) noaniqlikni qanday uzatish — bu Tech Lead'ning eng qiyin ko'nikmalaridan biri. "Bilmayman" deyish ishonchni yo'qotadi, aniq raqam berish esa keyinchalik "va'dani bajarmadingiz" degan holatga olib keladi. Ishlaydigan format — oraliq va ishonch darajasi bilan gapirish: "asosiy oqim uchun 2 hafta, ishonch yuqori; agar to'lov integratsiyasida kutilmagan narsa chiqsa, +1 hafta — buni birinchi haftaning oxirida aniqroq aytamiz". Bu raqamdan qochish emas — noaniqlikni tuzilgan, boshqariladigan shaklda taqdim etish.

5. Texnik qarz haqida suhbat#

"Kod chirkin, refaktoring kerak" — bu stakeholder uchun hech narsani anglatmaydi. Texnik qarzni asoslashning ishlaydigan yo'li — uni tezlik va xavf tilida gapirish:

"Hozirgi navigatsiya kodi har bir yangi ekran qo'shilganda 2-3 barobar ko'proq test qilishni talab qiladi, chunki holat boshqarish tarqoq. Oxirgi ikki chorakda shu sababli ishlab chiqilgan 4 ta bug production'ga chiqqan. Uni qayta qurish — 1 hafta, lekin keyingi har bir feature'ni taxminan 20% tezroq qiladi."

Bu yerda uchta narsa bor: o'lchanadigan ta'sir (2-3 barobar sekinroq), real oqibat (production bug'lar), investitsiya va qaytim (1 hafta → doimiy 20% tezlashish). Bu "kod chiroyli emas" dan ko'ra ancha ishonarli.

Texnik qarzni qachon alohida vaqt ajratib, qachon feature ish jarayoniga "yashirincha" qo'shib yechish kerakligi haqida qoida: agar qarz bitta modulni sekinlashtirsa va shu modulga tegilganda tuzatib ketish mumkin bo'lsa — alohida vaqt kerak emas, "boy scout rule" (tegingan joyni ozgina yaxshiroq qoldir) yetarli. Agar qarz butun jamoa tezligiga ta'sir qilsa (masalan, eskirgan Flutter versiyasi yangi paketlarni o'rnatishga xalaqit bersa) — bu alohida, rejalashtirilgan sprint/vaqt talab qiladi, chunki uni "yo'l-yo'lakay" qilish imkonsiz.

6. 1-on-1 va feedback#

1-on-1 — status hisoboti emas (buning uchun standup bor). Foydali 1-on-1'ning tuzilishi:

  • Ular olib keladigan mavzular birinchi — Tech Lead kun tartibini to'liq boshqarmasligi kerak, aks holda uchrashuv faqat yuqoridan pastga axborot uzatishga aylanadi.
  • Karyera va o'sish — hech bo'lmasa oyiga bir marta, "hozir nima ustida ishlayapsiz" emas, "qayerga o'sishni xohlaysiz" haqida.
  • Bloklovchi muammolar, lekin bu kunlik standup'da hal qilinishi kerak bo'lgan narsa emas — chuqurroq, tizimli narsalar (masalan, "boshqa jamoa a'zosi bilan doimiy ishlay olmayapman").

Tuzatuvchi (corrective) feedback berishda eng ko'p uchraydigan xato — uni juda umumiy ("ko'proq ehtiyot bo'ling") yoki juda kech (chorak oxirida) berish. Ishlaydigan format: aniq holat + ta'sir + keyingi safar nima qilish kerak, va imkon qadar tez, voqeadan keyin bir necha kun ichida.

"O'tgan haftadagi PR'da xato holatlar (error state'lar) test qilinmagan edi, va bu production'da crash'ga olib keldi. Keyingi safar PR'ni yuborishdan oldin, kamida bitta xato senariysi uchun test yozib ko'ring — bu xuddi shu turdagi muammoni oldindan ushlab qoladi."

Ishlash muammosi (performance problem) va ko'nikma bo'shlig'i (skill gap) orasidagi farq — javobni belgilaydi. Agar dasturchi nima qilish kerakligini biladi, lekin qilmayapti (masalan, deadline'larga e'tibor bermaslik) — bu motivatsiya/ustuvorlik muammosi, javob aniq kutish va javobgarlikni belgilash. Agar dasturchi chin dildan bilmaydi (masalan, asinxron kodni to'g'ri yozishni) — bu ko'nikma bo'shlig'i, javob — pairing, kod ko'rsatish, resurs tavsiya qilish. Ikkalasiga bir xil ("ko'proq harakat qiling") javob berish — ikkalasida ham ishlamaydi.

7. Onboarding va delegatsiya#

Yangi Flutter dasturchini mavjud kod bazasiga tez va samarali kiritish uchun:

  • Birinchi vazifa — kichik, real, ko'rinadigan — masalan, kichik bug fix yoki kichik UI o'zgarish, "toy project" emas. Bu ularga real kod bazasi, real review jarayoni va real deploy tsiklini birinchi haftadayoq ko'rsatadi.
  • Pairing birinchi kun(lar)da — hujjat o'qishdan ko'ra, kimdir bilan birga kod bazasida yurish tezroq tushuntiradi "nega bu yerda shunday qilingan".
  • Hujjat bo'shliqlari — signal, muammo emas — yangi kishi savol berganda "bu hujjatda yo'q edi" desa, bu hujjatni to'ldirish uchun aniq signal. Ko'p jamoalar buni tizimlashtiradi: har bir onboarding savoli darhol hujjatga qo'shiladi.

Delegatsiya — nafaqat vaqtni bo'shatish, balki jamoani o'stirish vositasi. Eng katta xato — faqat zerikarli, past qiymatli vazifalarni delegatsiya qilish, qiziqarli va qiyin ishlarni o'zida saqlab qolish. Bu ishonchni pasaytiradi va eng qobiliyatli dasturchilarning o'sishini to'xtatadi. Amaliy yondashuv — qiyin vazifani delegatsiya qilib, lekin muvaffaqiyat mezonini oldindan aniq belgilash va oraliq bosqichlarda tekshirib turish (mikromanagement emas, balki xavfni erta aniqlash uchun).

8. Incident response va postmortem#

Production'da jiddiy muammo (masalan, yangi reliz crash-rate'ni ko'tarib yubordi) chiqqanda, Tech Lead'ning roli — texnik yechimni o'zi yozish emas, jarayonni boshqarish:

  1. Holatni aniqlash va e'lon qilish

    Muammoning taxminiy ta'siri (necha foiz foydalanuvchi, qay darajada jiddiy) tezda baholanadi va jamoaga (va kerak bo'lsa, stakeholder'larga) qisqa xabar beriladi — "tekshiryapmiz" degan sukunat noaniqlikdan yomonroq.

  2. Rollback yoki hotfix — qaror mezoni

    Agar oldingi versiyaga qaytish tezroq va xavfsizroq bo'lsa (13-bobdagi staged rollout mexanizmi orqali) — birinchi navbatda rollback, keyin sabab tinch sharoitda tekshiriladi. Hotfix faqat rollback imkonsiz (masalan, backend migratsiyasi allaqachon qaytarib bo'lmaydigan) holatlarda birinchi tanlov bo'ladi.

  3. Kommunikatsiya davomida

    Bitta odam (odatda Tech Lead yoki tayinlangan "incident commander") holat haqida yangilanishlarni beradi — bir nechta odam parallel, ziddiyatli xabar tarqatmasligi uchun.

  4. Postmortem — voqeadan 1-2 kun ichida

    Nima sodir bo'lgani, nega ushlanmagani (qaysi test/monitoring bo'shlig'i), va kelajakda oldini olish uchun aniq harakatlar ro'yxati (kim, qachon).

"Blameless postmortem" — hech kim javobgar emas degani emas, balki muhokama "kim xato qildi" emas, "tizim nega bu xatoni oldini olmadi" atrofida quriladi. Masalan, "X kod review'da xato qoldirdi" o'rniga — "nega bizning CI pipeline bu turdagi xatoni ushlamadi, qanday test qo'shish kerak". Bu yondashuv insonlarni ayblashdan qochib, ammo hali ham aniq javobgarlik (harakatlar ro'yxati, muddatlar, mas'ul shaxslar) saqlaydi — "blameless" va "accountability yo'q" bir xil narsa emas.

9. Cross-functional muloqot#

Mobil jamoaning texnik ovozi sifatida, Tech Lead tez-tez uchta klassik vaziyatga duch keladi:

Backend API tayyor emas — bunday holatda kutib turish o'rniga, mock/fake data qatlami bilan UI ishini parallel boshlash, va API kontraktini (so'rov/javob shakli) oldindan backend jamoasi bilan kelishib olish odatiy yechim. Bu ikki jamoani bir-biriga bog'lab qo'ymaydi.

Dizayn Flutter'da qimmat — masalan, murakkab custom animatsiya yoki platforma konvensiyalariga zid interfeys. Bu yerda "buni qila olmaymiz" emas, narx va muqobil bilan gapirish kerak: "bu animatsiya 3-4 kun oladi va ishlash muammolariga sabab bo'lishi mumkin; agar shunga o'xshash, lekin standart Flutter animatsiya tizimidan foydalansak, bir kunda va ishonchliroq qilamiz — vizual farq juda katta emas". Dizaynerga texnik cheklovni emas, tanlovni taqdim etish kerak.

Muddat siqilgan — ko'lamni (scope) qisqartirish variantlarini oldindan tayyorlab kelish: "to'liq versiya 3 hafta, lekin agar X funksiyani keyingi bosqichga qoldirsak, 2 haftada asosiy oqim tayyor bo'ladi". Bu "yo'q" deyishdan ko'ra samaraliroq — qaror qabul qilish uchun aniq variant beradi.

10. Mobil relizlarni muvofiqlashtirish#

Backend'dan farqli o'laroq, mobil reliz do'kon tekshiruvidan o'tadi — bu jarayonni texnik emas, jamoaviy masala qiladi. Odatiy reliz sikli:

BosqichNima sodir bo'ladi
Code freezeBelgilangan sanadan keyin faqat kritik bug fix'lar qabul qilinadi, yangi feature'lar keyingi reliz'ga qoladi
QA oynasiFreeze'dan keyin 2-4 kun — to'liq regressiya testi, real qurilmalarda tekshiruv
Do'konga topshirishReview muddati hisobga olinadi (13-bobda ko'rganimizdek) — Apple uchun buffer kattaroq
Staged rollout monitoringTayinlangan shaxs (odatda Tech Lead yoki navbatdagi dasturchi) crash-rate va reyting ko'rsatkichlarini kuzatib boradi

Tech Lead'ning bu yerdagi roli — sanalarni jamoaga oldindan aniq e'lon qilish (code freeze kutilmaganda kelmasligi kerak) va freeze davomida "faqat bitta kichik o'zgarish qo'shsak bo'ladimi" degan bosimga qarshi tura olish — chunki aynan shu "kichik" o'zgarishlar ko'pincha kutilmagan regressiyalarga sabab bo'ladi.

11. Intervyu jarayonida baholash (hiring)#

Tech Lead ko'pincha nomzodlarni intervyu qilish jarayonida ham ishtirok etadi va undan sof kodlash qobiliyatidan tashqari narsalarni baholash so'raladi: nomzod noaniq talabni qanday aniqlashtiradi (savol berish qobiliyati), tanqidga qanday munosabatda bo'ladi (o'z yechimini himoya qiladimi, yopiq qoladimi yoki ochiq muhokama qiladimi), va murakkab mavzuni boshqalarga qanday tushuntira oladi — bular kelajakdagi jamoada qanday ishlashini ko'rsatadigan kuchli signallar, texnik test natijasidan ko'ra ko'pincha ishonchliroq.

Tez-tez so'raladigan intervyu savollari#

Savol: Jamoa a'zosi doimiy ravishda deadline'larni o'tkazib yubormoqda. Buni qanday hal qilasiz?

Javob: Avval sabab aniqlanadi — bu ko'nikma bo'shlig'imi (vazifani qanday bo'lishni bilmaydi), noto'g'ri baholashmi (real hajmni tushunmaydi) yoki boshqa narsa (shaxsiy muammo, ustuvorliklar aralashuvi)? 1-on-1'da to'g'ridan-to'g'ri, ayblamasdan so'rayman: "so'nggi uch vazifa kutilgandan kech tugadi — nima to'sqinlik qilyapti?" Agar baholash muammosi bo'lsa — vazifalarni birga kichikroq bo'laklarga bo'lishni mashq qilamiz. Agar bloklanish (masalan, boshqa jamoaga bog'liqlik) sabab bo'lsa — buni oldindan aniqlash jarayonini yaxshilaymiz. Faqat "tezroq ishlang" deyish muammoni hal qilmaydi, chunki sabab noma'lum bo'lib qoladi.

Savol: Jamoada ikki kuchli dasturchi arxitektura masalasida qattiq kelisha olmayapti. Nima qilasiz?

Javob: Avval ularni alohida, sinxron muhokamaga taklif qilaman — yozma (Slack/PR izohlari) format ko'pincha ohangni noto'g'ri uzatadi va kelishmovchilikni kuchaytiradi. Agar 20-30 daqiqalik muhokamadan keyin ham kelishuv bo'lmasa, ikkalasidan ham asosiy argumentlarini (2-3 band) yozma qisqacha so'rayman — bu ko'pincha muammoning texnik emas, balki noaniq talab yoki turlicha ustuvorlikda ekanini ochib beradi. Yakuniy qarorni men qabul qilaman va buni ADR'ga yozib, nega aynan shu tanlov qilinganini tushuntiraman — bu ikkala tomonni ham "yutqazgan" his qildirmaydi, chunki qaror shaxsga emas, asosga bog'langan bo'ladi.

Savol: Mahsulot menejeri "buni qachon tugatasiz" deb aniq sana talab qilyapti, lekin siz noaniqlik borligini bilasiz. Qanday javob berasiz?

Javob: "Bilmayman" demasdan, strukturalangan javob beraman: "asosiy oqim uchun ishonchim yuqori — 2 hafta. Bitta noaniq nuqta bor — to'lov provayderi integratsiyasi, buni birinchi 2-3 kun ichida aniqlashtiramiz va sizga darhol yangilaymiz". Bu aniq sanadan qochish emas — noaniqlikni qachon va qanday kamayishini ko'rsatib berish. Muhim jihat: aytilgan "tekshirib ko'rish" muddatiga chindan ham amal qilish — aks holda ishonch yo'qoladi.

Savol: Jamoangizda birov muhim texnik qarorni siz bilan maslahatlashmasdan qabul qilib qo'ydi. Qanday reaksiya bildirasiz?

Javob: Avval nega shunday bo'lganini tushunaman — jarayon noaniqmi ("qaysi qarorlar meni bilan kelishilishi kerak" aniq belgilanmaganmi), yoshki shaxs shunchaki shoshilganmi. Agar qaror o'zi yomon bo'lmasa, uni ochiq muhokama qilmay "bekor qilish" ishonchni buzadi — buning o'rniga qarorni ADR shaklida hujjatlashtirishni so'rayman (retroaktiv), shunda kelajakda shunga o'xshash qarorlar ko'proq ko'rinadigan bo'ladi. Agar qaror haqiqatan muammoli bo'lsa, buni ochiq, texnik asosda muhokama qilaman — shaxsni emas, qarorni tanqid qilaman.

Savol: Jamoangizdagi eng qobiliyatli dasturchi ketishni o'ylayotganini bildirdi. Nima qilasiz?

Javob: Avval haqiqiy sababni tushunishga harakat qilaman — maosh, o'sish imkoniyati yo'qligi, qiziqarli ish yetishmasligi yoki jamoadagi muammomi. Agar bu o'sish bilan bog'liq bo'lsa — konkret, qisqa muddatli imkoniyat taklif qilaman (masalan, yangi murakkab modulga mas'uliyat berish), umumiy va'da emas. Ammo shuni ham tan olaman — ba'zan sabab men nazorat qila olmaydigan narsa (masalan, maosh diapazoni kompaniya siyosati bilan cheklangan) bo'ladi, va bunday holatda halol bo'lish — "buni o'zgartira olmayman, lekin mana bu narsani taklif qila olaman" — noaniq va'dalardan yaxshiroq.

Savol: Texnik qarzni to'lash uchun butun sprint so'rayapsiz, lekin mahsulot rahbariyati "hozir vaqt yo'q" deyapti. Qanday davom etasiz?

Javob: "Kod yomon" argumenti o'rniga o'lchanadigan ta'sirni ko'rsataman — masalan, "oxirgi chorakda shu modul sabab 5 ta production bug chiqdi, har biri o'rtacha 2 kun vaqt oldi — bu 10 kun". Keyin to'liq sprint o'rniga bosqichma-bosqich variant taklif qilaman: "har bir feature sprint'ida 20% vaqtni shu modulni tozalashga ajratamiz — bu tezlikni sezilarli pasaytirmaydi, lekin 2-3 oyda muammoni hal qiladi". Kelishmaslik davom etsa, aniq muqobil xarajatni ko'rsataman: "agar buni qilmasak, keyingi chorakda ham xuddi shunday bug'larni kutishimiz kerak".

Savol: Yangi dasturchi jamoaga qo'shildi, lekin uch haftadan keyin ham hali samarali hissa qo'sha olmayapti. Qanday baholaysiz?

Javob: Avval onboarding jarayonining o'zini tekshiraman — birinchi vazifa haqiqatan kichik va aniq belgilangan edimi, pairing bo'ldimi, hujjatlar yetarlimi? Ko'p hollarda muammo yangi kishida emas, jarayonda bo'ladi. Agar jarayon to'g'ri bo'lsa-yu, hali ham qiynalayotgan bo'lsa — bu ko'nikma bo'shlig'i (o'qitish, pairing kerak) yoki noto'g'ri moslikmi (rol kutilganidan farq qiladimi) ekanini aniqlash uchun ochiq suhbat qilaman. Uch hafta hali erta xulosa chiqarish uchun — odatda 6-8 hafta haqiqiy ko'rsatkich beradi.

Savol: Production'da kritik xato chiqdi, lekin rollback qilish uchun texnik sabablarga ko'ra imkon yo'q. Qanday boshqarasiz?

Javob: Avval ta'sirni cheklash yo'llarini qidiraman — masalan, remote config orqali muammoli feature'ni o'chirish (agar u orqasida turgan bo'lsa), yoki staged rollout hali to'liq 100%ga yetmagan bo'lsa, uni to'xtatish. Agar bularning hech biri ishlamasa — tezkor hotfix uchun jamoani safarbar qilaman, lekin shoshilinch tuzatishni ham minimal review'dan o'tkazish shart (hatto qisqartirilgan shaklda ham) — xato ustiga xato qo'shib olmaslik uchun. Kommunikatsiya davomida stakeholder'larga har 30-60 daqiqada yangilanish beraman, hatto "hali yechim yo'q" bo'lsa ham — sukunat ishonchni tezroq yo'qotadi.

Savol: Dizayner Flutter'da qurish qiyin bo'lgan murakkab animatsiya so'ramoqda, muddat esa siqilgan. Qanday muloqot qilasiz?

Javob: "Bu qiyin" demasdan, aniq narx va muqobil taqdim etaman: "bu custom animatsiya taxminan 4 kun oladi va past quvvatli qurilmalarda sekinlashish xavfi bor. Agar standart Flutter animatsiya tizimidan foydalansak (masalan, Hero transition), 1 kunda, ishonchli va barcha qurilmalarda silliq bo'ladi — vizual farq katta emas". Bu texnik cheklovni ko'rsatib "yo'q" deyish emas — dizaynerga ma'lumotga asoslangan tanlov berish.

Savol: Sizningcha, Tech Lead va Senior Developer orasidagi asosiy farq nima?

Javob: Senior Developer — berilgan murakkab masalani mustaqil, sifatli hal qila oladi. Tech Lead — qaysi masalalar hal qilinishi kerakligini aniqlaydi, jamoaning ishlash usulini (review, reliz, qaror qabul qilish jarayoni) loyihalaydi, va alohida odamlar emas, butun jamoa natijasi uchun javobgar bo'ladi. Amalda bu — o'z kodini yozishdan ko'ra, boshqalarning kodi va qarorlarini yaxshilashga ko'proq vaqt sarflashni anglatadi.

Savol: Postmortem paytida jamoa a'zosi o'z xatosini tan olishdan qochyapti. Nima qilasiz?

Javob: Bu odatda madaniyat muammosi — agar odamlar xato tan olish jazoga olib kelishi mumkinligidan qo'rqsa, ular yopiq qoladi. Men postmortem'ni ataylab tizim atrofida quraman: "kim xato qildi" o'rniga "bizning CI/review jarayonimiz nega buni ushlamadi" deb so'rayman. Bu odamni himoya qilish uchun emas — chunki hodisa qaytadan takrorlanmasligi uchun aynan tizimni tuzatish kerak, ayblash esa hech qanday tuzatish bermaydi, faqat kelajakda odamlarni yashirinishga undaydi.

Savol: Ikki jamoa (mobil va backend) orasida API kontrakti bo'yicha kelishmovchilik chiqdi — har biri o'z tomonini himoya qilyapti. Qanday hal qilasiz?

Javob: Avval ikkala tomonning haqiqiy cheklovlarini tushunaman — ko'pincha "kelishmovchilik" aslida noaniq talabdan kelib chiqadi. Ikkala jamoa lead'i bilan qisqa uchrashuv tashkil qilib, kontraktni yozma shaklda (masalan, OpenAPI sxemasi yoki oddiy JSON misoli) belgilaymiz — bu og'zaki "tushundik" holatidan ko'ra aniqroq. Agar texnik nizolash davom etsa, real foydalanuvchi stsenariysiga qaytaman: "foydalanuvchi uchun qaysi variant tezroq/ishonchliroq" — bu ko'pincha ikkala jamoaning "to'g'ri" degan fikrini emas, mahsulot ehtiyojini markazga qo'yadi.

Ko'p uchraydigan xato javoblar#

Savol/vaziyatZaif (umumiy) javobKuchli (aniq) javob
"Qanday yetakchisiz?""Muloqot va hamkorlikka ishonaman"Aniq jarayon tasvirlanadi: qanday qaror qabul qilinadi, qanday hujjatlashtiriladi, qanday nizolar hal qilinadi
"Nizoni qanday hal qilasiz?""Hamma bilan gaplashib, kelishuvga erishamiz"Aniq qadamlar: alohida sinxron muhokama → argumentlarni yozma to'plash → asosga tayanib qaror + ADR
"Texnik qarzni qanday asoslaysiz?""Kod sifatini oshirish muhimligini tushuntiraman"O'lchanadigan ta'sir (bug soni, sekinlashish foizi) va investitsiya/qaytim nisbati bilan gapiriladi
"Kimdir ketmoqchi bo'lsa nima qilasiz?""Uni ushlab qolishga harakat qilaman"Sababni aniqlash, o'z nazorati doirasidagi/doirasidan tashqari omillarni ajratish, halol javob berish
"Estimatsiyani qanday himoya qilasiz?""Bu ehtimol, aniq bo'lmasligi mumkin deyman"Oraliq + ishonch darajasi + noaniqlik qachon va qanday kamayishi aniq ko'rsatiladi
Amaliy topshiriq

ADR yozing va texnik qarz taklifini tayyorlang

Ikki qismdan iborat mashq bajaring: (1) real arxitektura qarori uchun to'liq ADR yozing — Holat, Kontekst, Qaror, Oqibatlar bo'limlari bilan; (2) shu qarorni mahsulot menejeriga tushuntiruvchi, texnik jargon'siz, tezlik/xavf tilida yozilgan qisqa xabar tayyorlang. Ikkinchisini birinchisiga solishtiring — qaysi tafsilotlar tashlab yuborilgan va nega.

Maslahatni ko'rsatish

Haqiqiy (yoki o'ylab topilgan) loyihangizdagi bitta arxitektura qarorini tanlang — masalan, state management yoki navigatsiya yondashuvini almashtirish. Yuqoridagi ADR shabloni bo'yicha to'liq hujjat yozing, so'ng shu qarorni texnik bo'lmagan stakeholder'ga tushuntiruvchi 3-4 jumlali xabar tayyorlang.