Ders 05 / 24
Rakip ve Mevcut Durum Çözümlemesi
Var olan çözümlerin karar karar okunması; yerleşik alışkanlığın benimseme oranıyla saptanması, sapmanın bedelinin adım sayısıyla ölçülmesi ve inceleme sırasında uyulan sınırlar.
İçindekiler
Yolculuk haritası kendi arayüzümüzün nerede kaybettiğini gösterdi ama bu kayıpların kaçınılmaz olup olmadığını söylemedi. Aynı işi yapan başka sistemler var ve verdikleri kararlar dışarıdan gözlenebilir. Bu ders o gözlemi bir veri kümesine çevirir.
Amaç taklit değil. Var olan çözümlerin okunması iki ayrı bilgi verir. Birincisi, hangi kararların yerleşik olduğu: bütün sistemlerde aynı biçimde çözülmüş bir sorun, kullanıcının zaten öğrendiği bir örüntüdür ve ondan sapmak öğrenme maliyeti doğurur. İkincisi, hangi kararların açık olduğu: sistemlerin birbirinden ayrıldığı yerler, tasarımcının gerçekten karar vereceği yerlerdir.
Sistemleri Karara Ayırmak
Çözümleme, “hangisi daha iyi” sorusuyla değil, “hangi kararlar alınmış” sorusuyla başlar. Her sistem bir karar listesine indirgenir ve liste bütün sistemler için aynıdır; ancak o zaman karşılaştırılabilir.
Karar, gözlenebilir ve iki değerli olmalıdır: sistemde var mı, yok mu. “Arama iyi çalışıyor” bir karar değil, bir yargıdır. “Kayıt açıldıktan sonra listeye dönüldüğünde arama terimi korunuyor” bir karardır; bakılır ve yanıtı yazılır.
// mevcut-durum.mjs — yerlesik aliskanliklarin saptanmasi ve adim sayisi karsilastirmasi // A: su anki katalog arayuzumuz. B-E: ayni isi yapan, incelenen dort sistem. // (ders icin kurulmus veri) const SISTEMLER = ["A", "B", "C", "D", "E"]; const KARARLAR = [ { ad: "arama alani ust orta", var: ["A", "B", "C", "D", "E"] }, { ad: "odunc al kayit ayrintisinda", var: ["A", "B", "C", "D", "E"] }, { ad: "geri donuste arama korunur", var: ["B", "C", "D", "E"] }, { ad: "sonuc sayisi gosterilir", var: ["A", "B", "D", "E"] }, { ad: "listede rafta mi rozeti", var: ["B", "C", "D"] }, { ad: "daraltmalar solda", var: ["A", "B", "D"] }, { ad: "okuma listesi", var: ["A", "C", "E"] }, { ad: "konu agacindan gezinme", var: ["C", "D"] }, { ad: "raf kodu listede", var: ["C"] }, { ad: "kayit yeni sekmede acilir", var: ["E"] }, ]; const N = SISTEMLER.length; const sinif = (o) => (o >= 0.8 ? "yerlesik" : o >= 0.4 ? "bolunmus" : "ayirt edici"); console.log("karar benimseyen oran sinif bizde"); const sapmalar = []; for (const k of KARARLAR) { const oran = k.var.length / N; const bizde = k.var.includes("A"); if (sinif(oran) === "yerlesik" && !bizde) sapmalar.push(k.ad); console.log( `${k.ad.padEnd(28)} ${k.var.join("").padEnd(11)} ${oran.toFixed(2)} ${sinif(oran).padEnd(12)} ${bizde ? "var" : "YOK"}` ); } console.log(`\nyerlesik aliskanliktan sapma: ${sapmalar.length ? sapmalar.join(", ") : "yok"}`); // Ayni gorevin her sistemde kac ekran adimiyla tamamlandigi (sayarak gozlendi) const GOREVLER = [ { ad: "bilinen kaydi bul ve odunc al", adim: { A: 7, B: 5, C: 6, D: 5, E: 8 } }, { ad: "konu tara ve uc kaydi karsilastir", adim: { A: 13, B: 9, C: 11, D: 12, E: 10 } }, ]; const ortanca = (dizi) => { const s = [...dizi].sort((x, y) => x - y); const o = s.length >> 1; return s.length % 2 ? s[o] : (s[o - 1] + s[o]) / 2; }; console.log("\ngorev " + SISTEMLER.map((s) => s.padStart(2)).join(" ") + " en az ortanca bizim farkimiz"); for (const g of GOREVLER) { const degerler = SISTEMLER.map((s) => g.adim[s]); const ort = ortanca(degerler); const fark = g.adim.A - ort; console.log( `${g.ad.padEnd(34)} ${degerler.map((v) => String(v).padStart(2)).join(" ")} ` + `${String(Math.min(...degerler)).padStart(5)} ${String(ort).padStart(7)} ${(fark >= 0 ? "+" : "") + fark} adim` ); } // Karsilastirma gorevinin adim adim modeli: durum korunuyor mu korunmuyor mu function adimSayisi(durumKorunur, kayitSayisi) { let a = 3; // terimi yaz, aramayi calistir, daraltmayi uygula for (let i = 0; i < kayitSayisi; i++) { a += 2; // kaydi ac, listeye don if (!durumKorunur && i < kayitSayisi - 1) a += 2; // terimi yeniden yaz, daraltmayi yeniden uygula } return a; } console.log("\nkarsilastirma gorevi modeli (3 kayit)"); console.log(` durum korunuyor : ${adimSayisi(true, 3)} adim`); console.log(` durum korunmuyor : ${adimSayisi(false, 3)} adim`); console.log(` farkin kaynagi : ${adimSayisi(false, 3) - adimSayisi(true, 3)} adim, tek bir karardan`); console.log(` gozlenen A : ${GOREVLER[1].adim.A} adim, gozlenen en az (B): ${Math.min(...SISTEMLER.map((s) => GOREVLER[1].adim[s]))} adim`); // Kayit sayisi arttikca fark nasil buyuyor console.log("\nkarsilastirilan kayit korunur korunmaz fark"); for (const k of [2, 3, 5, 8]) { const e = adimSayisi(true, k), h = adimSayisi(false, k); console.log(`${String(k).padStart(21)} ${String(e).padStart(7)} ${String(h).padStart(8)} ${h - e}`); }
karar benimseyen oran sinif bizde
arama alani ust orta ABCDE 1.00 yerlesik var
odunc al kayit ayrintisinda ABCDE 1.00 yerlesik var
geri donuste arama korunur BCDE 0.80 yerlesik YOK
sonuc sayisi gosterilir ABDE 0.80 yerlesik var
listede rafta mi rozeti BCD 0.60 bolunmus YOK
daraltmalar solda ABD 0.60 bolunmus var
okuma listesi ACE 0.60 bolunmus var
konu agacindan gezinme CD 0.40 bolunmus YOK
raf kodu listede C 0.20 ayirt edici YOK
kayit yeni sekmede acilir E 0.20 ayirt edici YOK
yerlesik aliskanliktan sapma: geri donuste arama korunur
gorev A B C D E en az ortanca bizim farkimiz
bilinen kaydi bul ve odunc al 7 5 6 5 8 5 6 +1 adim
konu tara ve uc kaydi karsilastir 13 9 11 12 10 9 11 +2 adim
karsilastirma gorevi modeli (3 kayit)
durum korunuyor : 9 adim
durum korunmuyor : 13 adim
farkin kaynagi : 4 adim, tek bir karardan
gozlenen A : 13 adim, gozlenen en az (B): 9 adim
karsilastirilan kayit korunur korunmaz fark
2 7 9 2
3 9 13 4
5 13 21 8
8 19 33 14
Üç Karar Sınıfı
Benimseme oranı kararları üç sınıfa ayırır ve her sınıf ayrı bir tasarım tutumu gerektirir.
Yerleşik karar (0.80 ve üstü). Arama alanının üst ortada durması ve ödünç alma eyleminin kayıt ayrıntısında bulunması beş sistemin beşinde de aynı. Bu kararlar tartışmaya açılmaz; kullanıcı bunları başka yerlerde öğrenmiştir ve arayüz o öğrenmeyi devralır. Yerleşik karardan sapmak yasak değildir, ama sapmanın karşılığında ölçülebilir bir kazanç gösterilmelidir.
Bölünmüş karar (0.40 – 0.80). Rafta olma bilgisinin listede gösterilmesi, daraltmaların konumu, okuma listesinin bulunması: sistemler ikiye ayrılıyor. Bu kararlar gerçek tasarım kararlarıdır ve kendi kullanıcı verimizle çözülürler. Bölünmüş bir kararda “herkes böyle yapıyor” savı kullanılamaz, çünkü herkes böyle yapmıyor.
Ayırt edici karar (0.40 altı). Raf kodunun listede gösterilmesi yalnızca C’de, kaydın yeni sekmede açılması yalnızca E’de var. Bu kararlar ya bir üstünlüktür ya da denenip yaygınlaşmamış bir seçimdir; ikisini ayırt etmenin tek yolu, o sistemin niçin böyle yaptığını kendi bağlamında sormaktır. Kopyalanmaya en uygun görünen kararlar bunlardır ve en riskli olanlar da bunlardır.
Sapmanın Bedeli Ölçülebilir
Karar listesinde tek bir yerleşik alışkanlık sapması var: geri dönüşte aramanın korunması
dört sistemde varken bizimkinde yok. İlk derste on iki görüşmenin dördünde geçen
geri-donusta-arama-kayip kodu ile aynı olguya bakıyoruz; şimdi bedeli sayıya bağlanıyor.
Adım modeli, üç kaydı karşılaştırma görevini iki koşulda kuruyor. Durum korunduğunda görev dokuz adım, korunmadığında on üç adım. Fark dört adım ve tamamı tek bir karardan geliyor. Gözlenen sayılar modeli doğruluyor: bizim arayüzümüz on üç adım, en az adımla tamamlayan sistem dokuz adım.
Son tablo asıl kısıtı gösteriyor. Fark sabit değil; karşılaştırılan kayıt sayısıyla birlikte büyüyor. İki kayıtta iki adım, üç kayıtta dört adım, sekiz kayıtta on dört adım. İkinci derste kurulan “konu tarayan” profili tam olarak bu görevi yapıyor ve oturumu yirmi bir buçuk dakika sürüyor. Sapmanın bedelini en çok ödeyen kullanıcı, arayüzü en çok kullanan kullanıcıdır.
Buradan çıkan kural, karşılaştırmanın nasıl okunacağını belirler: adım sayısı tek bir görev için değil, görevin büyüklük aralığı için hesaplanır. Küçük örnekte önemsiz görünen bir fark, gerçek kullanımda doğrusal olarak büyüyebilir.
Ortanca ile En İyinin Farkı
Tabloda iki karşılaştırma ölçütü var ve ikisi ayrı sorulara yanıt veriyor. Ortancaya göre fark, arayüzün alışılmış olandan ne kadar uzaklaştığını söyler; bilinen kaydı bulma görevinde bir adım, karşılaştırma görevinde iki adım. En az adımla tamamlayan sisteme göre fark ise ulaşılabilir sınırı söyler: karşılaştırma görevinde dört adım.
Hedef olarak ortanca seçilirse arayüz ortalama kalır. En iyi seçilirse hedef nettir ama o sistemin başka kısıtları olabilir; sekiz adımla tamamlayan E sisteminin kaydı yeni sekmede açması, bu görevde onu yavaşlatan ama başka bir görevde işine yarayan bir karardır. Bir sistemin bir görevdeki üstünlüğü, bütün kararlarının doğru olduğu anlamına gelmez.
İncelemenin Sınırları
Var olan sistemleri incelemek, başkalarının arayüzüyle ve çoğu zaman başkalarının verisiyle temas etmektir.
Sıradan kullanıcı olarak incelenir. Karar listesi, herkese açık arayüzde gözlenebilen şeylerden oluşur. Kapalı bölümlere erişmek için sahte üyelik oluşturmak, başka bir kurumun kayıtlarını toplu indirmek ya da erişim kısıtlarını aşmak inceleme değildir ve çözümlemenin dışındadır.
Başkasının kullanıcısı gözlenecekse aynı kurallar geçerlidir. Bir başka kütüphanenin kullanıcılarını izlemek, kendi katılımcılarımızı izlemekle aynı onay ve kimliksizleştirme yükümlülüğünü doğurur; kurumun izni ayrıca alınır.
İçerik değil karar aktarılır. Bir sistemin kayıt açıklamaları, sınıflandırma verisi ya da metinleri o kurumun emeğidir. Çözümlemeden alınan şey “arama terimi korunuyor” bilgisidir, metnin kendisi değil.
Karar listesi kaynağıyla birlikte saklanır. Hangi sistemde, hangi tarihte, hangi görev denenerek gözlendiği yazılır. Arayüzler değişir; tarihi olmayan bir karar listesi bir yıl sonra doğrulanamaz.
Özet
- Çözümleme “hangisi daha iyi” sorusuyla değil, bütün sistemler için ortak ve iki değerli bir karar listesiyle yapılır.
- Benimseme oranı kararları yerleşik, bölünmüş ve ayırt edici olarak ayırır; yerleşikten sapmak ölçülebilir bir kazanç gerektirir, bölünmüş kararlar kendi verimizle çözülür.
- Örnek veride tek yerleşik sapma “geri dönüşte aramanın korunmaması”; adım modeli bu tek kararın üç kayıtlık karşılaştırmada dört adım eklediğini ve gözlenen sayılarla uyuştuğunu gösterdi.
- Sapmanın bedeli görev büyüklüğüyle birlikte artar: sekiz kaydın karşılaştırıldığı bir oturumda fark on dört adıma çıkıyor ve bedeli en çok arayüzü en çok kullanan öder.
- İnceleme herkese açık arayüzle sınırlıdır; sahte üyelik, toplu veri indirme ve içerik aktarımı çözümlemenin dışındadır ve karar listesi tarihiyle birlikte saklanır.
Sonraki Adım
Beş ders boyunca veri biriktirildi: on kod, üç profil, yedi görev, bir yolculuk haritası ve bir karar listesi. Bu birikim henüz bir tasarım işi değil, bir malzeme yığınıdır. Sonraki ders yığını tek bir cümleye indirger: problem tanımı. Bulguların hangi ölçütle sıralanacağını, bir problem tanımının hangi parçalardan oluştuğunu ve içine çözümün sızmasının niçin en sık yapılan hata olduğunu ele alır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.