Ya Daha İyisi Varsa? Overengineering ve FOBO
Bugün kod yazarken hepimizin aklını bir şekilde kurcalayan bir durumdan bahsedeceğim: “Ya daha iyisi varsa?”
Yeni bir iş alıyorsun. Çözüm aslında belli. Ama başlıyor: “Yarın bu iş başka bir katmandan da çağrılır mı?”, “Burası genişlerse ne yaparız?”, “Burayı bugünden soyutlasak daha mı iyi olur?” Ve sonra kendini, küçük bir işi çözmek yerine framework yazarken buluyorsun.
Kimse başta overengineering yapayım diye başlamıyor zaten. Ama işin doğası FOBO’ya (Fear of Better Options) çok açık. Daha iyi bir çözüm olabilir korkusuyla, elimizdeki çözüme karar veremiyoruz. Ve bu karar verememe hâli, üretkenliğin önüne geçiyor.
Her şeyi soyutlamak zorunda mıyız? Bence olay şu soruyla başlıyor: Bu iş gerçekten öngörülemeyen, büyümeye açık bir iş mi? Yoksa biz sadece “ileride ne olur ne olmaz” diye mi soyutluyoruz?
Çünkü bazı işler vardır, yapısı gereği değişecektir, büyüyecektir. O zaman evet, başta oturup biraz fazla düşünmek, biraz daha sağlam yapı kurmak doğrudur. Ama bazı işler de vardır, bugünü çözer, biter, durur. Ve oraya yapılan fazla soyutlama, sadece zaman kaybı olur.
Ben artık şunu net şekilde soruyorum: Bu işin çıktı süresi ile harcanan efor dengeli mi? Bu kadar katman, bu kadar abstraction gerçekten işi taşıyacak mı? Yoksa ben sadece daha “rahat hissetmek” için mi uğraşıyorum?
En kritik nokta: Bu iş, o iş mi? Yani “interface’e alalım”, “plugin mimarisi kuralım”, “bunu reusable yazalım” diye düşündüğümüz her iş, gerçekten bu uğraşa değer mi? Her iş mimari çözüm istemez. Bazen işi zamanında ve sade şekilde teslim etmek, en büyük teknik katkıdır.
Lead geliştirici olunca bazen her şeye soyutlama gözüyle bakıyorsun. Ama soyutladığın her yapı, bir yük de getiriyor. Kod büyüyor, sorumluluk artıyor, diğer ekip arkadaşlarının adaptasyonu zorlaşıyor. Yani sadece “güzel mimari” değil, doğru yerde doğru çözüm önemli.
Overengineering çoğu zaman teknik bir karar gibi görünür. Ama altında yatan şey, karar verememektir. “Ya ileride değişirse?” korkusuyla bugünü karmaşıklaştırmaktır.
Ben artık kendime şu üç soruyu soruyorum: Bu iş gerçekten büyüyecek mi? Bu yapıyı kurmak çıktıyı hızlandırıyor mu, yavaşlatıyor mu? Vakit-çıktı dengesi yerinde mi?
Kod yazarken FOBO’ya kapılmak kolay. Ama her iş, en iyi çözümü değil, ihtiyaca göre çözümü hak eder. Ve bazı işler, basit kalınca değerlidir.