Girişimciler için Yazılım Geliştirmenin Önemi - 2
Bu makale Uğur Özyılmazel (webBox) tarafından yazılmıştır kaleme alınmıştır. Önceki yazıda kabaca programcı/developer ‘ları tanıtmaya çalışmıştım ve yazılım dünyasına uzak olan bir girişimcinin iyi ya da en azından işini görecek yazılımcıyı nasıl bulacağını/anlayacağını bu yazıya bıraktığımı belirtmiştim.
Kavun değil ya?
Çok güldüğüm ve sevdiğim bir tabirdir. Derler ki kavun satın alırken hiçbir şeyden anlamasan dahi en azından altını koklayabilirsin. Eğer güzel kokuyorsa kavunun tatlı olma ihtimali yüksek! Düşünün böyle bir yöntem olsa ve bu denli basit bir kontrol mekanizmasıyla yazılım geliştiricinin iyisini kötüsünü seçebilsek! İlk görüşte aşk! Eğer kendiniz developer değilseniz karşınızdaki kişinin doğru kişi olduğunu anlamanız neredeyse imkansız! Eğer daha önce en az 5-6 kez iyi/kötü deneyimleriniz olduğuysa bu size tecrübe katmıştır ve en azından ölçme yapabilmek için bir fırsatınız olmuş olabilir. Ben developer ararken görüşme yaptığım adaylara hemen şu soruyu sorarım (eğer özgeçmişinde yoksa): “Github hesabınızı alabilirmiyim?” Genelde bu soru pek çok şeyin ana habercisi oluyor. Bu sorudan varmaya çalıştığım asıl olay, kişinin ne kadar fazla kod yazdığı ya da açık kaynak projelere katkı sağladığı değildir, amacım o kişin starladığı ya da watch ettiği (bunlar github terminolojileridir, http://github.com) projeleri görmektir. Yani Github’da kullanıcılar aynı diğer sosyal platformlarda olduğu gibi beğendikleri projeleri like ederler ya da daha fazla detay istiyorlarsa watch ederler yani takip ederler projeyi. Amacım, kişinin hangi konulara ve teknolojilere ilgi duyduğunu anlayabilmek. Genelde kendim de dahil olmak üzere her yaptığımız işi Github / Bitbucket gibi sosyal programlama platformlarına koyamayabiliriz. Özel proje olması sebebiyle ya da yazdığımız kodu beğenmememiz sebebiyle olabilir. Bu bakımdan, kişinin Github hesabını sadece O’nun ilgi ve beğeni alanlarını anlamak için kullanırım. Eğer bunlara ek olarak yaptığı projeler de varsa hani derler ya “tadından yenmez” hale gelir. Herhangi bir projeyi zaman aralığında finalize etmek Diğer önemli bir husus da yazılımcının hayatında mutlaka başlangıcı ve bitişi olan tamamlanmış bir projesi olması. Yani X projesini A - B zaman aralığında yapmış bitirmiş olması gerekiyor. Belki 3 ay diye başlamıştır ama 6 ay sürmüş de olabilir. Sonuç olarak sarkmalar dahil bir tane bile olsa finalize edilmiş proje olması. Bu, yazılımcının bir ekip uyumlu çalışabileceğinin minik bir göstergesi olabilir! Genelde ülkemizde en büyük sorunlardan biri de budur. Yazılımcının elindeki işi gereken zaman dilimi içerisinde bitirebilmesi. Sakın yanlış anlamayın, pek çok etken yüzünden 3 ay diye planlanan proje 12 ay’a çıkabilir. Tonlarca faktör olabilir. Önemli olan işin yarım kalmamasıdır. Tabi ki programcıdan kaynaklı uzamalar maddi olarak ciddi sıkıntılar çıkarır. Belirtmek istediğim faktörler genelde 3.parti faktörlerdir. Yani tasarım 3 hafta sürer ve üç hafta sonunda müşteri tasarımı beğenmez ve yeni direktiflerle baştan çalışma isteyebilir ya da kağıt üzerinde düşünülen teknik konular, kullanılan açık kaynak kütüphanesinin versiyon değiştirmesiyle size 1 ay kaybettirebilir. Tüm bu detaylar dışına çıkarsak asıl olan yazılımcının hayatında başlayıp bitirdiği projeler olmasıdır. Programcı İsviçre Çakısı gibi olmalıdır! Bu durum bırakın Start-Up’ları, kurumsal şirketlerde bile neredeyse böyle. Programcı hem kod yazsın, hem veritabanını programlasın, hem ilgili sunucuyu kurusun, güncellesin ve yönetsin, hem işe başlamadan analizleri yapsın ve hem şu hem bu diye uzayıp giden bir iş listesi vardır ne yazık ki!. Girişimcilerde doğal olarak minimum maliyetle maksimum fayda sağlamak ister en azından ilk başta. Dünyanın en basit web servisini bile yapıyor olsanız mutlaka; yazılımcı (back-end), yazılımcı (front-end), yazılımcı (veritabanı) ve sistem yöneticisi’ne ihtiyacınız olmalı. Bu işin minimal doğrusudur bu. Bu yazıyı okuyanlar eminim şuan “Yok artık 3 programcı ve 1 sistem yöneticisi toplam 4 kişimi?” diyorlardır. Dedim ya minimal doğru bu ama ne yazıkki her projede bunu yapan tek kişidir ve o kişi projenin “lead” yani baş geliştiricisidir. O, hem veritabanındaki tabloları, alanları düşünüp tasarlamaya çalışır, hem uygulamayı yazmaya çalışır hem de yazdığı uygulamayı kuracağı (deploy) sunucuyu kurmaya çalışır. Sadece sunucu yazılımı (back-end) ile iş bitmeyeceği için; belkide hayatı boyunca hiç merak bile etmediği JavaScript + CSS gibi şeyleri öğrenmek zorunda kalıp ön tarafında (front-end) programlamasıyla uğraşmak zorunda kalır. Bunlara ek olarak eğer büyük ölçekli bir proje üzerinde çalışılıyorsa, ölçeklendirme işlemini (auto scaling), birden fazla makineye (instance) uygulamanın yeni versiyonunu kurma işlemi (deploy - release engineering) ve bu makinelerin ayakta kalmasını sağlamak, sağlık durumlarını gözlemlemek (kabaca devops) işleri de süpermen geliştiricinin diğer işleri arasındadır. Yeri gelir sağdan soldan bulduğu resimleri keser biçer formasyona sokmaya çalışır ve grafiker gibi de davranmak zorunda kalır. Yani “ne iş olsa yaparım abi” cümlesinin hayata geçmesidir. Aranan geliştirici hep bu türdendir! Genelde bu tür yazılımcıya “Full Stack Developer” denilir uluslararası platformda. “Full Stack” geliştirici bulmak sayısal loto’da 6 tutturmak gibidir. Zaten yok denecek kadar az sayıdadırlar ve olanlarda genelde bir yerlerde bir projede çalışıyordur mutlaka. Dereyi geçene kadar idare etmek! Belirli bir güce kuvvete kavuşana kadar eldeki imkanlarla idare etmek gerektiği için, “ne varsa o!” modelini benimsemek durumu doğar. Olaya geliştirici açısından bakınca, girişimcinin de yazılımcı’ya sunduğu imkanlar önem kazanır. Geliştirici kendi hayal ettiği uygulamayı yazmıyorsa, yani başka birinin projesini yapıyorsa mutlaka bunun karşılığını bekler. Çünkü geliştirici’ye hayatı boyunca sürekli fikri olan insanlar gelmiş ve O’na tekliflerde bulunmuştur. “Abi şöyle bir fikrim / projem var, sen otur yaz sonra senle fifti-fifti ortak olalım!” Bu mantıkla başlayan projeler %99 başarısızlıkla sonuçlanır! Nasıl girişimci fikrini satıp hayata geçirmek istiyorsa ve bunun için (eğer bu bir web fikriyse) yazılımcı gerekiyorsa, yazılımcı içinde motive edici bir şeyler olması gerekiyor. Gördüğüm örneklerde “Co-Founder Developer” arayışı vardı hep. Yani girişimci kendine ortak olarak yazılımcı arıyor. Sonuçları büyük çoğunlukla hüsran oldu. Yazılımcıyı ortak etmek yerine bir şekilde “hire” etmek yani kontratlı çalışmak her iki taraf için de iyi fikir gibi geliyor bana gördüğüm örneklere dayanarak. Sonuç Genelde hep işleyen yöntem, referans yöntemidir. Yani ilgili yazılımcının daha önce beraber çalıştığı işvereni ya da iş arkadaşlarına danışmak hep işe yarayabilir. Tabii şu faktörü unutmamak lazım, eğer önceki ekip/işveren ile sıkıntılı bir ayrılık olduysa, karşı tarafantan alacağınız bilgi sağlıklı olmayabilir. Genelde geliştirici’ler birbirlerini tanır. Bu bakımdan başka bir geliştirici’ye da sorabilirsiniz ilgili kişinin yeteneklerini. Google, Github dışında kişinin Twitter ve Blog’u da iyi kriterdir. Bakalım Twitter’da kimleri takip ediyor? Konusuyla ilgili yazılımcıları takip ediyor mu? Blog’unda hangi konulara değiniyor? Çözdüğü problemleri blog’da paylaşıyor mu? Tüm bu kriterleri kabaca metrik hale getirirsek;
Değerlendirmenizi kabaca bu tabloyu göz önünde bulundurarak yapabilirsiniz. Mutlaka hayattaki herşeyde olduğu gibi hiçbir şey kesin ve %100 değildir. Yani biraz da şansınızın yaver gitmesi gerekiyor. Bu kriterlerden en azından başlangıç için %51’i yakalarsanız hemen harekete geçmenizi öneririm. Amacım, yazılım geliştirme dünyasına yabancı girişimcilere bir nebze de olsa “developer” (geliştirici) denen insan türünü ve düşünce yapısını anlatmaya çalıştım. Umarım okuyan arkadaşlara faydalı olabilmişimdir. Konu ile ilgili olarak bana e-posta ve twitter üzerinden ulaşabilirsiniz. İletişim bilgilerimi http://ugur.ozyilmazel.com adresinden edinebilirsiniz. Yazının ilk bölümü: http://www.etohum.com/girisimciler-icin-yazilim-gelistirmenin-onemi-1