Günümüzde, yazılım ve proje yönetimi alanındaki yeniliklere rağmen, birçok yazılım projesi malesef halen başarısızlıkla sonuçlanmakta, bütün yatırımını belirli bir projeye yapan şirketler doğru yönetilmeyen projeler yüzünden batma tehlikesi ile karşı karşıya kalmaktadırlar.

Bu yazıda, bir yazılım projesinin nasıl geliştirilmesi gerektiğini, geliştirme aşamasında nelere dikkat etmemiz gerektiğini, geliştiren ekibin hangi özelliklere sahip olması gerektiğini, kendi bakışaçım ve tecrübelerime dayanarak anlatmaya çalışacağım.

İlk Kural;

Geliştirdiğiniz uygulama, her ne olursa olsun, bence aklınızdan hiç çıkmaması gereken en önemli kural: sadelik olmalı. Sadelik ve “temiz kodlama”dan ödün vermeden geçtiğiniz her aşama için, “iyi ki bu şekilde ilerlemişiz” diyeceksiniz.

Önceliklendirme

Önceliklendirme yapılırken, hangi modüllerin daha önce, hangilerinin daha sonra geliştirileceğine nasıl karar vereceğiz?

Projenizin başarılı olmasını sağlayacak en büyük etken katma değer dir. Projenizi bir yazılım projesi olarak görmeyi bırakıp, insanlara sağladığınız katma değeri artırmaya çalışın. Böylece hangi özellik/modülü hemen geliştirip hangilerini geliştirmeyeceğinize daha kolay karar verebilirsiniz.

Katma değeri yüksek olan modülleri mümkün olduğunca hızlı kullanıma açın.

Aklınızda, uygulamanızla ilgili binlerce iyi fikir olabilir, ancak bunların hepsinin tamamlanmasının çok fazla zaman alacağını kesinlikle unutmayın. Herşeyi hemen şimdi tamamlayamazsınız. Ne kadar fazla özellik isterseniz, uygulamanızın kullanıma açılmasını o kadar geciktirirsiniz.

Öncelile katma değeri yüksek bir özelliğinizi erken kullanıma sunup, uygulamanın geri kalan kısılmlarını sonradan tamamlayıp kullanıma açabilirsiniz.

Kullanıma açılacak özellikler için herkesin farklı bir görüşü olabilir, ancak hiçbir kullanıcı bütün özellikleri birden istemeyecektir. Kullanıcıların birçoğu uygulamalardaki sadece belli başlı özellikleri kullanmaktadırlar. Uygulamanızın birkaç modülünü erkenden paylaşmak kullanıcılarınıza katma değer sağlayabilir, siz de, kullanıcılardan gelen geri bildirimler ve uygulamanızdan topladığınız verilere dayanarak, bir sonraki aşamada hangi modülleri geliştirmeniz gerektiğine daha kolay karar verebilirsiniz.

John Calvin Maxwell’in güzel bir sözü ile ara vereyim;
“Fail early, fail often, but always fail forward.”

Ürününüzü erkenden kullanıma açmak, doğru yöne gidip gitmediğinizi gösterecektir. Doğru yönde olmadığınızı görseniz bile, bunu erkenden tespit edip düşük maliyetle yönünüzü değiştirme imkanınız olacaktır.

Sağladığınız katma değerin artması, neleri geliştirdiğinize bağlıdır. Bu yüzden maliyeti düşük, katma değeri yüksek modülleri öncelikle geliştirmeniz cok faydalı olacaktır.

Projeniz için elde edebileceğiniz en yüksek katma değeri, değer odaklı geliştirip sıkça yayınladığınız özelliklerden edinebilirsiniz. Unutmayın, en iyi sonuçları, uygulamanızı modül modül geliştirip ilgili modülleri mümkün olduğunca erken yayınladığınızda alırsınız.

Proje Takvimi

Herhangi bir proje hakkında öğrendiğimiz ilk şey genellikle proje takvimi veya teslim tarihi olur. Teslim tarihi geldiğinde neleri istiyoruz? Tabi ki bütün özellikleri. Peki planımız ne? Teslim tarihine bütün özellikleri yetiştirmek.

Aslında, geliştirilmesi planlanan bütün özellikleri proje takvimine genellikle sığdıramazsınız, bu yüzden gerçeği kabullenip bunu nasıl yöneteceğinize karar vermelisiniz.

Genellikle birçok proje analiz, tasarım, geliştirme, test, devreye alma gibi faaliyet-tabanlı fazlar ile yönetilmeye çalışılmaktadır. Analiz fazını zamanında yetiştirebilseniz bile, tasarım ve geliştirme fazlarındaki herhangi bir gecikme yüzünden, test -hatta devreye alma- aşamalarında da geliştirme yapmak zorunda kalabilirsiniz. Gecikmeler sonucunda ya proje takvimini güncellemek zorunda kalırsınız ya da geliştirmesi tamamlanmadan, testleri yapılmadan projenizi canlıya almak zorunda bırakılabilirsiniz.

Yazlımınızın belirli bir bölümünü görmeden, gerçekte nasıl ilerlediğinizi bilemezsiniz. Uygulamanızı test etmeye başladığınızda, nadiren iyi sonuçlar alırsınız.

İşler nadiren yolunda (plan doğrultusunda) gider.

Faaliyet-tabanlı planlanan projelerde, genellikle, bütün projenin analiz ve tasarımı tamamlandıktan sonra, kodlama aşamasının sonlarına doğru, aslında bütün isterlerin tamamlanamayacağını fark ettiğinizde, çoktan iş işten geçmiş olacaktır. Bu aşamada projenin maliyetlerini kısmak neredeyse imkansız hale gelecektir. Çünkü zaten hiç kullanılmayacak özelliklerin analiz ve tasarımı tamamlanmış, hatta kodlamasında da büyük yol kat etmişsinizdir.

Projenin katma-değerlerini dikkate alarak tasarladığınız ve uygulamanızı modüller tamamlandıkça canlıya aldığınız bir plan daha başarılı sonuçlar elde etmenizi sağlayabilir. Bu plan doğrultusunda geliştirdiğiniz modüller, kullanıcılara katma-değeri erken sunmanızı sağlayacak ve yönetilmesi de daha kolay olacaktır. Aynı zamanda modüllerinizi yayınladıkça projenizin genel durumunu da daha iyi görme şansınız da olacaktır.

Peki Riskler?

Uygulamanızı modül modül canlıya almanız durumunda, projenizin başarısız olma ihtimalini azaltmış olursunuz, en azından riskleri daha erken tespit edebilirsiniz. Çünkü bu yaklaşım daha çabuk ve daha iyi bilgilenmenizi sağlayacaktır.

Yeni bir modülü geliştirmeye başlarken, uygulamanızın henüz geliştirilmemiş en önemli modülünü geliştirebilir, kullanıcı ihtiyaçlarının/isterlerinin değişmesi durumunda (bu gennellikle çok sık yaşanır), hangi modül ile devam edeceğinizi kararlaştırıp, hızlıca değişikliği uygulayabilirsiniz.

Modül bazlı yönetim/geliştirmenin size sağlayacağı en önemli özellik, değişimlere (gerek yönetimsel, gerekse iş modeliniz ile ilgili değişimler) hızlıca ayak uydurabilmeniz olacaktır.

Bir sonraki yazıda, modül/katma-değer tabanlı yönetim/geliştirme için geliştirme ekibinizin nasıl olması gerektiğini yazmayı planlıyorum.

Umarım faydalı bir yazı olmuştur.


Kaynakça:

Yazı Fotoğrafı: https://www.pexels.com/photo/ideas-whiteboard-person-working-7369/

Kitap: https://pragprog.com/book/rjnsd/the-nature-of-software-development