- 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
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
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
Ondan sonra bunun geçerli bir istek olup olmadığına karar verip nasıl uygulanacağını düşünmek gerekir
Asıl sorun, ‘orijinal hissini kaybetmiş bir oyun’du; bu anlaşılsaydı klasik dışında başka bir yolla da çözülebilirdi
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ı
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
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
Hatta çoğu zaman güncellendikçe daha kötü hale geliyor
Gerçekten iyileşen ürünlerin sayısı çok az
Sonunda başta çözmeye çalıştığı problemi yeniden üretmiş oldu
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
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
“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
İ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
Windows Insider blogu ve
güvenlik duyurusu incelendiğinde,
sorunun dur durak bilmeyen güncellemeler olduğu söyleniyor
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
Ö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
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
Sonunda biz de sırf değişim olsun diye değişimi tekrar edip duruyoruz