---
title: 'Değer Akışı'
source: 'https://academia.sh/tr/kurslar/devops-temelleri/deger-akisi'
course: 'DevOps Kültürü ve Temelleri'
language: tr
updated: '2026-08-17T18:09:05+00:00'
license: 'CC BY-SA 4.0'
---

# Değer Akışı

Fikirden üretime giden yolun haritalanması: dokuz adımlı akışta 20 iş kaleminin ortalama 182,0 adımlık öncü süresinin 70,2 adımının işlem ve 111,8 adımının bekleme olması (katma değerli pay %38,5), toplam 2237 adım beklemenin 1485'inin tek bir adımda — yayın penceresinde — durması, yayın penceresi 20 adımken hiçbir tek adım iyileştirmesinin öncü süreyi 2 adımdan fazla kısaltmaması, pencere 5 adıma indirildiğinde aynı iyileştirmelerin ayrışıp yazma 10'dan 5'e inince 32 adım kazandırması ama kabul onayı 2'den 1'e inince 4 adım kaybettirmesi, ve darboğazın yayın penceresinden yazmaya, oradan tümleşik sınamaya kayması.

Önceki ders aynı yolu iki düzende koşturdu ve sınırda düşen bağlamı saydı, ama yolun kendisini
sabit tuttu: yedi adım, sabit süreler. Bir değişikliğin fikirden üretime giden yolunda asıl soru
kaç adım olduğu değil, o adımların hangisinde ne kadar **durulduğu**dur.

**Değer akışı haritası**, bu yoldaki her adımı üç sayıyla yazan çizelgedir: işlem süresi, bekleme
süresi ve ilk seferde doğru oranı. M20/K05'in `iş kalemi` ile aynı nesneyi ölçer, ölçeği farklıdır
— orada ölçülen bir iş kaleminin ekipler arası yoluydu, burada ölçülen bir değişikliğin fikirden
üretime giden yoludur.

## Haritanın Kurulması

Örnek yine kurgu **bölgesel ölçüm ağı**dır; ağ da akış da kurgudur. **KA13:** yol dokuz adımdır —
talep sıraya alma, çözümleme, yazma, gözden geçirme, tümleşik sınama, kabul onayı, yayın penceresi,
üretim kurulumu, üretim doğrulaması. **KA14:** her adımın eş zamanlı yürütücü sayısı, işlem süresi
ve ilk seferde doğru oranı vardır; ilk seferde doğru çıkmayan kalem adımın dönüş hedefine geri
gider ve o adımdan itibaren yeniden yürür. **KA15:** yirmi iş kalemi on ikişer adım arayla akışa
girer. **Bekleme bir girdi değildir, ölçülür:** yürütücü doluysa kuyrukta, yayın penceresi
kapalıysa pencerede birikir. **KA16:** yayın penceresi yirmi adımda bir açılır. **KA17:**
rastgelelik üreteçle yazılır, tohum 20260801'dir; her kaleme kendi zar dizisi verilir, böylece bir
adımın süresi değiştiğinde kalemin şansı değişmez ve koşumlar karşılaştırılabilir kalır. **KA18:**
öncü süre akışa girişten üretim doğrulamasının bitişine kadar geçen adımdır; katma değerli süre
kalemin adımlarda geçirdiği işlem süresinin toplamıdır.

Harita ve akış süreç içi bir **modeldir**; gerçek bir akış kaydı ya da yayın çizelgesi yoktur.

```js
// akis/harita.mjs — fikirden uretime deger akisi haritasi (model): gercek bir akis kaydi yok,
// adimlar veri yapisidir. Rastgelelik uretecle yazilir, tohum gorunur.

export const N = 20, VARIS = 12, LIMIT = 4000, PENCERE = 20, TOHUM = 20260801;

// adim: ad, es zamanli yurutucu, islem suresi, ilk seferde dogru orani, donus hedefi
export const ADIM = [
  ["talep-siraya-alma", 1, 1, 1.00, 0], ["cozumleme", 1, 4, 0.85, 0],
  ["yazma", 2, 10, 0.80, 1], ["gozden-gecirme", 1, 3, 0.75, 2],
  ["tumlesik-sinama", 1, 8, 0.70, 2], ["kabul-onayi", 1, 2, 0.90, 1],
  ["yayin-penceresi", 1, 1, 1.00, 0], ["uretim-kurulumu", 1, 3, 0.95, 2],
  ["uretim-dogrulama", 1, 2, 0.90, 2],
].map(([ad, kap, islem, isd, donus], i) => ({ ad, kap, islem, isd, donus, i }));

// dogrusal eslesmeli uretec: her kaleme kendi zar dizisi verilir, boylece bir adimin suresi
// degistiginde kalemin sansi degismez ve kosumlar karsilastirilabilir kalir.
export function uretec(tohum) {
  let x = tohum >>> 0;
  return () => ((x = (x * 1664525 + 1013904223) >>> 0) / 2 ** 32);
}

export function kos({ islem = {}, pencere = PENCERE } = {}) {
  const adim = ADIM.map((a) => ({ ...a, islem: islem[a.ad] ?? a.islem }));
  const zar = uretec(TOHUM);
  const K = Array.from({ length: N }, (_, i) => ({ i, varis: i * VARIS, adim: 0,
    hazir: i * VARIS, kosuyor: false, kalan: 0, bitti: false, bitis: null, isToplam: 0,
    bekleme: 0, yenidenIs: 0, hata: false, hataAt: null, kurtarma: null,
    zar: Array.from({ length: 80 }, zar), zarNo: 0 }));
  const mesgul = adim.map(() => 0);
  const S = { bekleme: adim.map(() => 0), islem: adim.map(() => 0), ziyaret: adim.map(() => 0),
    donus: adim.map(() => 0), dagitim: 0 };

  const bitir = (d, t) => {
    const a = adim[d.adim];
    mesgul[a.i]--; d.kosuyor = false;
    if (a.isd < 1 && d.zar[d.zarNo++] >= a.isd) {        // ilk seferde dogru degil
      S.donus[a.i]++; d.yenidenIs++;
      if (a.ad === "uretim-dogrulama" && !d.hata) { d.hata = true; d.hataAt = t; }
      d.adim = a.donus; d.hazir = t; return;
    }
    if (a.ad === "uretim-kurulumu") S.dagitim++;
    if (a.i === adim.length - 1) {
      d.bitti = true; d.bitis = t;
      if (d.hata) d.kurtarma = t - d.hataAt;
      return;
    }
    d.adim = a.i + 1; d.hazir = t;
  };

  for (let t = 0; t < LIMIT; t++) {
    for (const a of adim) {
      if (a.ad === "yayin-penceresi" && t % pencere !== 0) continue;   // toplu yayin penceresi
      const kuyruk = K.filter((d) => !d.bitti && !d.kosuyor && d.adim === a.i && d.hazir <= t)
        .sort((x, y) => x.hazir - y.hazir || x.i - y.i);
      for (const d of kuyruk) {
        if (mesgul[a.i] >= a.kap) break;
        S.bekleme[a.i] += t - d.hazir; d.bekleme += t - d.hazir;
        S.islem[a.i] += a.islem; S.ziyaret[a.i]++; d.isToplam += a.islem;
        d.kosuyor = true; d.kalan = a.islem; mesgul[a.i]++;
      }
    }
    for (const d of K) if (d.kosuyor && --d.kalan === 0) bitir(d, t + 1);
  }
  return { K, S, adim };
}

export const ort = (a) => (a.length ? (a.reduce((s, v) => s + v, 0) / a.length).toFixed(1) : "-");

export function olc(ayar) {
  const { K, S, adim } = kos(ayar);
  const oncu = K.map((d) => d.bitis - d.varis);
  const pencere = Math.max(...K.map((d) => d.bitis));
  const kd = K.reduce((s, d) => s + d.isToplam, 0), top = oncu.reduce((s, v) => s + v, 0);
  return { K, S, adim,
    onculSure: ort(oncu), katmaDeger: (100 * kd / top).toFixed(1) + "%",
    enUzunBekleme: adim[S.bekleme.indexOf(Math.max(...S.bekleme))].ad,
    ilkSefer: (100 * K.filter((d) => d.yenidenIs === 0).length / N).toFixed(0) + "%",
    yenidenIs: K.reduce((s, d) => s + d.yenidenIs, 0),
    dagitimSikligi: (100 * S.dagitim / pencere).toFixed(1),
    geriDonusOrani: (100 * K.filter((d) => d.hata).length / N).toFixed(0) + "%",
    kurtarma: ort(K.filter((d) => d.hata).map((d) => d.kurtarma)),
    bitmeyen: K.filter((d) => !d.bitti).length };
}
```

```js
// akis/olc.mjs — haritanin okunmasi: katma deger payi, en uzun bekleme, tek adim iyilestirmesi.
import { ADIM, N, PENCERE, TOHUM, olc, ort } from "./harita.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const T = olc({}), P = olc({ pencere: 5 });

console.log(`${N} is kalemi, ${ADIM.length} adim, yayin penceresi ${PENCERE} adim, ` +
  `tohum ${TOHUM}; bitmeyen ${T.bitmeyen}`);

const A = [-19, 6, 7, 14, 9, 11, 7, 10];
console.log("\n1. deger akisi haritasi (olculen)");
yaz(A, "adim", "yurutucu", "islem", "ort. bekleme", "ziyaret", "ilk sefer", "donus",
  "bekleme");
for (const a of T.adim) {
  const z = T.S.ziyaret[a.i];
  yaz(A, a.ad, a.kap, a.islem, (T.S.bekleme[a.i] / z).toFixed(1), z,
    a.isd < 1 ? `${(100 * (1 - T.S.donus[a.i] / z)).toFixed(0)}%` : "-", T.S.donus[a.i],
    T.S.bekleme[a.i]);
}

const B = [-34, 16];
console.log("\n2. haritanin toplami (taban)");
for (const [ad, v] of [["ort. oncu sure (adim)", T.onculSure],
  ["kalem basina islem (adim)", ort(T.K.map((d) => d.isToplam))],
  ["kalem basina bekleme (adim)", ort(T.K.map((d) => d.bekleme))],
  ["katma degerli payi", T.katmaDeger], ["en uzun beklemenin durdugu adim", T.enUzunBekleme],
  ["hic yeniden ise donmeyen kalem", T.ilkSefer], ["toplam yeniden is (donus)", T.yenidenIs]])
  yaz(B, ad, v);

const C = [-19, 11, 12, 10, 12, 10];
console.log("\n3. tek adimin islem suresi yariya inerse (iki pencere ayarinda)");
yaz(C, "iyilestirilen", "islem", "pencere 20", "degisim", "pencere 5", "degisim");
yaz(C, "(taban)", "-", T.onculSure, "-", P.onculSure, "-");
for (const a of ADIM.filter((a) => a.islem >= 2)) {
  const y = Math.floor(a.islem / 2), i = { [a.ad]: y };
  const R = olc({ islem: i }), Q = olc({ islem: i, pencere: 5 });
  yaz(C, a.ad, `${a.islem} -> ${y}`, R.onculSure, (R.onculSure - T.onculSure).toFixed(1),
    Q.onculSure, (Q.onculSure - P.onculSure).toFixed(1));
}

const D = [-30, 10, 9, 11, 10, 12];
const K = { "taban (pencere 20)": T, "darbogaz: yazma 10->5": olc({ islem: { yazma: 5 } }),
  "darbogaz disi: cozumleme 4->2": olc({ islem: { cozumleme: 2 } }),
  "pencere 20->5": P,
  "pencere 5 + yazma 10->5": olc({ pencere: 5, islem: { yazma: 5 } }) };
console.log("\n4. dort teslimat olcutu ve katma deger payi");
yaz(D, "kosum", "oncu sure", "dagitim", "geri donus", "kurtarma", "katma deger");
for (const [ad, R] of Object.entries(K))
  yaz(D, ad, R.onculSure, R.dagitimSikligi, R.geriDonusOrani, R.kurtarma, R.katmaDeger);

const E = [-30, 16, 16];
console.log("\n5. beklemenin nerede durdugu");
yaz(E, "kosum", "en uzun bekleme", "toplam bekleme");
for (const [ad, R] of Object.entries(K))
  yaz(E, ad, R.enUzunBekleme, R.S.bekleme.reduce((s, v) => s + v, 0));
```

```
20 is kalemi, 9 adim, yayin penceresi 20 adim, tohum 20260801; bitmeyen 0

1. deger akisi haritasi (olculen)
adim               yurutucu  islem  ort. bekleme  ziyaret  ilk sefer  donus   bekleme
talep-siraya-alma       1      1           0.0       28          -      0         0
cozumleme               1      4           1.0       48        83%      8        50
yazma                   2     10           8.6       61        70%     18       524
gozden-gecirme          1      3           0.0       43        74%     11         0
tumlesik-sinama         1      8           5.6       32        78%      7       178
kabul-onayi             1      2           0.0       25        92%      2         0
yayin-penceresi         1      1          64.6       23          -      0      1485
uretim-kurulumu         1      3           0.0       23       100%      0         0
uretim-dogrulama        1      2           0.0       23        87%      3         0

2. haritanin toplami (taban)
ort. oncu sure (adim)                        182.0
kalem basina islem (adim)                     70.2
kalem basina bekleme (adim)                  111.8
katma degerli payi                           38.5%
en uzun beklemenin durdugu adim    yayin-penceresi
hic yeniden ise donmeyen kalem                 20%
toplam yeniden is (donus)                       49

3. tek adimin islem suresi yariya inerse (iki pencere ayarinda)
iyilestirilen            islem  pencere 20   degisim   pencere 5   degisim
(taban)                      -       182.0         -       118.0         -
cozumleme               4 -> 2       182.0       0.0       114.0      -4.0
yazma                  10 -> 5       180.0      -2.0        86.0     -32.0
gozden-gecirme          3 -> 1       182.0       0.0       115.5      -2.5
tumlesik-sinama         8 -> 4       180.0      -2.0       106.0     -12.0
kabul-onayi             2 -> 1       182.0       0.0       122.0       4.0
uretim-kurulumu         3 -> 1       180.0      -2.0       117.0      -1.0
uretim-dogrulama        2 -> 1       181.0      -1.0       118.0       0.0

4. dort teslimat olcutu ve katma deger payi
kosum                          oncu sure  dagitim geri donus  kurtarma katma deger
taban (pencere 20)                 182.0      4.5        15%     213.3       38.5%
darbogaz: yazma 10->5              180.0      4.5        15%     213.3       30.5%
darbogaz disi: cozumleme 4->2      182.0      4.5        15%     220.0       35.9%
pencere 20->5                      118.0      6.0        15%     130.0       59.4%
pencere 5 + yazma 10->5             86.0      6.7        15%      73.3       63.8%

5. beklemenin nerede durdugu
kosum                          en uzun bekleme  toplam bekleme
taban (pencere 20)             yayin-penceresi            2237
darbogaz: yazma 10->5          yayin-penceresi            2502
darbogaz disi: cozumleme 4->2  yayin-penceresi            2333
pencere 20->5                            yazma             957
pencere 5 + yazma 10->5        tumlesik-sinama             622
```

Sayılar **ölçüm** sınıfındadır; girdileri yukarıdaki varsayımlardır. Model katma değerliyi
"işlem" olarak tanımlar ve yeniden iş de işlem sayılır; bu yüzden %38,5 bir tavan değeridir.

## Öncü Sürenin İçinde Ne Var

Ortalama öncü süre 182,0 adımdır: 70,2 adım işlem, 111,8 adım bekleme. Katma değerli pay %38,5'tir
— bir kalem yolun üçte ikisini durarak geçirir. Yığılmış ilk seferde doğru oranı daha çarpıcıdır:
yirmi kalemin yalnız dördü, yani **%20'si**, hiç geri dönmeden akışı geçer. Kalan on altı kalem
toplam 49 dönüş üretir.

Birinci tablo bu 49 dönüşü adıma dağıtır: yazma 18, gözden geçirme 11, çözümleme 8, tümleşik sınama
7, üretim doğrulaması 3, kabul onayı 2. Ziyaret sayıları bunun sonucudur — yirmi kalem yazma
adımını 61 kez ziyaret eder.

Beklemenin dağılımı ise düz değildir. Dokuz adımın beşinde bekleme sıfırdır. Toplam 2237 adım
beklemenin **1485'i tek bir adımda durur: yayın penceresi.** Ziyaret başına 64,6 adım. İkinci en
büyük yığılma yazma adımındadır (524 adım, ziyaret başına 8,6). **Beklemenin durduğu yer ile işin
yapıldığı yer aynı değildir.**

## Bir Adımı İyileştirmek Neden Görünmüyor

Üçüncü tablo her adımın işlem süresini yarıya indirip toplam öncü süredeki değişimi ölçer. Yayın
penceresi 20 adımken sonuç tektir: **hiçbir iyileştirme 2 adımdan fazla kazandırmaz.** Çözümlemeyi
4'ten 2'ye indirmek 0,0 adım, yazmayı 10'dan 5'e indirmek 2,0 adım kazandırır. On adımlık bir işi
yarıya bölmek 182 adımlık öncü sürenin yüzde birini bile değiştirmez, çünkü kazanılan süre yayın
penceresinde geri beklenir.

Pencere 5 adıma indirildiğinde aynı iyileştirmeler ayrışır. Yazma 10'dan 5'e inince öncü süre 32,0
adım kısalır; tümleşik sınama 8'den 4'e inince 12,0; çözümleme 4'ten 2'ye inince yalnız 4,0. Kabul
onayını 2'den 1'e indirmek ise öncü süreyi **4,0 adım uzatır** — kalemler darboğaza daha sık ve
daha kümelenmiş varır. **Darboğaz dışındaki iyileştirme yalnız görünmez değildir; işaret bile
değiştirebilir.**

## Darboğaz Kayar

Beşinci tablo en uzun beklemenin nerede durduğunu koşum koşum izler. Tabanda yayın penceresidir.
Pencere 5'e indirilince yazmaya geçer (toplam bekleme 2237'den 957'ye iner). Yazma da yarıya
indirilince tümleşik sınamaya geçer (622). Üç koşumda üç ayrı adım.

Dördüncü tablo bunun teslimat karşılığını verir. Geri dönüş oranı beş koşumun beşinde de %15'tir;
ilk seferde doğru oranları değişmediği için bu ölçüt hiç oynamaz. Dağıtım sıklığı 4,5'ten 6,0'a,
oradan 6,7'ye çıkar; kurtarma süresi 213,3'ten 130,0'a, oradan 73,3 adıma iner; katma değerli pay
%38,5'ten %59,4'e, oradan %63,8'e yükselir. Buna karşılık **yalnız darboğazı iyileştiren koşumda
katma değerli pay %38,5'ten %30,5'e düşer:** işlem süresi kısalmış, bekleme yerinde kalmıştır.

## Farkın Saklandığı Yer

Bu derste fark **beklemenin dağılımında** saklıdır ve sayısı şudur: dokuz adımın beşinde bekleme
sıfır, birinde toplamın %66'sı. Bildirilmiş kısım işlem süreleridir — haritaya bakan herkes yazmanın
10, tümleşik sınamanın 8 adım sürdüğünü okur. Bildirilmemiş kısım beklemedir; girdi değildir,
ancak koşumda doğar ve iyileştirme kararını o belirler.

Sinyalin kime kaç adımda ulaştığı da dönüş hedeflerinden okunur. Tümleşik sınamada bulunan sapma
yazma adımına iki adım geriden döner ve 7 dönüş buradan gelir. Aynı sınıftan bir sapma üretim
doğrulamasında bulunursa yazmaya altı adım geriden döner; bu 3 kalemin kurtarma süresi 213,3
adımdır. **Sinyal aynıdır; pahalı olan, geri dönüş yolunun uzunluğudur.**

## Özet

- Dokuz adımlık akışta ortalama öncü süre 182,0 adımdır: 70,2 adım işlem, 111,8 adım bekleme; katma
  değerli pay %38,5 (yeniden iş de işlem sayıldığı için bu bir tavan değeridir).
- Yirmi kalemin yalnız %20'si hiç geri dönmeden geçer; 49 dönüşün 18'i yazma, 11'i gözden geçirme,
  8'i çözümleme adımından çıkar.
- Toplam 2237 adım beklemenin 1485'i tek bir adımda durur (yayın penceresi, ziyaret başına 64,6);
  dokuz adımın beşinde bekleme sıfırdır.
- Yayın penceresi 20 adımken hiçbir tek adım iyileştirmesi öncü süreyi 2 adımdan fazla kısaltmaz;
  pencere 5'e indirildiğinde yazma 32,0 adım kazandırır, kabul onayı ise 4,0 adım kaybettirir.
- Darboğaz üç koşumda üç ayrı adıma kayar; dağıtım sıklığı 4,5 → 6,0 → 6,7 ve kurtarma süresi
  213,3 → 130,0 → 73,3 adım olurken geri dönüş oranı beş koşumda da %15'te kalır.

## Sonraki Adım

Bu ders dört ölçütü birer sonuç olarak okudu: harita değişti, ölçütler onu izledi. Oysa ölçütlerin
kendisi bir kümedir ve birbirini oynatır. Sonraki ders dört teslimat ölçütünü — dağıtım sıklığı,
öncü süre, geri dönüş oranı, kurtarma süresi — **bağlı bir küme** olarak koşturur: parti
büyüklüğünü küçültmenin, kapı eklemenin ve otomatik geri almanın her dördünde ölçülen değişimi
yazılır ve bir ölçütü iyileştirip ötekini bozan kararlar adıyla gösterilir.
