SODOO. El Kitabı

X · Geliştirme · Bölüm 36

Üretimde öğrenilenler

İki yıl boyunca yaşanan arızaların sınıflandırılmış hâli — belirti, kök neden ve bir daha aynı sınıfa düşmemek için değişen şey.

Kime: geliştirici, sistem yöneticisi, yapay zekâOkuma: 18 dk

Bu bölüm kitabın omurgasıdır. İçindekiler uydurulmuş örnekler değil; geliştirme günlüğünde biriken iki yüzden fazla girdiden çıkarılmış, gerçekten yaşanmış arızaların sınıflandırılmış hâli.

Sınıflandırma önemli: tek tek hatalar öğretici değildir, hata sınıfları öğreticidir. Aynı sınıfa ikinci kez düşmemenin yolu, sınıfı tanımaktır.

Sınıf 1 — Alet yanlış yüzeyi ölçer

En sık ve en pahalı sınıf. Bir ölçüm yapılır, sonuç güven verir, ama ölçülen şey sorulan şey değildir.

Ders

Ölçüm doğruydu, soru yanlıştı

Belirti
"Tasarım ayarları çalışmıyor" şikâyeti. Ölçüm her denetimin doğru değeri yazdığını gösteriyordu.
Kök neden
Kusur bir adım önceydi: kullanıcı işaret ettiği öğeyi seçemiyordu. Ölçüm "denetim doğru yazıyor mu" sorusunu cevaplıyordu; şikâyet ise "işaret ettiğim şey seçiliyor mu" idi.
Ders
Ölçümü kurmadan önce, şikâyetin cümlesini ölçülebilir hâle getirin. Ölçüm o cümleyi ölçmüyorsa yanlış aleti kullanıyorsunuz.

Aynı sınıfın diğer görünümleri:

  • Model düzeyinde sorulan bir soruyla kayıt düzeyinde cevap aranması (32. bölüm).
  • Bir öğenin stilini ölçmek için onu bozan, dolayısıyla ölçtüğü şeyi değiştiren bir denetim (35. bölüm).
  • Eski dil çerezi taşıyan bir test oturumunun, doğru kodu hatalı göstermesi (27. bölüm).

Kural: bir alet kendi ölçtüğü şeyi değiştiriyorsa, ölçtüğü şey artık gerçek değildir.

Sınıf 2 — Sessiz başarısızlık

Bir şey çalışmaz ama hata da vermez. En tehlikeli sınıf, çünkü herkes iyi olduğunu sanır.

  • Yayımlanmış bir dosyanın aslında bir hata sayfası olması — sunucu 200 döner (27. bölüm).
  • Hiç test toplamayan bir koşunun sıfır hatayla bitmesi (35. bölüm).
  • Sürüm jetonu olmayan bir dosyanın güncellenmiş sanılması (2., 8. bölüm).
  • Yanlış sahiplikle kopyalanan bir modülün sessizce atlanması (31. bölüm).
  • Sayı beklerken sembolle başlayan bir değeri sessizce reddeden ayrıştırıcı (17. bölüm).
  • Tanımlandığı hâlde hiçbir dizin üretmeyen bir kısıt (34. bölüm).

Kural: her bileşen reddettiğini saymalı. Sıfır sonuç, sonuç değildir; kaç girdinin neden reddedildiği bilgisi sonuçtur.

Sınıf 3 — Aynı soruya iki cevap

Bir bilgi iki yerde tutulur, ikisi bir süre aynı kalır, sonra ayrışır.

  • Üç ayrı sepet: tarayıcıda, sunucuda, bayi talebinde (28. bölüm).
  • Sürümlerin hem ayrı dosya kopyaları hem defter olarak tutulması (9. bölüm).
  • Sayfa biçiminin hem şirket ayarında hem düzende tanımlanması (7. bölüm).
  • Bir uygulamaya dönmenin hem sekme şeridi hem "en son ekran" ile çözülmesi (2. bölüm).

Kural: ikinci kopya üretmek yerine var olanı genişletin. İki mekanizmanın aynı soruya farklı cevap vermesi, tek mekanizmanın eksik olmasından kötüdür.

Sınıf 4 — Rica bir mekanizma değildir

Metinle istenen bir davranış, garanti edilmiş bir davranış değildir.

Ders

Uyarıyı metne yazmak, uymayı sağlamaz

Belirti
Yapay zekâya "önce aracı çağır" diye ısrarla söylendi; yine de araç çağırmadan cevap verilen turlar oldu.
Kök neden
İstek bir cümleydi. Cümle bir kısıt değildir.
Ders
Kısıt protokol düzeyinde kuruldu. Metinle rica etmek sekiz sağlayıcıda dört farklı sonuç verir; mekanizma hepsinde aynı sonucu verir.

Aynı sınıf, insan tarafında da geçerli: "dikkat edilsin" diye yazılmış bir kural, bir denetim testiyle desteklenmediği sürece ihlal edilir.

Sınıf 5 — Varsayılan güvenli değildir

  • Belge kaydetme kısayolunun varsayılan olarak kapalı olması (8. bölüm).
  • Yönetim ekranının varsayılan olarak açık olması (32. bölüm).
  • Panoların veri yokken örnek veri çizmesi (7. bölüm).
  • Kopyalanan bir veritabanının canlı posta sunucusunu miras alması (24., 35. bölüm).

Kural: varsayılanı okumadan kabul etmeyin. Kurulum sonrası denetim listesi, varsayılanları tek tek yoklamak içindir.

Sınıf 6 — Yerelin gerçeği ile canlının gerçeği

Kod doğru yazılmış olabilir ve canlıda çalışmıyor olabilir.

  • Yükseltmenin arayüz paketlerini yeniden üretmemesi (31. bölüm).
  • Dağıtımın commit edilmemiş çalışmayı taşımaması (35. bölüm).
  • Üretimin ana daldan farklı bir dalda koşuyor olması (35. bölüm).
  • Canlı yayın katmanının hiç ateşlenmemesi (12. bölüm).

Kural: yükseltme sonrası doğrulama, yayımlanmış dosyanın içine bakmakla biter. "Hatasız bitti" bir kanıt değildir.

Sınıf 7 — Kullanıcının gördüğü ile kodun bildiği

  • Görünen ama tıklanamayan bir düğme (2. bölüm).
  • Yazının okunmadığı, üstüne gelinince beliren gri üstüne gri bir şerit (27. bölüm).
  • Metin taşıyan bir sütunun sıfır genişliğe inip taşması.
  • Panelin, altında kalması gereken bir işaretçinin üstünde çizilmesi.

Kural: görsel doğrulama, işlevsel doğrulamanın yerini tutmaz ve tersi de doğru değildir. İkisi ayrı ölçümlerdir.

Sınıf 8 — Dürüstlük kapısı

Bilmediğini söylemek, bilmiyormuş gibi görünmemekten iyidir.

  • "Fark yok" yerine "şu bileşen değişti ama anlamını çözemedim" (9. bölüm).
  • Fiyatı bilinmeyen model için 0,00 yerine "fiyatlandırılmamış" (12. bölüm).
  • Fiyatsız ürün için 0,00 yerine "fiyatlandırılacak" (28. bölüm).
  • Çalışmayacak bir denetimi etkin göstermek yerine devre dışı bırakıp nedenini yazmak (10. bölüm).
  • Kısmi kapsamı gizlemek yerine "12 modelin 8'inde" demek (27. bölüm).

Kural: bir arayüz, bilmediği bir şeyi bilir gibi göstermemeli. Kullanıcıya verilen en değerli şey, neyin kesin neyin belirsiz olduğudur.

Sınıf 9 — Geri alınabilirlik

  • Geri yükleme, sonrasını silmek yerine deftere eklenir (9. bölüm).
  • Siteden kaldırma, silme değil arşivleme (4., 27. bölüm).
  • Yapay zekânın yaptığı değişikliklerin farkının saklanması (13. bölüm).
  • Kullanılamaz bulunan bir dokümanın silinmeyip arşivlenmesi (27. bölüm).
  • Temizlik işlemlerinin varsayılan olarak kuru koşum olması.

Kural: geri alınamaz bir işlem, ancak geri alınamaz olduğu açıkça söylendiğinde ve onaylandığında yapılır.

Sınıf 10 — Ölçüm olmadan karar yok

  • Model kademelerinin yarıştırmayla belirlenmesi (12. bölüm).
  • "Model aptallaştı" hissinin ölçülebilir bir olaya dönüşmesi (15. bölüm).
  • "DeepSeek zayıfladı" sanılan durumun aslında boş bakiye çıkması (12. bölüm).
  • Bir ekranın darlığından sorumlu olanın, en olası görünen ayar olmaması (16. bölüm).

Kural: bir hissi düzeltmeden önce ölçün. Ölçüm çoğu zaman şüphelendiğiniz yeri değil, komşusunu gösterir.