Geçen gün Marmara Üniversitesinde Bilgisayar Mühendisliğinde okuyan Vedat Güneş isimli bir öğrenci ilginç bir yazı ulaştırdı. Yazının yazarı çok çalışmaktan bıkmış ve usanmış bir an önce emekli olup tarımla uğraşmayı istiyordu. Programcılığın aşırı çalışma konusunda oldukça zor bir meslek olduğunu belirtiyordu. Yazının ana fikrine katılmamak mümkün değil. Kim hayatının önemli bir kısmını bilgisayar başında, sosyal bir hayattan yoksun geçirmek isteyebilir. Yazının katılmadığım noktası ise her programcının kaderinin aynı olduğu izlenimi vermesi idi.
Tanıdığım bir çok iyi programcı son derece gelişmiş bir sosyal çevreye, hobilere, kaliteli ve dengeli bir özel hayata sahip. Belki bu dediğim noktaya benim tanıdıklarım 30'larında geldiler ama en azından bu mesleğin asosyallik, aşırı çalışma ve kötü hayat koşulları ile ilişkili olduğu ile ilgili genel inanışının aksine tersi örneklerdir.
Hiç birimiz gece gündüz, dur durak vermeden çalışmak istemeyiz. Zaten çalışamayız. Çalışsak da üretim kalitemiz düşük olur. Günün sonunda pek akılcı bir iş yapmış olmayız. Ancak hepimiz programcılık kariyerimizde kim bilir kaç kez gece gündüz, bayram, hafta sonu demeden çalıştık. Peki neden bu durum ortaya çıkmakta?
Bu durumun nedenlerine girmeden önce aşırı çalışma ile ilgili bir konuyu açığa getirmek istiyorum. Programcılar başarma duyusu yüksek, azimli ve çalışkan kişiler. Bunlardan birinin eksik olduğu durumda kişiler üç ay programcılık yapıp bu mesleği terk ederler. Bu üç kişilik özelliği bir araya geldiği zaman ise ilginç bir çalışma disiplini oluşur. Bu disiplin de çoğu zaman mesai saatleri sonrası çalışmayı doğurur. Bu yazıda aşırı çalışma problemi kişinin "kendi isteği" dışında "gönüllü olmayarak" yapılan çalışmaları anlatmakta. Bu ayırıma dikkat. Ben yazılım geliştirmeyi çok severim. Fırsat bulduğumda da bir kaptırırsam saatlerce yazardım.
Temel amacımız multu olmaktır. (Bknz. Aristo). Çalışma ile mutluluk arasında yüksek bir korelasyon vardır. Bu yazıda bahsedilen aşırı çalışma problemi, çalışırken kendimizi "mutsuz" hissetiğimiz durum. Bir çok developer gece gündüz çalışırken mutlu hisseder. Keyif alır. Yaratıcılığın zevkini tadar, vaktin nasıl geçtiğini bilmeden sabahlar. Bu dışarıdan aşırı çalışma gibi görünse de, konuya yabancı olanlar durumun vehametine üzülse de, bu aşırı çalışma değil tam tersine "çalışmaya doyamamak" tır.
Bu yazıda bahsedilecek olan aşırı çalışma "gönülsüz", "isteksiz" ve bize mutluluk değil tam tersi duygular uyandıran, bu mesleği ve yaptığımız işi sorgulatan çalışmalar. Modern yazılım geliştirme yaklaşımları bu problemden kurtulmayı başarmıştır. O nedenle bu problemden kurtulmak için hem umut hem de elimizde onlarca örnek var. Bu yazının amacı da bu konuda birey olarak bizlerin neler yapabileceğine ışık tutmak.
Eğer bir projede aşırı çalışma gerektiren koşullar oluşmuşsa, kişilik özelliklerimiz nedeniyle, organizasyon yapımız ve başarma isteğimiz nedeniyle hepimiz aşırı çalışmayı seçiyoruz. Bu seçim o an yapılabilecek tek doğru seçim. Bununla ilgili kendimizi kötü hissetmemiz, olayı bir hayat böyle geçer mi, üç aydır hafta sonları buradayım gibi büyütmek yersiz, gereksiz ve hatta hatta o projenin o an bulunduğu kritik ortamında oldukça zararlıdır. İlk önerim bu olaya takılmamaktır. Bu bir kader değil, aksine basit yöntemlerle çözülebileceği artık bilinen tipik bir problem.
Aşırı çalışma gerektiren koşullar oluşmuşsa, ne yazık ki, bu koşulları ortadan kaldırıncaya kadar aşırı çalışmak zorundayız. Başka bir yaklaşım düşünülemez. Aksi bir tutum hem kendi huzurunuzu bozar, hem proje ekibinin moralini bozar, hem de projeyi riske atar. Bir kişinin mutsuz yaklaşımı genele yayılan bir isteksizliğin nedeni olabilir. Bir an önce gece gündüz çalışılıp söz konusu "koşulların" eritilmesi ve normal sağlıklı çalışma koşullarına dönülmesi gerekir.
Esas olayımız bundan sonra başlar. Neden aşırı çalışmanın koşulları oluşmuştur ve esas önemlisi bunların bir daha oluşmaması için neler yapmalıyız? Bu soruların incelenip cevaplarının verilmesi gereklidir.
Aşırı çalışmanın nedenlerine baktığımızda bu nedenleri dört grupta toplayabiliriz:
a) Satış sürecinde verilen sözler
b) Proje yönetim sürecinde verilen sözler, alınan kararlar
c) Kişi ve takım kaynaklı nedenler (çalışma şekli, yetkinlikler, motivasyon gibi)
d) Çalışma ortamının gürültülü ve verimsiz olması
Bu yazıda insan kaynaklı nedenlere eğilip, bunların içinden de kişi kendisi ile ilgili neler yapabilir bir kaç öneride bulunacağım. Diğer grupta bulunan nedenler de oldukça önemli.
Ben genel olarak iğneyi başkasına çuvaldızı kendine batırmayı seven birisiyim. Aşırı çalışma koşullarının oluşması durumunda satış sırasında verilen sözler, müşterinin ve bizim proje yönetimi konusunda deneyimsiz oluşumuz gibi etmenler çok önemli rol oynar. Bu konuda ayıca kendi üzerimize düşen çeşitli ödevler de bulunur. Bunları bir liste halinde vermeye çalışacağım. Ancak problemin satış ve proje yönetimi tarafını boş bırakıp sadece aşağıdaki liste ile çözmeye çalışmak yeterli olmayacaktır.
Aşırı çalışmanın önlenmesi için on öneri:
1. İşinizi sevin. Başarının önemli bir kısmı işinizi sevmekte yatar. Yaptığınız işi sevmiyorsanız hemen o işi bırakın. İşinizi sevmiyorsanız aşırı çalışmak kaçınılmaz. Hem sevmeyip hem de aşırı çalışıyorsanız mutsuz olacağınız da ortada. O işi yapmayı bırakarak hem kendinize hem de iş arkadaşlarınıza büyük bir iyilik yapmış olacaksınız. Zorla güzellik olmaz, sevmiyorsanız, çok uğraşmayın, başka bir mesleğe geçiş yapın.
2. Planlı ve programlı çalışmayı öğrenin. Bir programı yazarken vaktinizin en büyük bölümü analiz ve tasarıma geçmeli. Aksi takdirde sürekli bir kod yaz, test et, hataları düzelt döngüsü şeklinde geçecektir. Önümüzdeki hafta ne ile uğraşacağınızı şimdiden planlayın, yapılması gereken işler varsa onları şimdiden planlayın. PSP (Personal Software Process) eğitimlerinden sonra eğitime katılanların hata yoğunluklarının dört kat azaldığı gözlemlenmiştir (Bknz. http://www.stsc.hill.af.mil/crosstalk/1998/03/dimensions.asp). Dört kat daha az "bug" aşırı çalışma problemini kökünden çözecektir. Çalışma şeklinizi PSP'deki gibi iyileştirin.
3. Tahmin yeteneğinizi geliştirin - "Estimation" - bir işin ne kadar süre alacağı konusundaki tahmin yeteneklerinizi geliştirin. Bir işin yapılma süresini normalinden az tahmin ederseniz malasef gecelemekten başka çareniz yok. İşi teslim etmemek de tabiki bir seçenek ancak bu yazı başarmayı prensip edinmiş developer'lara yönelik olduğu için başka çareniz yok diyorum. Tutarlılık prensibi gereği verdiğiniz sözü tutmaya çalışacak, kendinizden başka sorumlu tutacak kimse olmadığı için de bu bizi mutsuz edecek. Oysa sizin mutlu olmanız gerekli. Dünyanın en zevkli işini yapıyorsunuz. Tahmin yetenekleriniz iyimserlik, bilgisizlik ya da plansızlık nedeniyle yanlış tahminler üretiyor olabilir. Önerim bu işi keyifle yapabilmek için tahmin becerilerinizi geliştirin.
4. Bölünmelerle mücadele edin. Sizi bölen kişilere o an musait olmadığınızı söyleyin. Sabah 9 ile 10 arasını bu plansız bölünmelere ayırmaya çalışın. Sizi bölen kişiye bu tür çalışmaları belirtilen saatte yaptığınızı söyleyin. Hatırlar mısınız, üniversitede öğretim üyelerinin "ofis saatleri" vardı. Öğretim üyeleri her zaman bölünmek yerine haftanın belli sürelerini "bölünmeye" ayırırlardı. Aynı taktiği siz de uygulayın. Gerekirse "iletişimsizlik" için kulaklık takın, kapalı bir odaya geçin. Bölünmemek için gece çalışmayı seçmeyin onun yerine bölünme ile mücade etmeyi seçin. Bu amaçla arkadaşlarınızdan ve yöneticilerinizden yardım isteyin. Yöneticiniz sizi bölüyorsa bunu ona nazikçe ama mutlaka ve mutlaka söyleyin. Cep telefonunuzu, MSN'i, e-mail programınızı program yazarken mutlaka kapatın.
5. Önceliklendirin. Üzerinizde yapılması gereken onlarca iş olabilir. Bu işlerin her birisinin düne bitmiş olması gerekiyor olabilir. Panik olmayın, stres olmayın. Bir öncelik sırası verin, sırasıyla bu işleri yapın. Aynı anda birden fazla işi yapmaya kalkmayın kalite düşebilir. Onun yerine hakkını vererek teker teker işleri yapmaya odaklanın. İşler düne yetişmesi gerekiyordu ise malasef aşırı çalışma moduna geçmemiz gereklidir. Bu moda geçip yüksek öncelikli işleri aradan çıkarın. Savaş alanında yaralılar sıraya dizilir, en acil durumdakine tıbbi hizmet verilir, sırayla diğerlerine geçilir. Böyle bir durumda doktor aşırı çalışır. Ama tahmin ediyorum bu durumda mutsuz olmaktan daha ciddi işleri olduğu için aşırı çalışmayı sorgulamaz.
Aşırı çalışırken yanlış önceliklendirme yapılmamalıdır. Bu doktorun önceliklendirme hatası can kaybına neden olacaktır. En önemli problemleri öne alın. Bir çok projede önceliklendirme hataları yapılmakta, düşük öncelikli işler için sabahlanırken, önemli işler için yorgun beyinler, ağrıyan bilekler ve uykusuz gözler kullanılmaktadır. Siz öyle yapmayın.
6. Kod becerilerinizi arttırın. Bu amaçla başka programcıların yazdıkları kodları inceleyin, onların yöntemlerini öğrenin. Dört dörtlük teknik becerilere sahip olmalısınız. Bol bol başkalarının kodunu okuyun.
7. Sıfırdan yazmayın, re-use etmeye çalışın. Devraldığınız kod kötü olabilir, iyi tasarlanmamış olabilir. Oturup bunu baştan yazma konusunda hemen karar vermeyin. Bunu yöneticilerinizle, etraftaki arkadaşlarınızla tartışın. Kodu yazan kişi ile konuşun.
8. Over design yapmayın. Her projenin gereksinimleri, kalite beklenti düzeyi farklı farklıdır. 300 kişinin kullanacağı bir web uygulamasını on binlerce kişi kullanacakmış gibi "stateless" ve "n-Tier" bir mimaride yazmaya çalışmayın. Her projeyi mümkün olan en sade şekli ile en basit formda yapmaya çalışın. "Simplicity- the art of maximising work not done- is essential" temel prensibiniz olsun. İş tatminini, süper mimariler, algoritmalar ve müthiş uygulamalar yerine memnun müşteriler, söz verildiği sürede biten projeler ve tasarımsal sadelikte bulmaya çalışın.
9. İletişim yeteneklerinizi arttırın. Örneğin kibarca nasıl "hayır" denilir öğrenin, bir isteğinizi elde etmek için nasıl müzakere etmeniz gerekli öğrenin, analiz dokümanı nasıl yazılır, bir toplantı nasıl yönetilir öğrenin.
İyi bir dinleyici olun. Çok soru sorun. İyi dinlemeyip çok soru sormazsanız ne programı yazmanız gerektiğini çok geç fark edersiniz. Anlamadığınız bir iş atamasını kendi başınıza yorumlamak yerine gidip iş atamasını yapan ile konuşmayı, programınızı kullanacak kişi ile arkadaş olmayı, bu kişiye sabahları günaydın diyip, hatrını sormayı öğrenin. Müşterinizi sevin. Müşterinizin sizi sevmesini sağlayın. Şirinlik yapın. İletişimde ukala görünmekten kaçınıp, alçakgönüllü olun. Kişiler sevdikleri kişilerin işlerini kolaylaştırmaya çalışır. Sevmedikleri kişilerin işlerini yokuşa sürer, geri plana iter. Sizi sevdiklerine emin olun.
İletişim bir araçtır. Compiler'inizi nasıl kullanmayı biliyorsanız, iletişim denilen aracı da bir compiler gibi kullanmayı bilin. Sadece bu madde başlı başına bir kitap konusu bile olabilir. Kısaca iletişim yeteneklerinizi geliştirin.
10. Bol bol okuyun. Dünyanın en zevkli işini yapıyorsunuz. Bu iş nasıl yapılır, nasıl yapılmaz okuyarak öğrenin. Proje yönetimi, zaman yönetimi, bilgi güvenliği, user interface design, psikoloji okuyun. Okuduklarınızı paylaşın. Etrafınızda bu mesleğin bir kültürünün oluşmasını sağlayın. Steve McConell, Tom De Marco, Watts Humprey, Bruce Tognazzi'yi okuyun. ACM'e üye olun. Seminerlere gidin. Kendinizi yetiştirmeye önem verin. 2004 yılındayız. Hala daha annenizin yöntemleri ile program yazmaya devam etmeyin.
Yukarıdaki liste bu problem konusunda kendimize düşen ödevleri göstermekte. Proje yönetimi, satış süreci ve diğer yönetim süreçleri bu probleme neden olabilir. Çalıştığınız ortamdaki satış ve proje yönetimi süreçlerinde bu soruna karşı önlemlerin alınması mutlaka gerekli. Bu amaçla talepkar olun. Bulunduğunuz ortamın satış ve proje yöneitm süreçlerinde gerekli kontrolleri içermesini isteyin. Kanımca bunların içinde en önemlisi verilen taahütlerde ve sözlerde sizin onayınızın alınmasını istemektir.
Çalışma ortamınız konusunda ise tüm takım arkadaşlarınız ile beraber hareket etmelisiniz. Aynı odada çalışıyorsanız karşılıklı konuşmaların olmaması, ortamın bir kütüphane sessizliğinde olması gerekli. Dikkatinizi dağıtacak geri plan sesleri ve düzenli gürültüler az olmalı. Sanırım kütüphane sessizliği bir program yazmak için gereken ideal ortamı çok iyi anlatıyor.
Aşırı çalışma, bu meslekte kemikleşmiş, kronik bir sorun hatta hatta kaçınılmaz bir kader değil. Şu ana kadar onlarca yazılım geliştirme organizsayonunda yüzlerde developer ile çalışma şansı buldum. Yetkinliklerini arttırmış, planlama ve tahmin becerilerini geliştirmiş ekipler bu problemi çok kolay bir şekilde aşmıştır. Özellikle yurt dışında bir çok yazılım evinde bu problem artık halledilmiştir. Yeter ki bu konuda herkeste ortak bir bilinç oluşmuş olsun, bu problemin basit yöntemlerle çözülebileceği inancı yerleşmiş olsun.
İşinizi ve çalışmayı sevmeyi son bir kez daha kendimi tekrarlamak pahasına da olsa hatırlatmak istiyorum. Sakıp Sabancı'yı kaybettik. Röportajda soruyorlar, başarının sırrını neye borçlusunuz diye. Cevap çok güzel: "Sevmek, sevmek, sevmek. Vatanını sevmek, milletini sevmek, işini sevmek."
Hepinize severek geliştirilen kodlar diliyorum.