Ders 09 / 11
Paydaş Yönetimi
Teknik olmayan muhatapla iletişimin bir paydaş modelinde ölçülmesi: aynı kararın teknik terimli anlatımı 27 soru ve 8 tur, sonuç odaklı anlatımı 0 soru ve 3 tur üretirken altı kısıttan dördünü eleyip dört sürprize dönüştürüyor, kısıtları düz dille geri koyan üçüncü anlatım dört ifade karşılığında toplam turu 3'e indiriyor.
İçindekiler
Önceki ders kararı bir nesneye çevirdi ve geri döndürülebilirliğine göre sınıflandırdı: hangi kararın hangi yöntemle verileceği belli oldu. Bir şey belli olmadı. Kararı onaylayacak olan, kararı veren değil. Bölgesel kütüphane ağının modelinde ödünç servisinin veri akışını değiştirmek bütçeye dokunur, şube personelinin işini değiştirir ve dışarıdan alınmış katalog sisteminin sözleşmesini ilgilendirir. Bu üç kapıyı da teknik olmayan biri tutar.
Bu ders “mimar iletişim kurmalıdır” demez. İletişimi bir veri yapısına çevirir: paydaş bir sözlük ile bir ilgi kümesidir, anlatım bir ifade dizisidir. Aynı karar iki ayrı anlatımla aynı modelde koşturulur ve iki sayı sayılır: karar başına yanıtlanan soru ve onay için gereken tur. Üçüncü bir sayı da sayılır, çünkü sonuç odaklı anlatımın ucuz görünmesinin bir nedeni vardır: anlatımın elediği kısıt sayısı.
Paydaş Bir Sözlük ve Bir İlgi Kümesidir
Paydaş (stakeholder), kararın sonucunu üstlenen ama kararı vermeyen taraftır. Modelde üç paydaş vardır ve hiçbiri gerçek bir kurumdan alınmamıştır: bütçe sorumlusu, hizmet sorumlusu, satın alma sorumlusu. Her birinin bildiği terimler kümesi ve onay için karşılanması gereken konuları vardır.
MP10: bir paydaş, ilgi kümesindeki her konu karşılandığında ve açık sorusu kalmadığında onay verir. İki koşuldan biri eksikse onay gelmez; toplantı bir tur daha sürer.
MP11: bilinmeyen terim içeren bir ifade o turda anlaşılmaz. Konusunu karşılamaz, kısıtını taşımaz; yerine terim başına bir soru üretir. Sorunun yanıtı terimi kalıcı olarak sözlüğe ekler, yani aynı terim ikinci kez sorulmaz.
MP12: taşınmayan her kısıt, o kısıttan etkilenen paydaşta sonradan bir sürpriz üretir ve sürpriz bir tur daha maliyet yazar. Kısıt taşınmışsa olay gerçekleştiğinde kimse şaşırmaz.
// paydas/model.mjs — teknik olmayan muhatapla iletisim modeli. Gercek kurum ve kisi yoktur; // paydas bir sozluk ile bir ilgi kumesidir, anlatim bir ifade dizisidir. Sure olculmez; // yanitlanan soru, tur ve tasinan kisit sayilir. // Kararin tasidigi kisitlar. Bir anlatim bunlarin hepsini tasimak zorunda degildir; tasimadigi // her kisit sonradan bir surpriz adayidir. export const KISITLAR = { K1: "gece raporu on bes dakika gec uretilir", K2: "sube personeli bir kez egitim alir", K3: "eski kayitlar iki hafta cift yazilir", K4: "karar bir hafta icinde geri alinabilir", K5: "dis katalog saglayicisiyla sozlesme degismez", K6: "tepe saatte birikme olursa teslim gecikir", }; // Kurum dilinde herkesin bildigi terimler. Teknik terimler bu kumede yoktur. const ORTAK = ["sube", "personel", "sure", "maliyet", "risk", "rapor", "okuyucu", "hizmet kesintisi", "egitim", "sozlesme", "saglayici"]; export const PAYDASLAR = [ { ad: "butce sorumlusu", ilgi: ["maliyet", "geri donus"], sozluk: [...ORTAK, "butce"] }, { ad: "hizmet sorumlusu", ilgi: ["hizmet kesintisi", "egitim"], sozluk: [...ORTAK, "raf"] }, { ad: "satin alma sorumlusu", ilgi: ["sozlesme", "maliyet"], sozluk: [...ORTAK, "ihale"] }, ]; // Mimarin, karsilanmayan bir ilgi kaldiginda ekledigi ifade. Duz dille yazilir. export const EK_IFADE = { "maliyet": { terimler: ["maliyet", "personel"], ilgi: ["maliyet"], kisit: [] }, "geri donus": { terimler: ["sure", "risk"], ilgi: ["geri donus"], kisit: ["K4"] }, "hizmet kesintisi": { terimler: ["hizmet kesintisi"], ilgi: ["hizmet kesintisi"], kisit: [] }, "egitim": { terimler: ["personel", "sube"], ilgi: ["egitim"], kisit: ["K2"] }, "sozlesme": { terimler: ["sozlesme", "saglayici"], ilgi: ["sozlesme"], kisit: ["K5"] }, }; // MP10 + MP11: tek paydas, tek anlatim. Bilinmeyen terim soruya donusur; yanit sozluge eklenir. export function toplanti(paydas, anlatim, enCokTur = 12) { const sozluk = new Set(paydas.sozluk); const karsilanan = new Set(), tasinan = new Set(), ek = []; let soru = 0, tur = 0; while (tur < enCokTur) { tur += 1; let turSorusu = 0; for (const f of [...anlatim, ...ek]) { const bilinmeyen = f.terimler.filter((t) => !sozluk.has(t)); if (bilinmeyen.length > 0) { turSorusu += bilinmeyen.length; for (const t of bilinmeyen) sozluk.add(t); continue; } for (const i of f.ilgi) karsilanan.add(i); for (const k of f.kisit) tasinan.add(k); } soru += turSorusu; const eksik = paydas.ilgi.filter((i) => !karsilanan.has(i)); if (turSorusu === 0 && eksik.length === 0) return { tur, soru, tasinan, ek: ek.length }; if (turSorusu === 0) ek.push(EK_IFADE[eksik[0]]); } return { tur, soru, tasinan, ek: ek.length, onaysiz: true }; } // MP12: kisiti bilmeyen paydasin sonradan sasiracagi olaylar: kisit -> etkilenen paydas. export const OLAYLAR = { K1: "butce sorumlusu", K2: "hizmet sorumlusu", K3: "butce sorumlusu", K4: "butce sorumlusu", K5: "satin alma sorumlusu", K6: "hizmet sorumlusu", }; // Bir anlatimin uc paydas uzerindeki toplami. Paydaslar ayri ayri bilgilendirilir. export function anlatimiKostur(anlatim, ekSozluk = []) { const tasinanPaydas = new Map(); let soru = 0, tur = 0, ek = 0; for (const p of PAYDASLAR) { const r = toplanti({ ...p, sozluk: [...p.sozluk, ...ekSozluk] }, anlatim); soru += r.soru; tur += r.tur; ek += r.ek; tasinanPaydas.set(p.ad, r.tasinan); } const surpriz = Object.entries(OLAYLAR) .filter(([k, ad]) => !tasinanPaydas.get(ad).has(k)).map(([k]) => k); const birlesik = new Set([...tasinanPaydas.values()].flatMap((s) => [...s])); const atlanan = Object.keys(KISITLAR).filter((k) => !birlesik.has(k)); return { ifade: anlatim.length, soru, tur, ek, atlanan, surpriz, toplamTur: tur + surpriz.length }; }
Aynı Kararın Üç Anlatımı
Karar tektir: ödünç kayıtlarının gece toplu aktarımdan sürekli akışa çevrilmesi. Anlatım A kararın teknik gerekçesini olduğu gibi aktarır ve altı kısıtın hepsini taşır. Anlatım B aynı kararı sonuç diliyle anlatır. Anlatım C, B’nin dilini korur ve B’nin elediği kısıtları düz cümlelerle geri koyar.
// paydas/anlatim.mjs — ayni kararin uc anlatimi ayni paydas modelinde kosturulur import { KISITLAR, PAYDASLAR, anlatimiKostur, toplanti } from "./model.mjs"; // A: teknik terimli anlatim. Alti kisitin hepsini tasir, maliyeti hic anmaz. const A = [ { terimler: ["olay akisi", "kuyruk", "geri baski"], ilgi: ["hizmet kesintisi"], kisit: ["K6"] }, { terimler: ["cift yazim", "gecis penceresi", "rapor"], ilgi: [], kisit: ["K1", "K3"] }, { terimler: ["surum sabitleme", "risk", "sure"], ilgi: ["geri donus"], kisit: ["K4"] }, { terimler: ["uc nokta", "sema", "sozlesme", "saglayici"], ilgi: ["sozlesme"], kisit: ["K5"] }, { terimler: ["istemci arayuzu", "personel", "sube"], ilgi: ["egitim"], kisit: ["K2"] }, ]; // B: sonuc odakli anlatim. Her ilgiyi karsilar, terimleri kurum dilindedir, kisitlari eler. const B = [ { terimler: ["okuyucu", "sure", "hizmet kesintisi"], ilgi: ["hizmet kesintisi"], kisit: ["K6"] }, { terimler: ["maliyet", "personel"], ilgi: ["maliyet"], kisit: [] }, { terimler: ["sure", "risk"], ilgi: ["geri donus"], kisit: ["K4"] }, { terimler: ["sube", "personel", "egitim"], ilgi: ["egitim"], kisit: [] }, { terimler: ["sozlesme", "saglayici"], ilgi: ["sozlesme"], kisit: [] }, ]; // C: sonuc odakli anlatim + elenen kisitlarin duz dille geri konmasi. const C = [...B, { terimler: ["rapor", "sure"], ilgi: [], kisit: ["K1"] }, { terimler: ["sube", "personel", "egitim"], ilgi: [], kisit: ["K2"] }, { terimler: ["sure", "risk", "maliyet"], ilgi: [], kisit: ["K3"] }, { terimler: ["sozlesme", "saglayici"], ilgi: [], kisit: ["K5"] }, ]; console.log(`paydas ${PAYDASLAR.length}, kisit ${Object.keys(KISITLAR).length}, karar 1\n`); console.log("anlatim ifade yanitlanan soru onay turu ek ifade tasinan kisit surpriz toplam tur"); console.log("------- ------ ---------------- ---------- --------- -------------- -------- -----------"); const sonuc = {}; for (const [ad, anlatim] of [["A", A], ["B", B], ["C", C]]) { const r = sonuc[ad] = anlatimiKostur(anlatim); console.log(`${ad.padStart(7)} ${String(r.ifade).padStart(6)} ${String(r.soru).padStart(16)} ` + `${String(r.tur).padStart(10)} ${String(r.ek).padStart(9)} ` + `${`${6 - r.atlanan.length}/6`.padStart(14)} ${String(r.surpriz.length).padStart(8)} ` + `${String(r.toplamTur).padStart(11)}`); } console.log(`\nB'nin atladigi kisit: ${sonuc.B.atlanan.join(", ")}`); console.log(`B'de surprize donusen kisit: ${sonuc.B.surpriz.join(", ")}`); console.log(`A'nin atladigi kisit: ${sonuc.A.atlanan.length === 0 ? "yok" : sonuc.A.atlanan.join(", ")}`); console.log(`C'nin atladigi kisit: ${sonuc.C.atlanan.length === 0 ? "yok" : sonuc.C.atlanan.join(", ")}`); console.log(`\npaydas basina (anlatim A):`); console.log("paydas soru tur ek ifade"); for (const p of PAYDASLAR) { const r = toplanti(p, A); console.log(`${p.ad.padEnd(20)} ${String(r.soru).padStart(5)} ${String(r.tur).padStart(4)} ` + `${String(r.ek).padStart(9)}`); } console.log(`\nA'nin bedeli dinleyene baglidir (paydas sozlugune teknik terim eklenir):`); console.log("eklenen terim yanitlanan soru onay turu"); const teknik = ["olay akisi", "kuyruk", "geri baski", "cift yazim", "gecis penceresi", "surum sabitleme", "uc nokta", "sema", "istemci arayuzu"]; for (const n of [0, 3, 6, 9]) { const r = anlatimiKostur(A, teknik.slice(0, n)); console.log(`${String(n).padStart(13)} ${String(r.soru).padStart(16)} ${String(r.tur).padStart(10)}`); }
paydas 3, kisit 6, karar 1
anlatim ifade yanitlanan soru onay turu ek ifade tasinan kisit surpriz toplam tur
------- ------ ---------------- ---------- --------- -------------- -------- -----------
A 5 27 8 2 6/6 0 8
B 5 0 3 0 2/6 4 7
C 9 0 3 0 6/6 0 3
B'nin atladigi kisit: K1, K2, K3, K5
B'de surprize donusen kisit: K1, K2, K3, K5
A'nin atladigi kisit: yok
C'nin atladigi kisit: yok
paydas basina (anlatim A):
paydas soru tur ek ifade
butce sorumlusu 9 3 1
hizmet sorumlusu 9 2 0
satin alma sorumlusu 9 3 1
A'nin bedeli dinleyene baglidir (paydas sozlugune teknik terim eklenir):
eklenen terim yanitlanan soru onay turu
0 27 8
3 18 8
6 9 8
9 0 5
Bütün sayılar hesap sınıfındadır: belirlenimli bir model üzerinde sayılmışlardır.
Sadeleştirmenin Bedeli
Teknik anlatım tek bir karar için 27 soru ürettiriyor ve üç paydaşın onayı 8 turda geliyor. Sonuç odaklı anlatım aynı kararı 0 soru ve 3 turda onaylatıyor. Bu tabloda durulsaydı sonuç açık olurdu: sonuç dili turu üçte birine indiriyor.
Kısıt sütunu bu sonucu bozuyor. Anlatım B altı kısıttan ikisini taşıyor; K1, K2, K3 ve K5 anlatımın dışında kalıyor. Bunlar süs değil: gece raporunun on beş dakika geç üretilmesi, personelin bir kez eğitim alması, eski kayıtların iki hafta çift yazılması ve sözleşmenin değişmemesi. Dördü de kararın gerçek sonuçlarıdır ve dördü de zamanı gelince kendini gösterir. Modelde bu, 4 sürpriz olarak sayılıyor ve her sürpriz bir tur daha yazıyor: B’nin toplamı 3 değil 7.
Buradaki asıl sayı, sonuç odaklı anlatımın toplam kazancının 8 turdan 7 tura, yani tek bir tur olmasıdır. Sadeleştirme, konuşmanın maliyetini önden düşürüp arkadan geri yüklüyor. Anlatım B yanlış bir anlatım değil; eksik bir anlatım ve eksikliği ölçülebiliyor.
Anlatım C bunun düzeltilebilir olduğunu gösteriyor. B’nin dilini hiç bozmadan, elenen dört kısıtı yine kurum diliyle yazılmış dört cümleye koyuyor. Bedeli 5 ifade yerine 9 ifade, yani dört cümle daha yazmak. Kazancı: 0 soru, 0 sürpriz, toplam 3 tur. Aynı karar A’ya göre turların yaklaşık üçte birinde, B’ye göre yarısından azında onaylanıyor. Kısıt taşımanın bedeli yazmakla ödeniyor, toplantıyla değil.
Terim Uyuşmazlığı ve İlgi Uyuşmazlığı
Son tablo, teknik anlatımın 27 sorusunun kararın bir özelliği olmadığını gösteriyor. Paydaşların sözlüğüne dokuz teknik terim eklendikçe soru sayısı 27’den 18’e, 9’a ve 0’a iniyor. Aynı karar, aynı cümlelerle, teknik terimleri bilen bir muhataba anlatıldığında hiç soru üretmiyor. Anlatımın bedeli dinleyenin sözlüğüne bağlıdır.
Aynı tablonun ikinci sütunu bunun sınırını çiziyor. Soru sayısı sıfıra inerken onay turu 8’den yalnız 5‘e iniyor, 3’e değil. Sebep anlatım A’nın hiçbir ifadesinde maliyetten söz edilmemesi: bütçe sorumlusu ile satın alma sorumlusunun ilgi kümesinde maliyet var ve terim öğretmek bu boşluğu kapatmıyor. Model bunu 2 ek ifade olarak yazıyor — mimarın toplantıda sonradan söylemek zorunda kaldığı iki cümle.
Bu iki başarısızlık ayrı ayrı ele alınır. Terim uyuşmazlığı çeviriyle çözülür: aynı içerik, muhatabın sözlüğündeki sözcüklerle. İlgi uyuşmazlığı çeviriyle çözülmez; anlatıma o konuyu karşılayan yeni bir ifade eklemek gerekir. Bir anlatımın kusursuz sadeleştirilmiş olması, paydaşın sorusunu yanıtladığı anlamına gelmez.
Bunun bir sonucu da şudur: paydaş başına soru sayıları eşit (9, 9, 9) ama tur sayıları eşit değil (3, 2, 3). Hizmet sorumlusu iki turda onay veriyor, çünkü ilgi kümesinin ikisi de anlatımın içinde. Fark terimlerden değil, kimin neyi sorduğundan geliyor.
Özet
- Paydaş bir sözlük ve bir ilgi kümesi olarak modellenir; onay, açık soru kalmadığında ve her ilgi karşılandığında gelir (MP10, MP11). Bu model üç paydaş, altı kısıt ve tek bir karar üzerinde koşturuldu.
- Teknik terimli anlatım karar başına 27 soru ve 8 tur; sonuç odaklı anlatım 0 soru ve 3 tur üretti. Tek başına bu karşılaştırma sonuç dilini üçte bir maliyetle gösteriyor.
- Sonuç odaklı anlatım altı kısıttan dördünü eledi (K1, K2, K3, K5) ve dördü de sürprize dönüştü; toplam turu 3 değil 7 oldu. Gerçek kazanç 8 tura karşı 7 tur, yani tek bir turdur.
- Kısıtları düz dille geri koyan anlatım dört ifade daha yazma karşılığında 0 soru, 0 sürpriz ve 3 tur verdi: sadeleştirmenin kaybı, dil bozulmadan geri alınabilir.
- Teknik anlatımın 27 sorusu dinleyenin sözlüğüne bağlıdır ve dokuz terim öğretildiğinde 0’a iner; ama tur sayısı 8’den yalnız 5’e iner. Terim uyuşmazlığı çeviriyle, ilgi uyuşmazlığı yeni ifadeyle çözülür.
Sonraki Adım
Bu ders kararın anlatımını ölçtü; kararın içeriğini sabit tuttu. Onaylanan karar bir akış değişikliğiydi ve arkasında bir seçim vardı: o akışı hangi araç taşıyacak. Modelde bu seçim henüz yapılmadı. Sıradaki ders adayları önüne koyar ve şu soruyu sorar: bir aracın olgunluğu ve çevresindeki ekosistem nasıl bir sayıya çevrilir, ve seçim yanlış çıkarsa o araçtan çıkmanın maliyeti kaç modüle, kaç kayda ve kaç satıra karşılık gelir?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.