---
title: 'İlerleme ve Geri Bildirim'
source: 'https://academia.sh/tr/kurslar/kullanici-deneyimi/ilerleme-ve-geri-bildirim'
course: 'Kullanıcı Deneyimi ve Davranış Tasarımı'
language: tr
updated: '2026-08-17T18:09:38+00:00'
license: 'CC BY-SA 4.0'
---

# İlerleme ve Geri Bildirim

İlerleme göstergesinin kalan işi doğru bildirip bildirmediğinin hesaplanması, tamamlama oranını yükselten yanıltmanın ayırt edilmesi ve geri bildirim gecikmesinin gösterge sınıflarına bağlanması.

Önceki ders arayüzün kullanıcıya başkaları hakkında verdiği bilgiyi ele aldı. Arayüzün
verdiği bir bilgi türü daha var ve doğrudan kullanıcının kendisiyle ilgili: akışın
neresinde olduğu, ne kadar yol aldığı, ne kadar kaldığı.

Bu bilgi kullanıcının tek bir kararını besler: devam etmek mi, çıkmak mı? Karar her adım
sonunda yeniden verilir ve kullanıcının elindeki tek girdi, kalan işin ne kadar olduğuna
dair tahminidir. Bu ders o tahmini ölçer, göstergenin tahmini nasıl değiştirdiğini
hesaplar ve tamamlama oranını yükselten bir göstergenin ne zaman bilgi ne zaman yanıltma
olduğunu ayırır.

## Adım Sayısı Zamanı Ölçmez

Ödünç alma akışı altı adımdan oluşuyor ama adımlar eşit uzunlukta değil. Kayıt ayrıntısını
açmak 0.8 saniye, nüsha seçimi 5.1 saniye sürüyor. Bir ilerleme çubuğu iki farklı biçimde
doldurulabilir: adım sayısına göre (altı adımın üçü bitti, yüzde 50) ya da süreye göre
(harcanan sürenin toplam süreye oranı).

Aşağıdaki hesap iki çubuğun kalan süre tahminini karşılaştırıyor, sonra üç bin kullanıcının
devam etme kararını benzetiyor.

```js
// ilerleme.mjs — ilerleme gostergesinin dogrulugu ve terk uzerindeki etkisi

function uretec(tohum) {
  let s = tohum >>> 0;
  return () => { s = (s * 1664525 + 1013904223) >>> 0; return s / 4294967296; };
}

// Odunc alma akisinin alti adimi ve gercek sureleri (sn).
const ADIMLAR = [
  ["arama", 1.2], ["sonuc listesi", 3.4], ["kayit ayrinti", 0.8],
  ["nusha secimi", 5.1], ["onay", 1.0], ["makbuz", 2.2],
];
const SURELER = ADIMLAR.map(([, d]) => d);
const TOPLAM = SURELER.reduce((a, b) => a + b, 0);
const gecen = SURELER.map((_, i) => SURELER.slice(0, i + 1).reduce((a, b) => a + b, 0));

// Iki gosterge: adim sayisina gore ilerleyen cubuk, sureye gore agirliklandirilmis cubuk.
const adimCubugu = (i) => (i + 1) / ADIMLAR.length;
const sureCubugu = (i) => gecen[i] / TOPLAM;

console.log("adim            sure  gecen  adim cubugu  sure cubugu  kalan (gercek)  adim cub. tahmini  sure cub. tahmini");
let adimHata = 0, sureHata = 0;
for (let i = 0; i < ADIMLAR.length - 1; i++) {
  const kalan = TOPLAM - gecen[i];
  const tA = gecen[i] * (1 - adimCubugu(i)) / adimCubugu(i);
  const tS = gecen[i] * (1 - sureCubugu(i)) / sureCubugu(i);
  adimHata += Math.abs(tA - kalan) / kalan;
  sureHata += Math.abs(tS - kalan) / kalan;
  console.log(
    `${ADIMLAR[i][0].padEnd(15)} ${SURELER[i].toFixed(1).padStart(4)} ${gecen[i].toFixed(1).padStart(6)}` +
    ` ${(adimCubugu(i) * 100).toFixed(0).padStart(10)} % ${(sureCubugu(i) * 100).toFixed(0).padStart(11)} %` +
    ` ${kalan.toFixed(1).padStart(15)} ${tA.toFixed(1).padStart(18)} ${tS.toFixed(1).padStart(18)}`
  );
}
const n = ADIMLAR.length - 1;
console.log(`ortalama bagil hata: adim cubugu ${(adimHata / n * 100).toFixed(1)} %, sure cubugu ${(sureHata / n * 100).toFixed(1)} %`);

// Terk karari: kullanici her adim sonunda kalan sureyi tahmin eder ve sabriyla karsilastirir.
// Dogru karar, GERCEK kalan sure sabri asmiyorsa devam etmektir.
const KISI = 3000;
const BELIRSIZLIK = 2.2;   // gosterge yokken kullanicinin kotumser carpani

function karar(gosterge) {
  const rnd = uretec(20260714);
  let tamamlayan = 0, gereksizTerk = 0, gereksizDevam = 0;
  for (let k = 0; k < KISI; k++) {
    const sabir = 5 + rnd() * 40;   // kabul edilen kalan sure (sn)
    let cikti = false;
    for (let i = 0; i < ADIMLAR.length - 1; i++) {
      const gercekKalan = TOPLAM - gecen[i];
      const dogruDevam = gercekKalan <= sabir;
      let tahmin;
      if (gosterge === "yok") tahmin = gecen[i] * BELIRSIZLIK;
      else if (gosterge === "adim cubugu") tahmin = gecen[i] * (1 - adimCubugu(i)) / adimCubugu(i);
      else tahmin = gecen[i] * (1 - sureCubugu(i)) / sureCubugu(i);
      const devam = tahmin <= sabir;
      if (devam && !dogruDevam) gereksizDevam++;
      if (!devam && dogruDevam) gereksizTerk++;
      if (!devam) { cikti = true; break; }
    }
    if (!cikti) tamamlayan++;
  }
  return { oran: (tamamlayan / KISI) * 100, gereksizTerk, gereksizDevam };
}

console.log("\ngosterge        tamamlama  gereksiz terk  gereksiz devam  yanlis karar");
for (const g of ["yok", "adim cubugu", "sure cubugu"]) {
  const t = karar(g);
  console.log(
    `${g.padEnd(15)} ${(t.oran.toFixed(1) + " %").padStart(9)} ${String(t.gereksizTerk).padStart(14)}` +
    ` ${String(t.gereksizDevam).padStart(15)} ${String(t.gereksizTerk + t.gereksizDevam).padStart(13)}`
  );
}
console.log(`(${KISI} kullanici, akisin gercek toplam suresi ${TOPLAM.toFixed(1)} sn)`);

// Geri bildirim gecikmesi siniflari ve her sinifin gerektirdigi gosterge
const ISLEMLER = [
  ["arama alanina yazma", 0.04], ["suzgec uygulama", 0.18], ["kayit acma", 0.7],
  ["nusha durumu sorgusu", 2.4], ["odunc kaydi olusturma", 6.5], ["makbuz uretimi", 14.0],
];
const sinif = (t) => t <= 0.1 ? "anlik" : t <= 1.0 ? "akis korunur" : t <= 10 ? "dikkat dagilir" : "dikkat kopar";
const gerekli = (t) => t <= 0.1 ? "gosterge gerekmez" : t <= 1.0 ? "durum degisimi yeter"
  : t <= 10 ? "belirsiz bekleme gostergesi" : "belirli ilerleme + kalan sure";
console.log("\nislem                     sure     sinif           gereken geri bildirim");
for (const [ad, t] of ISLEMLER) {
  console.log(`${ad.padEnd(25)} ${(t.toFixed(2) + " sn").padStart(8)}  ${sinif(t).padEnd(15)} ${gerekli(t)}`);
}

// Yapay gecikme: gosterilen ilerleme ile gercek is arasindaki bag
console.log("\ngosterilen ilerleme ile gercek is arasindaki iliski");
const gercekIs = [0.10, 0.25, 0.45, 0.70, 0.88, 1.00];
const durumlar = {
  "gercege bagli": gercekIs,
  "sabit hizli (yapay)": [0.17, 0.33, 0.50, 0.67, 0.83, 1.00],
  "sona takilan": [0.30, 0.60, 0.85, 0.93, 0.96, 1.00],
};
for (const [ad, g] of Object.entries(durumlar)) {
  let enBuyukSapma = 0, toplam = 0;
  for (let i = 0; i < g.length; i++) {
    const s = Math.abs(g[i] - gercekIs[i]);
    toplam += s;
    if (s > enBuyukSapma) enBuyukSapma = s;
  }
  console.log(`${ad.padEnd(22)} ortalama sapma ${(toplam / g.length * 100).toFixed(1)} puan, en buyuk sapma ${(enBuyukSapma * 100).toFixed(1)} puan`);
}
```

```
adim            sure  gecen  adim cubugu  sure cubugu  kalan (gercek)  adim cub. tahmini  sure cub. tahmini
arama            1.2    1.2         17 %           9 %            12.5                6.0               12.5
sonuc listesi    3.4    4.6         33 %          34 %             9.1                9.2                9.1
kayit ayrinti    0.8    5.4         50 %          39 %             8.3                5.4                8.3
nusha secimi     5.1   10.5         67 %          77 %             3.2                5.3                3.2
onay             1.0   11.5         83 %          84 %             2.2                2.3                2.2
ortalama bagil hata: adim cubugu 31.3 %, sure cubugu 0.0 %

gosterge        tamamlama  gereksiz terk  gereksiz devam  yanlis karar
yok                48.7 %           1226             558          1784
adim cubugu        89.2 %             11             476           487
sure cubugu        81.4 %              0               0             0
(3000 kullanici, akisin gercek toplam suresi 13.7 sn)

islem                     sure     sinif           gereken geri bildirim
arama alanina yazma        0.04 sn  anlik           gosterge gerekmez
suzgec uygulama            0.18 sn  akis korunur    durum degisimi yeter
kayit acma                 0.70 sn  akis korunur    durum degisimi yeter
nusha durumu sorgusu       2.40 sn  dikkat dagilir  belirsiz bekleme gostergesi
odunc kaydi olusturma      6.50 sn  dikkat dagilir  belirsiz bekleme gostergesi
makbuz uretimi            14.00 sn  dikkat kopar    belirli ilerleme + kalan sure

gosterilen ilerleme ile gercek is arasindaki iliski
gercege bagli          ortalama sapma 0.0 puan, en buyuk sapma 0.0 puan
sabit hizli (yapay)    ortalama sapma 4.7 puan, en buyuk sapma 8.0 puan
sona takilan           ortalama sapma 21.0 puan, en buyuk sapma 40.0 puan
```

## Adım Çubuğunun Hatası Yönlüdür

İlk tabloda iki çubuk ilk adımda birbirinden ayrılıyor. Arama bittiğinde adım çubuğu
yüzde 17, süre çubuğu yüzde 9 gösteriyor. Kalan gerçek süre 12.5 saniye. Adım çubuğuna
bakan kullanıcı 6.0 saniye tahmin ediyor — gerçeğin yarısından az. Süre çubuğu 12.5
saniye veriyor.

Ortalama bağıl hata adım çubuğunda yüzde 31.3, süre çubuğunda yüzde 0. İkinci sayı bir
başarı değil, tanım gereği doğrudur: süre çubuğu zaten harcanan sürenin oranını
gösteriyor, dolayısıyla ondan türetilen tahmin gerçek kalan süreyi verir. Anlamlı olan
birinci sayıdır.

Adım çubuğunun hatası rastgele de değil. Uzun adım henüz gelmemişken çubuk iyimser
(6.0 yerine 12.5), uzun adım geçtikten sonra kötümser (5.3 yerine 3.2) tahmin ürettiriyor.
Yani kullanıcı akışın başında kalan işi olduğundan **az** sanıyor.

## Tamamlama Oranı Yanlış Ölçüttür

İkinci tablo bu dersin ağırlık merkezidir. Gösterge yokken tamamlama oranı yüzde 48.7;
adım çubuğuyla yüzde 89.2; süre çubuğuyla yüzde 81.4.

Tamamlama oranına bakan biri adım çubuğunu seçer. Yanındaki üç sütun bu seçimin ne
olduğunu söylüyor. Süre çubuğunda yanlış karar sayısı sıfır: hiçbir kullanıcı, devam
etmeyi tercih edeceği bir akıştan çıkmıyor ve hiçbiri katlanmayacağı bir akışta
kalmıyor. Adım çubuğunda 476 kullanıcı **gereksiz devam** ediyor — kalan işi olduğundan
az sandıkları için, sabırlarının üzerinde bir akışı sürdürüyorlar.

Adım çubuğunun tamamlama oranını yüzde 81.4'ten 89.2'ye çıkarması, yedi buçuk puanlık bir
kazanç gibi görünüyor. Kazancın kaynağı, kullanıcının kalan işi yanlış tahmin etmesidir.
Bu, Varsayılanların Gücü dersindeki pişmanlık oranıyla aynı yapıdır: gösterge tablosundaki
sayı yükseliyor, yükselişin tamamı yanılmadan geliyor.

Gösterge olmayan durum ise ayrı bir kayıp türü gösteriyor: 1226 **gereksiz terk**.
Bunlar, kalan iş sabırlarının altında olmasına rağmen belirsizlik yüzünden çıkan
kullanıcılar. Bu, ilerleme göstergesinin asıl gerekçesidir — gösterge, kullanıcıyı akışta
tutmak için değil, kullanıcının kararını gerçeğe dayandırmak için konur. Doğru göstergenin
tamamlama oranını yükseltmesi bu kararın bir sonucudur, amacı değil.

## Geri Bildirim Gecikmesi Gösterge Sınıfını Belirler

Üçüncü tablo farklı bir soruyu ele alıyor: bir işlem sürerken kullanıcıya ne
gösterilmeli? Yanıt, işlemin süresine bağlıdır ve yerleşik üç eşikle sınıflandırılır.

**0.1 saniyeye kadar** kullanıcı gecikmeyi algılamaz; sonuç anında gelmiş gibi görünür.
Arama alanına yazma bu sınıftadır ve gösterge gerekmez. Bu sınıfta bir yükleme göstergesi
eklemek zarar verir: göstergenin belirip kaybolması, olmayan bir gecikmeyi görünür kılar.

**1 saniyeye kadar** gecikme algılanır ama kullanıcının düşünce akışı kesilmez. Süzgeç
uygulama ve kayıt açma bu sınıfta. Yeterli geri bildirim, sonucun kendisinin değişmesidir
— liste yenilenir, sayfa gelir. Ayrı bir bekleme göstergesi gerekmez.

**10 saniyeye kadar** kullanıcının dikkati dağılır; başka bir şeye bakmaya başlar. Nüsha
durumu sorgusu ve ödünç kaydı oluşturma bu sınıfta. Burada bir bekleme göstergesi
gereklidir; işin ne kadar süreceği bilinmiyorsa belirsiz bir gösterge yeterlidir, çünkü
kullanıcının verdiği tek karar "bekleyeyim mi" değil "arayüz çalışıyor mu" sorusudur.

**10 saniyenin üstünde** dikkat kopar. Makbuz üretimi bu sınıfta. Burada belirsiz gösterge
yetmez; kullanıcının işi bırakıp geri dönme kararını verebilmesi için ilerlemenin ve kalan
sürenin gösterilmesi gerekir. İkinci tablodaki hesabın uygulandığı yer burasıdır.

## İlerleme Gerçek İşe Bağlanır

Son tablo bir denetim aracıdır: gösterilen ilerleme ile gerçekte tamamlanan işin oranı
arasındaki sapmayı ölçer.

Gerçeğe bağlı gösterge sıfır sapma verir. Sabit hızlı gösterge — çubuğun eşit aralıklarla
ilerlediği, işin gerçek dağılımını yansıtmadığı durum — ortalama 4.7, en fazla 8.0 puan
sapıyor. Sona takılan gösterge — çubuğun hızla yüzde 85'e çıkıp orada beklediği durum —
ortalama 21.0, en fazla 40.0 puan sapıyor.

Sapmanın işareti önemlidir. Sona takılan gösterge işi olduğundan **fazla** tamamlanmış
gösteriyor; kullanıcı "neredeyse bitti" diye bekliyor ve beklemesi uzuyor. Bu, tamamlama
oranını yükselten ama kullanıcının kararını yanlış bilgiye dayandıran bir tasarımdır.
Aynı yapının bir başka biçimi, işin gerçekte bitmiş olmasına rağmen bir bekleme
göstergesinin belirli bir süre tutulmasıdır; bu, yapılan işi olduğundan ağır göstermek
için eklenen bir gecikmedir.

Ölçüt bu konunun her dersindeki ölçütle aynıdır. Kullanıcı, çubuğun gerçek işe değil sabit
bir hıza bağlı olduğunu bilseydi ekranda beklemeye devam eder miydi? Sona takılan
göstergede yanıt hayırdır: kullanıcı beklemeyi, "yüzde 85 bitti" bilgisine güvendiği için
sürdürüyor. Gerçeğe bağlı göstergede yanıt evettir; kullanıcı zaten doğru bilgiyle karar
veriyor.

## Özet

- İlerleme göstergesi kullanıcının tek bir kararını besler: devam etmek mi, çıkmak mı.
  Gösterge, kalan işi doğru bildirdiği ölçüde işe yarar.
- Adım sayısına göre ilerleyen çubuk, adımlar eşit uzunlukta değilse hatalı tahmin
  ürettirir; hesapta ortalama bağıl hata yüzde 31.3 ve hata akışın başında iyimser yönde.
- Tamamlama oranı yanlış ölçüttür: adım çubuğu tamamlamayı yüzde 81.4'ten 89.2'ye çıkarıyor
  ama bu kazanç 476 kullanıcının kalan işi az sanmasından geliyor.
- Doğru ölçüt yanlış karar sayısıdır; gösterge yokken 1226 kullanıcı gereksiz yere terk
  ediyor, süre çubuğuyla yanlış karar sayısı sıfır.
- Geri bildirim gecikmesi dört sınıfa ayrılır: 0.1 saniyeye kadar gösterge gerekmez,
  1 saniyeye kadar durum değişimi yeter, 10 saniyeye kadar belirsiz bekleme göstergesi,
  üstünde belirli ilerleme ve kalan süre gerekir.
- İlerleme çubuğu gerçek işe bağlanır; sabit hızlı ya da sona takılan gösterge kullanıcının
  bekleme kararını yanlış bilgiye dayandırır.

## Sonraki Adım

Bu konunun yedi dersinde aynı ölçüt yedi kez ortaya çıktı: kullanıcı, tasarım kararının
nasıl alındığını bilseydi de aynı seçimi yapar mıydı? Belirginlikte, varsayılanda,
sosyal kanıtta, ilerleme çubuğunda her seferinde aynı ayrım belirdi — kararın gücü
kullanıcının bilgisinden mi geliyor, bilgisizliğinden mi? Sonraki ders bu ölçütü
sistemleştirir: acele ettirme, gizli maliyet, zorlaştırılmış iptal, onay tuzağı ve sahte
kıtlık kalıplarını sayılabilir göstergelere bağlar ve bir arayüzü bu göstergelerle
denetlemenin yolunu kurar.
