Bitmemiş Sanat: Yazılımda ve Edebiyatta ‘Mükemmellik’ Tuzağı

Sanat Asla Bitmez, Sadece Terk Edilir

Leonardo da Vinci’nin o meşhur sözü, bugün sadece tuval başındaki ressamlar için değil, ekran başındaki yazılımcılar ve daktilo başındaki yazarlar için de bir kader çizgisini temsil ediyor: “Sanat asla bitmez, sadece terk edilir.”

Bir projeye başladığımızda, zihnimizde pırıl pırıl, hatasız ve büyüleyici bir son tablo vardır. Bir backend geliştiricisi olarak hayalim; her fonksiyonun en optimize haliyle çalıştığı, her veri tabanı sorgusunun milisaniyeler içinde döndüğü “kusursuz bir mimari” inşa etmektir. Bir yazar olarak ise, Misafir romanımın sayfaları arasında kaybolurken, her kelimenin tam yerini bulduğu, okuyucunun nefesini kesecek o “mükemmel cümleyi” kovalamaktır.

Ancak gerçek şudur: Mükemmellik, üretim sürecinin en büyük dostu gibi görünse de aslında en sinsi düşmanıdır.

Kod yazarken bir fonksiyonu onuncu kez “refactor” (yeniden düzenleme) ettiğinizde veya romanın bir bölümünü beşinci kez baştan yazdığınızda, aslında o eseri mükemmelleştirmiyor olabilirsiniz. Belki de sadece onu dünyaya sunmanın verdiği o korkutucu belirsizlikten kaçıyorsunuzdur. Bir yazılımın canlıya (deploy) alınması veya bir kitabın son noktasının konulması, onun artık sizin kontrolünüzden çıkıp “gerçek dünyayla” çarpışması demektir.

Bu yazıda, yazılımın teknik disiplini ile edebiyatın ruhsal derinliği arasındaki o ince çizgide yürüyerek; bitmemiş sanatın sancısını, “yeterince iyi”nin gücünü ve neden bazen en büyük başarının bir projeyi “terk etmek” (yani tamamlayıp yayına almak) olduğunu konuşacağız.

Refactoring mi, Erteleme mi?

Yazılım dünyasında “Refactoring” (kodu yeniden düzenleme), dış davranışı değiştirmeden iç yapıyı daha temiz ve sürdürülebilir hale getirme sanatıdır. Teoride harikadır; teknik borçları temizler, okunabilirliği artırır. Ancak pratikte, bazen bitmek bilmeyen bir kaçış rampasına dönüşebilir.

Bir fonksiyonu yazarsınız, çalışır. Testlerden geçer. Ama zihninizdeki o huzursuz ses fısıldar: “Daha kısa olabilir. Değişken isimlendirmesi tam oturmadı. Belki bu yapıyı daha modüler kurmalıydım.” O an, bir kararın eşiğindesinizdir: Bu kodun amacı “çözüm sunmak” mı, yoksa bir “estetik anıtı” olmak mı?

“Sadece Bir Kez Daha” Tuzağı

Eğer kendinizi bir projeyi canlıya almadan önce, son kullanıcıyı hiç etkilemeyecek küçük teknik detaylar arasında boğulurken buluyorsanız, muhtemelen refactoring yapmıyor; erteleme (procrastination) yapıyorsunuzdur. Ürünü yayına almak, eleştirilere açılmak ve belki de hatalarla yüzleşmek demektir. Kodu kendi bilgisayarınızda (local) sürekli iyileştirmek ise, o güvenli limanda kalmanın en profesyonel kılıfıdır.

Bir yazar için bu durum, bir paragrafı defalarca silip baştan yazmaya benzer. Oysa okuyucu o paragrafın onuncu versiyonunu değil, kitabın bütününü beklemektedir. Yazılımda da pazar, sizin o muazzam mimarinizle değil, sunduğunuz çözümle ilgilenir. Mükemmel kod yoktur; sadece “çalışan ve geliştirilmeye devam eden” kod vardır.

Teknik Estetik ve İş Teslimi Dengesi

Girişimci bir yazılımcı için en büyük yetenek, nerede duracağını bilmektir. Eğer yazdığınız kod, projenin büyümesini engellemiyorsa ve güvenliyse, onu o haliyle “terk etmek” bir başarısızlık değil, bir iş teslimi başarısıdır. Kodu mükemmelleştirmeye harcadığınız o ekstra on saat, bazen projenin asıl ihtiyacı olan pazarlama veya kullanıcı deneyimi çalışmalarından çalınmış bir zamandır.

Silinen Sayfalar ve Çöpe Giden Kodlar

Bir projede günlerce uğraştığınız bir modülü tek bir “delete” tuşuyla yok etmek veya üzerinde haftalarca düşündüğünüz bir roman karakterini hikayeden tamamen çıkarmak… Dışarıdan bakıldığında bu bir kayıp gibi görünebilir, ama aslında bu, yaratıcılığın en saf halidir.

Misafir romanımın 4. ve 5. bölümlerini kurgularken, bazen yazdığım sayfaların hikayenin akışını tıkadığını hissediyorum. O anlarda verdiğim karar acı verici oluyor: Onlarca sayfa emeği çöpe atmak. Benzer bir durum yazılım geliştirme sürecinde de geçerli. Bazen büyük bir heyecanla yazdığınız bir algoritma, projenin geri kalanıyla uyum sağlamaz veya sistemi hantallaştırır. O an o kodu “git checkout” ile geri almak veya silmek, sanki kendi parmağınızı kesmek gibi hissettirir.

Kayıp mı, Yoksa Arınma mı?

Ancak şunu fark ettim: Silinen her satır kod ve çöpe giden her sayfa metin, aslında asıl esere giden yoldaki gürültüyü temizler. Michelangelo’nun dediği gibi; heykel zaten mermerin içindedir, sanatçı sadece fazlalıkları atar.

Eğer bir yazılımcı olarak yazdığınız her koda veya bir yazar olarak her cümlenize duygusal olarak fazla bağlanırsanız, projenizin esiri olursunuz. “Bunun için çok uğraştım, mutlaka kullanmalıyım” düşüncesi, sizi orta karar bir sonuca mahkûm eder. Oysa gerçek profesyonellik, projenin selameti için kendi emeğini kurban edebilme cesaretidir.

Çöpe Giden Emeğin Gizli Mirası

Silinen o sayfalar ve kodlar aslında yok olmazlar. Onları yazarken kazandığınız tecrübe, zihninizde bir kas hafızası oluşturur. 4. bölümü silip yeniden yazdığımda, aslında ilk versiyondaki hataları yapmamayı öğrenmiş olurum. Yazılımda da çöpe giden o ilk mimari, aslında ikinci ve daha sağlam olan mimarinin temelindeki gizli harçtır.

Mükemmeliyetçilik bazen “hiç hata yapmamak” sanılır. Oysa gerçek ustalık, hatalı olanı hızla fark edip onu sistemden söküp atabilme yeteneğidir.

‘Yeterince İyi’nin Gücü

Girişimcilik ve yazarlık dünyasında, bitmek bilmeyen o “mükemmel” arayışının karşısında duran çok güçlü bir kavram var: Yeterince iyi.

Bu kavram, vasatlığı övmek değildir. Aksine, bir ürünün veya bir hikayenin gerçek dünyaya dokunabilmesi için gereken “minimum standarttır”. Bir backend geliştiricisi olarak, kodumun tüm edge-case’leri (uç durumları) çözmesini isterim. Ama eğer o kod, kullanıcının ana problemini çözüyorsa ve güvenliyse, onu yayına almamak sadece kullanıcıya değil, projeye de ihanettir.

Bitmiş, Mükemmelden İyidir

Edebiyatta da durum aynıdır. Bir yazar, romanının her kelimesini ömrü boyunca değiştirebilir. Ancak o kitap basılmadığı sürece, sadece yazarın zihnindeki bir hayalden ibarettir. Romanım Misafir‘de karakterlerimin hikayelerini kusursuzlaştırmaya çalışırken şunu kendime hatırlatıyorum: “Bu hikaye, ancak bir başkası tarafından okunduğunda gerçekten var olacak.”

Yazılımda bu duruma MVP (Minimum Viable Product) diyoruz. Sizin “yeterince iyi” dediğiniz o ilk sürüm, aslında gerçek mükemmelliğe giden yolun ilk adımıdır. Çünkü mükemmellik, laboratuvar ortamında değil, gerçek kullanıcı geri bildirimleriyle, sahada kazanılır. Hatalarınızı canlı sistemde görmek canınızı yakabilir ama sizi, odanızda tek başınıza kurduğunuz hayallerden çok daha hızlı geliştirir.

Kabul Etme Cesareti

“Yeterince iyi”yi kabul etmek, bir tür ego teslimiyetidir. Kendi standartlarınızın (ki bunlar genellikle pazarın standartlarından çok daha yüksektir) biraz altında bir işi yayına alabilme cesaretidir. Bir projeyi “bitti” deyip teslim etmek veya bir bölümü “tamam” deyip diğerine geçmek, aslında şu mesajı verir: “Ben bu işi kendim için değil, bir amaç için yapıyorum.”

Eğer bir girişimciyseniz, amacınız mükemmel kod yazmak değil, bir problemi çözmektir. Eğer bir yazarsanız, amacınız mükemmel cümle kurmak değil, bir duyguyu aktarmaktır. Amaca ulaştığınız an, durmayı bilmelisiniz.

Yayına Almanın Özgürlüğü

Bir yazılımcı için “Deploy” butonuna basmak veya bir yazar için dosyanın adını “Final_Revize_Bitti” olarak kaydedip editöre göndermek, aslında bir tür vedadır. O ana kadar sadece size ait olan, koruyup kolladığınız, her hatasını bildiğiniz o yapı artık kamusal bir mülk haline gelir. Bu an, mükemmeliyetçiliğin bittiği ve gerçekliğin başladığı andır.

İster Python ile bir backend mimarisi kurgulayın, ister Misafir gibi psikolojik katmanları olan bir roman yazın; en büyük başarı, o eseri kendinizden koparıp başkalarına sunabilme cesaretidir. Çünkü o eser artık sizin değil, kullanıcının hayatını kolaylaştıran bir araç veya bir okuyucunun gece uykusunu kaçıran bir hikayedir.

Kendi Eserinden Özgürleşmek

Mükemmellik, ulaşılamayacak bir ufuk çizgisidir; siz ona yaklaştıkça o sizden uzaklaşır. Ancak projeyi teslim ettiğinizde, zihninizde yeni fikirler için yer açılır. Bitmemiş her iş, zihninizin arka planında çalışan ve işlemciyi yoran gereksiz birer süreç (process) gibidir. O süreci “sonlandırıp” yayına aldığınızda, sisteminiz ferahlar.

Bu yüzden kendinize bir söz verin: Bugün, üzerinde aylardır uğraştığınız o “küçük” eksiği görmezden gelin. O kodun en son halini sunucuya yükleyin veya o bölümün son noktasını koyun. Hatalarınızla, eksiklerinizle ve “yeterince iyi” halinizle var olun.

Çünkü dünya sizin ne kadar kusursuz olduğunuzu değil, neyi ortaya koyduğunuzu merak ediyor.

Şimdi, o butona basma vakti.