Ders 10 / 10
Al veya Geliştir Kararı
Bir yeteneğin iki seçeneğinin toplam sahip olma maliyetiyle karşılaştırılması: uyarlama, tümleştirme bağı, eğitim, sürüm yükseltme ve çıkış kalemlerinin ayrı ayrı toplanması, satın alma 402 saat artı yılda 114 saatken geliştirmenin 606 saat artı yılda 54 saat olması, kazananın 3,40 yıllık ufukta değişmesi, sahibi dışarıda olan sekiz noktanın kesilme riski eklendiğinde başabaş ufkun 1,79 yıla inmesi ve ürünün yerleşik kapsamı büyüdükçe aynı sınırın 12,00 yıla çıkması.
İçindekiler
Önceki ders elde olanla çalıştı: değiştirilemeyen bir sistem duruyordu, çevresine bir katman kuruldu ve sahipliği adım adım devredildi. O sistem bir zamanlar ya satın alınmıştı ya içeride yazılmıştı; bugün ödenen sarmalayıcı, koordinasyon ve pencere maliyetlerinin hepsi o eski kararın devamıdır. Bu ders, kararın kendisini ölçmeye çalışır.
Bölgesel kütüphane ağının kurgu modelinde yönetim birimi bir raporlama yüzeyi istiyor. İki seçenek var: dışarıdan bir ürün almak ya da içeride yazmak. Karar “hangisi daha ucuz” diye sorulursa yanıtsız kalır, çünkü ucuzluk bir zaman aralığı belirtilmeden tanımlı değildir.
Toplam Sahip Olma Maliyeti Kalem Kalemdir
Satın alma kararı çoğu zaman tek bir sayıyla — kurulum bedeliyle — savunulur. Oysa bir yeteneğin ömrü boyunca ödediği beş ayrı kalem vardır ve ikisi yalnız bir kez, ikisi her yıl, biri de ayrılırken ödenir.
TM20: yetenek sayısı, kullanıcı sayısı ve saat katsayıları kurgudur. TM21: çıkış maliyeti bu derste ölçülmez; bir kaynak ağacı taranarak başka bir derste ölçülmüştü ve buraya hazır bir kalem olarak girer — satın alınan yol için 96, geliştirilen yol için 24 saat. TM22: toplam sahip olma maliyeti bir kez ödenen kalemlerin toplamı artı ufuk çarpı yıllık kalemlerdir; çıkış ufkun sonunda ödenir.
// karar.mjs — bir yetenegin iki secenegi: satin almak ve gelistirmek. Butun kalemler model // buyuklukleriyle hesaplanir; cikis kalemi disaridan girdi olarak alinir (TM21). const IHTIYAC = 18; // yonetim biriminin istedigi rapor yetenegi const KULLANICI = 9; // yuzeyi kullanan kisi const KAYNAK_BAG = 5; // baglanacak kaynak sistem // TM20: saat katsayilari ve buyuklukler kurgudur. const K = { kurulum: 40, uyarlamaSaat: 14, yazmaSaat: 26, alBag: 22, gelBag: 12, egitimAl: 4, egitimGel: 6, surumSayisi: 2, surumNokta: 3, bakimYetenek: 2.5, cikisAl: 96, cikisGel: 24 }; // Bir secenegin kalemleri. "yerlesik": urunun hazir sagladigi yetenek sayisi. function kalemler(yerlesik) { const uyarlanan = IHTIYAC - yerlesik; const alBag = KAYNAK_BAG + 1; // urun kendi veri kopyasini da ister const al = { uyarlama: [K.kurulum + uyarlanan * K.uyarlamaSaat, 0], "tumlestirme bagi": [alBag * K.alBag, 0], egitim: [KULLANICI * K.egitimAl, KULLANICI * 2 * K.surumSayisi], "surum yukseltme": [0, K.surumSayisi * (uyarlanan + alBag) * K.surumNokta], cikis: [K.cikisAl, 0], }; const gel = { uyarlama: [IHTIYAC * K.yazmaSaat, 0], "tumlestirme bagi": [KAYNAK_BAG * K.gelBag, 0], egitim: [KULLANICI * K.egitimGel, KULLANICI], "surum yukseltme": [0, IHTIYAC * K.bakimYetenek], cikis: [K.cikisGel, 0], }; const topla = (o, i) => Object.values(o).reduce((t, v) => t + v[i], 0); return { al, gel, alBir: topla(al, 0), alYil: topla(al, 1), gelBir: topla(gel, 0), gelYil: topla(gel, 1), uyarlanan, alBag }; } // TM22: toplam sahip olma maliyeti = bir kez odenen + ufuk x yillik. const tso = (bir, yil, ufuk) => bir + ufuk * yil; // Iki dogrunun kesistigi ufuk; negatifse kesisim yok. const basabas = (b1, y1, b2, y2) => (b1 - b2) / (y2 - y1); const m = kalemler(11); console.log(`ihtiyac ${IHTIYAC} yetenek, urun ${IHTIYAC - m.uyarlanan} tanesini yerlesik sagliyor, ` + `${m.uyarlanan} tanesi uyarlanacak; bag: al ${m.alBag}, gelistir ${KAYNAK_BAG}\n`); console.log("kalem al (bir kez) al (yillik) gelistir (bir kez) gelistir (yillik)"); console.log("------------------ ------------ ------------ ------------------- ------------------"); for (const ad of Object.keys(m.al)) console.log(`${ad.padEnd(18)} ${m.al[ad][0].toFixed(0).padStart(12)} ${m.al[ad][1].toFixed(0).padStart(12)} ` + `${m.gel[ad][0].toFixed(0).padStart(19)} ${m.gel[ad][1].toFixed(0).padStart(18)}`); console.log(`${"toplam".padEnd(18)} ${m.alBir.toFixed(0).padStart(12)} ${m.alYil.toFixed(0).padStart(12)} ` + `${m.gelBir.toFixed(0).padStart(19)} ${m.gelYil.toFixed(0).padStart(18)}`); // TM23: sahibi disarida olan yol yilda 0,12, sahibi iceride olan yol 0,20 olasilikla kesilir. // Dis yol yalniz "al" seceneginde vardir; ic yol (kaynak sistemler) iki secenekte de. const DIS = 0.12, IC = 0.20; const disBedel = K.cikisAl + (K.kurulum + m.uyarlanan * K.uyarlamaSaat) + m.alBag * K.alBag; const icBedelAl = KAYNAK_BAG * K.alBag, icBedelGel = KAYNAK_BAG * K.gelBag; const alYilR = m.alYil + DIS * disBedel + IC * icBedelAl; const gelYilR = m.gelYil + IC * icBedelGel; console.log("\nufuk (yil) al gelistir kazanan fark al (riskli) gelistir (riskli) kazanan"); console.log("---------- ------- --------- -------- ------ -------------- ------------------ --------"); for (const ufuk of [1, 2, 3, 4, 5, 8]) { const a = tso(m.alBir, m.alYil, ufuk), g = tso(m.gelBir, m.gelYil, ufuk); const ar = tso(m.alBir, alYilR, ufuk), gr = tso(m.gelBir, gelYilR, ufuk); console.log(`${String(ufuk).padStart(10)} ${a.toFixed(0).padStart(7)} ${g.toFixed(0).padStart(9)} ` + `${(a < g ? "al" : "gelistir").padStart(8)} ${Math.abs(a - g).toFixed(0).padStart(6)} ` + `${ar.toFixed(0).padStart(14)} ${gr.toFixed(0).padStart(18)} ${(ar < gr ? "al" : "gelistir").padStart(8)}`); } console.log(`\nsahibi disarida olan nokta: al ${m.uyarlanan + 1}, gelistir 0; ` + `sahibi iceride olan bag: iki secenekte de ${KAYNAK_BAG}`); console.log(`kesilme bedeli: dis ${disBedel} saat (al), ic ${icBedelAl} / ${icBedelGel} saat; ` + `yillik beklenen al ${(DIS * disBedel + IC * icBedelAl).toFixed(1)}, gelistir ${(IC * icBedelGel).toFixed(1)} saat`); console.log(`basabas ufuk: risksiz ${basabas(m.alBir, m.alYil, m.gelBir, m.gelYil).toFixed(2)} yil, ` + `riskli ${basabas(m.alBir, alYilR, m.gelBir, gelYilR).toFixed(2)} yil`); console.log("\nyerlesik uyarlanan al (bir kez) al (yillik) basabas ufuk (yil) 5 yilda kazanan"); console.log("--------- ---------- ------------- ------------ ------------------- ----------------"); for (const yerlesik of [6, 9, 11, 14, 17]) { const s = kalemler(yerlesik); const b = basabas(s.alBir, s.alYil, s.gelBir, s.gelYil); const kazanan = tso(s.alBir, s.alYil, 5) < tso(s.gelBir, s.gelYil, 5) ? "al" : "gelistir"; console.log(`${String(yerlesik).padStart(9)} ${String(s.uyarlanan).padStart(10)} ` + `${s.alBir.toFixed(0).padStart(13)} ${s.alYil.toFixed(0).padStart(12)} ${b.toFixed(2).padStart(19)} ` + `${kazanan.padStart(16)}`); }
ihtiyac 18 yetenek, urun 11 tanesini yerlesik sagliyor, 7 tanesi uyarlanacak; bag: al 6, gelistir 5
kalem al (bir kez) al (yillik) gelistir (bir kez) gelistir (yillik)
------------------ ------------ ------------ ------------------- ------------------
uyarlama 138 0 468 0
tumlestirme bagi 132 0 60 0
egitim 36 36 54 9
surum yukseltme 0 78 0 45
cikis 96 0 24 0
toplam 402 114 606 54
ufuk (yil) al gelistir kazanan fark al (riskli) gelistir (riskli) kazanan
---------- ------- --------- -------- ------ -------------- ------------------ --------
1 516 660 al 144 582 672 al
2 630 714 al 84 762 738 gelistir
3 744 768 al 24 942 804 gelistir
4 858 822 gelistir 36 1122 870 gelistir
5 972 876 gelistir 96 1302 936 gelistir
8 1314 1038 gelistir 276 1841 1134 gelistir
sahibi disarida olan nokta: al 8, gelistir 0; sahibi iceride olan bag: iki secenekte de 5
kesilme bedeli: dis 366 saat (al), ic 110 / 60 saat; yillik beklenen al 65.9, gelistir 12.0 saat
basabas ufuk: risksiz 3.40 yil, riskli 1.79 yil
yerlesik uyarlanan al (bir kez) al (yillik) basabas ufuk (yil) 5 yilda kazanan
--------- ---------- ------------- ------------ ------------------- ----------------
6 12 472 144 1.49 gelistir
9 9 430 126 2.44 gelistir
11 7 402 114 3.40 gelistir
14 4 360 96 5.86 al
17 1 318 78 12.00 al
Kazanan Zaman Ufkuna Bağlıdır
İlk tablo iki seçeneği beş kaleme ayırıyor ve kalemlerin farklı yönlere baktığını gösteriyor. Satın alma bir kez ödenende üçte bir kadar ucuz (402’ye karşı 606 saat) ama yıllıkta iki kattan fazla pahalı (114’e karşı 54 saat). İki kalem bu farkı üretiyor. Sürüm yükseltme kalemi satın almada 78 saat, geliştirmede 45 saattir; satın almadaki sayı ürünün kendi takvimine değil, o takvimin kaç noktaya dokunduğuna bağlıdır — yedi uyarlama noktası ve altı bağ. Uyarlama azalırsa yükseltme de ucuzlar; uyarlama arttıkça her sürüm daha pahalıya gelir.
Bağ kalemi ikinci farkı taşıyor. Satın alınan yol beş kaynağa değil altısına bağlanıyor, çünkü ürün veriyi kendi kopyasında ister; ve her bağ kendi uyarlayıcısını gerektirdiği için bağ başına maliyet 22 saat, içeride yazılanda 12 saattir. Aynı beş kaynak, iki seçenekte 132’ye karşı 60 saat ediyor.
İkinci tablo bu iki doğruyu ufuk boyunca izliyor. Bir yıllık ufukta satın alma 144 saat önde, üç yılda fark 24 saate iniyor, dördüncü yılda geliştirme öne geçiyor. Kesişim tam olarak 3,40 yıldadır. Üç yıllık satırdaki 24 saatlik fark, katsayıların birini biraz farklı seçmenin kazananı değiştireceği kadar küçüktür; kararı savunan belge tek bir kazanan adı değil, ufku ve farkı da yazmalıdır.
Bağımlılık Riski de Bir Kalemdir
Buraya kadarki hesap iki yolun da sorunsuz sürdüğünü varsayıyor. Kurum ölçeğinde bu varsayım tutmaz: bir yolun sahibi başkasıysa o yol kesilebilir ve kesilme bedeli ölçülebilir.
TM23: sahibi dışarıda olan bir yol yılda 0,12, sahibi içeride olan bir yol 0,20 olasılıkla kesilir. Satın alınan yolda sahibi dışarıda olan sekiz nokta var: yedi uyarlama noktası ve ürünün kendi veri kopyası bağı. Bunların kesilmesinin bedeli çıkış artı yeniden uyarlama artı bağlar, yani 366 saat. Geliştirilen yolda dışarıda sahip yoktur; iki seçenekte de beş kaynak bağının sahibi başka ekiplerdir ve onların kesilme bedeli satın almada 110, geliştirmede 60 saattir.
Yıllık beklenen bedel satın almada 65,9, geliştirmede 12,0 saat çıkıyor. Bu iki sayı yıllık kalemin üstüne eklendiğinde başabaş ufku 3,40 yıldan 1,79 yıla iniyor: risk hesaba katılmadan üç yıl boyunca kazanan görünen seçenek, katıldığında ikinci yıldan itibaren kaybediyor. Bağımlılık riski bir uyarı cümlesi değil, yıllık bir kalemdir; kaleme çevrilmediği sürece karara giremez.
Son tablo kararın aslında hangi değişkene bağlı olduğunu gösteriyor. Ürünün yerleşik sağladığı yetenek 6’dan 17’ye çıktığında başabaş ufku 1,49 yıldan 12,00 yıla uzuyor ve beş yıllık ufkun kazananı değişiyor. İki seçenek arasındaki fark, seçeneklerin adında değil, ürünün ihtiyacın ne kadarını hazır karşıladığındadır. Kapsam yükseldikçe uyarlama noktası azalıyor, uyarlama azaldıkça hem bir kez ödenen hem yıllık sürüm kalemi düşüyor; aynı hesap aynı katsayılarla ters yöne dönüyor.
Özet
- Toplam sahip olma maliyeti beş kalemdir: satın alma 402 saat artı yılda 114, geliştirme 606 saat artı yılda 54; bir kez ödenende ucuz olan seçenek yıllıkta pahalıdır (TM20, TM22).
- Sürüm yükseltme kalemi ürünün takvimine değil uyarlanan nokta sayısına bağlıdır: yedi uyarlama ve altı bağ yılda 78 saat ederken içeride yazılanın bakımı 45 saattir.
- Satın alınan yol beş kaynağa değil altısına bağlanır ve bağ başına 22 saat öder; aynı kaynaklar içeride yazılanda 60 saat eder. Bir ürünün kendi veri kopyası bir bağ kalemidir.
- Kazanan ufka bağlıdır: başabaş 3,40 yıl, üç yıllık ufuktaki fark yalnız 24 saat. Kararı savunan belge kazanan adıyla birlikte ufku ve farkı yazmalıdır.
- Bağımlılık riski yıllık bir kalemdir. Sahibi dışarıda olan sekiz nokta ve 366 saatlik kesilme bedeli yılda 65,9 saate karşılık geliyor; bu kalem eklendiğinde başabaş ufku 1,79 yıla iniyor (TM21, TM23).
Kurs Kapanışı
Kurs boyunca aynı kurgu ağ on kez modellendi ve her ders aynı ağdan farklı bir niceliği okudu.
| Ders | Modellenen kurum nesnesi | Ölçülen nicelik | Kararın bedeli |
|---|---|---|---|
| Kurumsal Mimari Kavramı | 9 sistem, 6 sahip, 13 yetenek, 10 veri varlığı | Hizalama 11/13; 2 boşluk, 6 örtüşme, 1 yetim sistem; 23 yönlü bağın 20’si sahiplik sınırını geçiyor | 6 örtüşmenin 5’i iki ayrı sahibe yayılıyor ve 5 uzlaşma gerektiriyor |
| Çerçeveler | Katman, görünüm, yönetişim döngüsü, olgunluk basamağı | Ayrıntılı biçim 12 sorunun 10’unu 106 kalemle, hafif biçim 5’ini 22 kalemle yanıtlıyor | Ek yanıt başına 16,8 kalem; değişiklik başına bakım 18’e karşı 2 kalem |
| İş Süreç Modelleme | 16 adımlı süreç; aktör, girdi kümesi, çıktı | 10 adım otomatik, 4’ü insan kararı; 8 aktör, 5 sahip, 10 el değiştirmenin 9’unda sahip değişiyor | Sınır zorlanınca 62 dokunuş kazanılıyor ama 10 yanlış karar ve 30 geri dönüş çıkıyor; başabaş 6,20 dokunuş |
| Yetenek Haritalama | Yetenek, karşılayan sistem, yazılan veri, okuyan sistem zinciri | 13 yeteneğin 11’i izlenebiliyor; kısa zincir 1,55, tam zincir 4,73 sistem gösteriyor | Koordinasyon turu 5’ten 29’a çıkıyor; dokunulacak sistemlerin yüzde 67’si ilk halkada görünmüyor |
| Tümleştirme Kalıpları | Tek bir bağın dört kalıpla kurulmuş hali | Uzak çağrıda yüz sorguya 100 kaynak isteği, ötekilerde 0; tazelik penceresi 0 ve 1 tik | Kaynak tek bir sütun adını değiştirince 5 bağın 3’ü sessizce yanlış yanıt veriyor, 3 sahibin 2’siyle koordinasyon gerekiyor |
| Kurumsal Servis Veri Yolu | Dokuz akışın ikili ve merkezî düzeni | 9’a karşı 8 yazılan birim; merkez 6 olay için 24 ileti işliyor; merkez kapalıyken 18 teslimden 0’ı gerçekleşiyor | Yedinci sistem 5 birim ve 4 sahipten 2 birim ve 2 sahibe iniyor; karşılığında merkezde sahibi başkası olan 4 kural birikiyor |
| Ana Veri Yönetimi | Üç sistemde tutulan üye kaydı ve altın kayıt | 720 yazma olayı dağıtık düzende 131, altın kayıtla 95 çakışan (üye, alan) çifti üretiyor | Kalan tutarsızlık iki düzende de 48; yazma adımı 1,00’dan 1,61’e çıkıyor, kaynak kapalıyken kabul edilen yazma 496/720’den 238/720’ye iniyor |
| Veri Ambarı ve Dönüştürme Hatları | Beş rapor, dört kaynak, sekiz adımlı dönüştürme hattı | Günde 163 sorgu ve 5.354.308 okunan kayıt; dönem taramasında işletim yükü yüzde 90,2, 27,2 ve 79,2 | Tek bir alan değişimi tek adımı kırıyor ama beş raporun beşi düşüyor; tazeliği bir saat olan rapor hiçbir dönemde ambara geçemiyor |
| Eski Sistemlerle Çalışma | Kaynak koduna erişilemeyen kayıt sistemi ve sarmalayıcı | 16 (çağıran, işlem) çiftinin 9’u kapanıyor, yüzde 71,8 çağrı; 7 çift ve 16.927 çağrı dışarıda kalıyor | Koordinasyon 24 adımdan 13’e iniyor ama birlikte yazılan pencere en yavaş sahibin turu yüzünden 30 günün altına inmiyor |
| Al veya Geliştir Kararı | Bir yeteneğin iki seçeneği ve beş maliyet kalemi | Satın alma 402 saat artı yılda 114, geliştirme 606 artı yılda 54; başabaş 3,40 yıl | Sahibi dışarıda olan 8 nokta yılda 65,9 saatlik beklenen bedel getiriyor ve başabaş ufku 1,79 yıla iniyor |
On dersin ortak kuralı tek cümledir: kurum ölçeğinde ölçü bağdır. Bir sistemin içinde ölçüm birimi çağrı, kayıt ya da saniyeydi. Kurum ölçeğinde bunların hiçbiri tek başına karar taşımıyor; her tabloda belirleyici olan bağ sayısı ve yönü, o bağın hangi sahiplik sınırını geçtiği ve bir değişimin kaç sahibi koordinasyona çağırdığı oldu. Sarmalayıcının kapsamı da, altın kaydın seçimi de, ambarın dönemi de aynı yerde sınırlandı: kendi kararının ulaşamadığı sahipte.
Kursun bıraktığı boşluk şudur. Bağlar kuruldu ve sayıldı, sahiplik ayrıldı, alınacak ile geliştirilecek ayrıldı — ama bu kararların hiçbiri hangi niteliği koruduğunu söylemedi. Bir merkezî düzen neyin uğruna seçildi: erişilebilirlik mi, değiştirilebilirlik mi, tutarlılık mı? Üstelik kararların kâğıtta kalıp kalmadığını, verildikleri gibi sürüp sürmediğini denetleyen bir mekanizma da kurulmadı. Sıradaki kurs, M20/K04 Kalite Nitelikleri ve Yönetişim, bu iki soruyla açılır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.