Ders 03 / 10
İş Süreç Modelleme
Bir iş sürecinin adım adım modellenmesi ve her adımın üç sınıfa ayrılması — tümüyle otomatik, insan kararı gerektiren, sistem dışı: otomasyon sınırının modelden türetilmesi, sürecin dolaştığı aktör ve sahip sayısı, sınırı zorlayarak otomatikleştirilen adımın ürettiği yanlış karar ve geri dönüş sayısı.
İçindekiler
Önceki iki ders kurumu duran bir yapı olarak ele aldı: sistemler, sahipler, yetenekler, kayıtlar. Oysa bir iş yeteneği envanterde tek satırdır ama gerçekleşirken adım adım işleyen bir süreçtir. “Ödünç verme” satırının arkasında kart okutmadan güvenlik etiketine kadar sıralanan onlarca işlem vardır ve bunların hepsi yazılımın içinde geçmez. Bu ders o satırı açar ve otomasyonun nerede durduğunu bir kurala bağlar.
Süreç Bir Adım Dizisidir
Süreç gösterimleri sembol kümesi bakımından farklılaşır; marka ve gösterim adı burada yazılmaz. Ortak yanları şudur: her adımın bir aktörü, bir girdi kümesi ve bir çıktısı vardır. Bu üç alan yazıldığında gösterimin kendisi ikincil kalır, çünkü ölçülebilir olan alanlardır.
Aktör her zaman bir sistem değildir. Ücretin bankoda tahsil edilmesi de, güvenlik etiketinin devre dışı bırakılması da sürecin adımıdır; ikisinin de aktörü yazılımın dışındadır. Bir süreç modelinin ilk işi bu adımları silmek değil, sınıflandırmaktır. Üç sınıf kullanılıyor: tümüyle otomatik, insan kararı gerektiren, sistem dışı.
Sınıflandırma bir görüşe bırakılmaz, modelden türetilir (KM9): bir adım ancak bütün girdileri yazanı olan bir veri varlığından geliyorsa ve karar için gereken hiçbir bilgi kalemi veri modelinin dışında kalmıyorsa otomatiktir. Bu kural iki farklı engeli birbirinden ayırır. Birincisi bilginin hiçbir yerde bulunmamasıdır — materyalin hasar derecesi hiçbir veri varlığında yoktur. İkincisi bilginin bir veri varlığı olarak var görünmesi ama onu yazan bir sistemin bulunmamasıdır; kurum modelindeki eski kayıt böyledir ve buna sahipsiz veri (ownerless data) deniyor.
// kurum/model.mjs — MODEL bolgesel kutuphane agi: sistemler, sahipler, yetenekler, veri. // Kurgudur; gercek bir kurum, satici, urun ya da kisi anlatilmaz. export const SISTEM = { katalog: { sahip: "dis-saglayici", butce: "hizmet-bedeli" }, odunc: { sahip: "bt-birimi", butce: "ic-gelistirme" }, ucretlendirme: { sahip: "bt-birimi", butce: "ic-gelistirme" }, uyelik: { sahip: "uye-hizmetleri", butce: "uye-hizmetleri" }, kimlik: { sahip: "belediye-bt", butce: "belediye" }, "sube-yerel": { sahip: "sube-yonetimi", butce: "sube" }, kiosk: { sahip: "sube-yonetimi", butce: "sube" }, raporlama: { sahip: "yonetim-birimi", butce: "yonetim" }, arsiv: { sahip: "yok", butce: "yok" }, }; // YETENEK — kurumun karsilamak zorunda oldugu is yetenekleri (sistemden bagimsiz liste) export const YETENEK = ["materyal-arama", "odunc-verme", "iade-alma", "ayirtma", "uyelik-acma", "uye-dogrulama", "ucret-hesaplama", "ucret-tahsilati", "subeler-arasi-aktarim", "demirbas-sayimi", "kullanim-raporlama", "satin-alma-onerisi", "gecikme-bildirimi"]; // KARSILAMA[s] = s sisteminin karsiladigini iddia ettigi yetenekler export const KARSILAMA = { katalog: ["materyal-arama", "demirbas-sayimi"], odunc: ["odunc-verme", "iade-alma", "ayirtma", "gecikme-bildirimi"], ucretlendirme: ["ucret-hesaplama", "gecikme-bildirimi"], uyelik: ["uyelik-acma", "uye-dogrulama"], kimlik: ["uye-dogrulama"], "sube-yerel": ["iade-alma", "subeler-arasi-aktarim", "demirbas-sayimi"], kiosk: ["odunc-verme", "materyal-arama"], raporlama: ["kullanim-raporlama"], arsiv: [], }; // VERI[v] = veri varligi; hangi sistem yaziyor, hangileri okuyor export const VERI = { "uye-kaydi": { yazan: ["uyelik"], okuyan: ["odunc", "ucretlendirme", "kiosk", "raporlama"] }, "kimlik-eslesmesi": { yazan: ["kimlik", "uyelik"], okuyan: ["odunc", "kiosk"] }, "materyal-kaydi": { yazan: ["katalog"], okuyan: ["odunc", "kiosk", "sube-yerel", "raporlama"] }, "nusha-durumu": { yazan: ["katalog", "odunc", "sube-yerel"], okuyan: ["kiosk", "raporlama"] }, "odunc-hareketi": { yazan: ["odunc", "kiosk"], okuyan: ["ucretlendirme", "raporlama"] }, "ucret-kaydi": { yazan: ["ucretlendirme"], okuyan: ["uyelik", "raporlama", "kiosk"] }, "ceza-kurali": { yazan: ["ucretlendirme"], okuyan: ["odunc", "kiosk"] }, "aktarim-istegi": { yazan: ["sube-yerel"], okuyan: ["odunc", "katalog"] }, "eski-kayit": { yazan: [], okuyan: ["arsiv", "raporlama"] }, "sayim-farki": { yazan: ["sube-yerel"], okuyan: [] }, }; export const SISTEMLER = Object.keys(SISTEM); export const sahibi = (s) => SISTEM[s].sahip; // bag = ayni veri varligi uzerinden yazan sistemden okuyan sisteme giden yonlu cift export function baglar() { const b = new Map(); for (const [v, d] of Object.entries(VERI)) for (const y of d.yazan) for (const o of d.okuyan) if (y !== o) b.set(`${y}->${o}`, [...(b.get(`${y}->${o}`) ?? []), v]); return b; }
Ölçüm
İkinci dosya ödünç alma sürecini on altı adım olarak modeller, sınıflandırmayı kuraldan türetir ve iki sınırı aynı iki yüz işlemde koşturur. İnsan kararı gerektiren adımların ne sıklıkta ortaya çıktığı, yanlış kararın kaç adımı geri döndürdüğü ve düzeltmenin kaç sistemde yazma gerektirdiği seçilmiş değerlerdir (KM10). Eksik bilgi kalemi başına yanlış karar olasılığı 0,15 alındı; eşiğin kaynağı budur ve duyarlılığı ayrıca basılıyor (KM11).
// kurum/surec.mjs — odunc alma sureci: adim siniflari, otomasyon siniri ve siniri zorlamanin bedeli import { VERI, sahibi } from "./model.mjs"; const sut = (s, n) => String(s).padEnd(n); // ADIM — MODEL odunc alma sureci; sistem null ise adim yazilimin disinda gecer (banko, raf). // eksik = adimin ihtiyac duydugu ama hicbir veri varliginda bulunmayan bilgi kalemi sayisi. const ADIM = [ { ad: "uye kart okutur", sistem: "kiosk", girdi: [] }, { ad: "kimlik dogrulanir", sistem: "kimlik", girdi: ["kimlik-eslesmesi"] }, { ad: "uyelik durumu sorgulanir", sistem: "uyelik", girdi: ["uye-kaydi"] }, { ad: "odenmemis ucret kontrol edilir", sistem: "ucretlendirme", girdi: ["ucret-kaydi"] }, { ad: "birikmis ucret vezneden tahsil edilir", sistem: null, girdi: [] }, { ad: "materyal barkodu okutulur", sistem: "kiosk", girdi: ["materyal-kaydi"] }, { ad: "nusha durumu sorgulanir", sistem: "katalog", girdi: ["nusha-durumu"] }, { ad: "baska subedeki nusha icin aktarim acilir", sistem: "sube-yerel", girdi: ["nusha-durumu"], eksik: 2, siklik: 0.12, duzeltmeAdim: 3, duzeltme: ["sube-yerel", "katalog", "odunc"] }, { ad: "materyalin hasar derecesi kaydedilir", sistem: "odunc", girdi: ["materyal-kaydi"], eksik: 1, siklik: 0.06, duzeltmeAdim: 2, duzeltme: ["odunc", "ucretlendirme"] }, { ad: "odunc suresi hesaplanir", sistem: "odunc", girdi: ["ceza-kurali", "uye-kaydi"] }, { ad: "arastirmaci uzatmasi taninir", sistem: "odunc", girdi: ["uye-kaydi"], eksik: 2, siklik: 0.04, duzeltmeAdim: 2, duzeltme: ["odunc", "uyelik"] }, { ad: "eski kayittaki borc sorgulanir", sistem: "odunc", girdi: ["eski-kayit"], siklik: 0.09, duzeltmeAdim: 4, duzeltme: ["odunc", "ucretlendirme", "raporlama"] }, { ad: "odunc kaydi yazilir", sistem: "odunc", girdi: ["uye-kaydi"] }, { ad: "nusha durumu guncellenir", sistem: "odunc", girdi: ["nusha-durumu"] }, { ad: "guvenlik etiketi devre disi birakilir", sistem: null, girdi: [] }, { ad: "gecikme bildirimi planlanir", sistem: "odunc", girdi: ["odunc-hareketi", "ceza-kurali"] }, ]; // Otomasyon sinirinin kurali: adim ancak butun girdileri yazani olan bir veri varligindaysa ve // disarida kalan bilgi kalemi yoksa otomatiklestirilebilir. const kaynaksiz = (a) => a.girdi.filter((v) => VERI[v].yazan.length === 0); function sinifla(a) { if (a.sistem === null) return ["sistem-disi", "yazilimin disinda gecer"]; if (a.eksik) return ["insan-karari", `${a.eksik} bilgi kalemi hicbir veride yok`]; if (kaynaksiz(a).length) return ["insan-karari", `yazani olmayan veri: ${kaynaksiz(a)[0]}`]; return ["otomatik", "-"]; } console.log(sut("adim", 42) + sut("aktor", 15) + sut("sinif", 14) + "neden"); console.log("-".repeat(102)); for (const a of ADIM) { const [s, n] = sinifla(a); console.log(sut(a.ad, 42) + sut(a.sistem ?? "banko/raf", 15) + sut(s, 14) + n); } const sinif = (s) => ADIM.filter((a) => sinifla(a)[0] === s); let enUzun = 0, akan = 0; for (const a of ADIM) { akan = sinifla(a)[0] === "otomatik" ? akan + 1 : 0; enUzun = Math.max(enUzun, akan); } const aktor = (a) => a.sistem ?? "banko/raf"; const sahip = (a) => (a.sistem ? sahibi(a.sistem) : "sube-yonetimi"); const elDegistirme = ADIM.slice(1).filter((a, i) => aktor(a) !== aktor(ADIM[i])); const sahipAsan = ADIM.slice(1).filter((a, i) => sahip(a) !== sahip(ADIM[i])); console.log(`\n${ADIM.length} adim: ${sinif("otomatik").length} otomatik, ` + `${sinif("insan-karari").length} insan karari, ${sinif("sistem-disi").length} sistem disi`); console.log(`en uzun kesintisiz otomatik dizi: ${enUzun} adim`); console.log(`el degistirme: ${elDegistirme.length}, bunlarin ${sahipAsan.length}'i sahip degistiriyor; ` + `surec ${new Set(ADIM.map(aktor)).size} aktor ve ${new Set(ADIM.map(sahip)).size} sahip dolasiyor`); // ---- siniri zorlamak: insan karari gerektiren adimlar otomatiklestirilirse ---- const P = 0.15; // secilmis kural: eksik her bilgi kalemi icin yanlis karar olasiligi const hata = (a) => 1 - (1 - P) ** (a.eksik ?? 1); const uretec = (t) => { let s = t >>> 0; return () => (s = (s * 1664525 + 1013904223) >>> 0) / 2 ** 32; }; const rast = uretec(90210); // tohum gorunur; ayni tohum ayni sayilari verir const N = 200; const insan = sinif("insan-karari"); let olay = 0, yanlis = 0, geriAdim = 0, duzeltmeYazma = 0, sahipAsanDuzeltme = 0; for (let i = 0; i < N; i++) for (const a of insan) { if (rast() >= a.siklik) continue; olay++; if (rast() >= hata(a)) continue; yanlis++; geriAdim += a.duzeltmeAdim; duzeltmeYazma += a.duzeltme.length; if (new Set(a.duzeltme.map(sahibi)).size > 1) sahipAsanDuzeltme++; } console.log(`\n${N} odunc islemi, tohum 90210, yanlis karar olasiligi kalem basina ${P}`); console.log(sut("sinir", 18) + sut("insan dokunusu", 16) + sut("yanlis karar", 14) + sut("geri donulen adim", 19) + "duzeltme yazmasi"); console.log("-".repeat(84)); console.log(sut("mevcut", 18) + sut(olay, 16) + sut(0, 14) + sut(0, 19) + 0); console.log(sut("zorlanmis", 18) + sut(0, 16) + sut(yanlis, 14) + sut(geriAdim, 19) + duzeltmeYazma); console.log(`\nzorlanmis sinir ${olay} insan dokunusundan kacinir, karsiliginda ${yanlis} yanlis ` + `karar uretir`); console.log(`bu ${yanlis} geri donusun ${sahipAsanDuzeltme}'i birden cok sahibi ilgilendiriyor`); console.log(`basabas: bir geri donus ${(olay / yanlis).toFixed(2)} insan dokunusundan pahaliysa ` + `mevcut sinir kazanir`); console.log("olasilik duyarliligi (beklenen deger):"); for (const p of [0.1, 0.15, 0.2]) { const bek = insan.reduce((t, a) => t + N * a.siklik * (1 - (1 - p) ** (a.eksik ?? 1)), 0); const bekOlay = insan.reduce((t, a) => t + N * a.siklik, 0); console.log(` p=${p.toFixed(2)} -> beklenen yanlis ${bek.toFixed(1)}, ` + `basabas ${(bekOlay / bek).toFixed(2)} dokunus`); }
adim aktor sinif neden ------------------------------------------------------------------------------------------------------ uye kart okutur kiosk otomatik - kimlik dogrulanir kimlik otomatik - uyelik durumu sorgulanir uyelik otomatik - odenmemis ucret kontrol edilir ucretlendirme otomatik - birikmis ucret vezneden tahsil edilir banko/raf sistem-disi yazilimin disinda gecer materyal barkodu okutulur kiosk otomatik - nusha durumu sorgulanir katalog otomatik - baska subedeki nusha icin aktarim acilir sube-yerel insan-karari 2 bilgi kalemi hicbir veride yok materyalin hasar derecesi kaydedilir odunc insan-karari 1 bilgi kalemi hicbir veride yok odunc suresi hesaplanir odunc otomatik - arastirmaci uzatmasi taninir odunc insan-karari 2 bilgi kalemi hicbir veride yok eski kayittaki borc sorgulanir odunc insan-karari yazani olmayan veri: eski-kayit odunc kaydi yazilir odunc otomatik - nusha durumu guncellenir odunc otomatik - guvenlik etiketi devre disi birakilir banko/raf sistem-disi yazilimin disinda gecer gecikme bildirimi planlanir odunc otomatik - 16 adim: 10 otomatik, 4 insan karari, 2 sistem disi en uzun kesintisiz otomatik dizi: 4 adim el degistirme: 10, bunlarin 9'i sahip degistiriyor; surec 8 aktor ve 5 sahip dolasiyor 200 odunc islemi, tohum 90210, yanlis karar olasiligi kalem basina 0.15 sinir insan dokunusu yanlis karar geri donulen adim duzeltme yazmasi ------------------------------------------------------------------------------------ mevcut 62 0 0 0 zorlanmis 0 10 30 27 zorlanmis sinir 62 insan dokunusundan kacinir, karsiliginda 10 yanlis karar uretir bu 10 geri donusun 8'i birden cok sahibi ilgilendiriyor basabas: bir geri donus 6.20 insan dokunusundan pahaliysa mevcut sinir kazanir olasilik duyarliligi (beklenen deger): p=0.10 -> beklenen yanlis 9.1, basabas 6.83 dokunus p=0.15 -> beklenen yanlis 13.4, basabas 4.63 dokunus p=0.20 -> beklenen yanlis 17.5, basabas 3.54 dokunus
Sınır Nereden Geçiyor
On altı adımın onu otomatik, dördü insan kararı, ikisi sistem dışı. Bu üç sayı tek başına otomasyon oranını verir ama sınırın yerini vermez. Yeri veren sayı, en uzun kesintisiz otomatik dizinin uzunluğudur: dört adım. Süreç dört adım otomatik ilerliyor, sonra bankoya düşüyor; iki adım daha otomatik gidiyor, sonra iki insan kararına takılıyor. Otomasyonun değeri adım sayısında değil, kesintisiz dizinin uzunluğundadır — her kesinti bir bekleme, bir devir ve yeniden başlama demektir.
Kurum ölçeğinde asıl sayı el değiştirmedir. On altı adım boyunca on kez aktör değişiyor ve bu on değişimin dokuzunda sahip de değişiyor. Süreç sekiz aktör ve beş ayrı sahip dolaşıyor. Bir sürecin kurumsal maliyeti buradan okunur: teknik olarak on altı adımlık bir akış, örgütsel olarak dokuz sınır geçişidir.
İnsan kararı gerektiren dört adımın gerekçeleri aynı değil. Üçünde bilgi hiçbir veri varlığında yok. Dördüncüsü farklıdır: eski kayıttaki borcun sorgulanması bir veri varlığına dayanıyor, ama o veriyi yazan sistem yok. Sahipsiz veri, sürecin içinde bir insan kararı olarak geri dönüyor — kurumsal mimarideki bir boşluk, süreçte bir personel adımına dönüşür.
Sınırı Zorlamanın Bedeli
İkinci tablo aynı iki yüz ödünç işlemini iki sınırla koşturuyor. Mevcut sınırda dört adım personele bırakılıyor; iki yüz işlemde bu adımlar 62 kez ortaya çıkıyor ve 62 insan dokunuşu harcanıyor. Zorlanmış sınırda dördü de otomatikleştiriliyor; insan dokunuşu sıfıra iniyor, karşılığında yanlış kararlar başlıyor.
Tohumu 90210 olan üreteçle bu koşumda 10 yanlış karar çıktı; beklenen değer 13,4 olduğu için sayı koşuma bağlıdır ve tohum değişirse değişir. On yanlış karar 30 adımı geri döndürüyor ve düzeltme 27 kez sistemde yazma gerektiriyor. Asıl kurumsal sayı sonuncusudur: on geri dönüşün sekizi birden çok sahibi ilgilendiriyor. Yanlış otomatikleştirilen bir adımın bedeli tek bir ekranın düzeltilmesi değil, iki ya da üç ayrı bütçenin sahibinin aynı kaydı uzlaştırmasıdır.
Karar buradan okunur: bir geri dönüşün uzlaştırılması 6,20 insan dokunuşundan pahalıysa mevcut sınır kazanır. Bu sayı olasılığa duyarlıdır — eksik bilgi kalemi başına yanlış karar olasılığı 0,10 olduğunda başabaş 6,83 dokunuşa çıkıyor, 0,20 olduğunda 3,54’e iniyor. Otomasyon sınırını zorlamak bir cesaret sorunu değil, bu iki sayının karşılaştırılmasıdır: kaçınılan dokunuş ve üretilen geri dönüş.
Özet
- Bir süreç adımının üç alanı ölçülebilir: aktör, girdi kümesi, çıktı; gösterimin sembol kümesi bu alanların yanında ikincildir.
- Otomasyon sınırı kuraldan türetilir: adım ancak bütün girdileri yazanı olan bir veri varlığındaysa ve dışarıda kalan bilgi kalemi yoksa otomatiktir.
- Model süreçte 16 adımın 10’u otomatik, 4’ü insan kararı, 2’si sistem dışı; en uzun kesintisiz otomatik dizi 4 adım.
- Süreç 8 aktör ve 5 sahip dolaşıyor; 10 el değiştirmenin 9’unda sahip de değişiyor.
- Sınır zorlandığında 62 insan dokunuşundan kaçınılıyor, karşılığında bu koşumda 10 yanlış karar, 30 geri dönülen adım ve 27 düzeltme yazması çıkıyor; geri dönüşlerin 8’i birden çok sahibi ilgilendiriyor ve başabaş noktası 6,20 dokunuştur.
Sonraki Adım
Bu ders tek bir yeteneğin tek bir sürecini açtı ve o sürecin hangi sistemlerden geçtiğini saydı. Kurumda on üç yetenek var ve her birinin arkasında benzer bir zincir duruyor. Bir yetenek değiştiğinde — ödünç süresi kuralı yenilendiğinde, üyelik koşulu değiştiğinde — hangi sistemlere dokunulacağı, o sistemlerin hangi veriyi yazdığı ve o veriyi kimin okuduğu tek tek izlenmedikçe bilinmez. Sonraki ders yetenek, sistem ve veri arasında bir izlenebilirlik zinciri kurar; bir yeteneğin değişmesi durumunda dokunulacak sistem sayısını ve zincirin koptuğu yerleri sayar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.