Yan proje olarak başlayan projenin ürünleştirilmesi süresince öğrenilen dersler ve edinilen tecrübeler

Boş zamanlarımızı değerlendirmek, yeni teknolojiler öğrenmek biraz da kendimizi test etmek için verdiğimiz mücadelenin nihayet sonuna geldik. Eğer bu yazıyı okuyorsanız başladığımız yan projeyi bilgisayarımızdaki tozlu disk sektörlerinde çürümeye terketmeden yayına almışız demektir.

Yol boyunca karşılaştığımız zorlukları, öğrendiğimiz dersleri ve edindiğimiz tecrübeleri bu yazı ile sizlere aktarmak, biraz da ucundan projemizi sizlere tanıtmak istiyoruz.

Söz konusu olan bitiş çizgisine kadar gelip, projeyi yayınlamak olunca yazılım alanında ne kadar tecrübeniz olursa olsun işin içine farklı disiplinler girdiği için bir çok yazılımcı bu noktaya gelemeden projeyi terkedebiliyor. O yüzden bu yazıda projeyi geliştirirken yaşadığımız teknik sıkıntıların yanı sıra, projeyi yayınlamadan sonlandırmaya kadar götürebilecek motivasyon düşüren psikolojik olarak yaşanan iniş ve çıkışlardan da bahsedeceğim.

Detaylara geçmeden önce birkaç cümle ile geliştirdiğimiz projeden bahsedelim. Projenin ismi Linkwind. Kendinize ait link paylaşım ve tartışma platformu kurmanızı sağlayan web tabanlı bir proje. Daha kolay anlaşılması için şöyle açıklamaya çalışayım. Herkesin kendi HackewNews platformunu kurmasını sağlayan bir SAAS projesi. Linkwind websitesine girip hesap oluşturuyorsunuz ve sistem size girdiğiniz platform isminizle birlikte benzersiz bir domain veriyor. HackerNews'ten biraz daha farklı olarak platformunuza kimlerin üye olup kullanabileceği konusunda tam kontrole sahipsiniz. Üyelikler davetiye sistemiyle çalışıyor.

Şunu hatırlatmakta fayda var. Kurduğunuz platform herkese açık bir platform. Dolayısıyla yapılan paylaşımları ve yorumları herkes görüp okuyabiliyor ancak paylaşım yapma ve yorum yazma hakkı sadece davet ettiğiniz kullanıcılara ait.

Projeyi basitçe bu şekilde tanımlayabiliriz. Buradan websitesine giderek platform hakkında daha fazla bilgi alabilir ve bir demosunu görmek isterseniz de buradan devam edebilirsiniz.

Proje hakkında kısa bir bilgi verdikten sonra gelelim asıl konumuza. Biz yazılımcılar bir yan proje geliştirmeye karar verdikten sonra, projeye yapışıp kararlı bir şekilde bitiş çizgisine kadar gidebilmekte biraz zorlanıyoruz. Bu nedenle Linkwind projesini geliştirirken, bitiş çizgisine varana kadar kararlılığımızı korumada bize yardımcı olan birkaç önemli noktadan bahsedeceğim.

Başlayalım.

Projeyi ne amaçla geliştirdiğinizi iyi belirleyin ve bunu gerçekten özümsediğinizden emin olun

Projeyi geliştirme amacınız bu işte kararlı olup son ana kadar pes etmeden ilerleyebilmeniz için belki de en önemli nokta. Belirlediğiniz amaca göre yol boyunca uğraşmak zorunda olacağınız işlerin sayısı ve derinliği değişiklik gösterecek. Projenizi geliştirirken yakmak zorunda olduğunuz en kıymetli yakıtınız olan zamanı bu amaç uğrunda harcayacaksınız.

Amacınız yeni bir programlama dili öğrenmek olabilir. Kullandığınız mevcut programlama dilini pekiştirmek ve daha iyi bir noktaya getirmek olabilir. Veya bunların haricinde tam zamanlı işinizin yanında size ek bir yan gelir getirebilmesi için bir probleme çözüm üretmek için geliştirilen bir yazılım olabilir. Hatta bir projeye belli bir süre yapışarak kararlı bir şekilde ilerleyip bitiş çizgisine kadar varabilmek için kendinizi sınamak dahi nihai amacınız olabilir.

Bizim Linkwind projesini geliştirirken tek bir amacımız yoktu. Başlangıçta Go programlama dilini öğrenmek ve pratik yapmaktı. Ardından bu amaca ek olarak, duyduğumuz fakat daha önce hiç kullanmadığımız teknolojileri kullanarak, bu teknolojiler hakkında daha fazla bilgi sahibi olmak ve tecrübemizi genişletmek amacı da hedeflerimizden biri haline geldi. Son olarak da "Ship it. Otherwise, it never happened" mottosu ile başladığımız işi bitirmek ve potansiyel kullanıcıların önüne çıkarıp ilk geri bildirimleri almak en nihai amacımız oluverdi.

Başladığın işi bitirmek için yapmaktan keyif almadığın işlerle uğraşmak zorunda kalacaksın

Bir yazılımcı kod yazmak ister. Teknik olarak yapılması zor olan işler üzerinde çalışmak ister. Meydan okumayı sever. Peki ya teknik işler bitince ne olur? Başlarda duyduğu o heyecan o motivasyon birden kayboluverir. Tüm teknik işler bitmiş, meydan okunacak yeni bir iş, fethedilecek yeni bir kod kalesi kalmamıştır.

Oysa yapılması gerekenler henüz sona ermemiştir. Yazılım bitti tamam ama bundan kimin haberi var? Projeyi anlatan bir websitesi yapmak gerek. Bu websitesinde projeyi, onun özelliklerini tanıtan metinler yazmak, görseller koymak gerek. Proje açık kaynak kodlu ise github sayfasının hazırlanması gerek. Producthunt için projenin tanıtım metni, görselleri belki de videosunu hazırlamak gerek. Bir sürü angarya. Kim yapacak bunları.

Bunları yapacak bir arkadaşınız varsa oh ne ala. Ama yoksa bu işler genelde bir yazılımcının uğraşmak istemediği angaryalar olarak görülür. Tam bu noktada projenin amacı sorgulanmaya başlanır. Belki de yayınlama aşaması pas geçilmelidir. Yeni bir projeye yelken açma vaktinin geldiği düşüncesi akılları kemirmeye başlar. Eğer amaç yeni bir programlama dili öğrenmek veya mevcut bilgileri yeni problemlerle pekiştirmek ise bu tip düşüncelere dalmada hiç bir sıkıntı yok. Ama başladığı işi bitiren adam olmak, bu zihniyete sahip olabilmek daha iyi değil mi? Bu kişiden kişiye değişebilir elbette. Bilemiyorum. Bu sorunun cevabını size bırakıyorum. Kimbilir bu işlerle uğraşmak istemiyorsanız belki de bu tip projelere hiç kalkışmamalısınız. Teknik sorunları çözüp birer kütüphane haline getirerek de faydalı işler yapabilirsiniz.

Proje ile birlikte üzerinize aldığınız ihaleyi enine boyuna tarttığınızdan emin olun

Dediğim gibi biz yazılımcılar teknik zorlukları sevdiğimiz için projelerin her zaman en önemli kısımlarında görev almak isteriz. Projenin çekirdeğini geliştirmek için kod yazmak bize her zaman daha cazip gelir. Fakat bir yazılımı ürün olarak ele almak demek kod yazmaktan çok farklıdır. Bir çok ek işi beraberinde getirir.

Çok kolay görünen, herhangi bir teknik zorluğu olmayan işler için gerekli motivasyonu bulmak daha zor olacağından belki de en çok zamanı burada harcariz. En azından bu bizim projemizde böyle oldu. Projenin asıl işi yapan web uygulama kısmında hızlıca ilerleyebildik. Projeyi anlatan basit bir websitesini yapabilmek adına gerekli motivasyonu bulmak bizi oldukça zorladı. Bu tür işler hep böyledir. İşe başlamak işin en zor kısmıdır. Başlayıp ısındıgınız an belki de bir saat içerisinde bitireceksiniz. Fakat başlamak için gerekli dopamini bir türlü bulamazsınız. Motivasyonunuz yoktur. Asıl zaman da burada kaybedilir.

Bizim Linkwind projesinin en çok zaman aldığı kısım websitesinin hazırlanması, about, faq, privacy vs gibi sayfaların hazırlanmasıydı. Komik ama gerçek:) Frontend tarafında da çok uzman olmadığımız için o kısmı bitirmek için gerekli motivasyonu bulmakta da epey zorlandığımızı itiraf etmeliyim.

O yüzden üzerinize nasıl bir ihale aldığınızdan daha projeye başlamadan haberdar olmanız sizin yararınıza olacaktır. Bir çok proje bu aşamalara gelindiğinde angarya işlerden dolayı tozlu raflara kaldırılır ve sonsuza kadar gün ışığı göremeden çürüyüp gider.

MVP demek yeteri kadar iyi demektir. Mükemmelliyetçi olmayın

Bir projenin ürünleştirilmesi konusunda MVP kavramını çok iyi anladığımıza dair şüphelerim var. "Mükemmel iyinin düşmanıdır." gibi bir çok söz duyup okumamıza rağmen hala neyin yeteri kadar iyi olduğunu anlamakta güçlük çekiyoruz. Halbu ki projenin ilk versionu çoğu durumda düşündüğümüzden çok daha az özellik ve yayına hazır hale getirmek için çok daha az çaba gerektiriyor.

Çoğu zaman neyin yeteri kadar iyi olduğunu bilemediğimiz için projelerde gereksiz yere zaman kaybederiz. İşler uzadıkça ve zaman kaybettikçe de motivasyonumuzda düşüşler olur. Bu da projeyi sonlandıramamak için gerekli olan bahaneyi bize verir.

Linkwind projesinin HackerNews benzeri bir proje olduğunu söylemiştim. Merak edenler için aşağıdaki resmin ne olduğunu söyleyeyim. HackerNews'in login sayfası. Şimdi bu resme baktığımız zaman, hali hazırda milyonlarca kullanıcı tarafından kullanılan, her gün milyonlarca trafik alan bu websitesinin bile böyle bir eksikliği varken biz neden kendi projelerimizde mükemmelliyeti yakalamaya çalışıyoruz?

Yazdığımız her kodda, eklediğimiz her özellikte kullanıcıya sağlayacağı fayda ve değer kadar düşünmeli, o ölçüde zaman harcamalıyız.

Bugün geliştirdiğiniz yazılımın yarın ayakta kalabilmesi için yönetilmesi gerektiğini unutmayın

Neredeyse başladığımız herşeyin sürekliliğini sürdürebilmesi için yönetilmeye, bakıma ve muhafaza edilmeye ihtiyacı vardır. Bugün blog tutmak için satın aldığınız wordpress değişime ayak uydurması için güncellenmelidir. Güvenlik paketleri yüklenmelidir. En önemlisi yazdığınız yazılar olmadan bir hiçtir. Yazı yazmak için gerekli zamanı yaratmanız gerekir.

Yazı yazmakta öyledir. Önce yazınız için gerekli bilgileri araştırıp hepsini not ederek tek bir yerde toplarsınız. Sonra ilk taslağı yazarsınız. İmla hatalarını düzeltmek ve yazıyı daha okunabilir bir hale getirmek için defalarca okursunuz.

Yazılım da bu ortak kaderi paylaşır. İlk önce planlar sonra da kodları yazarak yazılımı hazır hale getirirsiniz. Buglar çıkar. Onları debug etmek ve düzeltmek için zaman harcarsınız. Yazılımınızı kullanan kullanıcıların geri bildirimlerini dinler, onlara göre yeni özellikler ekler veya yazılımınızı değiştirirsiniz.

Dikkat ederseniz tüm bu saydığım olaylar silsilesinin tek bir ortak noktası var. Hepsi verdiğiniz tek bir kararı takip eden eylemler. Eylemler de kıymetli zamanınızdan çalar. Eylemleri gerçekleştirmek için gerekli zamanı yaratmak zorundasınızdır. Aslında bir EVET cevabı ile diğer herşeye HAYIR cevabı vermiş olursunuz. O yüzden neye evet diyeceğinize, hangi projeyi geliştireceğinize iyi karar verin.

Bir projenin en büyük düşmanı içimizdeki diğer projelerdir

Biz yazılımcıların proje geliştirirken karşı koymakta en çok zorlandığımız faktörlerden bir tanesi, belki de en önemlisi Ferruh Mavituna'nın da dediği gibi içimizdeki diğer projeler. Üzerinde çalıştığımız projeleri yarım bırakıp yeni bir projeye geçmemizin arkasındaki bu gizli düşmana çoğu zaman yenik düşüyoruz. O yüzden herhangi bir projeye başlamadan önce, fikir depomuzdan hangi proje fikrini seçeceğimize karar vermek için doğru filtreleri uyguladığımıza emin olmalıyız.

Fazla düşünülmeden gelişi güzel seçilen projeler  yarı yolda akılları kurcalayan, nispeten daha iyi olduğu düşünülen fikirlere kaybetmeye mahkumdurlar. Tam tüm teknik zorlukları aştığınızı ve geriye sizi cezbeden başka bir challange kalmadığını düşündüğünüz anda kapınızı çalacak bir proje fikrine hayır diyebilmenin ne kadar zor olduğunu biliyorum. Linkwind projesinde de böyle dönüm noktalarımız çok oldu. Fakat damalı bayrağı görmeden pes etmemeyi becerebildik. Aklımızı kurcalayan fikirleri, "elbet bir gün sizin de zamanınız gelecek" diyerek not edip odağımızı korumayı başardık.

Bu konuda bir nacizane tavsiye olarak şunu söyleyebilirim. Yapılabilirliği ile sizi cezbeden küçük küçük projeleri seçmektense belki de aklınızı sürekli kurcayalan, nispeten gözünüzü korkutan fakat yaptığınızda da buna değdi dedirtecek projelerin peşinden gitmek daha akıllıca olabilir.

Linkwind projesi bizim için bu tavsiyeye uyan bir proje değildi. Fakat başta da söylediğim gibi amacımız Go programlama dilinde pratik yapmaktı. Projeyi bizim için biraz daha ilgi çekici hale getirebilmek için birşeyler düşündük. Hackernews'in Türk versionunu yapma fikri, herkesin kendi hedef kitlesi için HackerNews tarzı bir platformu kod yazmadan kurabileceği bir proje fikrine dönüştürdük. Bu şekilde proje nispeten daha ilgi çekici bir hal aldı. Fakat şimdiki aklım olsa yukarıda verdiğim tavsiyeye uyarak başka projeler peşinden giderdim. Kim bilir, belki de bunu söyleyebilmek için bu dersi almam gerekiyordu.

Başladığın işi bitir

Başladığı işi bitiren adam olabilmek önemli bir meziyettir. Yarım bırakılan her iş, her proje beraberinde acabaları getirir. Geriye kalan acabalar akılları kurcalayarak, gereksiz soruların doğmasına neden olur. Sizi sürekli meşgul ederek belki de dikkatinizi dağıtarak odaklanamamanıza neden olur. Bu yüzden aklımızı serbest bırakmak için su check işaretini atmayı bilelim. Aklımızı kurcalayan potansiyel düşüncelerin üzerini çizmeyi bilelim.

Başladığını bitiren bir zihniyete sahip olmanın karar mekanizmamazı güçlendirerek daha doğru kararlar ve seçimler yapmamızı sağladığına inanıyorum. Her başladığınız işte bitiş çizgisine varmak zorunda olduğunuzu bilmek, başlayacağınız işin bütününü ve gerekliliklerini kavramayı kolaylaştırır. Bitişe varmak demek süreç boyunca karşınıza çıkacak problemlerden yılmamak, ne kadar istemesenizde angarya işleri yapmak zorunda olacağınız demektir. En önemlisi de en kıymetli kaynağınız olan zamanınızı geri dönüşü pek de değerli olmayan bir iş için harcamamanız gerektiğini iyi bilirsiniz.

Bir projeyi bitiş çizgisine kadar taşıyabilmek ciddi bir emek gerektirir. Bu yüzden proje seçim sürecinde bunu aklınızda bulundurarak daha doğru seçimler yapar ve sizin için gerçekten değerli olan doğru fikrin peşinden gidersiniz. Bu değerli bilginin bilincinde olmak sizi diğer herkesin önünde daha avantajlı bir noktaya koyar.