Nasıl başladık, neler yaptık, nereye gidiyoruz..

Umut Yenilmiş
Arabam Labs
Published in
5 min readDec 25, 2017

--

Maalesef bu yazıyı birinin yazması gerekiyordu ve yine maalesef bu kurban benden başkası olamazdı… Nasıl başladık, neler yaptık, nereye gidiyoruz..

Arabam.com ile maceramız birkaçımızın 2015 yılında ama çoğunluğumuzun 2016 başında arabam.com’un iLab holding tarafından satın alınması ile başladı. Her ne kadar 2000 yılında kurulmuş da olsa arabam.com aslında 2 yıllık bir startup. Haliyle hala öğrenen, büyümeye çalışan, büyümeye çalışırken hatalar yapan bir çocuk gibi.

Nasıl başladık?

Başladığımız noktada elimizde 2'si mobil site olmak üzere (neden 2 tane olduğunu bugün bile kimse bilmiyor) toplamda 3 adet web sitesini oluşturan tam 8 adet (yazıyla sekiz, gerçekten sekiz) web projesi, açılış ekranında crash olan 2 adet mobil uygulama mevcuttu. Bu iş nasıl yapılmazın tanımı için kullanabileceğiniz, üniversitelerde ders olarak okutulabilecek, resmen object oriented programming’e tepki olarak yazılmış bir kaynak koda sahiptik. Bir developerın başında 15 dakikadan fazla kod okuması kalıcı görme kaybına sebep olabilirdi.

Plansızlık, sürekli yazılım ekibinin değişmesi, kaynak kodu dahi olmayan projeler pek iç açıcı olmayan bir tablonun oluşmasına sebep olmuştu zaman içinde. Üzerimize düşen ise bunu temizlemekti artık.

Bu kadar kapsamlı projelerin her zaman aşamalı olarak parça parça baştan yazılması gerektiğine inansam da hem böyle bir utancın herhangi bir şekilde dışarıdan görülmesi/duyulması hepimizin rezil olmasına sebep olabileceği hem de ekibin ruh sağlığı için bu kodu komple silmeye ve hatta bir daha hakkında konuşmamaya yemin ettik.

SiparisOrderDetail evet, madem sipariş neden order, eğer ki order ulan niye sipariş?

Kolları sıvayıp mayıs 2016'da yeniden yazmaya başladık herşeyi. Bolca mesai/emek, bir miktar kan, ter ve göz yaşı sonunda 30 Haziran 2016'da geliştirdiğimiz ürünü yayına aldık. Çok kısıtlı sürede geliştirdiğimiz için belki eksikleri vardı, belki bugları vardı ama artık üzerine koyabileceğimiz gıcır gıcır bir sistemimiz ve 2 adet mobil uygulamamız mevcuttu.

Ve tabiki çılgınlar gibi üzerine koymaya başladık…

Bir startup’ın içerisinde olduğunuzda eğer ki yaptığınız işe inanıyorsanız kendinizi onunla bütünleştirirsiniz, onunla yatıp onunla kalkarsınız. Biz de sürekli olarak yeni özellikler geliştirmeye, var olan bir özelliği değiştirmeye veya iyileştirmeye çalıştık. Kısa bir süre içinde ilan detayı 4 kere, ilan listeleme sayfasını ise hatırlayamadığım sayıda baştan yazdık dersem sanırım anlatmak istediğimi daha net anlatabilirim.

Bazı yaptığımız işler hiç kullanılmadı elimizde patladı, bir gecede geliştirip yayına aldığımız bazı işler şuan en çok kullanılan özelliklerimiz olarak büyüdü gelişti.

Durmadan duraksamadan tek bir hedefimiz vardı o da daha fazla işi daha kısa sürede üretmek. Her şey çok güzel gidiyordu. Sürekli olarak ilan sayımız, trafiğimiz katlanarak büyüyor, bir sprint içerisinde absürt denebilecek sayılarda işler geliştiriyorduk. Başka ekiplerin aylar olarak tahminlediği işleri bir haftada teslim ediyor, nasıl yaptığımız noktasında mavi ekran vermelerine sebep oluyorduk.

Fakat kafası sonradan geldi..

Çok üretirken kimi zaman nasıl ürettiğimizin, kimi zamansa iş yapış şeklimizin bize teknik bir borçlanma olarak geri döneceğini biliyorduk ve bu kabul ettiğimiz, sonucunu göze aldığımız bir durumdu. Koşmanız gereken çok yolunuz olduğunda sadece hedefe odaklanırsınız, önünüze gelen duvarları vura yıka geçmeye çalışırsınız. Fakat bunun kapımıza bu kadar kısa sürede dikileceğini öngörememiştik.

Geliştirme süreçlerimizi iyileştirmek için zaman ayırmamıştık, ekip olarak yazdığımız kodun kalitesini sorgulamamıştık, refactor etmeye pek çok zaman bıçak kemiğe dayandığında giriştik. Yazdığımız kod kesinlikle bir “SiparisOrderDetail” değildi, hatta belki Türkiye’deki standartların da gayet üzerindeydi ama bizim kabul edebileceğimiz standardın altına doğru gittiğini de görebiliyorduk.

Öğrendiklerimizi paylaşmıyor, ekip içerisinde birbirimizi beslemiyorduk günün koşuşturmacası içinde. Tek düşündüğümüz bir sonraki işi yapıp teslim etmekti.

Geliştirdiğimiz kodu yayına almanın zaman içinde büyüyen sistemde git gide ölüm olduğu, canlı ortama kod çıkmanın saatler sürdüğü, refactor’u fazla kaçırıp kodu patlattığımız, test süreçlerimizi işletemediğimiz için yaptığımız iki işten birinde bug çıktığı kara günler de geçirdik.

Peki ne yaptık?

Öncelikle hatalarımızı kabul ettik. Belirli aralıklarla toplanıp ekip olarak neler yapabileceğimizi maddelere döktük, takip ettik. Teknik borçlanmamız için bir ödeme planı çıkarttık. Yaşam standardımızı düşüren problemleri belirledik, gereksiz zaman kaybına dönüşen bize eziyet eden problemlere öncelik verdik. Örnek vermek gerekir ise;

  1. Scheduled task, windows service gibi başımızı ağrıtan pratikleri çöpe atıp bunları Hangfire ile değiştirdik.
  2. Continuous Integration kullanmaya karar verdik. Test ortamımızda kullansak da canlı ortamımıza bir türlü kurulum için zaman ayırmadığımız sürece yatırım yaptık, hem insan hatasını hem de oluşan zaman israfını ortadan kaldırdık. Blue-green deployment yaklaşımı ile canlı ortamda çıktığımız kodu takip etmek ve problem anında geri dönmeyi sağladık. (bkz: Blue-Green Deployment with Jenkins)
  3. Binlerce satıra ulaşan class’lara baltalar ile girerek parçalara böldük. İlk başta isimlendirirken ilan ile ilgili her şey bir yerde olsun parlak fikri, bir süre sonra domainin sadece ilan olduğu gerçeği sonucu 3000 satırlık bir class’ın anlamsızığını ortaya çıkarınca bundan ders aldık.
  4. Eski sistemden miras kalan arka planda çalışan uygulamaların (bkz: backoffice) oluşturduğu ayak bağından kurtulmak için bu uygulamaları baştan yazdık, yeni kaynak kodumuza taşıdık.
  5. Zamanımızın bir kısmını geliştirmek kadar iyileştirmek için de harcamaya özen gösterdik. Bu sürecin dönemsel değil sürekli devam etmesi gerektiğini öğrendik.
  6. Test süreçlerimizi tamamen gözden geçirdik, eksiklerimizi belirleyip eksik olduğumuz noktalara yatırım yaptık. Süreci sıfırdan kurguladık. Test caselerimiz için testrail’i kullanmaya ve burada testleri koşmaya başladık.
  7. Canlı ortamda koşan selenium testleri geliştirdik, bu testlerde sistemimizdeki en kritik noktaları canlı ortam üzerinde sürekli olarak test ederek insan hatasını minimize etmeye çalıştık.

En önemlisi ise birlikte çalıştığımız insanlar için, ekip için sorumluluk aldık. Elimizi taşın altına sokup problemleri çözmek için emek harcadık. İçinde bulunduğumuz durumu kabul etmek yerine buna çözüm üretmeyi seçtik. Bulunduğumuz yeri başkalarına bulmak istediğimiz gibi teslim ettik.

Fakat biz yaptık oldu mükemmeliz demiyoruz, harikayız harikalıyız en iyisi biziz diye ortamlarda caka satmaya da niyetimiz yok. Hala eksiklerimizin gelişmeye açık noktalarımızın olduğunu biliyoruz. Her zaman gelişime yer olduğunu, her zaman daha iyisinin yapılabileceğine inanıyoruz, inanmak istiyoruz.

Bu süreçte öğrendiklerimizi kendi içimizde “Tech Days” adı altında toplanarak ekip olarak paylaşmaya özen gösteriyoruz. Cuma akşamları toplanıp bir konu üzerine tartışıyoruz,bu kimi zaman yeni kullanmaya başladığımız bir teknoloji, kimi zaman daha iyi nasıl kod yazarız temalı muhabbetler olabiliyor.

Bir yerden sonra bunları insanlara da anlatmaya, hatalarımızı ve çözümlerimizi paylaşmaya, arkamızdan gelenlere de yol göstermeye karar vererek arabamLabs’ı açtık ve yazmaya başladık. Buradan ayda minimum 4–5 yazı paylaşmak gibi bir hedefimiz, bunu lafta bırakmamak için niyetimiz ve birbirimizi ittirmek üzerine kurulu bir motivasyonumuz mevcut :)

Peki bundan sonra?

Geldiğimiz noktada bir çok farklı teknoloji kullanıyoruz; .net, python, mssql, elasticsearch, redis, mongo, cassandra, kafka, spark, hadoop bunlardan başlıcaları olarak sayılabilir. Ama bu kadar ile kalması değil, geliştirmek ve genişletmek tek hedefimiz.

Bu publication altında sizinle uğraştığımız teknolojileri, bilgimizi paylaşmakla beraber en büyük hazinemiz olan hatalarımızı ve bu hatalardan neler öğrendiğimizi de paylaşacağız.

Geliştirecek çok iş, paylaşacak çok bilgi, yapılacak çok hata, öğrenilecek çok ders, gidilecek çok yol var.

Ama en önemlisi gittiğin yol, vardığın yer değil; o yolu kimlerle birlikte gittiğindir.

life is not where you go but who you travel with..

--

--