İçeriğe geç
academia.sh

Ders 04 / 12

Standart ve Özerklik Dengesi

Zorunluluk ile seçim özgürlüğünün birlikte ölçülmesi: on kalemin her biri zorunlu, öntanımlı ve serbest kiplerde işletilir, doğan ayrı seçim sayısı ile ortak aracın işe yaradığı kalem sayısı yan yana sayılır, zorunluluğun kaç ekipte meşru bir gereksinimi engellediği çıkarılır ve korkuluk ile duvarın farkı iş günü cinsinden gösterilir.

İçindekiler

Önceki ders altın yolu bir kapsam olarak yazdı ve kapsamın iki yüzünü saydı: içeride kalanın kazancı, dışarıda kalanın kaybı. Tablonun tamamında ekiplerin gereksinimleri sabit tutuldu ve yol onlara uyduğu kadar uydu. Söylenmeyen soru şuydu: yola girmek zorunlu muydu?

Zorunluluk ile seçim özgürlüğü aynı eksende iki uçtur ve ikisinin de kendi ölçüsü vardır. Zorunluluk uyum üretir: aynı kalemde tek bir seçim varsa o kalem için tek bir ortak araç yazmak yeter. Özgürlük çeşitlilik üretir: her ekip kendi işine uygun olanı seçer, ama ortak araç seçenek sayısı arttıkça işe yaramaz hâle gelir. Bu ders ikisini aynı tabloda sayar ve zorunluluğun iki ayrı biçimini ayırır. Through-line bölgesel ölçüm ağı ve onun beş ekibidir; ağ da ekipler de kurgudur.

Üç Kip ve On Kalem

PY19 — on kalemin her biri üç kipten birinde işletilir: zorunlu, öntanımlı ama değiştirilebilir, serbest. Her kalemin bir ortak araç değeri vardır: o kalem bütün kuruluşta tek seçenekte durursa yılda kazanılan iş günü. PY20 — her ekibin kalem başına tercihi ve tercihin gerekçesi yazılır; gerekçe ya işin gerektirdiği bir meşru gereksinimdir ya da ekibin alışkanlığıdır. Gerekçe: zorunluluk ikisini de engeller, ama bedelleri aynı değildir ve ayrılmadan ölçülemez.

PY21 — bir kalemde doğan ayrı seçim sayısı çeşitliliktir; ortak araç seçim sayısı bir ise değerinin tamamını, iki ise yarısını, üç ve üstünde hiç vermez. Serbest kipte platform hiçbir seçenek önermez ve tercihi olmayan ekipler de kendi seçimlerini kurar. Gerekçe: öntanımlı bir seçenek yoksa ekiplerin aynı noktada buluşması için sebep yoktur.

PY22 — zorunluluk iki biçimde işletilir. Duvar hiçbir istisnaya izin vermez; korkuluk meşru gerekçeyle istisna verir, alışkanlığa vermez. Gerekçe: pratikte “zorunlu” tek bir şey değildir ve ikisinin farkı ancak engellenen meşru gereksinim sayısıyla görünür.

// kip.mjs — her kalem uc kipte islenir: zorunlu, ontanimli, serbest (model)
import { writeFileSync } from "node:fs";

// PY19 — on kalemin her biri uc kipten birinde isletilir. Her kalemin bir "ortak arac degeri"
// vardir: butun kuruluşta o kalem tek secenekte durursa yilda kazanilan is gunu.
// PY20 — her ekibin kalem basina tercihi bir dizede yazilir: "-" ontanimliyi kabul eder,
// "2m" iki numarali secenegi mesru bir gereksinim icin, "3a" uc numarali secenegi aliskanlik
// icin ister. Ekip sirasi: sayac okuma, dogrulama, faturalama, saha, raporlama. Kurgudur.
const EKIP = ["sayac okuma", "dogrulama", "faturalama", "saha", "raporlama"];
const KALEM = [
  ["gunluk bicimi", 14, "- - - - -"],
  ["gosterge adlandirmasi", 12, "- - 2a - -"],
  ["taban imge", 11, "- - - 2m -"],
  ["gizli deger deposu", 10, "2m - - - -"],
  ["dagitim adimi sirasi", 8, "- 2a - 3m -"],
  ["sinama esigi", 7, "- 2m - - 3a"],
  ["dil surumu", 6, "- - 2m - -"],
  ["ag kurali bicimi", 5, "2m - - 2m -"],
  ["veri deposu surumu", 4, "2m 3a - 4m -"],
  ["yedek araligi", 3, "- - 2m 3a 4a"],
].map(([ad, ortak, dize]) => ({ ad, ortak, tercih: dize.split(" ").map((s) =>
  s === "-" ? null : { secenek: parseInt(s, 10), mesru: s.endsWith("m") }) }));

// PY21 — bir kalemde dogan ayri secim sayisi cesitliliktir; ortak arac secim sayisi 1 ise
// degerinin tamamini, 2 ise yarisini (asagi yuvarlanarak) verir, 3 ve ustunde hic vermez.
// Serbest kipte platform hicbir secenek onermez; tercihi olmayan her ekip de kendi secimini
// kurar. Gerekce: ontanimli bir secenek yoksa ekiplerin ayni noktada bulusmasi icin sebep yok.
const KIP = {
  duvar: (t) => 1,
  korkuluk: (t) => (t && t.mesru ? t.secenek : 1),
  ontanimli: (t) => (t ? t.secenek : 1),
  serbest: (t, i) => (t ? t.secenek : 100 + i),
};
const secimler = (k, kip) => k.tercih.map((t, i) => KIP[kip](t, i));
const cesit = (k, kip) => new Set(secimler(k, kip)).size;
const uyum = (k, kip) => { const c = cesit(k, kip);
  return c === 1 ? k.ortak : c === 2 ? Math.floor(k.ortak / 2) : 0; };
const engel = (k, kip, mesru) => k.tercih.filter((t, i) =>
  t && t.mesru === mesru && KIP[kip](t, i) !== t.secenek).length;
writeFileSync("kip.json", JSON.stringify({ EKIP, KALEM }));

const KIPLER = ["duvar", "korkuluk", "ontanimli", "serbest"];
console.log("kalem".padEnd(23) + "ortak".padStart(6) +
  KIPLER.map((x) => `${x} c/u`.padStart(16)).join("") + "engel m/a".padStart(11));
for (const k of KALEM)
  console.log(k.ad.padEnd(23) + `${k.ortak}`.padStart(6) +
    KIPLER.map((x) => `${cesit(k, x)} / ${uyum(k, x)}`.padStart(16)).join("") +
    `${engel(k, "duvar", true)} / ${engel(k, "duvar", false)}`.padStart(11));
const T = (f) => KALEM.reduce((t, k) => t + f(k), 0);
console.log("TOPLAM".padEnd(23) + `${T((k) => k.ortak)}`.padStart(6) +
  KIPLER.map((x) => `${T((k) => cesit(k, x))} / ${T((k) => uyum(k, x))}`.padStart(16)).join("") +
  `${T((k) => engel(k, "duvar", true))} / ${T((k) => engel(k, "duvar", false))}`.padStart(11));
console.log("\nc = kalemde dogan ayri secim sayisi, u = ortak aracin verdigi is gunu");
console.log("engel m/a = duvar kipinde engellenen mesru gereksinim / aliskanlik sayisi");
kalem                   ortak       duvar c/u    korkuluk c/u   ontanimli c/u     serbest c/u  engel m/a
gunluk bicimi              14          1 / 14          1 / 14          1 / 14           5 / 0      0 / 0
gosterge adlandirmasi      12          1 / 12          1 / 12           2 / 6           5 / 0      0 / 1
taban imge                 11          1 / 11           2 / 5           2 / 5           5 / 0      1 / 0
gizli deger deposu         10          1 / 10           2 / 5           2 / 5           5 / 0      1 / 0
dagitim adimi sirasi        8           1 / 8           2 / 4           3 / 0           5 / 0      1 / 1
sinama esigi                7           1 / 7           2 / 3           3 / 0           5 / 0      1 / 1
dil surumu                  6           1 / 6           2 / 3           2 / 3           5 / 0      1 / 0
ag kurali bicimi            5           1 / 5           2 / 2           2 / 2           4 / 0      2 / 0
veri deposu surumu          4           1 / 4           3 / 0           4 / 0           5 / 0      2 / 1
yedek araligi               3           1 / 3           2 / 1           4 / 0           5 / 0      1 / 2
TOPLAM                     80         10 / 80         19 / 49         25 / 35          49 / 0     10 / 6

c = kalemde dogan ayri secim sayisi, u = ortak aracin verdigi is gunu
engel m/a = duvar kipinde engellenen mesru gereksinim / aliskanlik sayisi

Çeşitlilik ile Uyum

Toplam satırı dört kipi tek bakışta verir. Duvar kipinde çeşitlilik 10’dur — on kalem, on seçim — ve ortak araç değerinin tamamı alınır: 80 iş günü. Serbest kipte çeşitlilik 49’a çıkar ve ortak araç 80 iş gününün sıfırını verir. Aradaki iki kip sırasıyla 19 ve 25 çeşitlilikte, 49 ve 35 iş günü değerdedir.

Sayılar kipin adından bağımsız bir kural gösterir: çeşitlilik iki katına çıktığında ortak aracın değeri yarıya inmez, çok daha hızlı düşer. veri deposu surumu kaleminde öntanımlı kip dört ayrı seçim doğurur ve dört iş günlük ortak araç değeri sıfırlanır; yedek araligi kaleminde aynı şey olur. Serbest kipte ise ag kurali bicimi dışındaki her kalem beş ayrı seçim doğurur, çünkü tercihi olmayan ekipler de kendi yollarına gider.

Son sütun zorunluluğun ne engellediğini ayırır. Duvar kipi on meşru gereksinimi ve altı alışkanlığı engeller. Bu on gereksinim beş ekibe dağılmıştır ve hepsi işin gerektirdiği seçimlerdir: saha ekibinin taban imgesi, sayac okuma ekibinin gizli değer deposu ve ağ kuralı biçimi, faturalama ekibinin dil sürümü. Zorunluluk bunları engellediğinde ekip işini yapmaz değildir — dolambaç kurar, ve dolambacın bedeli bir sonraki tablodadır.

Korkuluk mu, Duvar mı

PY23 — bedeller: engellenen her meşru gereksinim 8 iş günü, engellenen her alışkanlık 1 iş günü, bir kalemde ilk seçenekten sonraki her seçenek 4 iş günü ortak bakım. Gerekçe: bir alışkanlığı engellemek sürtünme yaratır, meşru bir gereksinimi engellemek iş yaratır; ikisi aynı sayıyla yazılamaz. PY24 — beşinci bir düzen, karma, her kalem için dört kipin net değerini ayrı ayrı hesaplar ve en yükseğini seçer; eşitlikte daha serbest kip yeğlenir.

// duzen.mjs — bes duzen, korkuluk ile duvarin farki ve kalem basina en iyi kip
import { readFileSync } from "node:fs";
const { KALEM } = JSON.parse(readFileSync("kip.json", "utf8"));

// PY23 — bedeller: engellenen her mesru gereksinim 8 is gunu (ekip dolambac kurar),
// engellenen her aliskanlik 1 is gunu (surtunme), bir kalemde ilk secenekten sonraki her
// secenek 4 is gunu ortak bakim. PY24 — besinci duzen karma: her kalem icin dort kipin net
// degeri ayri ayri hesaplanir, en yuksek olan secilir, esitlikte daha serbest kip yeglenir.
const MESRU = 8, ALISKANLIK = 1, SECENEK = 4;
const KIP = { duvar: (t) => 1, korkuluk: (t) => (t && t.mesru ? t.secenek : 1),
  ontanimli: (t) => (t ? t.secenek : 1), serbest: (t, i) => (t ? t.secenek : 100 + i) };
const KIPLER = ["duvar", "korkuluk", "ontanimli", "serbest"];
const cesit = (k, x) => new Set(k.tercih.map((t, i) => KIP[x](t, i))).size;
const uyum = (k, x) => { const c = cesit(k, x);
  return c === 1 ? k.ortak : c === 2 ? Math.floor(k.ortak / 2) : 0; };
const engel = (k, x, m) => k.tercih.filter((t, i) =>
  t && t.mesru === m && KIP[x](t, i) !== t.secenek).length;
const net = (k, x) => uyum(k, x) - MESRU * engel(k, x, true) -
  ALISKANLIK * engel(k, x, false) - SECENEK * (cesit(k, x) - 1);

const enIyi = KALEM.map((k) => {
  const s = KIPLER.map((x) => ({ x, n: net(k, x) }));
  const ust = Math.max(...s.map((y) => y.n));
  return { ...k, kip: s.filter((y) => y.n === ust).pop().x, n: ust };
});
const DUZEN = [...KIPLER.map((x) => ({ ad: x, kip: () => x })),
  { ad: "karma", kip: (k) => enIyi.find((y) => y.ad === k.ad).kip }];

const T = (f) => KALEM.reduce((t, k) => t + f(k), 0);
console.log("duzen".padEnd(12) + "cesitlilik".padStart(11) + "ortak arac".padStart(11) +
  "ise yaramaz".padStart(13) + "uyum".padStart(6) + "engel mesru".padStart(13) +
  "engel alisk.".padStart(14) + "secenek bakimi".padStart(16) + "net".padStart(6));
for (const d of DUZEN) {
  const c = (k) => cesit(k, d.kip(k));
  console.log(d.ad.padEnd(12) + `${T(c)}`.padStart(11) +
    `${KALEM.filter((k) => c(k) <= 2).length}/10`.padStart(11) +
    `${KALEM.filter((k) => c(k) >= 3).length}`.padStart(13) +
    `${T((k) => uyum(k, d.kip(k)))}`.padStart(6) +
    `${T((k) => engel(k, d.kip(k), true))}`.padStart(13) +
    `${T((k) => engel(k, d.kip(k), false))}`.padStart(14) +
    `${SECENEK * (T(c) - KALEM.length)}`.padStart(16) +
    `${T((k) => net(k, d.kip(k)))}`.padStart(6));
}

const fark = T((k) => uyum(k, "duvar")) - T((k) => uyum(k, "korkuluk"));
console.log(`\nkorkuluk ile duvarin farki: duvar 10 mesru gereksinimi engelleyip ortak arac ` +
  `degerini ${fark} is gunu artirir — engellenen gereksinim basina ${(fark / 10).toFixed(1)} ` +
  `is gunu, oysa bir gereksinimi engellemenin bedeli ${MESRU} is gunu`);
console.log("kalem basina en iyi kip — " + KIPLER
  .map((x) => `${x}: ${enIyi.filter((y) => y.kip === x).length}`).join(", "));
for (const x of KIPLER) {
  const g = enIyi.filter((y) => y.kip === x);
  if (g.length) console.log(`  ${x}: ` + g.map((y) => `${y.ad} (${y.n})`).join(", "));
}
duzen        cesitlilik ortak arac  ise yaramaz  uyum  engel mesru  engel alisk.  secenek bakimi   net
duvar                10      10/10            0    80           10             6               0    -6
korkuluk             19       9/10            1    49            0             6              36     7
ontanimli            25       6/10            4    35            0             0              60   -25
serbest              49       0/10           10     0            0             0             156  -156
karma                17       9/10            1    60            2             6              28    10

korkuluk ile duvarin farki: duvar 10 mesru gereksinimi engelleyip ortak arac degerini 31 is gunu artirir — engellenen gereksinim basina 3.1 is gunu, oysa bir gereksinimi engellemenin bedeli 8 is gunu
kalem basina en iyi kip — duvar: 2, korkuluk: 5, ontanimli: 3, serbest: 0
  duvar: taban imge (3), gizli deger deposu (2)
  korkuluk: gosterge adlandirmasi (11), dagitim adimi sirasi (-1), sinama esigi (-2), veri deposu surumu (-9), yedek araligi (-5)
  ontanimli: gunluk bicimi (14), dil surumu (-1), ag kurali bicimi (-2)

Tekdüze düzenlerin hepsi ya zarar eder ya çok az kazanır. Duvar −6, öntanımlı −25, serbest −156 iş günü verir; tek pozitif tekdüze düzen korkuluktur (+7). Serbest düzenin sayısı tartışma bırakmaz: on kalemin hepsinde ortak araç işe yaramaz hâle gelir ve 156 iş günü yalnız seçenek bakımına gider.

Öntanımlı kipin sonucu daha şaşırtıcıdır. Hiçbir meşru gereksinimi, hiçbir alışkanlığı engellemez — ve buna rağmen duvardan 19 iş günü daha kötüdür. Nedeni ortadaki iki sütundur: çeşitliliği 25’e çıkarır, ortak aracı dört kalemde bitirir ve 60 iş günü seçenek bakımı ödettirir. Hiçbir şeyi engellememek bedava değildir.

Korkuluk ile duvarın farkı tek bir satırda sayılır. Duvar, korkuluğun izin verdiği on meşru gereksinimi engelleyerek ortak araç değerini 49’dan 80’e, yani 31 iş günü yükseltir. Engellenen gereksinim başına bu 3,1 iş günüdür; oysa bir meşru gereksinimi engellemenin bedeli 8 iş günüdür. Duvar, aldığının iki buçuk katından fazlasını ödemektedir. İki kipin engellediği alışkanlık sayısı ise aynıdır (6): korkuluk da alışkanlığa istisna vermez. Korkuluğun duvardan farkı yalnız meşru gereksinimlerdedir, ve bunun karşılığında çeşitliliği 10’dan 19’a çıkarma bedelini (36 iş günü) öder.

Karma düzen kararı kalem başına verir ve +10 ile en yükseğidir. Dağılım şudur: iki kalemde duvar, beş kalemde korkuluk, üç kalemde öntanımlı, hiçbir kalemde serbest. Duvarın kazandığı iki kalem taban imge (11) ve gizli deger deposu (10) — ortak araç değeri en yüksek olanlardan ikisi. Bu iki kalemde zorunluluk bir meşru gereksinimi engellemeye değer, çünkü ortak aracın tam değeri engelleme bedelini aşar. Kalan sekiz kalemde değmez. Kip seçimi bir yönetim tercihi değil, kalemin ortak araç değeri ile engellenen gereksinim sayısı arasındaki bir hesaptır.

Özet

  • On kalem dört kipte koşturuldu: çeşitlilik duvarda 10, korkulukta 19, öntanımlıda 25, serbestte 49; ortak aracın verdiği değer sırasıyla 80, 49, 35 ve 0 iş günüdür.
  • Serbest kipte ortak araç on kalemin hepsinde işe yaramaz hâle gelir; öntanımlı kipte dört kalemde, korkulukta bir kalemde, duvarda hiç.
  • Duvar on meşru gereksinimi ve altı alışkanlığı engeller; korkuluk aynı altı alışkanlığı engeller ama meşru gereksinimlerin hiçbirini engellemez.
  • Duvarın korkuluktan aldığı fark 31 iş günü ek ortak araç değeridir, engellenen gereksinim başına 3,1 iş günü — bir gereksinimi engellemenin 8 iş günlük bedelinin altında.
  • Tekdüze düzenlerde net: duvar −6, korkuluk +7, öntanımlı −25, serbest −156 iş günü. Hiçbir şeyi engellemeyen öntanımlı düzen duvardan 19 iş günü daha kötüdür.
  • Kalem başına en iyi kip seçildiğinde net +10 olur: iki kalemde duvar, beş kalemde korkuluk, üç kalemde öntanımlı, hiçbir kalemde serbest.

Sonraki Adım

Dört derste platform bir maliyet hesabı, bir işletme biçimi, bir kapsam ve bir kip seçimi olarak ölçüldü. Dördünde de ortak bir varsayım vardı: bir ekip bir şey istediğinde platform ekibinden biri onu yapıyor. Kip tablosunda öntanımlı bir seçeneği değiştirmek, kapsam tablosunda yola girmek, istek tablosunda bir yeteneği almak — hepsi bir insanın elinden geçiyordu. Sonraki ders bu varsayımı kaldırır: aynı istek kümesi bir talep kuyruğunda ve kendi kendine hizmet düzeninde koşturulur; bekleme süresi, platform ekibinin kesintisi ve kendi kendine hizmetin kendi bedeli — arayüz yazma işi, yanlış kullanım ve geri alınamayan işlem — sayılır.

İ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