5-bo‘lim

Rejalashtirish va baholash

Vaqtni baholash usullari, xavflarni boshqarish, uchburchak cheklovlari va nima uchun bahoyingiz doim noto'g'ri chiqadi.

🕑 12 daqiqa o‘qish 📄 1 063 so‘z 👁 6 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Nima uchun baholash qiyin?
  2. Uchburchak cheklovlari
  3. Baholash usullari
  4. 1. Uch nuqtali baholash (PERT)
  5. 2. O'xshashlik bo'yicha baholash
  6. 3. Dekompozitsiya
  7. 4. Vaqt qutisi
  8. Bufer qo'shish
  9. Xavflarni boshqarish
  10. Gantt diagrammasi
  11. Progressni kuzatish
  12. Amaliy maslahatlar
  13. Xulosa

"Bu ish qancha vaqt oladi?" - dasturchi eng ko'p eshitadigan va eng qiyin savol.

Nima uchun baholash qiyin? #

Ko'rinadigan ish - aysbergning uchi Kod yozish "2 kun" Talablarni aniqlashtirish Chekka holatlarni ishlash Testlar yozish Kod tekshiruvi va tuzatishlar Hujjat, deploy, xatolarni tuzatish "8 kun" Dasturchi ko'pincha faqat uchini baholaydi
Baho past chiqishining asosiy sababi - ko'rinmaydigan ishlar
Rejalashtirish yanglishuvi

Psixologiyada bu hodisa planning fallacy deb ataladi: odamlar o'z vazifalarini bajarish vaqtini muntazam ravishda kam baholaydi, hatto o'tmishda ham xuddi shunday xato qilganini bilsa ham.

Tadqiqotlarga ko'ra, dasturchilar baholari o'rtacha 1.5-2 barobar past chiqadi.

Sabablari:

SababIzoh
Optimizm"Hammasi silliq ketadi" deb faraz qilinadi
Ko'rinmas ishlarTest, tekshiruv, hujjat, deploy hisobga olinmaydi
UzilishlarYig'ilishlar, savollar, boshqa loyihalar
NoaniqlikTalab to'liq tushunilmagan
Bosim"Bir haftada bo'ladimi?" degan savolga "ha" deyish
Tajriba yo'qligiYangi texnologiya, notanish kod

Uchburchak cheklovlari #

Uchtasini bir vaqtda tanlab bo'lmaydi Doira imkoniyatlar Vaqt muddat Resurs byudjet, odam SIFAT markazda turadi Uchtasini qattiq belgilasangiz - sifat qurbon bo'ladi
Bittasini o'zgartirsangiz, qolganlaridan biri ham o'zgarishi kerak
Natija
Mijoz: "Muddatni ikki hafta qisqartiring."

Noto'g'ri javob: "Yaxshi, harakat qilamiz."

To'g'ri javob:
  "Buning uchta yo'li bor:
   1. Doirani qisqartiramiz - sharhlar modulini keyingi relizga qoldiramiz
   2. Jamoaga yana ikki dasturchi qo'shamiz (lekin ular 2 hafta o'rganadi)
   3. Sifatni kamaytiramiz - testlarni tashlaymiz (tavsiya etmayman)

   Qaysi birini tanlaymiz?"
Tanlovni mijozga qoldiring

"Yo'q, bo'lmaydi" deyish - qarama-qarshilik.

"Mana variantlar, tanlang" - hamkorlik. Mijoz odatda o'zi doirani qisqartirishni tanlaydi.

"Yana odam qo'shamiz" - eng keng tarqalgan xato

Bruks qonuni: "Kechikkan loyihaga yangi odam qo'shish uni yanada kechiktiradi."

Sabablari:

  1. Yangi odamni o'rgatish vaqt oladi - mavjudlardan vaqt olinadi
  2. Muloqot yo'llari soni keskin oshadi
  3. Ba'zi ishlarni bo'lib bo'lmaydi

Muloqot yo'llari: n(n-1)/2

  • 3 kishi → 3 ta yo'l
  • 6 kishi → 15 ta yo'l
  • 10 kishi → 45 ta yo'l

"To'qqiz ayol bir oyda bir bola tug'a olmaydi."

Baholash usullari #

1. Uch nuqtali baholash (PERT) #

Natija
O - optimistik (hammasi silliq ketsa)
M - eng ehtimolli
P - pessimistik (muammolar chiqsa)

Baho = (O + 4M + P) / 6
Og'ish = (P - O) / 6
Python
def pert_baho(optimistik, ehtimolli, pessimistik):
    baho = (optimistik + 4 * ehtimolli + pessimistik) / 6
    ogish = (pessimistik - optimistik) / 6

    return {
        "baho": round(baho, 1),
        "ogish": round(ogish, 1),
        "ishonch_oraligi": (round(baho - 2 * ogish, 1), round(baho + 2 * ogish, 1)),
    }


vazifalar = {
    "Savat interfeysi":   (2, 3, 6),
    "To'lov integratsiya": (3, 5, 12),
    "Hisobot moduli":     (4, 6, 10),
}

jami_baho = 0
for nom, (o, m, p) in vazifalar.items():
    natija = pert_baho(o, m, p)
    jami_baho += natija["baho"]
    print(f"{nom:22s} {natija['baho']:5.1f} kun  "
          f"(oralik: {natija['ishonch_oraligi'][0]}-{natija['ishonch_oraligi'][1]})")

print(f"\nJami: {jami_baho:.1f} kun")
Natija
Savat interfeysi         3.3 kun  (oralik: 1.9-4.7)
To'lov integratsiya      5.8 kun  (oralik: 2.8-8.8)
Hisobot moduli           6.3 kun  (oralik: 4.3-8.3)

Jami: 15.4 kun
Pessimistik baho eng ko'p ma'lumot beradi

"Eng yomon holatda qancha vaqt ketadi?" degan savol xavflarni oshkor qiladi.

Yuqoridagi misolda to'lov integratsiyasining oralig'i eng keng (2.8-8.8) - demak u eng noaniq va eng xavfli qism.

2. O'xshashlik bo'yicha baholash #

Natija
"O'tgan safar shunga o'xshash modulni 6 kunda qildik.
 Bu biroz murakkabroq - 8 kun deb hisoblaymiz."

Bu eng tez va ko'pincha eng aniq usul - agar tarix yozib borilsa.

Baholar tarixini yuriting
Natija
Vazifa                  Baho    Haqiqiy   Nisbat
CSV eksport              3        5        1.7
Email xabarnoma          2        3        1.5
To'lov integratsiyasi    5       12        2.4
Qidiruv filtri           4        5        1.3
                                  O'rtacha: 1.7

Endi yangi bahoni 1.7 ga ko'paytiring. Bu shaxsiy "tuzatish koeffitsiyentingiz".

Uch oydan keyin bahoyingiz sezilarli aniqroq bo'ladi.

3. Dekompozitsiya #

Natija
"Buyurtma moduli" - 3 hafta?  (noaniq)

Bo'lamiz:
  Savat jadvali va model              4 soat
  Savatga qo'shish/o'chirish          6 soat
  Savat interfeysi                    8 soat
  Buyurtma yaratish mantiqi           8 soat
  To'lov provayderi integratsiyasi   16 soat
  Buyurtma holati va tarixi           6 soat
  Email xabarnomalar                  4 soat
  Admin panelida ko'rish              8 soat
  Testlar                            12 soat
  Hujjat                              4 soat
                                    -------
                                    76 soat  ≈  10 ish kuni
Har bir vazifa 8 soatdan oshmasin

Agar vazifa 8 soatdan katta bo'lsa - siz uni yetarli tushunmagansiz.

Uni yanada bo'ling. Bo'lish jarayonining o'zi noma'lum joylarni oshkor qiladi.

4. Vaqt qutisi #

Teskari yondashuv:

Natija
Oddiy:      "Bu ish qancha vaqt oladi?"  →  noaniq javob
Vaqt qutisi: "Bizda 5 kun bor. Shu vaqtda nima qila olamiz?"

Bu usul tadqiqot va noaniq ishlar uchun ideal:

Natija
Vazifa: yangi qidiruv kutubxonasini o'rganish
Vaqt qutisi: 2 kun

2 kundan keyin qaror:
  - Mos keladi     →  integratsiyani rejalashtiramiz
  - Mos kelmaydi   →  boshqa yechim qidiramiz
  - Noaniq         →  yana 2 kun yoki voz kechamiz

Bufer qo'shish #

Buferni qayerga qo'shish kerak? Yomon usul A: 3+1 kun B: 5+2 kun C: 4+1 kun Har bir vazifaga alohida bufer Parkinson qonuni: ish ajratilgan vaqtni to'ldiradi Yaxshi usul A: 3 kun B: 5 kun C: 4 kun +4 Umumiy bufer oxirida Faqat kerak bo'lganda ishlatiladi Nima uchun umumiy bufer yaxshiroq? Ba'zi vazifalar tez, ba'zilari sekin tugaydi - ular bir-birini qoplaydi Alohida buferlar esa har doim to'liq sarflanadi
Bufer loyiha darajasida saqlanishi kerak
Parkinson qonuni

"Ish uning uchun ajratilgan vaqtni to'ldirish uchun kengayadi."

3 kunlik ishga 5 kun bersangiz - u 5 kun oladi. Shuning uchun har bir vazifaga alohida bufer qo'shish ishlamaydi.

Loyiha turiTavsiya etilgan bufer
Tanish texnologiya, aniq talab15-20%
Odatiy loyiha25-30%
Yangi texnologiya40-50%
Tadqiqot xarakteridagi ish100%+ yoki vaqt qutisi

Xavflarni boshqarish #

Natija
Xavf reyestri

ID   Tavsif                          Ehtimol  Ta'sir  Ball  Chora
R1   To'lov API hujjati noto'g'ri      O'rta   Yuqori   6   Erta prototip qilish
R2   Asosiy dasturchi ta'tilga chiqadi Yuqori  O'rta    6   Bilimni hujjatlashtirish
R3   Talablar keskin o'zgaradi         O'rta   Yuqori   6   Qisqa iteratsiyalar
R4   Server yuklamaga chidamaydi       Past    Yuqori   3   Erta yuk testi
R5   Dizayn kech tayyor bo'ladi        Yuqori  Past     3   Vaqtinchalik shablon
Xavf matritsasi Ta'sir Ehtimol Kuzating Chora ko'ring DARHOL reja tuzing E'tiborsiz Kuzating Chora ko'ring E'tiborsiz E'tiborsiz Kuzating Yuqori O'rta Past Past O'rta Yuqori
Yuqori o'ng burchakdagi xavflar bilan darhol shug'ullaning
To'rt strategiya
StrategiyaMisol
QochishXavfli texnologiya o'rniga tanishini tanlash
KamaytirishErta prototip, qo'shimcha test
O'tkazishSug'urta, sub-pudratchi, bulut xizmati
Qabul qilish"Bo'lsa, shunda hal qilamiz" (past xavflar uchun)

Gantt diagrammasi #

Gantt: vazifalar va bog'liqliklar 1-hafta 2-hafta 3-hafta 4-hafta 5-hafta Talablar Arxitektura Baza Backend Frontend Testlash Reliz Kritik yo'l: talablar → arxitektura → backend → testlash
Kritik yo'ldagi kechikish butun loyihani kechiktiradi
Kritik yo'l

Loyihaning eng uzun bog'liq vazifalar zanjiri.

Undagi har bir kun kechikish - butun loyiha uchun bir kun kechikish. Undan tashqaridagi vazifalarda esa bo'sh vaqt (slack) bor.

Resurslarni birinchi navbatda kritik yo'lga yo'naltiring.

Progressni kuzatish #

Natija
Reja:    100 ball, 5 sprint, sprintiga 20 ball
Holat:   3-sprint tugadi

Sprint 1:  18 ball  (jami 18)
Sprint 2:  22 ball  (jami 40)
Sprint 3:  19 ball  (jami 59)

O'rtacha tezlik: 19.7
Qolgan:          41 ball
Kerakli sprint:  41 / 19.7 = 2.1  →  3 sprint

Bashorat: rejadagi 5 emas, 6 sprint kerak bo'ladi
Yomon xabarni erta ayting

Kechikish aniq bo'lganda darhol xabar bering.

"Oxirgi kunda aytish" - eng yomon variant. Erta aytilsa, chora ko'rish imkoni bo'ladi: doirani qisqartirish, resurs qo'shish, muddatni ko'chirish.

Kechikish odatda bir kunda emas, sekin-asta to'planadi.

Amaliy maslahatlar #

Baholashda
  1. Diapazon bering, bitta raqam emas: "5-8 kun"
  2. Farazlarni yozing: "agar API hujjati to'g'ri bo'lsa"
  3. Ishonch darajasini ayting: "80% ishonch bilan 8 kun"
  4. Vazifani bo'ling - katta baho har doim noto'g'ri
  5. Bahoni majburiyat bilan aralashtirmang
  6. Bosim ostida bahoni o'zgartirmang - doirani o'zgartiring
  7. Baholar tarixini yozib boring
Natija
YOMON:
"Bu 3 kun oladi."

YAXSHI:
"Agar to'lov API si hujjatga mos ishlasa - 3 kun.
 Muammo chiqsa - 6 kungacha cho'zilishi mumkin.
 Aniqroq aytish uchun bir kun tadqiqot kerak."
Baho va majburiyat farqi

Baho - texnik mutaxassisning professional fikri.

Majburiyat - biznes qarori.

Rahbar: "3 kunda qila olasizmi?" Dasturchi: "Bahom 6 kun. Agar 3 kun kerak bo'lsa, imkoniyatlarning yarmini olib tashlaymiz."

Bahoni bosim ostida o'zgartirish - loyihani muvaffaqiyatsizlikka yo'naltirish.

Amaliy topshiriq
  1. Oxirgi bajargan vazifangizni eslang: bahoyingiz va haqiqiy vaqt qanday farq qildi?
  2. "Blog tizimi" loyihasini 15 ta vazifaga bo'ling.
  3. Har biriga PERT usuli bilan uch nuqtali baho bering.
  4. Jami bahoni hisoblang va 25% bufer qo'shing.
  5. Loyiha uchun 6 ta xavf yozing va matritsaga joylang.
  6. Har bir yuqori xavf uchun chora yozing.
  7. Gantt diagrammasi tuzing va kritik yo'lni belgilang.
  8. Uchburchak cheklovlari asosida mijozga javob matnini yozing.
  9. Baholar tarixi jadvalini boshlang va bir oy yuriting.
  10. "Bu ish 2 kun oladi" degan bahoni to'g'ri shaklda qayta yozing.

Xulosa #

  • Dasturchilar baholari muntazam ravishda 1.5-2 barobar past chiqadi.
  • Asosiy sabab - ko'rinmaydigan ishlar: test, tekshiruv, hujjat, deploy.
  • Uchburchak cheklovlari: doira, vaqt, resurs - uchtasini bir vaqtda belgilab bo'lmaydi.
  • Bruks qonuni: kechikkan loyihaga odam qo'shish uni yanada kechiktiradi.
  • PERT uch nuqtali baho beradi va noaniqlikni ko'rsatadi.
  • Dekompozitsiya - eng ishonchli usul; vazifa 8 soatdan oshmasin.
  • Vaqt qutisi noaniq va tadqiqot ishlari uchun ideal.
  • Buferni loyiha darajasida saqlang, har vazifaga alohida emas.
  • Xavf reyestri yuriting va yuqori xavflar bilan darhol shug'ullaning.
  • Baho - texnik fikr, majburiyat - biznes qarori. Ularni aralashtirmang.
  • Yomon xabarni erta ayting.

Keyingi bo'limda dasturiy arxitektura bilan tanishamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.