12 puan yazan GN⁺ 2026-03-06 | 1 yorum | WhatsApp'ta paylaş
  • Yazılımın özündeki rol, çözmesi gereken problemi net biçimde bilmek ve kendi sınırlarını tanımaktır
  • İyi yazılım tüm özellikleri içine doldurmaya çalışmaz; yalnızca iyileştirilmesi gereken kısımlarla ilgilenir ve amacından sapmaz
  • ls komutunun yapay zeka işlevleriyle değiştirildiği varsayımsal bir örnek sunarak, mevcut araçların gereksiz yere genişlemesi olgusunu hicveder
  • 37Signals'ın ‘Getting Real’ ve ‘Rework’ kitaplarında ortaya koyduğu ilkeleri alıntılayarak, kısıtları avantaja çevirmek ve gereksiz özellik taleplerini reddetmek gerektiğini vurgular
  • Yapay zeka çılgınlığının ortasında bile, mevcut standartların istikrarı ve problemin net tanımı yeni akımlardan daha büyük bir değer taşır

Yazılımın rolü ve sınırları

  • Yazı, bir Linux dağıtımını güncelledikten sonra ls komutunun yapay zeka tabanlı dizin zekasına dönüştüğü hayali bir sahneyle başlıyor
    • Yeni als komutu kullanıcının niyetini tahmin ediyor, dosyaları sıralıyor ve mevcut ls için 30 gün sonra desteğin sona ereceğini belirten bir mesaj gösteriyor
    • Bu sahne, özellik şişkinliği ve gereksiz inovasyonu hicveden bir örnek
  • “Neyse ki böyle bir şey gerçekte olmuyor” diyerek, iyi yazılımın ne zaman durması gerektiğini bildiğini vurguluyor

İyi yazılımın temel ilkeleri

  • İyi yazılım, hangi amacı yerine getirdiğini bilir; her şeyi yapmaya çalışmaz ve ne zaman duracağını, neyi iyileştireceğini ayırt eder
  • İnsanın ‘maksimalist düşünme biçimi’, her şeyi daha büyük ve daha karmaşık hâle getirme eğilimindedir
  • Ancak yazılım, içinde bulunduğu rolü ve konumu net biçimde tanımlamalıdır; yeni bir fikir mevcut vizyonla uyuşmuyorsa ayrı bir projeye ayrılmalıdır

37Signals'ın ürün felsefesi

  • Basecamp kurucularının yazdığı ‘Rework’ ve ‘Getting Real’, ürün tasarımı için önemli dersler sunar
    • Kısıtlar avantajdır (Constraints are advantages): küçük ekipler, sınırlı bütçe ve dar kapsam daha iyi kararlar alınmasını sağlar
    • Özellik taleplerini yok sayın (Ignore feature requests): kullanıcıların istediği özelliği doğrudan uygulamak yerine, temel problemi anlamaya yönelik bir yaklaşım gerekir
    • Erken yayınla, sık yayınla (Ship early, ship often): mükemmel ama hiç yayınlanmamış bir üründen daha değerli olan şey, kusurlu olsa da gerçekten çalışan bir üründür
    • Merkez odaklı tasarım (Epicenter design): navigasyon ya da çevresel öğelerden önce çekirdek arayüz ve etkileşim tasarlanmalıdır
    • Varsayılan olarak ‘hayır’ deyin (Say no by default): yeni özelliklerin karmaşıklık, bakım maliyeti ve artan istisna yönetimi gibi gizli bedelleri vardır
    • Kendi ihtiyacın olanı yap (Scratch your own itch): gerçekten ihtiyaç duyduğunuz problemi çözen bir ürün, daha iyi kararlar alınmasını sağlar

Değişimden çok sürekliliğin değeri

  • Son dönemde birçok ürünün adını ve işlevlerini yapay zeka merkezli olacak şekilde yeniden kurguladığı bir eğilim var
    • MinIO → AIStor
    • Oracle Database → Oracle AI Database
  • Her şeyin dramatik biçimde değişmesi gerekmez
  • Belirli bir problem alanında fiili standart (de facto standard) hâline gelmek, daha büyük bir değer taşır

1 yorum

 
GN⁺ 2026-03-06
Hacker News yorumları
  • “Özellik isteklerini görmezden gelin” tavsiyesini görünce aklıma Blizzard ve World of Warcraft Classic örneği geldi
    Yıllarca kullanıcılar klasik sürümü istedi, ama Blizzard bunu “Bunu aslında istemiyorsunuz” diyerek reddetti
    Sonunda klasik WoW’u çıkardılar ve ezici bir başarı elde etti
    Daha sonra geliştirici ekip, “kullanıcılar gerçekten ne istediklerini biliyormuş” diye kabul etti
    Yani özellik isteklerini her zaman görmezden gelmek yerine, bazen kullanıcının gerçekten tamamen haklı olabileceğini kabul etmek gerekir

    • Kullanıcı isteği ilk başta mantıksız görünse bile, nazik bir kullanıcıysa neden yapılamayacağını açıklarken insanın aklına daha iyi bir çözüm gelebiliyor
      Buna karşılık kaba ya da benmerkezci kullanıcılar konuşmanın kendisini yorucu hale getiriyor ve insan cevap vermek istemiyor
      Sonuçta çıkarılacak ders, bir şey isterken kibar olmak gerektiği
    • “Kullanıcı isteklerini görmezden gelin” sözü kulağa hoş geliyor ama gerçekte daha doğru ifade “kullanıcının ne söylediğini anlayın” olur
      Ondan sonra bunun geçerli bir istek olup olmadığına karar verip nasıl uygulanacağını düşünmek gerekir
    • Blizzard örneğine bakınca, kullanıcıların istediği şey sadece “klasik sürüm” değil, modern WoW’un karmaşık sistemlerine duydukları tepkiydi
      Asıl sorun, ‘orijinal hissini kaybetmiş bir oyun’du; bu anlaşılsaydı klasik dışında başka bir yolla da çözülebilirdi
    • Aslında çoğu zaman kullanıcılar da, geliştiriciler de, PM’ler de gerçekte ne istediklerini net olarak bilmiyor
      WoW Classic, eski hissi geri isteme yönündeki yüzeysel bir arzunun ifadesiydi, ama onun altında ‘güven vermeyen geliştirme yönüne’ dair bir güvensizlik vardı
      İdeal bir dünyada iki sürümün güçlü yanlarını birleştiren kusursuz bir biçim mümkün olabilirdi, ama gerçekte görüş çatışmaları yalnızca daha fazla karmaşa yaratırdı
    • Karşı örnek olarak Ultima Online var
      Kullanıcı istekleri doğrultusunda PvP olmayan instance’lar eklenince gerilim kayboldu ve oyun tatsızlaştı
      Bu durumda geliştirici kullanıcıdan daha iyi biliyormuş denebilir
  • Özellik eklemeyi bırakmış, tamamlanmış yazılımların daha fazla olması gerektiğini düşünüyorum
    “Bu kadarı yeter” diyebilme cesaretine ihtiyaç var
    Evernote ya da Dropbox gibi, bir zamanlar kusursuzken sonradan özellik şişmesi yüzünden kafa karıştıran hale gelen çok örnek var

    • Aslında eskiden yazılımların çoğu böyle yayımlanıyordu
      Kutulu olarak satılıyor, yeni sürüm çıkınca yeni kutu alınıyordu
      Bugünkü gibi sürekli güncellenen web uygulamalarından önceki dönemdi
    • Çoğu yazılım tamamlandığını kabul etmiyor
      Hatta çoğu zaman güncellendikçe daha kötü hale geliyor
      Gerçekten iyileşen ürünlerin sayısı çok az
    • Ancak ilgili yorumu okuduktan sonra bunun neden olduğunu anladım
    • Dropbox, başlangıçtaki basit amacını kaybedip yeniden karmaşık bir ağ dosya sistemine dönüştü
      Sonunda başta çözmeye çalıştığı problemi yeniden üretmiş oldu
    • Eskiden Task Eater adında basit bir iOS yapılacaklar uygulaması vardı; geliştiricisi “artık tamamlandı” deyip güncellemeleri bırakmıştı
      Ama zamanla iOS sürümleriyle uyumsuz hale geldi ve sonunda kullanılamaz oldu
      Bu da bana hem tamamlanmışlığın güzelliğini hem de teknolojik evrimin acımasızlığını aynı anda hissettirdi
  • 2020’de altyapı tarafındaki işimden Java geliştiriciliğine geçtiğimde, ana kütüphanelerin bakım modunda olduğunu görüp “Java öldü mü?” diye düşünmüştüm
    Ama sonradan bunun aslında özellik açısından tamamlanmış oldukları anlamına geldiğini gördüm
    Sayısız uç durumun çözüldüğü, istikrarlı bir durumdaydılar
    Sorun şu ki insanlar böyle bir istikrarı istemiyor, sürekli yeni şeyler istiyor
    Sonunda aynı framework’leri sadece dili değiştirerek tekrar tekrar yapıyoruz

    • Birçok insan bakım modundaki bir kütüphaneyi kullanırsa bug’ların düzeltilmeyeceğinden korkuyor
      Bu yüzden hâlâ aktif geliştirme süren projeleri tercih ediyorlar
      Ayrıca bazı şirketler uyumluluk gereksinimleri nedeniyle yalnızca sürekli güncellenen yazılımları kullanabiliyor
    • Bir zamanlar Java’daki memcached kütüphanesi bakım modunda olduğu için Redis’e geçtiğim olmuştu
      “Artık tamamlanmış, geliştirilecek bir şey kalmamış işte” diye şaka yapmıştım, ama yine de değiştirdim
  • Sublime Text’i sevmemin nedeni sadeliği ve hızı
    Yapay zeka ya da karmaşık özellikler eklemek yerine tek bir amaca odaklanıyor

    • Bu yüzden ben hâlâ vim kullanıyorum
  • İyi yazılım mutlaka para kazandıran yazılım değildir
    Ama para kazanmak için insanların gerçekten kullandığı özellikler gerekir
    Her kullanıcı farklı %20’lik bir özellik kümesi kullandığı için bu çeşitliliği hesaba katmak gerekir

  • Notepad.exe’nin tamamlanmış yazılımın en iyi örneklerinden biri olduğunu düşünürdüm,
    ama Windows 11’de dosya ilişkilendirmesini değiştirmek için neredeyse hack seviyesinde işlemler gerektiğini görünce şaşırdım

  • Tamamlanmış yazılımın güzelliğini takdir ediyorum ama bugün çoğu şey adeta “sonsuz beta” halinde
    İnternet bağlantısı varsayılan hale gelince “istendiği anda güncellenebilir” diye bir yapı ortaya çıktı ve
    bug düzeltmeleriyle istenmeyen özellik eklemeleri birbirinden ayrılmıyor
    YouTube gibi web hizmetlerinde sürüm seçmek zaten mümkün değil

    • Ben Evernote’tan Obsidian’a geçtim, ama Obsidian da giderek özellik açısından aşırıya kaçıyor
      Özellikle Canvas özelliği eklendikten sonra asıl sade felsefesi sarsıldı
      Açık kaynak olsaydı muhtemelen o noktada fork’lardım
  • Signal ücretsiz, açık kaynaklı ve gizlilik odaklı olduğu için az özellikli
    Ama zaten hoşuma giden şey de bu

    • Yine de yalnızca zamanlanmış gönderim özelliği bile WhatsApp’takinden çok daha kullanışlı
      WhatsApp ise gereksiz özellikler ekleyip duruyor
  • 37signals’ın kitabında geçen ‘her zaman gerekli olan şeyler (evergreen)’, özellikle de hız konusunun önemini eskiden anlamıyordum
    Ama zaman geçtikçe uygulamaların giderek yavaşladığını görünce, hızlı yazılımın değerinin ne kadar büyük olduğunu fark ettim

  • Neal Stephenson’ın 『REAMDE』 kitabındaki “yazarlar siteleri sever” cümlesi aklıma geliyor
    Yazarlar siteleri ayakta tutmak için sürekli iş üretir; geliştiriciler de benzer şekilde kendilerine iş çıkarmak için kodu değiştirme eğiliminde

    • “Kod tabanını X mimarisine ya da Y diline baştan yazmalıyız” sözünü sayısız kez duydum
      Sonunda biz de sırf değişim olsun diye değişimi tekrar edip duruyoruz