Geçen ay İstanbul’da bir editör masasında, ekranın dolup taştığını izlerken şunu düşündüm: yer azaldığında iyi fikirler bile boğuluyor. Jeremy Longshore’un Braves Booth tarafında yaptığı iş tam da bu noktaya dokunuyor. Kağıt üstünde “küçük UI rötuşları” gibi görünen şeyler bunlar — ama pratiğe bakınca tab bar’ı söküp atmak, idle ekranı sıfırdan kurmak ve yapay zekâ anlatım katmanını baştan yeniden düşünmek var ortada. Hiç de küçük değil yani.
İşin aslı şu: bu tür projelerde en pahalı hata büyük görünen şeylerden çıkmıyor. Bir düğme biraz yanlış yerde duruyor, bir kart fazla yüksek kalıyor, bir metin satırı gereğinden uzuyor… Ve sonunda bütün dashboard sanki dar bir koridorda yürüyormuşsunuz gibi hissettiriyor insana. Bu ne anlama geliyor? Braves Booth güncellemesinde tam da o hissi tersine çevirmek var.
Idle ekran neden sorun çıkarıyordu?
İşin garibi, Orijinal akışta sistem sizi iki seçenekten birine kilitleyip bırakıyordu: RECAP ya da PREVIEW. Güzel fikir gibi duruyor, değil mi? Ama canlı yayın mantığında pek işlemiyor bu. Spikerin ihtiyacı tek tek seçim yapmak değil; maç bitmişse hem sonucun özetini hem de sıradaki maça dair hızlı bilgiyi aynı anda, aynı ekranda görmek.
2023’te kendi yan projelerimden birinde benzer bir hata yapmıştım. Kadıköy’de gece geç saatlerde debug ederken fark ettim bunu. Kullanıcıya “hangi modu istiyorsun?” diye sormak bazen tasarımcıya gayet mantıklı geliyor — ama gerçek kullanımda o küçük karar anı yavaşlık yaratıyor. İnsan akışı kesilince sinirleniyor. Hele konu canlı yayınsa, daha da kötü.
Yeni idle görünüm bu yüzden daha dürüst davranıyor. Önce son maçın line score’u ve AI destekli recap geliyor, hemen altına da sonraki maç için tıklanabilir preview kartı yerleşiyor. Karar yükü kullanıcıdan alınıyor. Fena değil — hatta baya iş görüyor.
Bir ekranın gücü çoğu zaman ne kadar çok şey gösterdiğinde değil, doğru anda gereksiz seçimi ortadan kaldırdığında ortaya çıkıyor.
Tab menüsü yerine tek akış
Yapılan hamle aslında baya sade: tab butonları kaldırılıyor (şaşırtıcı ama gerçek). Ama sade demek basit demek değil. Tam tersi. Neden önemli bu? Arka planda ciddi bir düşünce işi var çünkü; artık idle sayfa yalnızca “boşta duran ekran” olmaktan çıkıp canlı yayının hem öncesini hem sonrasını taşıyan küçük bir komuta merkezine dönüşüyor.
Garip gelecek ama, Bak şimdi, bu yaklaşımın güzel tarafı açık: kullanıcı neyi görmesi gerekiyorsa onu görüyor, başka bir şeyle uğraşmıyor. Kötü tarafı yok mu? Var tabi. Ekrana çok fazla bilgi sıkıştırırsanız, yeni başlayan biri ilk bakışta bunalmış hissedebilir; yoğunluk iyi yönetilmezse “dashboard density” çok hızlı “dashboard karmaşası”na dönüşebiliyor.
Daha sıkı dashboard düzeni ne kazandırdı?
Yeni düzen üç sütunlu grid üzerine kurulmuş ve sütunlar artık rastgele nefes almıyor — belirgin raylar üzerinde ilerliyor diyelim. En dar noktada 280 piksel, orta boyutta 320 piksel, geniş ekranda 360 piksel. Kağıt üstünde bu rakamlar küçük görünüyor, ama panel yoğunluğu açısından etkisi bayağı büyük aslında; deneyince anlıyorsunuz farkı.
Peki neden?
Editör masasında bu tip işlere bakan biri olarak şunu söylerim hep: “Ekranı büyütmek yetmez, boşluğu da akıllıca kullanman lazım.” Braves Booth’un yeni hali tam burada güçleniyor. GameStateBar daha vurucu hale geliyor, center column kırmızı vurguyla ana içerik gibi öne çıkıyor ve yan paneller geri çekilip bağırmayı bırakıyor. Güzel bir hiyerarşi bu.
E tabi her yoğunlaştırma hamlesi kusursuz olmaz. Küçük dizüstülerde “burada biraz daha hava olsa iyi olurdu” diyebilirsiniz zaman zaman. Ama genel resimde kazanım net: daha az boşluk kaybı, daha fazla anlamlı içerik.
| Bileşen | Önce | Sonra | Etkisi |
|---|---|---|---|
| GameStateBar | Düz görünüm, tekrar eden etiketler | Gradient arka plan, büyük skor/inning yazısı | Daha hızlı okuma |
| Sütun genişliği | Tutarsız padding ve genişlik | 280 / 320 / 360 px rail sistemi | Daha dengeli yerleşim |
| Ticker | Daha hızlı ve dikkat dağıtıcı | 75 saniye döngü ve daha alçak yükseklik | Daha sakin yayın hissi |
| Weather + Wind Impact | Ayrı kartlar | Tek kart içinde iki bölüm | Daha az dikey kalabalık |
Küçük ayrıntılar neden önemli?
Yani, “Home:” ve “Away:” etiketlerinin kaldırılması mesela. İlk bakışta minik bir temizlik gibi duruyor (bizzat test ettim). Ama logo zaten oradayken ekstra etiket koymak gereksiz gürültü yaratıyordu — ve o gürültü birikirken sizi fark ettirmeden yoruyor. Bazen ürün geliştirme dediğiniz şey tam olarak bu: fazlalığı silmek. Neden önemli bu? Eklemek değil. Daha fazla bilgi için Xiaomi’nin Akıllı Perde Hamlesi: Evde Sessiz Konfor yazımıza bakabilirsiniz.
Pregame verisi neden ayrı ele alınmış?
Sistem artık yalnızca bugünün maçlarını çekmiyor; gelecekteki maç için de schedule API’den bağlam topluyor. Bu kısım bana geçen — en azından ben öyle düşünüyorum — sene Ankara’daki bir SaaS demosunu hatırlattı hemen — ekip “yarın ne olacak?” sorusuna cevap veremediği için demo yarım kalmıştı, herkes birbirine bakakaldı. Spor yayını tarafında ise bu soru daha da kritik; çünkü spikerin önüne doğru matchup gelmezse anlatım havada kalıyor. Düzeltmesi de zor o durumda. sessiz ile ilgili önceki yazımız yazımızda bu konuya da değinmiştik.
Buradaki değişikliklerden biri de cache stratejisi olmuş: TTL.GAME_SCHEDULE değeri 300 saniye olarak tutuluyor. Beş dakika kulağa kısa gelebilir ama canlı spor dünyasında bu gayet makul bir denge; planlama verisi çok sık değişmiyor, yine de bayatlamaması gerekiyor.
Tuhaf ama,
// DRY pregame fallback — tek yardımcı fonksiyonla tekrar azalıyor
static fromGameState(gameState: GameState): PregameContext {
return {
homeTeam: gameState.homeTeam,
awayTeam: gameState.awayTeam,
probablePitchers: gameState.probablePitchers,
venue: gameState.venue,
gameTime: gameState.gameTime,
};
}
(en azından benim deneyimim böyle)
Kod parçasındaki asıl mesele syntax değil. Tekrar eden fallback objelerini tek yere toplamak (inanın bana). PR incelemesinde böyle şeyler erken yakalanınca insan rahat ediyor doğrusu. Yoksa üç ayrı komponentte aynı shape’i farklı biçimde taşımaya başlayınca bakım maliyeti sessizce büyüyor —. Bunu fark ettiğinizde iş işten geçmiş oluyor genelde.
AI pitcher anlatıları neden yenilenmiş olabilir?
Bence sorunun en ilginç kısmı burasıydı. Pitcher scouting report’ları için kurulan AI anlatım sistemini değiştirmek sadece model çağrısını güncellemek değil; veri sunma biçimini de sıfırdan düşünmek demek (evet, doğru duydunuz). Biraz mutfak işi, biraz editörlük işi — ikisi aynı anda.
Kendi testlerimde şunu gördüm: AI tarafında anlatım katmanı güzel çalışsa bile çıktının tonu yanlış olunca neredeyse tüm deneyim düşüyor. Bir arkadaşım geçen yıl Berlin’de benzer bir sistemi prod ortamına aldıktan sonra şunu söylemişti bana: “Model doğru konuşuyor ama insan gibi hikâye kurmuyor.” İşte mesele tam da o hikâyeyi kurabilmekte yatıyor.
Bunu biraz açayım.
Bazı AI metinleri aşırı süslü oluyor. Bazıları ise kuru veri yığınına dönüyor. İdeal olan ikisinin tam ortasında durmak — ve o noktayı bulmak göründüğünden çok daha zor. Braves Booth’taki revizyon da sanırım bunu hedefliyor: daha güvenilir, daha kısa, daha kullanışlı. Bir de şu var: spikerin okumadığı hiçbir metnin sahnede değeri yok. O yüzden çıktıların gerçekten iş yapması lazım. Bir Web Uygulamasıyla Kötü Anıları Yakmak: Garip Derecede İyi Fikir yazımızda bu konuya da değinmiştik.
Neden önceki sürüm yeterli değildi?
İlginç olan şu ki, Maalesef. Teknik olarak çalışan sistemler pratikte yetersiz kalabiliyor. Üretim ortamında sadece doğruluk yetmiyor; ritim gerekiyor, ton gerekiyor, okunabilirlik gerekiyor. Kağıt üstünde süper görünen metin sahnede boğuk gelirse kimse dönüp ikinci kez bakmıyor — bu çok acı bir gerçek (en azından benim deneyimim böyle). Açık konuşayım, bu hayal kırıklığı teknoloji projelerinde aşırı sık yaşanıyor. Herkes modelden mucize bekliyor ama sunum katmanını, yani o son kilometreyi, unutuyor. Bash Alias’ları: Az Yaz, Çok İş Gör yazımızda da bu konuya değinmiştik. AI ile Kurulan Uygulamalar Neden İşletmeleri Zorluyor? yazımızda da bu konuya değinmiştik.
Kısa bir not düşeyim buraya.
Küçük startup ile enterprise arasında fark nerede?
Küçük bir startup için böyle refactor’lar çoğu zaman hız kazandırır; ekip az olduğundan tek ekrandan maksimum fayda almak istiyorlar, mantıklı da. Enterprise seviyede ise tablo başka: rol bazlı erişim, yayın stabilitesi, cache tutarlılığı. Bakım zinciri devreye giriyor. Yani aynı tasarım kararı iki farklı (söylemesi ayıp) şirkette bambaşka sonuç verebiliyor — birinde sprint hızını artırıyor, ötekinde yıllarca sürecek operasyonel borcu azaltıyor. Fark büyük.
- Küçük ekip: Daha hızlı karar alma, tek ekranda yüksek yoğunluk ihtiyacı.
- Büyük ekip: Tutarlı bileşen yapısı, PR disiplini ve uzun vadeli bakım kolaylığı. — bunu es geçmeyin
- Canlı yayın senaryosu: Okunabilirlik her şeyden önce gelir.
- A/B deneme ortamı: Dashboard yoğunluğu ölçülmeden final karar verilmemeli.
Bana göre en değerli ders ne?
Neyse, uzatmayalım. Buradan çıkan ana ders şu: iyi ürün işleri çoğu zaman dramatik görünmeyen detaylarda saklı. Tab bar’ı kaldırmak, sütun genişliğini düzeltmek, ticker hızını kısmak… Bunların hiçbiri manşetlik hamle değil belki. Ama birlikte ele alındığında ekranın karakterini değiştiriyorlar — ve bu fark sahada hissediliyor.
Ben kendi blog notlarımda buna hep “sessiz iyileştirme” diyorum. Kullanıcı ilk başta fark etmeyebilir. Ama birkaç dakika sonra rahatladığını anlar, neden rahatladığını açıklayamasa bile. İşte iyi tasarım tam da orada oturuyor.
Ha, bu arada PR review’ın rolünü de küçümsememek lazım. fromGameState() gibi ufak görünen helper’ların ortaya çıkması tesadüf değil; iyi inceleme kültürünün sonucu. Kod temizliği bazen kahramanca görünmüyor. Ama her gün çalıştırdığınız sistemleri ayakta tutan şey çoğu zaman odur.
Sıkça Sorulan Sorular
IDLE view ile pregame view arasındaki fark nedir?
IDLE view maç yokken hem son maçın özetini hem de yaklaşan maçın kısa bilgisini gösterir. Pregame view ise doğrudan gelecek maça odaklanır ve daha ayrıntılı hazırlık içeriği sunar.
Neden tab bar yerine tek akış tercih edilmiş?
Çünkü kullanıcıdan seçim istemek yerine iki bilgiyi aynı anda vermek daha hızlıdır.
Canlı yayın veya anons ortamında gecikme istemezsiniz; tek akış bu yüzden daha pratik çalışır.
Ticker neden yavaşlatılır?
Ticker çok hızlıysa dikkat dağıtır ve ana içeriğin önüne geçer.
75 saniyelik döngü gibi sakin ayarlar genelde yayın sırasında daha konforlu olur.
Pregame verisi neden cache’lenmiş?
Mlb schedule verisini sürekli çekmek gereksiz yük oluşturur.
300 saniyelik TTL hem taze veri sağlar hem de sistemi hafifletir.
Kaynaklar ve İleri Okuma
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.



