Bir developer olarak kariyerime başlarken aklımdaki senaryo oldukça netti: feature geliştireceğim ve kullanıcıya değer sunan şeyler üreteceğim. Açıkçası “test” dediğimiz şey benim için hep geliştirmeden sonra gelen, yapılması gereken ama çok da heyecan verici olmayan bir adımdı.
Sonra bir test firmasında çalışmaya başladım.
İlk başta çok büyük bir fark hissedeceğimi düşünmemiştim. Sonuçta yine kod yazıyordum. Ama kısa süre içinde fark ettim ki aslında aynı işi yapmıyordum. Ya da daha doğru söylemek gerekirse, aynı işi bambaşka bir bakış açısıyla yapıyordum.
Eskiden bir feature geliştirdiğimde kendime sorduğum ilk soru şuydu: “Çalışıyor mu?” Butona basınca gidiyor mu? API dönüyor mu? Ekran açılıyor mu? Tamam, bitti, gönder gitsin!
Ama test odaklı bu yeni dünyada o soru komik kalmaya başladı. Artık farkında olmadan şunları mırıldanırken buluyorum kendimi:
“Peki, bu sistem nerede patlar?”
“Kullanıcı tam burada saçma sapan bir şey yaparsa ne olur?”
“API geç cevap verirse veya hiç vermezse neyi göreceğiz?”
Dürüst olayım; bu değişim başta yorucuydu. Çünkü artık sadece çalışan bir şey üretmek yetmiyordu. Daha fazla düşünmek, daha fazla ihtimali hesaba katmak gerekiyordu. Hatta bazı durumlarda sırf bu yüzden geliştirme süresi uzuyormuş gibi hissediyordum ve bu da beni kaygılandırıyordu.
Fakat sonra bir şeyi fark ettim: O ‘kaybettiğimi sandığım zaman’, aslında ileride katlanarak kazanacağım zamandı.
Eskiden yaşadığım o meşhur sahneleri hatırladım: Gecenin bir yarısı patlayan 500 hataları, login olamayan sinirli kullanıcılar, ufacık bir UI bug’ı yüzünden çöken tüm akış… O anlarda kan, ter ve gözyaşı içinde debug yaparken aslında tek bir gerçek vardı; O senaryoyu en başta hiç düşünmemiştim.
Test odaklı bir ortamda çalışmaya başladıktan sonra bu tarz hatalara bakışım tamamen değişti. Artık bir bug gördüğümde “nasıl kaçtı bu?” demek yerine “bu neden daha en başta düşünülmedi?” diye kendimi sorgulamaya başladım.
Zamanla çok ilginç bir şey oldu: bug’ları daha oluşmadan fark etmeye başladım.
Kod yazarken bazı şeyler gözüme batıyordu. “Bu ileride sorun çıkarır” dediğim yerler gerçekten sorun çıkarıyordu. Ya da daha çıkmadan müdahale ediyordum. Kodum daha temiz oldu, daha az kırılgan hale geldi. Debug sürem kısaldı. Hatta bazı durumlarda debug yapacak bir şey kalmadı çünkü problem hiç oluşmadı.
En ilginç tarafı ise şu: aslında daha yavaş çalışmıyordum. Tam tersine, toplamda daha hızlıydım. Çünkü sonradan düzeltmek yerine en baştan doğru yapıyordum.
Bir test firmasında developer olmak bana şunu öğretti: Yazılım geliştirmek sadece bir şeyi “çalıştırmak” değil, o şeyin her koşulda çalışacağından emin olmaktır. Artık bir şey geliştirdiğimde “Çalışıyor” demek bana yetmiyor. “Güvenilir mi?” diye sormadan içim rahat etmiyor.
Ve sanırım en büyük değişim de bu oldu.
Çünkü bir noktadan sonra anlıyorsun ki; biz sadece kod satırları üretmiyoruz, kullanıcıya o “asla yarı yolda kalmayacaksın” güvenini veriyoruz. Ve o bakış açısını bir kez kazandıktan sonra eski halinize geri dönmek pek mümkün olmuyor.
Unutmayın: En iyi geliştiriciler, yazılımın nasıl çalıştığını değil, nasıl bozulabileceğini en iyi bilenlerdir.

