---
title: 'Öneri ve Değerlendirme Süreci'
source: 'https://academia.sh/tr/kurslar/mimari-dokumantasyon/oneri-ve-degerlendirme-sureci'
course: 'Mimari Karar ve Dokümantasyon'
language: tr
updated: '2026-08-17T18:10:33+00:00'
license: 'CC BY-SA 4.0'
---

# Ö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.

Ö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**).

```js
// 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.

```js
// 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.
