Dün akşam MSN üzerinde Sertaç Bey ile güzel bir sohbet yaptık. Konumuz Türk yazılım firmalarının dışarıdan iş almaları idi. Sohbet sırasında bir kaç noktaya değindim fakat etraflıca blogda yazmak iyi olur diye düşündüm. Hem böylece gelecek kollektif yorumlar ile bizim düşünemediğimiz şeyler de ortaya çıkabilir diye düşünüyorum.
Burada yazdıklarımın hepsini uygulamak zorunda değilsiniz, hatta eksikler bile olabilir. Bu yüzden yorumlarınızı bekliyorum. Ayrıca aşağıda sayılan işlerden yapabileceğiniz varsa, kontak bilgilerinizi bana göndermenizi yada yorumlara yazmanızı rica edeceğim. Belki bu işlere girmek isteyen kişilere profesyonel destek verebiliriz. Daha sonra yorumlardan derleyeceğim bu işleri yapabilecek kişileri yazıya ekleyeceğim.
Birde zaten dışarıya bu tür yazılım işleri yapıyorsanız ve oturmuş bir sisteminiz varsa lütfen firma bilgilerini yorumlara ekleyin.
Alt yapı
Firmanın belli bir yeri olması ve alt yapısının sağlam olması gerekiyor ki müşterilere bir güven verebilsin. Aşağıdaki listede bir kaç yardımcı yöntem listeliyorum.
- Tanıtıcı site
- Referanslar
- Yazılım ortamı ve teknolojiler
- Kod Kontrol
- Sürekli Entegrasyon
- Ünite Testi
- İngilizce
- Bloglar
- Teslimat
- Evden çalışma
- Her satır kod
- Karmaşık GUI tasarım
- Orta derece karmaşık GUI tasarım
- Düşük derece karmaşık GUI tasarım
- Yüksek öncelikli hata giderme
- Orta öncelikli hata giderme
- Düşük öncelikli hata giderme
- 1 saatlik ücret
- Hatanın sebebini arama (hatanın önceliği ile doğru orantılı)
- Bu listeye eklemek istediğiniz başka bir şey var mı?
Firmanızı tanıtmak için profesyonel bir tasarımcı ile oturup web sitesi hazırlayın. Bu site sizin dışarıya açılan kapınız olacaktır. Ayrıca aylık bir ücret ile Google arama sonuçlarında üst sıralarda yer alabilirsiniz.
Yaptığınız işleri bir bir sıralayın. Bu işlerden aldığınız referansları ve iyi yorumları sitede yazın. Eğer mümkünse müşterilerinizin kontak bilgilerini verin ki potansiyel müşteriler direk hakkınızda bilgi alabilsin.
Kullandığınız yazılım ortamını, araçlarını, işletim sistemi, veritabanı, bilgisayarların kapasitelerini, yedekleme stratejinizi, güvenlik önlemlerinizi listeleyin. Size iş vermek isteyen ve sizi hiç tanımayan bir kuruluşun hakkınızda en fazla bilgiyi alabilmesi için her türlü ayrıntıyı yazın.
Kod Kontrol için kullanılan ortam en önemli ortamlardan biridir. Örneğin her proje için sanal bir TRAC makinesi kullanabilirsiniz. Trac subversion, wiki, hata veritabanı, ViewVC yada WebSVN gibi yazılımlar ile kurulu geliyor. IP ayarlarını yapıp, modem üzerinden port forward ayarlarını yaptıktan sonra internete açık hale gelir.
Kod kontrol sisteminize, değişiklikleri takip edecek ve derleme ile kurulumları yapacak otomatik bir sistem kurmanız gerek. Zaman dar olduğu için mümkün olduğu kadar işi otomatikleştirmek gerekiyor. Yazılım uzmanlarının tek işi kod yazmak olmalıdır. Derleme, kurulum gibi işlerle vakit harcamayın. Bu işi Cruise Control ile yapabilirsiniz. (Bu tavsiyeyi vermekten artık dilimde tüy bitecek.)
Kod yazarken ünite testlerinide ihmal etmeyin. Kodun doğruluğunu ortaya çıkaracak yegane yöntemlerden biridir. Hatta ünite testlerini müşteri bile yazabilir eğer isterse. Kesinlikle yapılması gereken bir iş
Dışarıya iş yapıldığı için doğal olarak herkesin ingilizce bilmesi gerekiyor. Yada projeyi yönetecek kişinin çok iyi ingilizce bilmesi şart. Eğer analizleri Türkçe’ye çevirecek zaman varsa yazılım uzmanlarının ingilizce bilmesine gerek yok.
Web sitenizde, firmada çalışan herkesin bir blogu olmalıdır. Çaycı Emine teyze bile bir blog sahibi olmalıdır. Blogunda çay ve kahvenin nasıl yapıldığını, üretime nasıl katkıda bulunduğunu, firmanın kafein ihtiyaçlarının nasıl karşılandığını, beslenmenin nasıl olduğunu yazmalıdır. Birde Kuru Kahveci Mehmet Efendi ve Mahdumlarından bir reklam koydunuzmu, dışarıya sadece yazılım değil kahve de satıyor olabiliriz.
Derlenmiş yazılımın ve kaynak kodunun nasıl teslim edileceği ve test ortamlarının nerede olacağı konusunda araştırma yapılıp, test amaçlı hosting hizmeti alınabilir. Eğer web tabanlı projeler yapıyorsanız bu ideal. Windows Forms tabalı yapıyorsanız, müşteri ile anlaşmaya bağlı olarak, kurulum dosyalarını iletebilir ve müşterinin test etmesini sağlayabilirsiniz. Teslimat zamanlarının iyi belirlenmesi ve sık aralıklarla yapılması yerinde olur. Örneğin her hafta Cuma günü gibi.
Kurulan bu alt yapı yazılım uzmanlarına evden çalışma imkanı verecektir. Kaynak kodu gizliliği ve sızmaları önlemek için herkesin bilinçlendirilmesi gerekir. Evden çalışmak herkesin hayali olduğuna göre de idealdir. Yanlız ücretlendirme konusunda sıkıntı yaşanabilir. Yazılım uzmanlarına hangi bazda ücret verileceği (saatlik, her satır kod için, çözülen hatalar için vs.) tartışılmalı ve herkesin ulaşabileceği biçimde duyurulmalıdır. Sizce aşağıdaki işler için yazılım uzmanı ne kadar ücret almalıdır?
Diyelimki proje yönetimi için hazırladığınız diyagram bütün alt işleri en ince ayrıntısına kadar içeriyor. Yukarıda oluşturduğumuz fiyatlandırma politikası ile projenin maliyetini çıkartabilirmiyiz?
Analiz Süreci
Analiz sürecinde müşteri ile sürekli irtibat halinde olmanız gerekiyor. Yada belkide analizler size hazır halde gelecek. Eğer analizler hazır ise öncelikle bir yerlere imza atmadan projenin maliyetini eldeki verilere dayanarak kestirmeye çalışmak gerek.
- Metodoloji
- Prototip
- Belge Sunucusu
Kullandığınız metodolojinin ne olduğunu ve adımlarını listeleyecek, kolayca web üzerinden gezilebilen bir şablon hazırlayın. Böylece müşteri yazılım süreçlerini görüp ne aşamalardan geçtiğini görebilir. Metodoloji belkide güven kazanmak için en önemli unsurlardan biridir. RUP, Agile, MSF gibi bir metodoloji veya kendinizin geliştireceği bir water fall modeli bile olabilir. Yeterki belgelenmiş olsun ve her adımı tespit edilmiş olsun.
Zaman varsa veya proje planında öngörülmüş ise bir prototip ile müşterinin karşısına çıkabilirsiniz.Bu prototip size müşteriyi anlamak için daha fazla imkan sunar.
Yazılan ve çizilen her türlü belge bir belge sunucusunda tutulmalı ve müşteriye erişim verilmelidir. Hiç bir yazılı belge kaybolmamalıdır. MErkezi bir çalışma sistemi kurularak kim ne değişiklik yapmış görülebilmelidir.
Proje Planı
- Riskler
- Felaket durumunda operasyonun durması
- Virüs ve dış etkenlerden dolayı aksama
- Yazılım uzmanlarının bırakıp gitmesi
- Müşterinin operasyonu durdurması
- Yeni sürüm yazılım araçlarından dolayı aksama
- Alt işlerin belirlenen zamandan uzun sürmesi
- Kapsam değişikliği
- Donanım değişikliği
- İletişim hatlarının aksaması
- Maliyet
- İşler
- İşlerin ufak parçalara bölünmesi
- İşlerin Dağıtılması
Risksiz bir iş yok ama bunların farkına varmak heleki önceden sezinlemek neredeyse imkansız. Risk durumlarında yönetim yapmak ise gerçekten bir hüner işi. Bir yazılım projesinde olabilecek belli başlı riskler var. Bunlar:
Bu risklerin pek çoğu önlenebilecek riskler. İyi bir planlama ile riskler en aza indirilebilir. Proje gidişatı içinde ortaya çıkan riskler de iyi bir yönetim ve müşteri ile anlaşmalar sonucu giderilebilir.
Yukarıda değindiğimiz maliyet unsurlarından başka projede kullanılacak lojistik desteğinde bir maliyeti vardır. Artık Tuvalet kağıtlarından tutunda Emine teyzenin getirdiği çay ve kahveye kadar. Bunları da proje maliyetlerine eklemek gerekmektedir.
Proje planında ortaya çıkan işlerin en ince ayrıntısına kadar ayrılması ve müşteri tarafından onaylanmasına dikkat edin. İleride ortaya çıkacak sürprizlerden kaçmanın tek yolu budur.
İşleri parçalara bölmek için Data Definition Diagram yada fonksiyon bazında bölümleme yapabilirsiniz. Gereken zamanları tahmin ederken yazılım uzmanlarına danışmayı unutmayın.
İşleri dağıtırken herkesin yapabileceği işe göre dağıtım yapın ve fazla yüklemeden kaçının.
Hedeflerin Belirlenmesi
- Günlük Sürümler
- Hataların Çözülmesi
- Müşteri ile iletişim
Ecnebilerin “Nightly Build” dedikleri bu nane, kodunuzun her akşam kod kontrolden çekilerek derlenmesini ve ünite testlerinin çalıştırılmasını salık verir. Eğer raporlar başarılı olursa (tüm dünkü ünite testleri çalışıyor, yeni ünite testleri de %80 çalışıyor gibi), güne güzel başladık demektir. Eğer sabah gelipte 2 gün önce yazdığınız ünite testinin artık doğrulama yapmadığını görürseniz (ve bunun sorumlusu siz değilseniz) artık b**ktan bir gün sizi bekliyor demektir.
Şu çok güzel olurdu. Blogunuzun altında bir bölümde o gün kaç tane ünite testinizin geçtiğini ve kaç tane eklediğinizi gösteren bir panel olsa ve her derleme işleminden sonra güncellense güzel bir gösterge olurdu. Var mı böyle bir proje yapacak olan?
Müşterinin girdiği veya dahili olarak bulunan hatalar sınıflandırıldıktan sonra sorumlu kişilere atanır ve belirlenen süre zarfında çözümlenir. Ne kadar basit değil mi? Değil tabii ki çünkü her zaman gözden kaçan bir üçüncü faktör (ecnebilerin devil in the details dediği gibi) ortaya çıkıp ya zamanı uzatır yada hatanın giderilmesi sonucu 4 yeni hata ortaya çıkartır. Bu tür durumlarda verilecek reaksiyon, analitik problem çözme yeteneği ve sistem bilgisine dayanır. Yapılan işin herkes tarafından bilinmesi problem çözmeyi kolaylaştırır. İşin başında iç iletişimi sıkı tutarsak bunu sağlayabiliriz. Ben bir modül yazıyorsam; bunun akış şemasını ve kodun dallandığı durumları belirtmem; kısacası bir teknik tasarım belgesi hazırlamam gerekir. Diğer bir yazılımcı ise benim kodumu teftiş ederken bu belge ve kaynak kodu ile teftiş eder. Kod Teftişi önemli bir konudur ve atlanmaması gerekir. Kod teftişini müşteri de yapabilir isterse.
Müşterinin size istediği zaman ulaşabilmesi ve isteklerini aktarabilmesi gerekir. Her zaman erişilebilir olmaya özen gösterin. Müşteri isterse yazılımcılar ile doğrudan görüşebilir. Fakat operasyon müdürünün bu iletişimlerden haberdar olması gerekir. Çünkü ileride ekibin çıkarlarını koruyacak kişi O’dur. Eğer bir yazılım uzmanı olarak müşteri tarafından direk arandıysanız bunu bir belge haline dönüştürüp operasyon müdürüne iletiniz ve hiç bir soruyu yanıtlamayınız. Daha sonra geriye dönüp cevapları vereceğiniz söyleyin. Müşteri sizi sadakatınızı ölçüyor bile olabilir.
Kod Kontrol ve Müşteri erişimi
- Firma sunucuları
- Subversion veya TFS
Sunucularınızı öyle bir kurunki müşteri kendi projesine istediği zaman tepeden bakabilsin. Kod kontrol, hata ve istek veritabanı, belge sunucusu ve test ortamları her zaman müşteriye açık olmalıdır. Çeşitli raporlama seçenekleri ile müşteriye gidişat hakkında bilgi verilebilir. Sizinde uğraşmanıza gerek kalmaz bu raporlar için. Yani düşünün sourceforge.net gibi bir sistem fakat kurumsal olarak planlanmış ve herkese açık değil. Bu arada Sourceforge.net sistemini satın alıp kullanabileceğinizi biliyormuydunuz.
Alt yapı için, operasyonun büyüklüğüne göre bu iki üründen birini seçin. Sanal makine kullanmak ta yönetimi kolaylaştırır.
Şeffaf Yönetim
- Erişilebilirlik
Bu firmanın yönetimi o kadar şeffaf olmalıki müşteriler bir bakışta bunu sezinleyebilsin. Müdürlerin aktif katılımı, herkesin blogları, forumlar vs herşey göz önünde olmalıdır. Büyük kurumların şu anda yaptıkları da bu değil mi?
Kullanıcı Kabul
- Testler
- Performans
- Kabul Şartları
Kullanıcı kabul şartlarını iyi gözden geçirmek ve bu şartların yazılım içinde doğrulandığına emin olmak gerekir. Testler için belirli test senaryoları hazırlamak ve iş akışlarının sonunda meydana gelecek çıktıların belirtilmesi gerekir.
Ürünün performans testlerinin de yapılması gerekir. Genelde otomatik araçlar ile yapılan bu testler ürünün yük altında nasıl tepki vereceğini ölçmek ve optimum çalışacağı donanım gereksinimlerini belirlemek için gereklidir.
Müşterinin öne süreceği kabul şartlarının yeterliliği ve olabilirliği en ince ayrıntısına kadar araştırılmalıdır. Ayrıca müşterinin istediği bir şart ile sizin o şarttan anladığınız anlam aynı olmayabilir. Bu tür yanlış anlamaları ortadan kaldırmak için bu şartların enine boyuna müşteri ile konuşulması gerekir.
Teknoloji Desteği
Kullandığınız yazılım ve donanım ile ilgili gerekli desteği almanız gerekir. Ayrıca yedek olarak bir kaç bilgisayar bulundurmak ta operasyonun devamlılığı için şarttır. Microsoft Programları, CA VIP programları, Linux desteği, IBM Programları vs gibi bir programa katılıp hem ürünleri ucuza almak hemde gerektiğinde destek almak için anlaşmalar yapın.
Yazılımcı bulmak
İşin zor yanlarından biri de sanırım yazılım uzmanı bulmak. Ama yazılımcılar da ulaşılamaz kaynaklar değiller. Nereye bakmak gerektiğini iyi bilmek gerekir. Genelde yazılım sitesi portallarında, sosyal gruplarda, bloglarda, forumlarda aktif olan kişileri bulup birer özgeçmiş isteyebilirsiniz. Yada liselerde yazılıma meraklı öğrencileri bu işler için yönlendirebilirsiniz. O yüzden bu bloga yorum yazarsanız ne iş yapabileceğinizi yazın yada en azında blogunuzun adresini verin.
Müşteri Bulmak
Diğer bir zor işte bu. Fakat yukarıda sayılan işleri yapığınızda müşterinin de sizi bulması kolaylaşır. Bir video konferans sistemi ayarlayıp müşteri ile yüz yüze konuşmayı sağlamanız gerek. Bir sigorta şirketi ile anlaşıp projenin batması durumunda teminat gösterecek bir belge edinmeniz de gerekir. Müşteri zaten bunu isteyecektir. Müşteri ancak size gueteri kadar güvenirse sizinle çalışacaktır; sizinde imkanlar dahilinde bu teminatları sunmanız gerekir.
Ecnebilerin “outsorcing” dediği olayı biraz irdeledik. Yorumlarınızı ve yapabileceğiniz işleri bekliyorum. Hatta bir çalışma grubu oluşturup bu tür bir alt yapının kurulması için fikir alışverişinde bulunabiliriz. Ne dersiniz?
