Kafayı yiyecektim. Proje yetişmeliydi, müşteri arıyordu, "şu kısmı basitçe geç, sonra düzeltiriz" dedik. Meğerse o "sonra" asla gelmiyormuş. Bugün, tam 6 ay önce FastAPI ile yazdığım bir endpoint'te, "şimdilik" diye bıraktığım sleep(2) komutunun canıma okuduğu gün.
Kullanıcı "İşlem çok yavaş" diye ticket açmış. Ben de "Nasıl yani, basit bir veri çekme işlemi" diyerek debug'a daldım. Meğerse o endpoint, her istekte gereksiz yere 2 saniye bekliyormuş. Neden mi? Çünkü o an, dış API'den gelen rate limit hatasını "geçici" olarak böyle aşmıştım! Unutmuşum bile.
Python:
# O LANETLI SATIR
await asyncio.sleep(2) # TODO: Rate limit için proper bir çözüm implemente et!
Bu olay, depoda bir sürü TODO, FIXME ve HACK yorumu olduğunu fark ettirdi bana. Hepsi o "acil" anlardan kalma. StackOverflow'dan kopyala-yapıştır yapıp, context'i tam anlamadan çalıştırdığımız o kod parçaları... İşte onlar, proje büyüdükçe spaghetti code'a dönüşüyor.
En kötüsü de, bu geçici çözümler bazen o kadar iyi "çalışıyor" ki, sorun çıkarmıyor. Ta ki trafik 10 katına çıkana, ta ki başka bir modül ona bağımlı hale gelene kadar. O zaman patlıyor. Ve debug etmesi, ilk yazdığın zamankinden 10 kat daha zor oluyor çünkü artık sisteme yayılmış durumda.
Artık disiplinli olmaya çalışıyorum. Yeni bir kuralım var: Eğer bir geçici çözüm (workaround) yazacaksam, mutlaka bir Jira ticket'ı açarım veya en kötü GitHub Issue açar, commit mesajına referans veririm. Hatta takvimime, o çirkin kodu temizlemem için bir hatırlatma koyarım.
Bir de şunu fark ettim: Çoğu zaman "geçici çözüm" yazmak, doğru çözümü bulmaktan sadece birazcık daha hızlı. Bazen o ekstra 30 dakikayı ayırıp temiz kod yazmak, 6 ay sonra 2 gün debug etmekten çok daha karlı.
Siz de projelerinizde böyle unutulmuş, için için büyüyen "şimdilik"ler var mı? Yoksa siz bu konuda disiplinli misiniz? "Geçici çözüm" yazmadan duramayan ama bir yandan da bundan nefret eden yazılımcı ruhuma bir çare var mı?