Ders 10 / 12
Maliyet Görünürlüğü
Ekip bazlı kaynak muhasebesi: günlük 1.376 kurgu biriminin yalnız %47,5'inin doğrudan atanabilmesi, üç bölüştürme kuralının her birinin başka ekibi başka yönde yanıltması (eşit kural sahayı +79,0 yüklerken istek kuralı sayaç okumayı +140,7 yüklüyor), maliyet gösterildikten sonra faturanın yalnız %15,6'sının düşmesi ve %29,7'sinin hiç kımıldamaması, merkezî muhasebenin üç ekipte kendini ödemesi ama iki ekibin dışına çıkmasıyla beş ekipteki 85 birimlik kazancın 3 birime inmesi.
İçindekiler
Önceki ders kuralları hatta gömdü: beş ekip politika motorunu hiç açmadan uydu, muafiyet sayısı sayıldı ve kuralın görünmezliği bir kazanç olarak yazıldı. Aynı beş ekip için hâlâ görünmeyen bir şey var — ne kadar harcadıkları. Platform kaynağı onların yerine alıyor ve faturayı onların yerine okuyor.
Birim maliyet, boşta kaynak ve ölçek ekonomisi M22/K06’da ölçüldü; burada o fatura girdidir. Bu dersin sorusu tek bir bölme işlemidir: aynı tutar beş ekibe nasıl bölünür, bölünemeyen ne kadardır ve bölünen tutar ekibe gösterildiğinde ne değişir.
Faturayı Beş Ekibe Bölmek
Örnek yine kurgu bölgesel ölçüm ağıdır ve beş ekip kurgudur: sayaç okuma, doğrulama,
faturalama, saha, raporlama. Kalemler, fiyatlar ve kullanım ölçüleri kurgudur; para birimi de
kurgudur ve br diye anılır, gerçek bir fiyat listesine karşılık gelmez.
PT25: dokuz maliyet kalemi vardır ve her kalemin günlük bir bedeli yazılıdır. PT26: kalemler üç türdür — doğrudan atanabilen (ekip etiketi taşır), paylaşılan (küme denetim düzlemi, ortak yapı ve dağıtım hattı, izleme yığını) ve bölüştürülemeyen; sonuncular hiçbir ekibin kullanımıyla ilişkili değildir ve ekip olmasa da ödenir. PT27: paylaşılan kalemin gerçek sürücüsü modelde bilinir (eş zamanlı iş, yapı dakikası, seri sayısı) ama faturada yoktur. PT28: bölüştürme kuralları yalnız faturadan okunabilen ölçüleri kullanabilir: eşit pay, gözlenen kaynak kullanım oranı, istek sayısı. PT29: maliyet ekibe gösterildikten sonra her kalem kendi denetim payı kadar düşer; bu tek dönemlik bir tepkidir. PT30: merkezî muhasebe hattının sabit günlük bedeli vardır, bir ekibin kendi muhasebesini kurmasının da.
Ekipler, kalemler ve fatura süreç içi bir modeldir; gerçek bir fatura yoktur.
// maliyet/kalem.mjs — ekip bazli muhasebe modeli: gercek bir fatura yok. Ekipler, kalemler ve // fiyatlar bir veri yapisidir; para birimi kurgudur ve `br` diye anilir, gercek bir fiyat // listesine karsilik gelmez. Paylasilan kalemin *gercek surucusu* modelde bilinir, faturada // yoktur; bolusturme kurallari yalniz faturadan okunabilen olculeri kullanabilir. export const EKIP = ["sayac-okuma", "dogrulama", "faturalama", "saha", "raporlama"]; export const N = EKIP.length; // dogrudan atanabilir: ad, ekip basina gunluk br, gorunurluk sonrasi dusus payi export const DOGRUDAN = [ ["servis ornekleri", [96, 54, 120, 38, 72], 0.18], ["blok depolama", [24, 18, 40, 12, 58], 0.10], ["gecici ortam kopyalari", [30, 22, 26, 10, 34], 0.55], ]; // paylasilan: ad, gunluk br, surucu adi, surucu degerleri (modelde bilinir), dusus payi export const PAYLASILAN = [ ["kume denetim duzlemi", 210, "es zamanli is", [34, 12, 28, 6, 9], 0.00], ["ortak yapi ve dagitim", 168, "yapi dakikasi", [220, 180, 260, 40, 610], 0.12], ["izleme yigini", 146, "seri sayisi", [8200, 3100, 5400, 900, 2600], 0.30], ]; // bolusturulemez: hicbir ekibin kullanimiyla iliskisi yok; ekip olmasa da odenir export const BOLUSTURULEMEZ = [ ["bolge taban agi", 88], ["denetim kaydi saklama", 46], ["yedek bolge bekleme", 64], ]; // faturadan okunabilen ekip olculeri export const OLCU = { kullanim: [0.31, 0.17, 0.29, 0.08, 0.15], // gozlenen kaynak kullanim orani istek: [412, 96, 138, 21, 33], // gunluk bin istek }; export const MERKEZI = 120; // merkezi muhasebe hattinin sabit gunluk bedeli (br) export const EKIP_BASI = 41; // bir ekibin kendi muhasebesini kurmasinin gunluk bedeli (br) export const topla = (v) => v.reduce((a, b) => a + b, 0); export const oran = (v) => { const t = topla(v); return v.map((x) => x / t); }; export const KURAL = { esit: () => EKIP.map(() => 1 / N), kullanim: () => oran(OLCU.kullanim), istek: () => oran(OLCU.istek), }; // paylasilan kalemlerin ekip basina *gercek* payi: her kalem kendi surucusuyle bolusur export const gercekPay = () => EKIP.map((_, e) => topla(PAYLASILAN.map(([, br, , s]) => br * oran(s)[e]))); // bir kuralin paylasilan kalemlerde urettigi sapma: yuklenen eksi gercek export const sapma = (ad) => { const p = KURAL[ad](), toplamBr = topla(PAYLASILAN.map((x) => x[1])), g = gercekPay(); return EKIP.map((_, e) => toplamBr * p[e] - g[e]); };
// maliyet/olc.mjs — kalem dokumu, uc bolusturme kuralinin sapmasi, gorunurlugun davranisa // etkisi ve merkezi muhasebenin esigi. Tum sayilar yukaridaki modelden turer. import { EKIP, N, DOGRUDAN, PAYLASILAN, BOLUSTURULEMEZ, KURAL, MERKEZI, EKIP_BASI, topla, sapma } from "./kalem.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 t0 = process.hrtime.bigint(); const D = topla(DOGRUDAN.map((x) => topla(x[1]))); const P = topla(PAYLASILAN.map((x) => x[1])); const B = topla(BOLUSTURULEMEZ.map((x) => x[1])); const T = D + P + B, pay = (a) => `%${(100 * a / T).toFixed(1)}`; const ADET = DOGRUDAN.length + PAYLASILAN.length + BOLUSTURULEMEZ.length; console.log(`${N} ekip, ${ADET} kalem, gunluk ${T} br (kurgu para birimi)`); console.log("\n1. kalem dokumu: ne dogrudan atanir, ne bolusturulur, ne bolusturulemez"); const A = [-24, 17, 11, 9, 18, 9]; yaz(A, "kalem", "tur", "gunluk br", "pay", "gercek surucu", "denetim"); for (const [ad, v, d] of DOGRUDAN) yaz(A, ad, "dogrudan", topla(v), pay(topla(v)), "ekip etiketi", `%${(100 * d).toFixed(0)}`); for (const [ad, br, s, , d] of PAYLASILAN) yaz(A, ad, "paylasilan", br, pay(br), s, `%${(100 * d).toFixed(0)}`); for (const [ad, br] of BOLUSTURULEMEZ) yaz(A, ad, "bolusturulemez", br, pay(br), "yok", "%0"); yaz(A, "toplam", "-", T, "%100", "-", "-"); console.log(` dogrudan ${D} br (${pay(D)}), paylasilan ${P} br (${pay(P)}),`); console.log(` bolusturulemez ${B} br (${pay(B)}); dogrudan atanamayan ${pay(P + B)}`); console.log("\n2. bolusturme kurali taramasi: yuklenen eksi gercek (br/gun, paylasilan)"); const C = [-11, ...EKIP.map(() => 13), 12]; yaz(C, "kural", ...EKIP, "mutlak top."); const skor = {}; for (const k of Object.keys(KURAL)) { const s = sapma(k); skor[k] = topla(s.map(Math.abs)); yaz(C, k, ...s.map((x) => (x >= 0 ? "+" : "") + x.toFixed(1)), skor[k].toFixed(1)); } const enIyi = Object.keys(skor).reduce((a, b) => (skor[a] <= skor[b] ? a : b)); for (const k of Object.keys(KURAL)) { const s = sapma(k), i = s.indexOf(Math.max(...s)), j = s.indexOf(Math.min(...s)); console.log(` ${k.padEnd(9)} en cok yuklenen ${EKIP[i]} +${s[i].toFixed(1)}, ` + `en cok kurtulan ${EKIP[j]} ${s[j].toFixed(1)}`); } console.log(` en az yanlis kural: ${enIyi}`); console.log(` her kural ${B} br bolusturulemez kalemi de dagitir; o tutarin sapmasi`); console.log(" olculemez, cunku karsilastirilacak bir gercek pay yok"); console.log("\n3. gorunurlugun davranisa etkisi: maliyet ekibe gosterildikten sonra"); const E = [-24, 11, 9, 11, 26]; yaz(E, "kalem", "gunluk br", "denetim", "dusen br", "degismemesinin nedeni"); const kalemler = [ ...DOGRUDAN.map(([ad, v, d]) => [ad, topla(v), d, "-"]), ...PAYLASILAN.map(([ad, br, , , d]) => [ad, br, d, d ? "-" : "platform karari"]), ...BOLUSTURULEMEZ.map(([ad, br]) => [ad, br, 0, "ekibin denetiminde degil"]), ]; let dusen = 0, sabitBr = 0, sabitAdet = 0; for (const [ad, br, d, n] of kalemler) { dusen += br * d; if (d === 0) { sabitBr += br; sabitAdet++; } yaz(E, ad, br, `%${(100 * d).toFixed(0)}`, (br * d).toFixed(1), n); } console.log(` toplam dusus ${dusen.toFixed(1)} br/gun (%${(100 * dusen / T).toFixed(1)})`); console.log(` hic degismeyen ${sabitAdet} kalem, ${sabitBr} br/gun (${pay(sabitBr)})`); console.log("\n4. merkezi muhasebenin esigi ve disina cikanlarin bedeli"); const F = [-8, 13, 15, 11, 18]; yaz(F, "ekip", "merkezi br", "ayri ayri br", "kazanc", "kendini oder mi"); for (const n of [1, 2, 3, 5, 8]) { const ayri = n * EKIP_BASI; yaz(F, n, MERKEZI, ayri, (ayri - MERKEZI).toFixed(0), ayri > MERKEZI ? "evet" : "hayir"); } const s = sapma(enIyi), sirali = EKIP.map((e, i) => [e, Math.abs(s[i])]) .sort((a, b) => b[1] - a[1]).slice(0, 2); const cikan = sirali.length * EKIP_BASI, brut = N * EKIP_BASI - MERKEZI; const esik = Math.ceil(MERKEZI / EKIP_BASI); console.log(` esik ${esik} ekip; ${N} ekipte brut kazanc ${brut} br/gun`); console.log(` ${enIyi} kuralinda en cok sapan ${sirali.map((x) => x[0]).join(" ve ")} kendi`); console.log(` olcumunu kurar: ${cikan} br/gun yinelenen olcum, net kazanc ` + `${brut - cikan} br/gun`); const ms = Number(process.hrtime.bigint() - t0) / 1e6; // ham olcum basilmaz, bant denetlenir console.log(`\ndort tablo ve kural taramasi 2000 ms bandinda: ${ms < 2000 ? "evet" : "hayir"}`);
5 ekip, 9 kalem, gunluk 1376 br (kurgu para birimi) 1. kalem dokumu: ne dogrudan atanir, ne bolusturulur, ne bolusturulemez kalem tur gunluk br pay gercek surucu denetim servis ornekleri dogrudan 380 %27.6 ekip etiketi %18 blok depolama dogrudan 152 %11.0 ekip etiketi %10 gecici ortam kopyalari dogrudan 122 %8.9 ekip etiketi %55 kume denetim duzlemi paylasilan 210 %15.3 es zamanli is %0 ortak yapi ve dagitim paylasilan 168 %12.2 yapi dakikasi %12 izleme yigini paylasilan 146 %10.6 seri sayisi %30 bolge taban agi bolusturulemez 88 %6.4 yok %0 denetim kaydi saklama bolusturulemez 46 %3.3 yok %0 yedek bolge bekleme bolusturulemez 64 %4.7 yok %0 toplam - 1376 %100 - - dogrudan 654 br (%47.5), paylasilan 524 br (%38.1), bolusturulemez 198 br (%14.4); dogrudan atanamayan %52.5 2. bolusturme kurali taramasi: yuklenen eksi gercek (br/gun, paylasilan) kural sayac-okuma dogrulama faturalama saha raporlama mutlak top. esit -62.9 +31.0 -33.6 +79.0 -13.5 220.0 kullanim -5.3 +15.3 +13.5 +16.1 -39.7 89.8 istek +140.7 -1.9 -35.1 -10.1 -93.6 281.4 esit en cok yuklenen saha +79.0, en cok kurtulan sayac-okuma -62.9 kullanim en cok yuklenen saha +16.1, en cok kurtulan raporlama -39.7 istek en cok yuklenen sayac-okuma +140.7, en cok kurtulan raporlama -93.6 en az yanlis kural: kullanim her kural 198 br bolusturulemez kalemi de dagitir; o tutarin sapmasi olculemez, cunku karsilastirilacak bir gercek pay yok 3. gorunurlugun davranisa etkisi: maliyet ekibe gosterildikten sonra kalem gunluk br denetim dusen br degismemesinin nedeni servis ornekleri 380 %18 68.4 - blok depolama 152 %10 15.2 - gecici ortam kopyalari 122 %55 67.1 - kume denetim duzlemi 210 %0 0.0 platform karari ortak yapi ve dagitim 168 %12 20.2 - izleme yigini 146 %30 43.8 - bolge taban agi 88 %0 0.0 ekibin denetiminde degil denetim kaydi saklama 46 %0 0.0 ekibin denetiminde degil yedek bolge bekleme 64 %0 0.0 ekibin denetiminde degil toplam dusus 214.7 br/gun (%15.6) hic degismeyen 4 kalem, 408 br/gun (%29.7) 4. merkezi muhasebenin esigi ve disina cikanlarin bedeli ekip merkezi br ayri ayri br kazanc kendini oder mi 1 120 41 -79 hayir 2 120 82 -38 hayir 3 120 123 3 evet 5 120 205 85 evet 8 120 328 208 evet esik 3 ekip; 5 ekipte brut kazanc 85 br/gun kullanim kuralinda en cok sapan raporlama ve saha kendi olcumunu kurar: 82 br/gun yinelenen olcum, net kazanc 3 br/gun dort tablo ve kural taramasi 2000 ms bandinda: evet
Sayılar ölçüm sınıfındadır; girdileri yukarıdaki varsayımlardır.
Faturanın Yarısı Doğrudan Atanamıyor
Birinci tablo günlük 1.376 birimi üç türe ayırır. Doğrudan atanabilen kalemler 654 birim (%47,5) tutar: servis örnekleri, blok depolama ve geçici ortam kopyaları ekip etiketi taşır ve hangi ekibin ne kadar kullandığı faturadan okunur. Kalan %52,5 okunmaz.
Bunun 524 birimi (%38,1) paylaşılan kalemdir. Küme denetim düzlemi, ortak yapı ve dağıtım hattı ile izleme yığını beş ekip için tek bir kez işletilir; tam da platformun devraldığı katman budur. Tekil bir tutar olarak görünür ve kimseye ait değildir.
Geriye 198 birim (%14,4) bölüştürülemeyen kalem kalır. Bölge taban ağı, denetim kaydı saklama ve yedek bölge bekleme üç ekiple de beş ekiple de aynı tutar; hiçbir ekip çekildiği için azalmaz. Bu kalemin bir sahibi yoktur, bir sürücüsü de yoktur — bölüştürme kuralı ona uygulandığında üretilen sayı bir ölçüm değil, bir karardır.
Her Kural Başka Ekibi Başka Yönde Yanıltıyor
İkinci tablo üç kuralı paylaşılan 524 birim üzerinde tarar. Karşılaştırma noktası modelde bilinen gerçek paydır: her paylaşılan kalem kendi sürücüsüyle bölüşülür. Sapma, kuralın yüklediği tutar eksi gerçek paydır; artı işareti ekibin fazla yüklendiğini, eksi işareti kurtulduğunu gösterir.
Eşit pay en kaba sonucu verir (mutlak toplam 220,0). Saha ekibi +79,0 birim fazla yüklenir: beş ekibin en küçüğüdür, eş zamanlı işi altıdır, yapı dakikası kırktır, serisi dokuz yüzdür — ama beşte bir öder. Sayaç okuma −62,9 birim kurtulur; küme denetim düzleminin en ağır kullanıcısıdır ama bunu faturasında görmez.
Kullanım oranı en az yanlış kuraldır (89,8) ama tek yönlü değildir: raporlama −39,7 kurtulur, çünkü kaynak kullanımı düşük olsa da yapı dakikasının %46’sını tek başına harcar. Gözlenen kullanım oranı yapı hattının sürücüsünü hiç görmez.
İstek sayısı en yanıltıcı kuraldır (281,4). Sayaç okuma +140,7 birim yüklenir çünkü günlük 412 bin istekle en yüksek sayıya sahiptir; oysa istek başına maliyeti düşüktür. Raporlama −93,6 kurtulur: gecelik toplu iş isteğe dönüşmez.
Üç kural üç farklı ekibi üç farklı yönde yanıltır ve hiçbiri diğerinin hatasını düzeltmez. Bunun üstüne 198 birimlik bölüştürülemeyen kalem her kuralda yine dağıtılır ve o tutarın sapması ölçülemez — karşılaştırılacak bir gerçek pay yoktur. Maliyet görünürlüğünde bu katlanılabilir bir yanlıştır: sayı gösterilir, kimse ödemez. Maliyet yansıtmasında aynı sayı bir bütçeden düşer ve tartışma kuralın kendisine kayar.
Görünürlük Neyi Kımıldatıyor
Üçüncü tablo maliyeti ekibe gösterir ve ne düştüğünü sayar. Toplam düşüş 214,7 birim (%15,6). Düşüşün geldiği yer beklenen yer değildir: en yüksek tepki oranı geçici ortam kopyalarındadır (%55, 67,1 birim) — ekip kullanılmayan ortamı kendi silebilir. Servis örnekleri büyüklüğü sayesinde yakın bir tutar düşürür (68,4 birim) ama oranı %18’dir; boyut değiştirmek dağıtım gerektirir. İzleme yığını %30 düşer, çünkü ekip kendi etiketlerini seyreltebilir.
Dört kalem hiç kımıldamaz: 408 birim, faturanın %29,7’si. Küme denetim düzlemi bir platform kararıdır; bölge taban ağı, denetim kaydı saklama ve yedek bölge bekleme hiçbir ekibin denetiminde değildir — denetim kaydı saklama üstelik önceki dersteki politika kuralının kendi bedelidir. Bu kalemleri ekibin faturasında göstermek düşüş üretmez, yalnız soru üretir.
Soyutlamanın sızdığı yer burasıdır. Ekip platformu kullanmaya kendi altyapı katmanını görmemek için başladı; şimdi faturasında dört kalem duruyor ve tutarını değiştirmek için o katmanı öğrenmek zorunda. Denetimi olmayan bir kalemi göstermek görünürlük değil, gürültüdür.
Merkezî Muhasebenin Eşiği
Dördüncü tablo platformun kazandırıp kazandırmadığını sorar. Merkezî muhasebe hattı günlük 120 birim sabit tutar; ekip kendi muhasebesini kurarsa 41 birim öder. Eşik üç ekiptir: tek ekipte merkezî hat 79 birim, iki ekipte 38 birim pahalıdır. Az ekiple platform muhasebesi kendini ödemez ve bunun bir tercih değil, bir aritmetik olduğu tablodadır.
Beş ekipte brüt kazanç 85 birimdir. Buna dışına çıkanlar eklenir: kullanım kuralında en çok sapan raporlama (−39,7) ve saha (+16,1) sonuca güvenmez ve kendi ölçümünü kurar. İkisinin yinelenen ölçümü 82 birim tutar; brüt 85 birimlik kazanç 3 birime iner. Beş ekip merkezî muhasebeyi neredeyse hiç kazandırmayan bir noktada işletir ve nedeni maliyetin kendisi değil, bölüştürme kuralına duyulan güvensizliktir.
Özet
- Günlük 1.376 kurgu biriminin yalnız %47,5’i doğrudan atanır; %38,1 paylaşılan, %14,4 bölüştürülemeyen kalemdir — faturanın %52,5’i bir kural olmadan ekibe yazılamaz.
- Üç bölüştürme kuralı üç ayrı ekibi ters yönde yanıltır: eşit pay sahayı +79,0 yükler, istek sayısı sayaç okumayı +140,7 yükler ve raporlamayı −93,6 kurtarır; en az yanlış kural olan kullanım oranında bile mutlak sapma 89,8 birimdir.
- 198 birimlik bölüştürülemeyen kalem her kuralda dağıtılır ama sapması ölçülemez; görünürlükte katlanılabilir olan bu yanlış, yansıtmada bütçeden düşer.
- Maliyet gösterildikten sonra fatura %15,6 düşer; en yüksek tepki geçici ortam kopyalarındadır (%55). Dört kalem hiç kımıldamaz — 408 birim, %29,7 — çünkü ekibin denetiminde değildir.
- Merkezî muhasebe üç ekipten sonra kendini öder; iki ekipte 38 birim pahalıdır. Beş ekipte brüt kazanç 85 birimken, kurala güvenmeyen iki ekibin kendi ölçümünü kurması kazancı 3 birime indirir.
Sonraki Adım
Bu dersin sayıları platformun ne kadar tuttuğunu söylüyor ama kime yaradığını söylemiyor. Sıradaki ders soruyu zamana yayar: beş ekip yeni düzene aynı anda geçmez, dalgalar hâlinde taşınır ve dalganın büyüklüğü hem iki düzenin birlikte işletileceği süreyi hem geride kalanların sayısını belirler. Geride kalan ekibin bedeli bu dersin tablosunda hiç görünmeyen bir kalemdir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.