İçeriğe geç
academia.sh

Ders 02 / 19

Sistem İhtiyacının Gerekçelendirilmesi

Sistemli ve sistemsiz gidişatın saat cinsinden karşılaştırılması, başabaş ekran sayısının hesaplanması, girdilere duyarlılık, ekip sayısının sapmaya etkisi ve tek bir kararın sisteme girme eşiği.

İçindekiler

Önceki ders bir bileşen kütüphanesinin arayüz kararlarının yalnız dörtte birini kapsadığını ölçtü. Kapsanmayan üç çeyreğin varlığı bir boşluğu gösterir; boşluğu doldurmanın karlı olduğunu göstermez. Sistem kurmak bedava değildir: belirteç katmanının tanımlanması, bileşenlerin yazılması, belgenin sürdürülmesi ve mevcut ekranların geçirilmesi ölçülebilir bir emek ister.

Bu ders o emeği, karşılığında kurtarılan emekle aynı birimde karşılaştırır. Sorulan soru “tutarlılık iyi midir” değildir; tutarlılığın iyi olduğu Yinelenme ve Tutarlılık dersinde zaten gösterildi. Sorulan soru şudur: kaç ekrandan sonra sistem kendini öder, hangi girdi bu noktayı en çok oynatır ve hangi koşullarda sistem kurmamak doğru karardır.

İki Gidişat, Tek Birim

Karşılaştırma için iki gidişat aynı birimde yazılır. Sistemsiz gidişatta her yeni ekran, sistemde karşılığı olmayan kararları sıfırdan verir; ayrıca zamanla bir tutarsızlık borcu birikir, çünkü aynı karar farklı ekranlarda farklı yanıtlanır ve bu sapmaların sonradan bulunup birleştirilmesi gerekir. Sistemli gidişatta bir kurulum maliyeti peşin ödenir; sonrasında kararların çoğuna başvurulur, küçük bir bölümü gerçekten yeni olur ve her ekran sisteme bir bakım payı bindirir.

Girdiler bir kurumun kendi ölçümünden gelir. Aşağıdaki sayılar bu katalog kurumunun ölçümüdür; başka bir kurumda başka sayılar çıkar. Taşınabilir olan hesabın kendisidir.

// gerekce.mjs — sistemli ve sistemsiz gidisatin maliyet karsilastirmasi ve basabas noktasi

// Girdiler saat cinsindendir ve bu kurumun kendi olcumunden gelir; baska bir kurumda
// baska sayilar cikar. Hesabin kendisi tasinabilir, sayilar degildir.
const G = {
  kararYeni: 0.7,      // bir karari sifirdan vermenin maliyeti (secenek uretme + gozden gecirme + uygulama)
  kararBasvuru: 0.1,   // var olan bir karara basvurmanin maliyeti
  ekranBasinaKarar: 18, // Tasarim Sistemi Nedir dersinde: 24 karardan 18'i deger/kalip/kural katmaninda
  yeniKararOrani: 0.15, // sistemli gidisatta bile her ekranda gercekten yeni olan karar orani
  kurulum: 90,         // belirtec katmani + bilesen + belge + dagitim
  bakimOrani: 0.08,    // her ekran icin sisteme geri besleme bakim maliyeti (saat)
  sapmaOlasiligi: 0.2, // bir karar, yeni bir ekranda bagimsiz olarak yeniden verilirse sapma olasiligi
  sapmaDuzeltme: 1.5,  // sapmis bir degerin sonradan bulunup birlestirilmesi (arama + degisiklik + sinama)
};

function sistemsiz(ekran, g = G) {
  const karar = ekran * g.ekranBasinaKarar * g.kararYeni;
  // Her karar icin beklenen ayri deger sayisi: ilk ekran 1, sonraki her ekran p olasilikla yeni deger.
  const ayriDeger = 1 + (ekran - 1) * g.sapmaOlasiligi;
  const borc = g.ekranBasinaKarar * (ayriDeger - 1) * g.sapmaDuzeltme;
  return { karar, borc, toplam: karar + borc, ayriDeger };
}

function sistemli(ekran, g = G) {
  const yeni = ekran * g.ekranBasinaKarar * g.yeniKararOrani * g.kararYeni;
  const basvuru = ekran * g.ekranBasinaKarar * (1 - g.yeniKararOrani) * g.kararBasvuru;
  const bakim = ekran * g.bakimOrani * g.ekranBasinaKarar;
  return { kurulum: g.kurulum, yeni, basvuru, bakim, toplam: g.kurulum + yeni + basvuru + bakim };
}

console.log("ekran  sistemsiz karar  tutarsizlik borcu  sistemsiz toplam  sistemli toplam  fark");
for (const e of [1, 2, 3, 5, 8, 10, 15, 20, 30, 50]) {
  const a = sistemsiz(e);
  const b = sistemli(e);
  console.log(
    `${String(e).padStart(5)} ${a.karar.toFixed(1).padStart(16)} ${a.borc.toFixed(1).padStart(18)} ` +
      `${a.toplam.toFixed(1).padStart(17)} ${b.toplam.toFixed(1).padStart(16)} ${(a.toplam - b.toplam).toFixed(1).padStart(8)}`
  );
}

function basabas(g = G) {
  for (let e = 1; e <= 2000; e++) {
    if (sistemsiz(e, g).toplam >= sistemli(e, g).toplam) return e;
  }
  return null;
}
console.log(`\nbasabas ekran sayisi (temel girdilerle): ${basabas()}`);

// Duyarlilik: hangi girdi basabas noktasini ne kadar oynatiyor?
console.log("\ngirdi                  deger  basabas ekran");
const denemeler = [
  ["kurulum", [45, 90, 180, 360]],
  ["sapmaOlasiligi", [0.05, 0.1, 0.2, 0.4]],
  ["ekranBasinaKarar", [6, 12, 18, 30]],
  ["kararYeni", [0.35, 0.7, 1.4]],
];
for (const [anahtar, degerler] of denemeler) {
  for (const d of degerler) {
    const g = { ...G, [anahtar]: d };
    console.log(`${anahtar.padEnd(20)} ${String(d).padStart(6)} ${String(basabas(g)).padStart(14)}`);
  }
}

// Ekip sayisinin sapma olasiligina etkisi: her ek ekip bagimsiz bir yorum kaynagidir.
// q, tek bir ekibin bir karari farkli yorumlama olasiligi.
const q = 0.08;
console.log("\nekip  sapma olasiligi  basabas ekran  20 ekranda beklenen ayri deger");
for (const n of [1, 2, 3, 4, 6, 8]) {
  const p = 1 - Math.pow(1 - q, n);
  const g = { ...G, sapmaOlasiligi: p };
  const ayri = 1 + (20 - 1) * p;
  console.log(
    `${String(n).padStart(4)} ${p.toFixed(3).padStart(16)} ${String(basabas(g)).padStart(14)} ${ayri.toFixed(2).padStart(31)}`
  );
}

// Tek bir kararin sisteme girmesi ne zaman karli? u kez kullanilan bir karar icin:
//   sistemsiz = u * kararYeni,  sistemli = tanim + u * kararBasvuru
const TANIM = 1.5; // bir karari adlandirma, belgeleme ve yayinlama maliyeti
console.log("\nkullanim  sistemsiz  sistemli  karli mi");
for (const u of [1, 2, 3, 4, 6, 10]) {
  const a = u * G.kararYeni;
  const b = TANIM + u * G.kararBasvuru;
  console.log(`${String(u).padStart(8)} ${a.toFixed(2).padStart(10)} ${b.toFixed(2).padStart(9)}  ${a >= b ? "evet" : "hayir"}`);
}
console.log(`esik kullanim sayisi: ${(TANIM / (G.kararYeni - G.kararBasvuru)).toFixed(2)} -> ${Math.ceil(TANIM / (G.kararYeni - G.kararBasvuru))} kez`);

// Geriye donuk duzeltme: sistem gec kuruldugunda birikmis borc ne kadar?
console.log("\nsistemin kuruldugu ekran  o ana kadar birikmis borc (saat)  borcu kapatma / kurulum orani");
for (const e of [1, 5, 10, 20, 40]) {
  const borc = sistemsiz(e).borc;
  console.log(`${String(e).padStart(24)} ${borc.toFixed(1).padStart(32)} ${(borc / G.kurulum).toFixed(2).padStart(29)}`);
}
ekran  sistemsiz karar  tutarsizlik borcu  sistemsiz toplam  sistemli toplam  fark
    1             12.6                0.0              12.6             94.9    -82.3
    2             25.2                5.4              30.6             99.7    -69.1
    3             37.8               10.8              48.6            104.6    -56.0
    5             63.0               21.6              84.6            114.3    -29.7
    8            100.8               37.8             138.6            128.9      9.7
   10            126.0               48.6             174.6            138.6     36.0
   15            189.0               75.6             264.6            162.9    101.7
   20            252.0              102.6             354.6            187.2    167.4
   30            378.0              156.6             534.6            235.8    298.8
   50            630.0              264.6             894.6            333.0    561.6

basabas ekran sayisi (temel girdilerle): 8

girdi                  deger  basabas ekran
kurulum                  45              4
kurulum                  90              8
kurulum                 180             15
kurulum                 360             28
sapmaOlasiligi         0.05             11
sapmaOlasiligi          0.1              9
sapmaOlasiligi          0.2              8
sapmaOlasiligi          0.4              6
ekranBasinaKarar          6             21
ekranBasinaKarar         12             11
ekranBasinaKarar         18              8
ekranBasinaKarar         30              5
kararYeni              0.35             13
kararYeni               0.7              8
kararYeni               1.4              5

ekip  sapma olasiligi  basabas ekran  20 ekranda beklenen ayri deger
   1            0.080             10                            2.52
   2            0.154              8                            3.92
   3            0.221              7                            5.20
   4            0.284              7                            6.39
   6            0.394              6                            8.48
   8            0.487              5                           10.25

kullanim  sistemsiz  sistemli  karli mi
       1       0.70      1.60  hayir
       2       1.40      1.70  hayir
       3       2.10      1.80  evet
       4       2.80      1.90  evet
       6       4.20      2.10  evet
      10       7.00      2.50  evet
esik kullanim sayisi: 2.50 -> 3 kez

sistemin kuruldugu ekran  o ana kadar birikmis borc (saat)  borcu kapatma / kurulum orani
                       1                              0.0                          0.00
                       5                             21.6                          0.24
                      10                             48.6                          0.54
                      20                            102.6                          1.14
                      40                            210.6                          2.34

Başabaş Sekizinci Ekranda

Birinci tablo iki eğriyi yan yana koyuyor. Sistemli gidişat ilk ekranda 94.9 saatle başlıyor; sistemsiz gidişat 12.6 saatte bitiriyor. Beşinci ekranda fark hâlâ sistemsizin lehine: 84.6 karşı 114.3. Sekizinci ekranda işaret dönüyor ve yirminci ekrana gelindiğinde sistemli gidişat 167.4 saat önde.

Farkın kaynağı eğimlerdir. Sistemsiz gidişatın ekran başına maliyeti 12.6 saat karar artı büyüyen bir borç; sistemli gidişatın ekran başına maliyeti 4.9 saat. Kurulum maliyeti tek seferliktir ve sabit kalır, dolayısıyla ekran sayısı büyüdükçe payı küçülür.

Tutarsızlık borcu sütunu ayrıca okunmalıdır. Elli ekranda borç 264.6 saate ulaşıyor; bu, sistemli gidişatın toplam maliyetinin (333.0) dörtte üçüne yakın. Borç kalemi görünmez olduğu için genellikle hesaba katılmaz: kimse “bu hafta 3 saat tutarsızlık düzelttim” diye kayıt tutmaz. Görünmemesi yok olduğu anlamına gelmez.

Karar Kurulum Maliyetine En Duyarlıdır

İkinci tablo hangi girdinin sonucu ne kadar oynattığını gösteriyor ve tartışmanın nereye odaklanması gerektiğini söylüyor.

Kurulum maliyeti en belirleyici girdi: 45 saatten 360 saate çıkıldığında başabaş noktası 4’ten 28 ekrana taşınıyor, yani sekiz katlık bir girdi değişimi yedi katlık bir sonuç değişimi üretiyor. Bu, sistemin kapsamının en önemli karar olduğu anlamına gelir. Küçük kurulan bir sistem erken öder; her şeyi kapsamaya çalışan bir sistem, ödemeye başlamadan önce terk edilir.

Ekran başına karar sayısı ikinci sırada: 6 karardan 30 karara çıkıldığında başabaş 21’den 5’e iniyor. Bu sayı arayüzün karmaşıklığıdır ve seçilmez, ölçülür. Az kararlı bir arayüz — tek bir okuma ekranı, tek bir form — sistemden az yararlanır.

Sapma olasılığı beklenenden az duyarlı çıkıyor: 0.05’ten 0.40’a, yani sekiz katına çıkarıldığında başabaş yalnız 11’den 6’ya iniyor. Tutarsızlık korkusu bir sistemi gerekçelendirmenin en zayıf yoludur; asıl gerekçe tekrar eden karar hacmidir.

Ekip Sayısı Sapmayı Çarpar

Üçüncü tablo tek bir girdiyi ayrı ele alıyor: ekip sayısı. Her ek ekip bağımsız bir yorum kaynağıdır. Tek bir ekibin bir kararı farklı yorumlama olasılığı yüzde 8 alındığında, sekiz ekipte toplam sapma olasılığı yüzde 48.7’ye çıkıyor.

Son sütun bunun somut karşılığını veriyor: tek bir karar — diyelim kart iç boşluğu — yirmi ekranda tek ekiple ortalama 2.52 ayrı değere, sekiz ekiple 10.25 ayrı değere dağılıyor. Bir kurumda “kart iç boşluğu” diye bir şey yoktur artık; on ayrı kart iç boşluğu vardır ve hiçbiri diğerinden haberdar değildir.

Buradaki kural şudur: sistem, ekip sınırlarını aşan kararlar için kurulur. Tek ekibin tek üründe verdiği kararlar için sistemin sağladığı fayda, ekibin kendi belleğiyle zaten sağlanır. Sistemin asıl işi bellek değil, ortak bellektir.

Her Karar Sisteme Girmez

Dördüncü tablo kapsamı karara bağlayan aritmetiği veriyor. Bir kararı adlandırmak, belgelemek ve yayımlamak 1.5 saat tutuyor; her kullanımda 0.1 saat başvuru maliyeti kalıyor. Sistemsiz durumda her kullanım 0.7 saat.

Eşik kullanım sayısı, tanım maliyetinin kullanım başına tasarrufa bölümüdür: 1.5 / (0.7 − 0.1) = 2.5, yani üç kez. İki kez kullanılan bir karar sisteme alındığında zarar ettirir; üç kez kullanıldığında ödemeye başlar.

Bu, önceki dersteki kapsam ilkesini bir sayıya bağlar. Bir ekranda bir kez geçen bir düzen sisteme girmez. Sisteme giren şey, üç ayrı yerde aynı biçimde sorulan sorudur. Kural aynı zamanda bir sabır talebi taşır: bir karar ilk kez verildiğinde sisteme alınmaz, üçüncü kez karşılaşıldığında alınır. Erken soyutlama, henüz doğrulanmamış bir kararı dondurmak demektir.

Geç Kurulan Sistem Borcu Devralır

Son tablo zamanlama sorusunu yanıtlıyor. Sistem kırkıncı ekranda kurulduğunda, o ana kadar birikmiş tutarsızlık borcu 210.6 saat: kurulum maliyetinin 2.34 katı. Bu borç sistem kurulunca kendiliğinden silinmez; her sapmış değerin bulunması, hangisinin doğru olduğuna karar verilmesi ve değiştirilmesi gerekir.

Yirminci ekranda oran 1.14, onuncu ekranda 0.54. Eğri doğrusal büyüdüğü için geciktirmenin bedeli de doğrusaldır; ancak borcun kapatılması kurulumdan farklı olarak paralel yapılamaz, çünkü her sapmanın hangi bağlamda oluştuğunun anlaşılması gerekir.

Buradan sistemin gerekçelendirilemediği durumlar da okunur. Ekran sayısı başabaş noktasının altında kalacak bir ürün, tek ekipli ve kısa ömürlü bir çalışma, ya da kararların henüz doğrulanmadığı bir keşif aşaması: bu üç durumda sistem kurmak, karşılığı alınmayan bir maliyettir. Böyle bir durumda doğru karar sistem kurmamak değil, sistemi ertelemek ve envanteri tutmaktır — hangi kararın kaç kez tekrarlandığını kaydetmek, üçüncü tekrar geldiğinde adlandırmayı ucuza yapar.

Özet

  • Sistem kararı bir maliyet karşılaştırmasıdır: kurulum ve bakım bir yanda, yeniden karar verme ve tutarsızlık borcu diğer yanda; ikisi de saat cinsinden yazılabilir.
  • Ölçülen girdilerle başabaş noktası sekizinci ekrandır; ondan önce sistemsiz gidişat, ondan sonra sistemli gidişat ucuzdur.
  • Başabaş noktası en çok kurulum maliyetine duyarlıdır; bu, kapsamın en önemli karar olduğunu ve dar kurulan bir sistemin erken ödediğini gösterir.
  • Sapma olasılığı beklenenden az duyarlıdır; sistemi gerekçelendiren şey tutarsızlık korkusu değil tekrar eden karar hacmidir.
  • Ekip sayısı sapmayı çarpar: aynı karar sekiz ekipte yirmi ekranda ortalama 10.25 ayrı değere dağılır; sistem ekip sınırlarını aşan kararlar için kurulur.
  • Bir karar, tanım maliyetinin kullanım başına tasarrufa bölümü kadar — burada üç kez — kullanıldığında sisteme girmeye hak kazanır; geciktirilen kurulum birikmiş borcu devralır.

Sonraki Adım

Hesap sistemin kurulması gerektiğini söylediğinde ilk iş kapsamı belirlemektir ve kapsam tahminle çizilemez. Hangi kararın kaç kez tekrarlandığı, hangi değerin kaç ayrı biçimde kullanıldığı ve bu değerlerin kaçının gerçekten ayrı bir karar olduğu ancak var olan arayüz sayılarak bilinir. Sonraki ders bu sayımı yapar: katalog ürünlerinin biçem kaynağından renk, aralık, yazı boyutu ve köşe yarıçapı değerlerini çıkarır, yakın-yinelemeleri eşiklerle kümeleyerek gerçek karar sayısını bulur ve envanterin hangi bölümünün karşılıksız çeşitlilik olduğunu gösterir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat