Büyük Yazılım Projeleri ve Muhtemel Sorunları

mmyuksel
9 min readFeb 4, 2022

*Linkedin yazımdır.

Bir projenin karmaşıklığı, dış bağımlılıkları ve iletişim zorlukları, proje büyüdükçe katlanarak arttığından, büyük yazılım projelerinin başarılı bir şekilde teslim edilmesi küçük projelerden çok daha zordur. Küçük projeleri yürütmek için iyi olan şey, büyük projeleri yürütmek için çoğu zaman yetersiz kalır.

Bu sebepten dolayı büyük veya kompleks yazılım projelerinde zorluklarla ve sorunlarla karşılaşılma ihtimali oldukça yüksektir.

Birçok büyük yazılım projesinde, iş gereksinimleri yeterli düzeyde ayrıntıyla tanımlanamıyor ya da çok karmaşık gereksinimler ortaya çıkabiliyor. Bu durum, tüm gereksinimler tam olarak netleşmeden önce geliştirme sürecine geçilerek işleri daha da zorlayıcı bir hale getirip, ortaya çıkan “gereksinim karmaşası” yanında süreç içerisinde maliyetleri de etkileyen farklı durumlara yol açabiliyor.

Bu zorluklara hazır olmak için temel sorunu, bunları çözmek için hangi araçları, süreçleri, yöntemleri uygulayacağımızı anlamamız gerekir. Bazı zorlukları deneyim ve beceriler ile, bazıları da odaklı yaklaşım, özel çözümler ve araçlar ile desteklemeliyiz.

Karşılaşılması muhtemel zorluklar;

  • Sektör Uzmanlığı
  • Kontrol ve İzleme
  • Kapsam Kayması
  • Test Süreçleri
  • Değişiklik Yönetimi
  • Ekip Yetkinliği
  • Bütçe Kısıtları
  • Belirsizlikler
  • Gerçekçi Olmayan Tarihler
  • İletişim

Sektör Uzmanlığı

Sektör bilgisi ve tecrübesi, büyük ve küçük kararlar alma aşamasında önemli ölçüde yol gösterici olmanın yanı sıra önceliklendirme, ilişkilendirme ve tercih yapma aşamasında öngörü sağlar.

Belirli bir iş koluna hizmet eden yazılım çözümleri, ilk günden itibaren projeye dahil olan doğru uzmanları gerektirir. Bu durum daha küçük boyutlu projelerde, ekip yöneticisinin projede bir çok konuda yön verici olarak rol üstlenmesi ile çözülmektedir.

Daha büyük projelerde, tüm önemli iş ve süreç becerilerinde özel bir uzmana/uzmanlara sahip olmak çok önemlidir. Perakende, Sigortacılık, E-ticaret, Banka, Sağlık, Finans ve Telekom uzmanlığı bunun en büyük örneklerindendir.

Proje mimari ve teknolojisine bağlı olarak, genel becerilerle birlikte nitelikli kaynaklara ihtiyaç duyulacaktır. Örneğin; Ürün Sahibi, Scrum Master, Kıdemli Proje Yöneticileri, Kurumsal Mimar, Yazılım Mimari, Çözüm Mimarı, İş Analistleri, Fonksiyonel Analistler, Test Ekipleri, DevOps Uzmanları, Güvenlik Uzmanları, Geliştiriciler ve Veritabanı Uzmanları vb.

Kontrol ve İzleme

Yazılım projeleri düzenli olarak performans ölçümü ve takibi gerektirir. Buna ek olarak, sorunlar büyümeden ve ciddi hasara neden olmadan önce aksiyon almak daha yüksek düzeyde görünürlük ve kontrol gerektirmektedir.

Gereksinimlerin sayısı arttıkça, bunları ele almak yalnızca gelişmiş araçlar değil, aynı zamanda etkin yönetim becerileri de gerektirir.

Raporlama araçları, ekip tarafından kullanılan sistemler, ekip büyüklüğü, kapsam ve gereksinim sayısı büyüdükçe süreçlerin yönetilmesi gittikçe zorlaşır. ALM araçları bir dereceye kadar yardımcı olabilir fakat çoğu zaman bu araçlar için, ihtiyacınıza uygun değişiklikler ve entegrasyonlar gerekli olacaktır.

Bu araçlar, geliştirme ekiplerinin iş akışları üzerinde beraber çalışırken izlemeleri gereken standartları oluşturma imkanı da tanır. Araçlar ayrıca yazılım geliştirme ve teslimatı otomatikleştirmek için bir ortamı kolaylaştırır.

Doğru ALM araçları olmadan yönetim görevleri için çok fazla çaba harcamak ve eyleme dönüştürülebilir iç görülerin belirlenmesi gecikecektir. Proje ne kadar büyükse, ölçeği, karmaşıklığı ve değişkenlerin yönetimini desteklemek için doğru araçlara sahip olmak o kadar önemlidir. Proje karmaşıklığı veya boyutu arttıkça, bu araçlar için daha gelişmiş yeteneklere ihtiyaç duyulacaktır.

ALM, DevOps ve test otomasyon çözümleri izlenebilirlik ve ölçümlenebilirlik adına büyük önem taşımaktadır. Ayrıca geliştirme ekibindeki herkesin aynı seviyede kalmasına yardımcı olur. Bu araçlar iletişim konusunda farklılaştırıcı bir rol oynar.

Kapsam Kayması

Kapsam kayması, herhangi bir yazılım projesi için doğal ve beklenen bir olgudur. Yararlı olabileceği zamanlar vardır, ancak çoğunlukla eksileri artılarından daha ağır basar. Ne istediklerini tam olarak bilmeyen ve belirsiz gereksinimleri olan müşteriler, hem yöneticiler hem de yazılım ekipleri için en büyük zorluklardan biridir. Örnek olarak, müşterinin aynı bütçeyle daha fazla işlevsellik istemesi projede farklı efor ihtiyaçlarının ortaya çıkmasına neden olabilir. Müşteri proje ihtiyaçlarını nasıl tanımlayacağını bilmiyor ve “bittiğinde anlayacağım” bakış açısında ilerliyor ise bunu yönetmek daha da zor bir hal alır.

Planlama aşamasında müşterilerle proaktif olarak etkileşim kurmak, onların tam gereksinimlerini ve beklentilerini anlamanıza yardımcı olabilir. Ek olarak, kaynak ve yetenek kullanımınızı doğru bir şekilde planlamak da çok önemlidir.

Gecikmelere ve ek maliyetlere neden olabileceğinden, proje yürütme sırasında geçici değişiklik taleplerini almamak ve ilk plana sadık kalınması çok önemlidir. Tabi bu durum ne yazık ki genelde teoride kalır.

Öngörülemeyen veya sık değişiklikler genellikle proje başarısızlığına yol açabilir. Birçok küçük değişiklik büyük bir değişiklik kadar kötüdür.

Test Süreçleri

Bir yazılım projesinde doğru özelliklerin geliştirildiğinden, ürünün bir bütün olarak güvenilir bir şekilde çalıştığından ve özelliklerin sorunsuz bir şekilde etkileşime girdiğinden emin olmalıyız. Tüm bunları belirli zaman kısıtlamaları dahilinde sürekli kontrol etmeliyiz. Yazılım projesinin başarısı, test süreçlerinin ne kadar efektif yapıldığıyla doğrudan ilişkilidir.

Başlangıçta genellikle test için yeterli zaman planlanır. Bununla birlikte kapsam değişikliği ve geliştirme faaliyetlerindeki gecikmeler, performans ve güvenlik testi de dahil olmak üzere kritik test faaliyetleri için ayrılan zamanı kısıtlar ve test için mevcut zaman daralır.

Yazılım üzerinde yeni oluşturulan işlevselliğin fonksiyonel testlerinden çok regresyon testine odaklanılması faydalı olacaktır. Bu önemlidir çünkü regresyon testi olmadan, çözdüklerinden daha fazla sorun yaratan bir teslimatta ek düzeltmelere ve zamana ihtiyaç duyulacaktır. Ekibin büyüklüğü, önemli kod değişiklikleri ve dış sistemler nedeniyle, bu risk daha da artmış olacaktır. Regresyon Testi, uygun kapsamda ve her drop sonunda entegre bir ortamda tam regresyon testi yapılmalıdır. Farklı ekip, çözüm ve entegrasyonların olduğu senaryoda, sorunların etkin bir şekilde ele alınması daha acil bir konu haline gelir. Aksi durumda ortaya çıkan maliyet çok yüksek olabilir, çünkü bir çözüm bir kez hayata geçtiğinde, sorunları çözmek çok daha pahalı ve zordur. Ek olarak düşük kaliteli yazılımın ticari sonuçları ciddi olabilir.

Test otomasyonu bu aşamada büyük önem taşımaktadır. Girdileri konsolide etmek ve sorunlu alanlara odaklanmak için doğru zamanda iç görü elde etmek önemli bir gereklilik haline gelir. Bu nedenle, otomatik olarak oluşturulabilen ve eyleme geçirilebilir iç görü sağlayan günlük raporlara sahip olmak zorunludur. Otomasyon ile sağlanan böyle bir raporla ekipler problemleri bulabilir, hızlı aksiyon alabilir, doğru konulara/ekiplere/çözümlere odaklanabilir ve bunu gelecek planlamaları için de kullanabilir.

Değişiklik Yönetimi

Yazılım projelerinde değişiklik yönetimi, geliştirilen ürününün mevcut bir durumundan başka bir iyileştirilmiş durumuna geçişi olarak ifade edilebilir. Kod değişiklikleri, süreç değişiklikleri veya doküman değişiklikleri gibi somut değişiklikleri kontrol eder, destekler ve yönetir.

Yazılım projelerinde SDLC boyunca yazılım, ortam, kaynak, ağ-güvenlik, dokümanlar ve süreçler den bazıları veya tamamında değişiklikler yapılacaktır. Proje ne kadar büyük olursa, o kadar fazla değişiklik olacaktır.

Dahil olunan proje bir dönüşüm projesi ise, yukarıdaki alanların neredeyse tamamı etkilenecektir. Bu dönüşüm süreci boyunca, etkilenen her ekipten bir veya iki kişinin sürece liderlik etmesi sağlanmalıdır.

Sürecin iyi yönetilememesi durumunda daha yüksek risk, memnun olmayan müşteriler ve tekrarlayan çalışma maliyetleri ortaya çıkacaktır. İyi bir kontrol yapısı, gereksiz maliyetleri ortadan kaldırmaya, süreç verimliliğini artırmaya ve iş fırsatından en iyi şekilde yararlanmaya yardımcı olur.

Bu süreçte engelleri erkenden belirleyerek hafifletme, ortadan kaldırma, küçük kazanımlar oluşturma ve sık iletişim yoluyla zaman tasarrufu sağlamak çok değerlidir.

Ekip Yetkinliği

Bir zincir, en zayıf halkası kadar güçlüdür ve yazılım ekipleri söz konusu olduğunda performans, büyük ölçüde onların bireysel beceri seviyelerine bağlıdır. Bir yönetici olarak, en ideal ortamı yaratabilirsiniz, ancak ekip eldeki sorunu çözmek için gerekli becerilere sahip değilse, projeniz başarısız olmaya mahkumdur. Bu, ancak uygun deneyim ve öngörü ile çözülebilecek bir ekip yönetimi ile sağlanabilir.

Büyük projelerde deneyim esastır. Büyük proje deneyimi olmayan proje ekipleri arasında gördüğümüz ortak bir şey, projenin karmaşıklığı arttıkça gerekli olacak tüm çeşitli aktiviteleri tahmin edememektir. Örneğin, bu tür ekipler, bu taahhüdü aşağıdan yukarıya bir planla desteklemeden gerekli test faaliyeti miktarını hafife alacak veya gerçekçi olmayan teslimat tarihleri taahhüt edecektir. Bu tür ekipleri içeren projeler genellikle kritik kilometre taşlarını kaçırmaya başlar ve ek olarak kıdemli paydaşların güvenini kaybedebilir.

Etkili ekip yöneticileri, gerekli proje yönetim becerilerini ve yetkinliklerini önceden belirler, ek kaynak ve beceri setlerinin gerekip gerekmediğini belirlemek için mevcut iş gücünü değerlendirir.

Bir ekip üyeleri kadar iyidir. Ekip üyeleri çözüm odaklı değilse veya verilen görevleri yerine getirmek için yeterince eğitimli ve donanımlı değilse, proje riskli bir noktaya gelebilir. Ancak çoğu zaman ekip üyeleri, birçok projedeki uzmanlıklarına göre değil, uygunluklarına göre atanır. Ekip üyeleri, zorlukların üstesinden gelmek ve verilen görevleri yerine getirmek için yeterli beceriye sahip olmalıdır.

Bu nedenle ekip üyelerinin eğitimi veya gerekli becerilere sahip kaynakların eklenmesi ihtiyacına karar vermek ekip yöneticisinin sorumluluğudur. Aksi durumda oluşan baskı ve problemler hesap verememe, birbirini suçlama, hedef gösterme gibi istenmeyen ve projeyi durma aşamasına getirebilecek sıkıntılara yol açabilir.

Bütçe Kısıtları

Hedeflenen bütçeli bir yazılım geliştirme projesine sahip olmak için maliyet tahmini kritik önem taşır fakat yazılım geliştirme bütçeleri söz konusu olduğunda, maliyetler her zaman değişmektedir.

Etkili maliyet yönetimi ile bir yönetici, bir projenin karşılaşabileceği çeşitli yaygın komplikasyonları önleyebilir, daha iyi ve daha hızlı sonuçlar için çabalayabilir.

Maliyet tahminleri ve geliştirme eforları için iyi bir kontrol mekanizması, gereksinimlerin çapraz sorgulanmasıyla sağlanabilir.

Kapsam değişikliği veya belirsizliklerin yaratacağı maliyetlerin ek riskleri vardır. Uzmanlık dışı veya karmaşık gereksinimlerin ortaya çıkaracağı ek maliyetler örnek verilebilir.

Maliyet aşımlarını önlemek için uygun bir prosedürü benimsemeli ve gerçekçi varsayımlar ortaya konmalıdır. Efor planlanması, net gereksinimler ve kaynaklar göz önünde bulundurularak yapılmalıdır. Aksi takdirde, bütçe ve zaman kısıtlamaları bir projenin başarısını tehdit edebilir.

Belirsizlikler

Netlik, projenin başarılı bir şekilde tamamlanması için en önemli gereksinimlerden biridir ve eksikliği birçok proje de sorun yaratır.

Bir ekip yöneticisinin, kilometre taşları ve kalite testleri oluşturarak proje ilerlemesini ölçümlemesi önemlidir. Ekibinizin ilerlemesine yardımcı olmanın yanı sıra, net hedefler dizisine sahip olmak, üst yönetimin ve müşterilerin önünde gerekli durumlarda savunma yapılabilmesine yardımcı olacaktır.

Hedeflerin net bir şekilde belirlenmesi gerektiği unutulmamalıdır. Bu nedenle, ekibiniz için hedefler oluşturduğunuzda, bunları ekip arkadaşlarınıza açık bir şekilde belirtin.

Ekip üyeleri projeden tam olarak ne bekleyeceklerini bilmiyor olabilirler. Amaçlar ve hedefler açıkça tanımlanmadıysa, proje başarısız olmaya mahkumdur. Proje gereksinimlerinin kim tarafından, nasıl, neden ve ne zaman tamamlanması gerektiği belli olmadığında, ortaya çıkacak durum karışıklık ve kaostur.

Net hedefler, belirli bir yön ve hazırlanmış bir plan olmadan bir projeye başlamak; nereye gittiğinizi ve oraya nasıl gideceğinizi bilmeden bir yolculuğa çıkmak gibidir.

Gerçekçi Olmayan Tarihler

Ulaşılması güç bir son teslim tarihine sahip olmak, nihai ürünün kalitesini ciddi şekilde etkileyebilecek başka bir zorluktur. Etkin bir yönetici, ekibinin kapasitesini bilir ve son teslim tarihlerine ve proje görevlerine öncelik vererek proje zaman çizelgesini müzakere eder.

Agile yaklaşımlarda, tek bir sprint te tamamlanan işin ölçüsü olan hız, tüm paydaşlardan girdiler alınarak toplu olarak kararlaştırılır. Bu, projenin planlama aşamasında yapılır. Ayrıca, ekip yöneticisi tarafından termin sürelerinin sık sık izlenmesi bir zorunluluktur.

Teslim sürelerinin kontrolü, projenin yürütülmesi sırasında kapsamdaki herhangi bir artışın (kapsam kayması) önlenmesini veya gerektiğinde zaman çizelgelerinin değiştirilmesini için etkili bir gösterge olacaktır.

Ekiplerin mücadele ettiği konulardan biri, müşterilerin proje için beklentide oldukları teslim tarihidir. Çoğu zaman çizelgesinde, gerçekçi olmayan ‘ilk teslim tarihleri’ nedeniyle sonlara doğru kaymalar yaşanabilir.

İletişim

Yanlış iletişim veya zayıf iletişim yazılım projelerinin başarılı bir şekilde teslim edilmesi önündeki en büyük yönetim zorluklarından biridir.

Tüm geliştirme ekibinin projeyi sahiplenmesi ve proje başarısına eşit şekilde katkıda bulunması önemlidir.

Çevrimiçi (Slack, Trello, Teams, Zoom vb) araçları ve etkili iletişim yöntemleri (sözlü, yazılı) kullanılmalıdır. İletişim yöntemlerinin etkinliği düzenli olarak kontrol edilmeli ve gerekli durumlarda düzenlemeler yapılmalıdır.

Agile yaklaşım veya DevOps süreçleri kullanılıyorsa, işbirliği ve iletişim daha da önemli hale gelir.

Proje boyutları ve ihtiyaçları göz önünde tutularak ALM, DevOps ve Test Otomasyon çözümlerinden destek alarak zaman tasarrufu sağlamak ile birlikte neyin, ne kadarı, ne sürede ve ne uygunlukta yapıldığını ölçümleyebilmek fark yaratacaktır.

En büyük kazanım ise yine uzmanlık, insan ilişkileri ve iletişim becerilerinin katkısıyla ortaya çıkacaktır.

--

--