Ders 02 / 11
Öneri ve Değerlendirme Süreci
Kararın verilme biçiminin ölçülmesi: aynı karar kümesi sözlü onayla ve yazılı öneri artı değerlendirme turuyla koşturulur, değerlendirmede yön değiştiren karar oranı, tur sayısı, karara katılan rol sayısı ve geçen süre sayılır, sürecin bıraktığı kayda bir soru kümesi uygulanarak yanıtın doğru, eksik ya da yanlış olduğu ayrılır ve yazılı sürecin yalnızca geciktirdiği kararlar ölçülür.
İçindekiler
Önceki ders kararların kayda geçirilmesini ölçtü ve dört kaydın “karar veren” alanında bir ekip adı bıraktı. O alan kararın kimden çıktığını söylüyor, nasıl çıktığını söylemiyor. Sözlü bir onayla geçen karar ile bütün ilgili rollere gönderilmiş yazılı öneri üzerinden geçen karar aynı kaydı üretir; ikisinin farkı kayıtta görünmez.
Bu dersin sorusu şudur: sürecin kendisi kararı değiştiriyor mu, değiştiriyorsa hangi bedelle. “Yazılı süreç iyidir” bir karar taşımaz. Aynı karar kümesi iki düzende koşturulur ve değerlendirmede yön değiştiren karar oranı, tur sayısı, katılan rol sayısı ve geçen süre sayılır.
Aynı Karar, Üç Süreç
Modelde sekiz karar vardır ve her kararın arkasında bir ya da iki bilgi parçası durur: sistemin bir yerini bilen birinin bildiği, ama öneriyi yazan kişinin bilmediği bir olgu. Her bilgi parçasının üç niteliği vardır: hangi rolde durduğu, kaçıncı değerlendirme turunda yüzeye çıktığı ve kararı çevirip çeviremeyeceği. Bu üçü modelin girdisidir (KK7); kurgu bir modeldir.
Süreçler bilgi parçalarına erişimle ayrılır. Sözlü onayda öneriyi veren ile onaylayan iki rol vardır, dolayısıyla yalnızca o ikisinin bildiği yüzeye çıkar. Yazılı öneri düzeninde öneri altı role gider. İkinci ayrım tur sayısındadır: bir düzende tur ancak karar değiştiğinde tekrarlanır, ötekinde en az iki tur koşulur. Süreler ve tur kuralları da modelin girdisidir (KK8).
// oneri/surec.mjs — ayni karar kumesi uc surecte: sozlu onay ve iki yazili oneri duzeni // Kararlar ve bilgi parcalari modelin girdisidir (KK7); kurgu bir modeldir. export const KARAR = [ { ad: "uye-verisi-saklama", bilgi: [ { rol: "isletme", tur: 1, cevirir: true, not: "yonetmelik iki yil sonra silmeyi gerektiriyor" }] }, { ad: "sube-raporlama", bilgi: [ { rol: "isletme", tur: 1, cevirir: false, not: "sube ay sonu raporunu gun icinde istiyor" }, { rol: "butce", tur: 2, cevirir: true, not: "merkezde raporlama ikinci sunucu gerektiriyor" }] }, { ad: "katalog-yukseltme", bilgi: [ { rol: "tumlestirme", tur: 1, cevirir: true, not: "yeni surum esleme katmanindaki dort alani kiriyor" }, { rol: "butce", tur: 1, cevirir: false, not: "yukseltme lisans farki gerektiriyor" }] }, { ad: "odunc-limiti", bilgi: [ { rol: "odunc", tur: 1, cevirir: false, not: "limit sube turune gore degisiyor" }] }, { ad: "arama-dizini", bilgi: [ { rol: "tumlestirme", tur: 2, cevirir: false, not: "dizin katalogla ayni veriyi tutuyor" }] }, { ad: "yedekleme-penceresi", bilgi: [ { rol: "oneren", tur: 1, cevirir: false, not: "pencere disinda yuk dusuyor" }] }, { ad: "kart-basimi", bilgi: [ { rol: "butce", tur: 1, cevirir: false, not: "dis basimda birim maliyet daha dusuk" }, { rol: "isletme", tur: 2, cevirir: true, not: "kart uye kaydiyla ayni gun basilmali" }] }, { ad: "bildirim-kanali", bilgi: [ { rol: "odunc", tur: 1, cevirir: true, not: "uyelerin ucte biri kanal secmis durumda" }] }, ]; // Sozlu onayda yalnizca toplantidaki iki rolun bildigi yuzeye cikar; yazili duzende // oneri butun rollere gider. Sureler ve tur kurallari modelin girdisidir (KK8). export const SUREC = { "sozlu-onay": { rol: ["oneren", "yonetici"], yazma: 0, kisiDk: 30, gun: 0, enAz: 1, enCok: 1 }, "yazili-tek-tur": { rol: ["oneren", "yonetici", "isletme", "odunc", "tumlestirme", "butce"], yazma: 60, kisiDk: 20, gun: 2, enAz: 1, enCok: 3 }, "yazili-iki-tur": { rol: ["oneren", "yonetici", "isletme", "odunc", "tumlestirme", "butce"], yazma: 60, kisiDk: 20, gun: 2, enAz: 2, enCok: 3 }, }; export function kostur(karar, surecAdi) { const s = SUREC[surecAdi]; const gorunen = []; let tur = 0, degisim = 0; while (tur < s.enCok) { tur += 1; const yeni = karar.bilgi.filter((b) => b.tur === tur && s.rol.includes(b.rol)); gorunen.push(...yeni); if (yeni.some((b) => b.cevirir)) { degisim += 1; continue; } if (tur >= s.enAz) break; } return { tur, degisim, kisiDk: s.yazma + tur * s.rol.length * s.kisiDk, gun: tur * s.gun, gorunen, kacan: karar.bilgi.filter((b) => !gorunen.includes(b)) }; } if (import.meta.url.endsWith(process.argv[1].split("/").pop())) { console.log(`${KARAR.length} karar, ${KARAR.flatMap((k) => k.bilgi).length} bilgi parcasi, ` + `bunlarin ${KARAR.flatMap((k) => k.bilgi).filter((b) => b.cevirir).length} tanesi karari cevirir`); for (const ad of Object.keys(SUREC)) { const r = KARAR.map((k) => kostur(k, ad)); const degisen = r.map((x, i) => x.degisim && KARAR[i].ad).filter(Boolean); const kacan = r.flatMap((x) => x.kacan); console.log(`\n[${ad}] ${SUREC[ad].rol.length} rol, tur ${SUREC[ad].enAz}-${SUREC[ad].enCok}`); console.log(` degisen karar ${degisen.length}/${KARAR.length}: ${degisen.join(", ") || "-"}`); console.log(` ortalama tur ${(r.reduce((t, x) => t + x.tur, 0) / r.length).toFixed(2)}, ` + `toplam ${r.reduce((t, x) => t + x.kisiDk, 0)} kisi-dk, ${r.reduce((t, x) => t + x.gun, 0)} gun`); console.log(` yuzeye cikmayan bilgi ${kacan.length}, karari cevirebilecek olan ` + `${kacan.filter((b) => b.cevirir).length}`); } }
8 karar, 11 bilgi parcasi, bunlarin 5 tanesi karari cevirir [sozlu-onay] 2 rol, tur 1-1 degisen karar 0/8: - ortalama tur 1.00, toplam 480 kisi-dk, 0 gun yuzeye cikmayan bilgi 10, karari cevirebilecek olan 5 [yazili-tek-tur] 6 rol, tur 1-3 degisen karar 3/8: uye-verisi-saklama, katalog-yukseltme, bildirim-kanali ortalama tur 1.38, toplam 1800 kisi-dk, 22 gun yuzeye cikmayan bilgi 3, karari cevirebilecek olan 2 [yazili-iki-tur] 6 rol, tur 2-3 degisen karar 5/8: uye-verisi-saklama, sube-raporlama, katalog-yukseltme, kart-basimi, bildirim-kanali ortalama tur 2.25, toplam 2640 kisi-dk, 36 gun yuzeye cikmayan bilgi 0, karari cevirebilecek olan 0
Sözlü onayda sekiz kararın hiçbiri yön değiştirmiyor. Bunun nedeni kararların doğru olması değil, kararı çevirebilecek beş bilginin de o odada bulunmamasıdır. Sözlü süreç on bilgi parçasını hiç görmüyor ve bunların beşi kararı çevirecek olanlardır. Sürecin ürettiği sonuç, katılan rollerin bildiğiyle sınırlıdır; sınırın nerede olduğu ise süreç bittikten sonra görünmez.
Yazılı öneri düzeni aynı kararlarda sekizin üçünü çeviriyor. Bu üç karar tesadüfen seçilmiş değildir: her birinde kararı çeviren bilgi, öneriyi yazan kişinin erişemeyeceği bir rolde duruyordu — yönetmelikte, eşleme katmanında, üye kayıtlarında. Yazılı sürecin yaptığı iş, bir kararı daha iyi düşünmek değil, kararı çevirebilecek bilginin bulunduğu rolü tartışmaya sokmaktır.
Tek turluk düzenin kaçırdığı iki bilgi ise ayrı bir bulgudur. sube-raporlama ve kart-basimi
kararlarında birinci turda çıkan bilgi kararı çevirmedi, dolayısıyla ikinci tur hiç açılmadı ve
ikinci turda çıkacak olan iki bilgi görülmedi. En az iki tur koşan düzen aynı kararlarda beş
karar çeviriyor ve kaçan bilgi sıfıra iniyor. Tur sayısı, bilginin yüzeye çıkmasını belirleyen
ayrı bir değişkendir: bir öneriyi bir kez okutmak, iki kez okutmakla aynı şey değildir.
Yanıt Yokluğu ve Yanlış Yanıt
Her süreç geriye bir kayıt bırakır ve altı ay sonra gelen biri o kayda soru sorar. Buradaki ölçü önceki dersinkinden bir adım ileri gider: bir soru yanıtsız kalabileceği gibi yanlış yanıtlanabilir de. Süreç bütün itirazları topladığını sanıyorsa “itiraz yoktu” der; oysa itiraz sorulmadığı için ortaya çıkmamıştır. Yanıtın hangi durumda sayılacağı modelin girdisidir (KK9): yüzeye çıkmayan bilgi varsa “itiraz var mıydı” sorusunun yanıtı yanlış, “hangi bilgi değerlendirildi” sorusunun yanıtı eksiktir.
// oneri/soru.mjs — soru kumesi uc surece uygulanir; yanit dogru, eksik ya da yanlis olabilir import { KARAR, SUREC, kostur } from "./surec.mjs"; // Yanitin durumunu belirleyen kural modelin girdisidir (KK9). const SORU = [ ["Y1", "kimler gordu", () => "dogru"], ["Y2", "itiraz var miydi", (r) => (r.kacan.length ? "yanlis" : "dogru")], ["Y3", "karar neden bu yonde", (r) => (r.kacan.some((b) => b.cevirir) ? "yanlis" : "dogru")], ["Y4", "hangi bilgi degerlendirildi", (r) => (r.kacan.length ? "eksik" : "dogru")], ["Y5", "kac turda kesinlesti", (r, s) => (s.yazma ? "dogru" : "eksik")], ]; const rapor = {}; for (const ad of Object.keys(SUREC)) { const say = { dogru: 0, eksik: 0, yanlis: 0 }; const soruDurum = {}; for (const k of KARAR) { const r = kostur(k, ad); for (const [kod, , kural] of SORU) { const d = kural(r, SUREC[ad]); say[d] += 1; soruDurum[kod] = (soruDurum[kod] ?? []).concat(d); } } const x = KARAR.map((k) => kostur(k, ad)); rapor[ad] = { say, soruDurum, kisiDk: x.reduce((t, y) => t + y.kisiDk, 0), gun: x.reduce((t, y) => t + y.gun, 0), degisen: x.filter((y) => y.degisim).length, bosKisiDk: x.filter((y) => !y.degisim).reduce((t, y) => t + y.kisiDk, 0), bosGun: x.filter((y) => !y.degisim).reduce((t, y) => t + y.gun, 0) }; } const N = KARAR.length * SORU.length; console.log(`soru kumesi ${SORU.length} soru x ${KARAR.length} karar = ${N} yanit`); for (const [ad, r] of Object.entries(rapor)) console.log(` ${ad.padEnd(15)} dogru ${String(r.say.dogru).padStart(2)} eksik ` + `${String(r.say.eksik).padStart(2)} yanlis ${String(r.say.yanlis).padStart(2)}`); console.log("\nsoru basina dogru olmayan yanit (y = yanlis, e = eksik):"); console.log(" ".repeat(32) + Object.keys(SUREC).map((a) => a.padStart(15)).join("")); for (const [kod, metin] of SORU) console.log(` ${kod} ${metin.padEnd(27)}` + Object.values(rapor).map((r) => { const y = r.soruDurum[kod].filter((d) => d === "yanlis").length; const e = r.soruDurum[kod].filter((d) => d === "eksik").length; return (y ? `${y}y` : e ? `${e}e` : "-").padStart(15); }).join("")); console.log("\nek maliyetin karsiligi:"); const ad = Object.keys(SUREC); for (let i = 1; i < ad.length; i++) { const a = rapor[ad[i - 1]], b = rapor[ad[i]]; const ekKarar = b.degisen - a.degisen; console.log(` ${ad[i - 1]} -> ${ad[i]}: +${b.kisiDk - a.kisiDk} kisi-dk, +${b.gun - a.gun} gun, ` + `+${ekKarar} karar -> ceviren karar basina ${((b.kisiDk - a.kisiDk) / ekKarar).toFixed(0)} kisi-dk`); } console.log("\nkarari degismeyen kararlara harcanan (saf gecikme):"); for (const [a, r] of Object.entries(rapor)) console.log(` ${a.padEnd(15)} ${KARAR.length - r.degisen} karar, ${r.bosKisiDk} kisi-dk, ${r.bosGun} gun`);
soru kumesi 5 soru x 8 karar = 40 yanit
sozlu-onay dogru 13 eksik 15 yanlis 12
yazili-tek-tur dogru 32 eksik 3 yanlis 5
yazili-iki-tur dogru 40 eksik 0 yanlis 0
soru basina dogru olmayan yanit (y = yanlis, e = eksik):
sozlu-onay yazili-tek-tur yazili-iki-tur
Y1 kimler gordu - - -
Y2 itiraz var miydi 7y 3y -
Y3 karar neden bu yonde 5y 2y -
Y4 hangi bilgi degerlendirildi 7e 3e -
Y5 kac turda kesinlesti 8e - -
ek maliyetin karsiligi:
sozlu-onay -> yazili-tek-tur: +1320 kisi-dk, +22 gun, +3 karar -> ceviren karar basina 440 kisi-dk
yazili-tek-tur -> yazili-iki-tur: +840 kisi-dk, +14 gun, +2 karar -> ceviren karar basina 420 kisi-dk
karari degismeyen kararlara harcanan (saf gecikme):
sozlu-onay 8 karar, 480 kisi-dk, 0 gun
yazili-tek-tur 5 karar, 900 kisi-dk, 10 gun
yazili-iki-tur 3 karar, 900 kisi-dk, 12 gun
Kırk yanıtın dağılımı üç süreçte 13, 32 ve 40 doğru veriyor. Ama asıl sayı doğruların değil, yanlışların sütunudur. Sözlü onay kırk sorunun on ikisine yanlış yanıt veriyor; on beş soruda ise hiç yanıt yok. Aradaki fark önemlidir: yanıtsız bir soru sorulmaya devam eder, yanlış yanıtlanmış bir soru kapanır. “Bu karara itiraz eden olmadı” cümlesi, itiraz sorulmadığı için doğru görünmektedir ve o cümle kayda geçtiğinde kimse bir daha sormaz.
Soru bazındaki tablo yanlışın nerede toplandığını gösteriyor. Y1 üç süreçte de doğru: kimin katıldığı her düzende bilinir, çünkü katılım sürecin kendisidir. Y2 ve Y3 ise yüzeye çıkmayan bilgiyle birlikte bozuluyor — sözlü onayda yedi ve beş, tek turlu yazılı düzende üç ve iki karar. Y4 ve Y5 yanlış değil eksik üretiyor: hangi bilginin değerlendirildiği ve kararın kaç turda kesinleştiği, kayıt tutulmadığında yanıtsız kalır ama uydurulmaz.
Ödenen Bedel ve Saf Gecikme
Yazılı sürecin bedeli çıktının son iki bölümündedir. Sözlü onaydan tek turlu yazılı düzene geçmek 1320 kişi-dakika ve 22 takvim günü ekliyor, karşılığında üç kararı çeviriyor: çevrilen karar başına 440 kişi-dakika. İkinci turu zorunlu kılmak 840 kişi-dakika ve 14 gün daha ekliyor ve iki karar daha çeviriyor: 420 kişi-dakika. İki geçişin birim maliyeti neredeyse aynı çıkıyor, yani ikinci tur birinciye göre azalan getirili değildir. Bu modelde tur sayısını artırmanın getirisi, rol sayısını artırmanınkiyle aynı düzeydedir.
Son tablo madalyonun öteki yüzüdür. Tek turlu düzende beş karar hiç yön değiştirmedi ve o beş karar 900 kişi-dakika ile 10 takvim günü yedi. İki turlu düzende üç karar değişmedi, yine 900 kişi-dakika ve 12 gün. Bu, sürecin geciktirdiği ama değiştirmediği kararların maliyetidir ve yazılı sürece yöneltilen itirazın ölçülmüş halidir. İtiraz haklıdır: harcanan zamanın önemli bir bölümü hiçbir kararı çevirmez.
İtirazın yanıtı ise şudur: hangi kararın çevrileceği ancak süreç koştuktan sonra bilinir.
bildirim-kanali kararı üç satırlık bir konu gibi görünüyordu ve çevrildi; arama-dizini kararı
tartışmalı görünüyordu ve iki turun sonunda aynı kaldı. Saf gecikme, hangi kararın çevrileceğini
önceden bilememenin bedelidir. Ölçülebilir olan da budur: gecikmenin sıfırlanması değil, çevrilen
karar başına düşen kişi-dakikanın bilinmesi.
Özet
- Sözlü onay sekiz kararın hiçbirini çevirmedi; nedeni kararların doğruluğu değil, kararı çevirebilecek beş bilginin ikişer kişilik odada bulunmamasıdır — on bilgi parçası hiç görülmedi.
- Yazılı öneri düzeni aynı kararların üçünü çevirdi; en az iki tur koşan düzen beşini çevirdi ve yüzeye çıkmayan bilgiyi sıfıra indirdi, yani tur sayısı rol sayısından bağımsız bir değişkendir.
- Soru kümesinde doğru yanıt 13, 32 ve 40 çıktı; asıl ayrım yanlış yanıttadır: sözlü onay on iki soruya yanlış, on beş soruya eksik yanıt verdi ve yanlış yanıt soruyu kapatır.
- Yanlış yanıtlar “itiraz var mıydı” ile “karar neden bu yönde” sorularında toplandı; kayıt tutulmayan alanlar yanlış değil eksik üretti.
- Ek maliyetin karşılığı iki geçişte de aynı düzeydedir: çevrilen karar başına 440 ve 420 kişi-dakika; buna karşılık tek turlu düzende beş karar 900 kişi-dakika ve 10 günü hiç yön değiştirmeden harcadı.
Sonraki Adım
Değerlendirme turu bir kararı çevirdiğinde geriye “değişti” bilgisi kalıyor, ama neyin neye tercih
edildiği kalmıyor. katalog-yukseltme kararı eşleme katmanındaki dört alan yüzünden çevrildi;
kayıtta bu, tek satırlık bir gerekçedir. Oysa o kararın arkasında birden çok alternatif, birden çok
nitelik ve her alternatifin her nitelikteki durumu vardı. Önceki kursta bu tablonun nasıl
kurulacağı ve ağırlıkların kazananı nasıl belirlediği ölçüldü. Açıkta kalan şey tablonun kendisinin
kayda geçip geçmediğidir: üçüncü bir kişi, kayıttaki tabloya bakarak aynı sonuca varabiliyor mu.
Sonraki ders bunu ölçer.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.