İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat