Yazılım şirketlerinde ki sorunlar ve çözüm yaklaşımları

Bu bloğu ilk açtığım zamanlarda (26.07.2007) henüz okulumu bitirmemiş, freelance yazılım işleri yapan, bir taraftan henüz debian tabanlı olmayan Pardus ile ilgilenen, destek veren bir yazılım geliştiricisi adayıydım. Staj dışında ciddi deneyimlerimin çoğunu freelance olarak yaşamış, üniversite hayatım boyunca yer aldığım Öğrenci Temsilciler Konseyinde beşeri ve sosyal yönlerimi geliştirmeye çalışmıştım.

Geriye dönüp baktığımda stajlarımı ve freelance çalışmalarımı çıkarttığım zaman 6 yıla 5 şirket sığdırmışım. En uzun soluklusu ise halen çalışmaya devam ettiğim Türksat oldu, tam olarak 2 yıl 7 ay. İş değişikliklerimin çoğu maalesef bir Türkiye gerçeği olan ekonomi oldu. Bir tek Türksat’a geçerken artık yorulduğumu ve yoğunluğu daha az olan bir projeye gitmek isteğim ağır bastı.

Kariyerimin ilk 6 ayı dışında Linux Sistem Yöneticisi ünvanı ile çalıştıysam da, aslında batının bir kaç yıldır “DevOps” olarak nitelendirdiği kapsama giren bir şekilde çalıştım. Hem sunucu tarafında kod yazdım, hem servislerin yönetimini gerçekleştirdim hem de alt yapı tasarımları üzerinde çalıştım. Fakat tüm projelerin en büyük ortak noktası “İnternet Teknolojileri” üzerine kurulu projeler olmasıydı.

Çalıştığım şirketler içerisinde milyonlarca kullanıcıya hizmet veren internet sitelerinden, kurumsal destek veren projelere kadar geniş bir yelpazede çalıştım. Ve hem internet/web 2.0/sosyal medya deneyimi hem de kurumsal yazılım projeleri ve yönetim süreçleri deneyimi edindim.

Edindiğim tecrübeler ve aldığım eğitimleri harmanlayınca ülkemizde kurulan yazılım şirketlerinin yaptığı belli başlı hataları artık daha iyi görebiliyorum. Ve bu gördüğüm hataları da paylaşmak istedim. Tabi bunlara onlarcası eklenebilir fakat ben belli başlı olanları ve bu sorunlara karşı düşündüğüm/gördüğüm çözümleri aktarmaya çalışacağım. Özellikle çözümler konusunda fikri, tecrübesi olanlardan yorum olarak katkı yapmalarını bekliyorum.

  • Analiz çalışmalarının eksikliği
  • Doğru takvimsel planlama yapılamaması
  • Geliştirme süreçlerine dair istatistiki analiz yapılmıyor olması
  • Çalışanların eğitim ve gelişimi üzerine durulmuyor oluşu
  • Bazen sadece ekip içi, bazen ekipler arası, bazen de tüm şirket içinde yaşanan güvensizlik ortamı.

Analiz Çalışmalarının Eksikliği:

Yazılımlar bir probleme çözüm olarak üretilen ürünlerdir. Genellikle problemin ne olduğu ve çözümünün ne olduğu bellidir. Fakat şirketlerin eksik kaldıkları problemden çözüme giden yolu iyi analiz edememekten geçer. Bunun iki sebebi var, birincisi müşterinin isteklerini tam olarak anlatamıyor olması, ikincisi yazılımı geliştirecek ekibin istekleri iyi anlamamış olması. Yazılım analizleri problem->çözüm yolunun tam anlamıyla haritasıdır, yönlendiricisidir. Eğer bu haritayı doğru tanımlayamaz, doğru analiz edemez ve gerekli adımları atamazsanız o yazılım süreci içinden çıkılmaz bir hal alacaktır.

Bu sorunu çözmek için proje içerisinde mutlaka işi sadece analiz olan birilerinin görevlendirilmeli. Bir yazılımcı ne yapacağını bildiği zaman nasıl yapacağını kendisi bulur. Fakat ne yapacağını bilmeyen bir yazılımcının yolu aşılması zor engeller ve süreçlerden geçer.

Analiz eksikliğinin şirketlere verdiği başlıca zararlar:

  • Zaman kaybı, para kaybı
  • Kalitesi düşük projeler
  • Gereksiz fazla mesailer ve mutsuz çalışanlar

Bu sorunun üstesinden geçmek için bir çok yöntem var, “Agile development”, “Scrum” gibi yazılım süreç yönetimi sistmeleri bu konulara odaklı çözümlerdir. Mutlaka bu tarz süreç yönetimi sistemleri incelenmeli ekibe ve projelere uygun olan bir veya bir kaçı ile çalışma yapmak bu sorunları atlatmakta faydalı olacaktır.

Takvimsel Planlama:

Doğru analiz olmayan projelerde doğru takvimsel planlamadan da söz etmek imkansızdır. Fakat doğru takvimsel planlama yapmak için sadece doğru analiz yeterli değil. Analizler sadece yapılacak işi doğru anlamayı sağlar. Fakat doğru takvimsel planlama için ekibin yeteneklerini iyi biliyor olmak gerekiyor. Scrum gibi süreçler çalışanların kendi takvimlerini oluşturmaya imkan sağlar. Geliştiricilerin kendi takvimlerini yaptıkları vakit daha verimli çalıştığını sıklıkla gözlemledim. Sonuçta insanları en iyi kendileri tanır.

Takvimsel planlamanın doğru olmadığı durumlarda ortaya çıkacak zararlar şu şekildedir;

  • Yoğun mesai ve fazla mesai
  • Gereksiz uzun süren projeler

Analiz konusunda bahsettiğim gibi Scrum ve benzeri yöntemler bu soruna da çözüm buluyor. Fakat bu sorunun en kolay çözümü takvim planlamasını ekip ile birlikte yapmaktan geçtiğine inanıyorum.

İstatistiksel Analiz:

Nokta.com bünyesinden bana kalan en büyük miraslardan biri “herşeyin sayısal bir karşılığı olmalı” felsefesidir. Bu sayede sayısal olan bilgiler üzerine hedefleme ve analiz yapılabilir. Redmine gibi bir çok proje yönetim sistemi yapılan işlerin zaman takibini yapabiliyor. Tabi olay sadece zaman takibi değil, hata analizleri, müşteriden gelen geri bildirimlerin analizi gibi durumları sayısallaştırmak ve istatistiki hale sokmak çok önemlidir.

Süreçlerinizi sayısal verilere dönüştürdüğünüz zaman belli başlı hedefleri konuşabiliyor oluyorsunuz. Proje teslim edildikten sonra gelen hata ve iyileştirme istatistikleri sizin ne kadar iyi analiz yaptığınızı, müşteriyi ne kadar iyi anladığınızı ve ne kadar kaliteli ürün çıkarttığınızı gösterecektir. Para kazanan her yazılım kaliteli olmayabilir, fakat zaman/kalite ortalamasını başarıyla tutturan şirketler kesinlikle para kazanır.

İstatistiksel analizin faydaları:

  • Yazılım sürecinin teknik başarısının göstergesidir
  • Çalışanların performans ve işleri ne kadar sürede yaptıklarının göstergesidir
  • Zaman planı yapmaya katkı verir
  • Kaliteli yazılım çıkartmaya katkı verir.

Eğitim ve Kişisel Gelişim:

Şirketler bence yazılım geliştiriciler için bir pratik kütüphane olmalıdır. Bu sayede şirketler daha kaliteli projelere ve daha nitelikli elemanlara ulaşmış olurlar. Kaliteli eleman kaliteli iş, kaliteli işse yüksek kazanç demektir. Unutmayın ne üretiyor olursanız olun en büyük gider kalemi bakım ve destek maliyetleridir.

Şirket içi güvensizlik ortamı:

Bir yazılım şirketinde güvensizlik ortamı genellikle yoğun mesai ve/veya şirket içi kariyer yükselmelerinde adil ve şeffaf bir sürecin olmayışından kaynaklanır. Şirket içi güven ortamı olmadığı zaman ise çalışanların verimlilikleri düşer. Bu durum projelerin kalitesine direk olarak etki eder. Bu sorunu çözmek için kesinlikle adil ve şeffaf olan bir kariyer sistemi, net olan yetki ve görev dağılımı geliştirmek gereklidir.

Her kariyer yükselmesi proje yöneticiliği, müdürlük şeklinde olmayabilir. Bu yüzden mutlaka ve mutlaka görev kapsamı dışında kariyer planlaması yapılmalıdır. Görev bazlı maaş sistemi bana göre bu sorunun en büyük problemidir. Bu sorunu çözmek için daha adil bir gelir sistemi oluşturulmalı. Örneğin proje yöneticisi ile yazılım geliştiricisi aynı maaşı alabiliyor olmalı. Böylece şirket içi yükselme çekişmesinin önüne geçilmiş olur.

Umarım faydalı bir yazı olur. Eğer bu konu üzerinde fikirleriniz ve düşünceleriniz varsa lütfen paylaşmaktan çekinmeyin.