27 Ekim 2015 Salı

Freelance yazılım geliştirme çalışma stratejisi

 Merhaba, bu yazımda özellikle freelance çalışan ve çalışmayı düşünen arkadaşların işine yarayacağını düşündüğüm, freelance çalışırken uyguladığım çalışma metodolojisinden bahsedeceğim.


Fiyatlandırma nasıl yapılır?
Fiyat verirken şayet karşılaştığınız proje daha önce yaptıklarınızdan birine benzemiyorsa ve iş modeline hakim değilseniz en başlarda net fiyatlar vermekten kaçının. Ortalama max. min fiyatlar verin ve detaylar hakkında yapılacak toplantı sonrasında net fiyat verebileceğinizi söyleyin.

Fiyatlandırma hesabını şu şekilde yapabilirsiniz.
(maaşlı çalışıyor olsaydınız aylık maaşınız ve sigorta vb. değerleriniz)/22=X

Bu hesaplamada eğer maaşlı çalışmış olsaydınız yeteneğinizin bir aylık süreçte günlük değeri çıkacaktır. Sonrasında bu proje için harcayacağınız gün sayısını yukarıdaki X ile çarpıp fiyat verebilirsiniz. Ben örnek olarak günlük hesap yaptım, isterseniz saatlik hesap da yapabilirsiniz.

İlk toplantılar
İş modeli basit 5-10 parça ürünün satılacağı bir e-ticaret modeli gibi herkesin bilebileceği kolay bir yapı değilse, yabancı olduğunuz bir sektöre ait bir iş modeli üzerindeki bir projede çalışıyorsanız, iş modelini derin derin tartışmayın. Ne kadar toplantı yaparsanız yapın, anlatılan ve anlaşılan arasında farklar olacaktır.  Farklı bir sektörün dinamiklerine birkaç saatlik toplantıyla hakim olamazsınız. İş modeli hakkında eğer çok emin değilseniz özgün fikir vermekten kaçının, saçmalıyor olabilirsiniz.

Çalışma planı hazırlanması
Tanışma, sözlü olarak anlaşma faslının ardından proje başlangıcından bitimine kadar müşteriniz ile yapacağınız toplantılarda sırasıyla aşağıdaki gibi ilerlenmesi gerekir.

1- Proje sayfalarının wireframe leri

  •  Müşteriniz ile birlikte projede olacak tüm sayfaların wireframelerinin hazırlanması gerekir. Bunun için kullanabileceğiniz pek çok tool var,örn. balsamiq bunlardan biri. Mobil bir proje üzerinde çalışıyorsanız, pencil da oldukça kullanışlı.


2- Fiyatlandırma ve sözleşmelerin hazırlanması

  • Wireframe'ler hazırlandıktan sonra daha yüksek doğruluk oranı ile proje üzerinde ne kadar zaman harcayacağınızı hesaplayabilir ve net bir fiyat verebilirsiniz. Fiyatlandırma konusunda anlaştıktan sonra müşteriniz ve sizin yükümlülüklerinin net olarak anlatıldığı hukuki bir dil ile yazılmış bir sözleşme hazırlayın ve yaptığınız sayfa tasarımları mutlaka bu belgelerin içinde olsun. Sonradan müşteriniz hesapta olmayan ek işler çıkarttığı zaman maliyet çıkartmak için bir dayanağınız olsun, yoksa art niyetli müşteriler tarafında suistimal edilebilirsiniz. 

3- Yapılan Wireframelerin html tasarım üzerinde uygulanması ve onaylanması.

  • Yapılan wireframleri psd yada jpeg üzerinde web arayüzünde nasıl görünmesi gerekiyorsa hazırlayın ve müşterinize onaylatın. Buraya kadar tamam ise sayfaların html css halini hazırlayabilirsiniz.

4- Kodlama ve veritabanı hazırlama süreci

  • Şimdi elimizde arayüz çıktılarımız var, müşterimiz ile sözleşme imzaladık. Yapmamız gereken artık hazırlanan arayüzdeki input ve outputlara göre veritabanını tasarlamak ve verileri bağlamak. İstediğiniz teknolojiyi kullanın.

5- Proje güvenlik ve performans testleri

  • Projenizdeki olası güvenlik açıklarını kontrol edin ve performans testleri yapın. Bunun için de piyasada pek çok benchmark aracı var.

5- Projenin sözleşmede imzalanan şekilde host edilmesi

  • Bu en son basamak oluyor, projeyi test ortamından canlı ortama alın, son bir kez testleri yapın.

Dipnot olarak, eğer yaptığınız iş birkaç günde bitirebileceğiniz küçük bir iş ise  bu sıralamanın ve prosedürlerin pek bir önemi yok.

Son olarak
Yazılım eğitimi veren çoğu kurumda malesef bu süreç aşağıdaki gibi öğretilir. Bana da böyle gösterildi, örnek projemi bu hiyerarşiye göre yaptım (:

1- Veritabanı tasarımı
2- Kodlama standartlarının belirlenmesi ve proje katmanlarının hazırlanması
3- Html arayüzlerin hazırlanması
4- Kodlama ve verilerin arayüze bağlanması

Bu liste neye göre, hangi kabul edilmiş metodolojiye göre yapıldı bilmiyorum ama, bu yöntem pek mantıklı değil.
Çünkü; Veritabanından başlayabilmek için, sonrasında hazırlanacak olan arayüzün veritabanı modelini %100 desteklemesi, arayüzde veritabanı modelinin dışına çıkan input ve outputların olmaması gerekir, ki bu çoğu zaman imkansızdır.

Her zaman veritabanı arayüzü referans alıp oluşur, veritabanını referans alıp oluşan bir arayüz olmaz.(büyük projelere geliştirilen ek modüller haricinde).

Kodlama ve veritabanı tasarımı önemli konular olsa bile hiyerarşik olarak arayüz tasarımından daha sonra gelir. İş modelinin en can alıcı noktası her zaman arayüzdür. Arayüze göre tablo yaparsınız, arayüze göre kod yazarsınız. Arayüz baba'dır (: Tüm bu sebeplerden dolayı arayüz bitmeden veritabanı ve kodlama konularına geçildiği takdirde double work olayı kaçınılmaz olacaktır.