Girişimlerde yapılan yanlış programlama dili seçimleri

Yazılım sektöründe faaliyet gösteren girişimcilerin yaptığı veya yapacakları en büyük hatalardan biri girişimlerini geliştirmek için yanlış programlama dilini seçmek. Belki de girişimcilik serüvenlerinin ilk büyük hatalarını bu şekilde yapıyorlar. Bu seçimi yapacak olan kişi genelde teknik altyapıya sahip (bunlara yazılımcılar diyelim) girişimciler olduğu için bu hatayı en çok yapanlar da onlar oluyor.

Bunun nedenini biliyor muyum? Hayır. Ama inandığım bir teori var. Yazılımcı girişimciler kullanacakları programlama dilini veya framework'u seçerken, çoğu zaman girişimci şapkalarını unutup yazılımcı şapkalarını giyerek karar veriyorlar. Zaten böyle olması gerekmiyor mu? Gerekli teknik altyapıya zaten sahipler ve bu temele göre seçim yapmaları gayet mantıklı gibi görünüyor. Bence de doğru. Fakat benim anlatmak istediğim tam olarak bu değil.

Yazılımcı şapkası derken şunu kastediyorum. Biz yazılımcılar konu teknoloji seçimlerine gelince biraz fazla heyecanlanabiliyoruz. Hızlı ve sürekli değişen sektörde özellikle açık kaynaklı yazılımların desteğiyle her gün yeni bir teknoloji, yeni bir framework haberi duyuyoruz. Hele bu yeni framework veya programlama dili kısa sürede popülerlik kazanırsa tadından yenmiyor. O dili hızlıca kullanmak istiyoruz. Yeni bir teknolojiyi kullanmak bizi heyecanlandırıyor. Hemen onu yazılımımıza nasıl entegre edeceğimizi düşlüyoruz. Yazılımımızın en güncel frameworkler ve programlama dilleri üzerinde yükseldiğini görmek bize müthiş bir haz veriyor. Bildiğimiz diller/frameworkler yelpazemize yeni bir tanesini katmış olmak bizi iyi hissettiriyor.

Bir yazılımcı olarak bu heyecanı taşımak güzel fakat eğer yazılımcı girişimciyseniz bu heyecan başınıza bela olabiliyor. Hatta girişiminizin kaderini derinden etkileyebiliyor. Yeni bir girişime adım atmak ile zaten belli bir risk almışken bundan sonra yapacağınız seçimlerde bildiğiniz, tecrübeli olduğunuz dilleri ve frameworkleri kullanmak verilecek en doğru kararlardan biri olabilir. Yıllarca ter döktüğünüz, sayısız bug fix yaptığınız, uykusuz geceler geçirerek binlerce satır kod yazdığınız, huyunu suyunu bildiğiniz dil varken neden bir bilinmeyene doğru yelken açıyoruz?

Cevap yeni teknolojileri kullanma heyecanımız ve bunu ilk olarak girişimimizde test etme isteğimiz olabilir mi? Bence evet. Hatta izin verin sunu da ekleyeyim. Biz yazılımcılar çoğu zaman çok iyimseriz. Herşeyin kusursuzca ilerleyeceğini düşünürüz. Yolda hiçbir aksilik çıkmayacak. Herşey çok güzel olacak... Fakat çoğu tecrübeli yazılımcının da tahmin edebileceği gibi olaylar genelde bu şekilde ilerlemiyor. Ters gitme ihtimali olan birşey varsa genelde ters gidiyor. Evet malesef öyle. Durum böyle iken başlarda çok masum duygularla verdiğimiz programlama dili kararı sonunda pişmanlığımız haline gelebiliyor. Neden mi? Bunu anlamak için bir soru sorsak iyi olacak gibi.

Başlarda bir girişimin sahip olması gereken en önemli özellik nedir? Para mı? Yatırım mı? Bence hiç biri değil.

Cevap: HIZ.

Hız size esneklik sağlar. Hız sizin değişikliklere daha kolay bir şekilde adapte olmanıza olanak tanır. Hız rakiplerinize göre bir adım daha önde olabilmek için sahip olabileceğiniz en önemli yetenektir.

İlk zamanlarda girişiminiz küçüktür. Küçük olmak hız demek, esneklik demektir. Ne kadar hızlıysanız müşterilerinizin ihtiyaçlarına o kadar hızlı cevap verirsiniz. Marketteki değişikliklere hızlı cevap vermek sizi rakiplerinizden daha iyi bir konuma getirir ve başarılı olma ihtimalinizi arttırır.

Hal böyleyken bazen yanlış teknoloji seçimleri sizin bu önemli avantajınızı kaybetmenize neden olur. Yaptığınız seçim ayaklarınıza dolanmaya başlar. Bazen markete girmenizi geciktirir ve markette kapılmaya hazır olan fırsatları rakiplerinize kaptırmış olursunuz. Detayını bilmediğiniz fakat heyecanınızdan dolayı kullanmak istediğiniz popüler dil sizi yavaşlatmıştır.

Her dilin her projeye uygun olmayabileceği gerçeğini unutmuşsunuzdur ve şimdi bunu dille mücadele ederek bizzat tecrübe etmişsinizdir. Öğrenme süreci tahmin ettiğinizden daha uzun sürmüştür. Akılınıza gelmeyen küçücük problemlerin çözümü için günler belki de haftalar harcamışsınızdır. MVP'yi kodlayıp markete sunmanız 1 seneyi bulmuş olabilir. Başarı şansınızı arttırmak için maksimum 2-3 ay içerisinde MVP'yi hazır etmeniz gerekirken 1 sene gibi büyük rakamlar başarısız olma riskinizi arttıracaktır.

Bahsettiğim gibi yanlış programlama dili seçimleri bazen markete girmenizi geciktirerek girişiminizin kaderini etkilerken bazen de markete girmişsinizdir fakat bu kez kod tarafındaki problemlerle uğraşmak zorunda kaldığınızdan dolayı büyük resmi kaçırmaya başlamışsınızdır. Müşterileriniz sizden yeni özellikler beklerken sizin aklınızda olan tek şey buglardır. Tahmin edemediğiniz salakça hatalardan dolayı zaman kaybetmişsinizdir. Bu yüzden zaten demoralize olmuşken, biriken müşteri istekleri canınızın daha da çok sıkılmasına neden olur.

Başlarda çok iyimser duygularla yeni dile beslediğiniz sevgi nefrete dönüşmeye başlamıştır. Keşke bu seçimi yapmasaydım demeye başlarsınız. Bildiğim, güvendiğim teknoloji varken neden buna karar verdim ki diye sorular aklınızı meşgul eder.

Yükünüzü hafifletmek için yeni takım arkadaşları aramaya başlarsınız. Girişiminiz küçük olduğu için muhtemelen ekonomik gücünüz de kısıtlıdır. Kıdemli yazılımcıların yükünü karşılayamayacağınızı bilirsiniz. Bu yüzden daha tecrübesiz adayları aramaya başlarsınız. Çok seçici olma gibi bir lüksünüz olmadığı için tecrübesiz yazılımcıları ise alırsınız. Zaten gecikmiş olan yazılımınız daha da yavaşlamaya başlamıştır.

Yeni gelenlere mevcut yazılımı anlatmak, onları eğitmek gibi yeni bir sorumluluğa sahipsinizdir. Hele bir de yeni popüler olmaya başlayan, sektörde kullanımı çok yaygın olmayan bir dil seçimi yaptıysanız bu yeni gelen arkadaşların eğitim süreci çok daha uzun sürecektir. Halbu ki sektörce bilinen yaygın bir teknoloji seçmiş olsaydınız işiniz nispeten daha kolay olacaktı.

Demem o ki; bir dil seçimi yapmak buz dağının görünen kısmını oluşturur. Daha sonra alınacak bir çok karar dolaylı veya dolaysız bu seçimden etkilenecektir. İşe alacağınız yeni yazılımcılarda olacağı gibi.

Bazen sıkıcı teknolojiler iyidir

Biliyorum yazılımcılar olarak sıkıcı teknolojilerden uzak durmak isteriz. Yeni popüler teknolojiler varken girişimimizi neden sıkıcı bir teknoloji ile geliştirelim? Haklısınız. Fakat bazen yazılımcı şapkamızı bir kenara koyup seçimlerimizi girişimci şapkamızı takarak vermek zorundayız. Yazılımcılık ve girişimcilik arasındaki dengeyi iyi kurmalıyız. Yazılımcı aklı heyecanı sever. Yeniliği sever. Öğrenmeye açtır. Hiç olmayacak yerde sorgusuz sualsiz yeni öğrendiği teknolojiyi kullanmak ister. Varsayılan olarak herşeyin iyi gideceğini düşünür. Aşırı iyimsedir.

Bu ozelliklerin cogu girisimcilerde de oldugu halde onlarin en onemli ozelliklerinden biri de aldiklari kararlarda riski iyi analiz edebilmeleridir. Bu yuzden karar verirken zoom out yapip buyuk resme odaklanirlar. Girişimci aklı kullandığı programlama dilinin veya framework'un asıl hedefe ulaşma da kullanılacak bir araç olduğunu bilir. Dillere, frameworklere aşık olmaz. Verdiği kararların neticesini de önceden hesaplar. Gereksiz heyecanlar uğruna kendini ve ekibini riske atmaz.

Hızın ne kadar önemli olacağını bilir. Bazen sıkıcı teknolojiler onun için en güvenli limanlardır. Girişim hala küçükken çok fazla lüksü olmadığını bildiği için hızını kaybetmemek adına bazen hangi teknolojiyi seçsem gibi dikkatini dağıtacak sorulardan uzak kalmasını bilir. İlk versionları sıkıcı teknolojilerle kodlayabilir. İleride başarı yakalandığı zaman yeni ve heyecan verici teknolojilerin kullanılacağı zamanlar gelecektir. O bunu bilir.

React mi kullansam yoksa Vue.js mi? Yeni projeyi Go ile mi yoksa Rust ile mi yazsam? Bunların hepsi güzel frameworkler  ve diller. Fakat bazen özellikle girişiminizin ilk aşamalarında basit bir static html bile müşterilerinize çok şey verebilir. Kod tarafını da arkasında güçlü bir topluluğu olan, yaygınca kullanılan ve stabil olan bir dil tercih etmek sizi yolda birçok gereksiz zaman kaybından ve problemden uzak tutacaktır.

Özetle bir yazilimci olarak  benim de ilk onceligim verimliligi arttiran güncel dilleri kullanmak fakat biliyorum ki bazen sıkıcı teknolojiler hayat kurtarır. Yazılımcı girişimciler heyecanlarını dizginlemeyi bilmeli ve daha ussal kararlar vermek zorundadırlar. Girişime sadece kod tarafından bakmak doğru değil. Çok daha geniş açı ile düşünmek zorundasınız. İlla ki yeni bir teknoloji kullanacağım derseniz en azından kullanmak istediğiniz dil/framework ile ilgili küçük de olsa bir projeye geliştirmeye çalışın.

Karşılaşabileceğiniz tüm sorunları bu küçük projede tecrübe etmeniz zor fakat en azından aktif olarak kod yazmak aklınızda olan bir çok sorunu yok edecek ve bazı problemleri işler ciddileşmeden tecrübe etme şansı yakalacaksınız. Belki de bu problemler sizi başka bir dil kullanmaya itecek. Kim bilir!

Şimdi makaleyi buraya kadar okuduysanız ve bir de yazılımcı iseniz aklınıza şu soru gelmiş olabilir: Tamam da çoğu durumda yapılan tasarımdan dolayı yazılım kod çöplüğüne dönmüyor mu? Bunun dil ile ilgisi ne? Katılıyorum. Çoğu zaman yanlış mimari tasarımı yazılımın kaderini belirliyor. Ama bazen de bu makale de anlatmaya çalıştığım gibi daha tasarım aşamasına gelmeden yanlış probleme yanlış çözüm olarak seçilen teknolojiler girişimi derinden etkileyebiliyor. Burada bunu anlatmaya çalıştım. Tasarım bir başka makalenin konusu olsun. Kalın sağlıcakla.