Günlük
Üretimde karşıma çıkan problemler, sebepleri ve çözümleri. Ayda iki yazı, Türkçe ve İngilizce.
2026
Teknik borcu ödenecek kadar görünür kılmak
Kimsenin göremediği borca bütçe ayrılmaz. Her kaleme maliyet ve faiz yazın, özellik listesinin içine koyun ve borcu özellik işinin içinde ödeyin.
Ekibin kararlarını nereye yazdığı
Kararlar sohbet kanallarında ve insanların aklında yaşar, ikisi de buhar olur. Tek paragraflık karar kaydı gerekçeyi kodun yanında tutar.
Müşteriyle ilk toplantıda sorulacak beş soru
Başarı hangi sayı, şu an ne çalışıyor da bozulmamalı, hesaplar kimde, daha önce ne denendi, anlaşmazlıkta kim karar veriyor. Sonra hepsini yazın.
Hata ayıklama: önce ölç, sonra tahmin et
Hatayı bulan sıra şudur: üret, daralt, ölç, en son teori kur. Değişiklikte ve veride bisect, ve ilk teorinin neden en pahalı teori olduğu.
Uzun işler küçük ve geri alınabilir adımlarla biter
Büyük bir işi, her biri tek başına çıkabilen ve geri alınabilen adımlara bölmek: feature flag, expand and contract migration ve önceden yazılmış rollback.
Lab ölçümü, saha verisi ve gerçek bir telefon
Sentetik denetim, gerçek kullanıcı verisi ve elinizdeki telefon üç ayrı soruyu yanıtlar. Hangisi ne zaman yanıltır ve bir değişiklik nasıl düzgün ölçülür.
On bir kilobaytlık ana sayfa: statik siteler hâlâ iyi fikir
Önceden üretmenin size kazandırdıkları, karşılığında verdikleriniz ve siteyi küçük tutan build hattı, sayfa ağırlığı bütçesi ile cache kuralları.
Gece yarısı hiç çalışmayan zamanlanmış iş
Bir zamda yazılan schedule, başka zamanda koşan makine ve yılda iki kez değişen saat: gecelik iş neden geç, iki kez ya da hiç çalışmıyor.
Yedeğiniz sıfır baytlık bir dosya ve kimse fark etmedi
Yedekler sessizce düşer: container'da eksik araç, yetki sorunu, dolan disk. Boyutu ve satır sayısını kontrol edin, geri yüklemeyi programa bağlayın.
Log’ları okunmaya değer kılan üç alan
Çoğu log, olay anında sorulan tek soruya cevap veremez. Bir correlation id, işlenen kaydın kimliği ve sebebiyle birlikte sonuç bunu çözer.
Kredi bittiğinde yapay zekâ özelliğiniz ne yapıyor
Model sağlayıcısı bakiye, kota veya kesinti yüzünden hata döner. Fallback yoksa herkes aynı genel hatayı görür. Kademeli düşüş nasıl tasarlanır.
Yapay zekâ özelliğini üretimde makul maliyette tutmak
Çalışan bir yapay zekâ özelliği de kimsenin planlamadığı bir fatura üretir. Token nereye gidiyor, ne cache'lenir, kullanıcı başına limit nasıl konur.
Ödeme webhook’ları: imza, tekrar oynatma ve idempotency anahtarı
İmzayı ham gövde üzerinden doğrulayın, eski timestamp'i reddedin, event id'yi saklayın, tutara güvenmeyin. Kompakt handler ve çevresindeki kontroller.
Yavaş sorgudan doğru indekse
Önce sorguyu bulun, sonra planı okuyun, kolon sırasını ondan sonra seçin. Yavaş bir sayfadan gerçekten kullanılan bir indekse giden pratik yol ve bedeli.
Idempotent işler: işi tam olarak bir kez yapmak
Kuyruklar ve webhook'lar en az bir kez teslim eder, her handler er geç iki kez çalışır. İkinci çalıştırmayı zararsız kılan şey: anahtar ve unique kısıt.
Neredeyse her sitenin yaptığı iki erişilebilirlik hatası
Başlık seviyelerinin tasarıma göre seçilmesi ve görünen metni gizleyen aria-label. İkisi de klavye ve ses kullanıcısını engeller, ikisinin de çözümü ucuz.
2025
Kendi sunucunuzda font, gizlilik mevzuatı ve bir eksik istek
Dışarıdan gelen font stili, sayfanız çizilmeden önce her ziyaretçinin IP adresini başka bir şirkete verir. Kendi sunucunuza almak bunu ve bir turu siler.
Responsive images denetimi size aslında ne söylüyor
Denetim, gönderdiğiniz dosyayı cihazın ihtiyacı olan pikselle karşılaştırır: layout genişliği çarpı piksel oranı. Raporu okumanın ve düzeltmenin yolu.
macOS’tan sunucuya giden görünmez ._ dosyaları
Mac'te üretilen arşivlerde extended attribute'lar AppleDouble dosyasına dönüşür, web root'a düşer ve sunulur. Nasıl fark edilir, önlenir ve temizlenir.
Sertifika yenilemeyi kıran rsync bayrağı
Aynalayan bir deploy, build'de olmayan her dosyayı siler; sertifika doğrulamasının okuduğu yol dahil. Sorunu son kullanma tarihinden haftalar önce bulun.
Blue green dağıtım: yeniden başlatmadan önce build çıkış kodunu kontrol edin
Build hata verdiği hâlde süreci yeniden başlatan deploy scripti yarım dizini yayına alır. Çıkış kodu, atomik geçiş, smoke test ve çalışan bir geri alma.
Kapatılmayan akış yanıtı yüz saniye asılı kalıyor
Token'lar geliyor, cevap tamamlanıyor, istek açık kalıyor ve proxy onu kesiyor. Akışı doğru kapatmak ve gerçek alan adı üzerinden ölçmek.
On saniye boşta kalınca ölen proxy tünelleri
Boşta kalınca kapanan tünel, tek bir uzun oturumu binlerce yeniden bağlanmaya çevirir. Sayaçlı bant genişliğinde el sıkışma trafiği faturanın kendisi olur.
Yanlış kurulan root, .env dosyanızı internete nasıl açıyor
Web root proje dizinini gösteriyorsa ve sunucu diskte var olan her dosyayı sunuyorsa, .env ve .git tek bir düz istek uzaklıktadır.
Paylaşımlı sunucuda /tmp’ye genel adla dosya yazmayın
Paylaşımlı makinede genel bir geçici dosya adı zaten var olabilir ve başkasına ait olabilir. Yazma düşer, okuma başarılı olur, yanlış içerik yayına gider.
Log rotasyonu, saklama süresi ve dolan diskin sessiz maliyeti
Dolmakta olan disk yavaş bir kesintidir: yazma reddedilir, build patlar, yedek sessizce kesilir. Neyin büyüdüğünü bulmanın ve tekrarını önlemenin yolu.
Forma yapıştırılan yüz bin satır: işi kuyruğa alın
Senkron toplu içe aktarım proxy timeout'unda ölür, yarım yazılmış veri bırakır ve kullanıcıya iki kez ödetir. Kabul edin, saklayın, dönün, parçalayın.
Her mesajı ikiye bölen görünmez sonek
İki ayrı özellik, uzunluk hesabı yapıldıktan sonra beşer karakter ekledi. Her mesaj parça sınırını aştı ve maliyet sessizce ikiye katlandı.
Tek bir Türkçe karakter mesaj maliyetini neden ikiye katlayabilir
Kısa mesaj ya 160 karakterlik 7 bitlik alfabeyle ya da 70 karakterlik 16 bitlik kodlamayla gider. Tek bir harf tüm mesajı ve faturayı değiştirir.
Kayıttan önce gelen teslim raporu
Asenkron bir callback, ilgili satır commit edilmeden önce gelebilir. Eşleşmeyen raporu saklayın, artan gecikmeyle tekrar deneyin, sonucu kaybetmeyin.
Hız sınırını kalıcı hata saymanın bedeli
429 ve protokol seviyesindeki throttle yanıtı sonra gel demektir. Bunu kalıcı hata yazan istemci, parası ödenmiş işi çöpe atar ve kapasiteyi gizler.
Saatte 300’den 19 bine: gönderim kapasitesi aslında nerede kayboluyor
Saatte 300 mesajda takılan bir gönderici ne CPU'suz ne bant genişliğsizdir. Tek tek round trip bekler ve bu ölçülebilir bir sorundur.
Hiç gönderilmeyen kampanya: veritabanında saat dilimi
09:00'a kurulan iş hiçbir hata vermeden kuyrukta bekliyor. Uygulama yerel saati yazıyor, worker UTC okuyor, gerisini fark hallediyor.
Mailler spam’e düşüyor: kimsenin bakmadığı From hizalaması
SPF ve DKIM geçerken de mailler spam’e düşebilir. Bunu açıklayan başlıkta üç ayrı alan adı vardır ve DMARC bunların eşleşmesini ister.
Satır içi ilk boyamayla katı bir içerik güvenlik politikası
Kritik CSS'i ve küçük bir script'i satır içi gömmek ilk boyama için iyidir, katı CSP için yasaktır. Çözüm hash, ama doğru anda hesaplanırsa.
Giriş animasyonunuz en büyük boyamayı geciktiriyor
opacity sıfırla başlayan öğe boyanmış sayılmaz. Fade in animasyonu, Largest Contentful Paint değerini gecikme kadar ve fazlası kadar öteler.
PNG’nin AVIF’i yendiği yer: sert noktalardan oluşan görseller
Kayıplı codec'ler fotoğraf için tasarlandı. Tram noktalı bir görselde indexed PNG her genişlikte AVIF'i yendi; bunu bilmenin tek yolu ölçmek.
Fontu alt kümele, yedek font metriğini eşle, kaymayı bitir
127 karakter basan bir sayfa 889 glyph indirmemeli. Build'de alt kümeleyin, yedek fontun metriğini eşleyin, swap anındaki kayma sıfırlansın.
Türkçe büyük harf tuzağı: kodda i, I ve noktalı İ
Türkçede i büyürken İ, I küçülürken ı olur. Case folding, CSS text-transform ve veritabanı collation'ı bunu varsayılan olarak yanlış yapar.
2024
Heceleme sözlüğü olmadan iki yana yaslı Türkçe metin
Chrome'da Türkçe heceleme sözlüğü yok, bu yüzden iki yana yaslı Türkçe sütunda boşluk nehirleri açılıyor. Çözüm: build sırasında yumuşak tire.
Yeniden başlatmanın siteyi düşürmesi: süreç yöneticisi ve açılışta kalıcılık
Süreç yöneticisi uygulamaları ancak service unit'i enable ve süreç listesi kayıtlıysa geri getirir. İkisi nasıl kontrol edilir, nasıl kanıtlanır.
Kontrol paneli ile nginx dosyanız çeliştiğinde
Kontrol panelleri vhost dosyasını kendi şablonundan üretir, elle yapılan değişiklik sertifika yenilemesinde silinir. Değişikliği nereye yazmak gerekir.
Güvenlik başlıklarınızı sessizce düşüren nginx kuralı
nginx'te add_header yalnızca alt seviyede hiç add_header yoksa miras alınır. Bir location'a eklenen tek cache başlığı HSTS ve nosniff'i oradan siler.
Olmayan her sayfayı ana sayfaya yönlendirmek aramada neye mal oluyor
Olmayan sayfaları ana sayfaya yönlendirmek soft 404 üretir, tarama bütçesini yer ve kırık linkleri gizler. Bunun yerine gerçek 404 dönün.
Tarayıcıda önbelleğe alınan 301, yeniden tasarımdan sonra siteyi nasıl kırıyor
Tarayıcılar kalıcı yönlendirmeyi süresiz saklar. Yeni site eski 301'i ters çevirirse geri dönen ziyaretçi döngüye girer. Teşhisi ve kalıcı çözümü.