Yemeksepeti Banabi

Özgür Kara
Delivery Hero Tech Hub
5 min readApr 19, 2019

10 Nisan 2019 itibariyle Banabi’yi IOS için yayına aldık. Birkaç haftaya da Android için yayınlamayı planlıyoruz. Yaklaşık 2.5 ay gibi kısa bir sürede, bu seviyedeki büyük bir projenin production a çıkmasında yok denecek kadar az problemin çıkması bizi ekip olarak çok mutlu etti. Gurur duyacağım işlerden biri oldu. Emeği geçen herkesin ellerine sağlık.

Banabi açılış günü

Nasıl Başladık?

Projenin bize bildirildiğinden itibaren maksimum 3 ay sonra yayında olmamız gerektiği söylendi. Analiz ve teknik ekipten oluşan bir toplantıda, projenin 3 ayda çıkmasının Yemeksepeti sistemi üzerine kurulması ile mümkün olacağı kararına varıldı.

Nasıl Karar Verdik?

Yemeksepeti altyapısı bir yandan yeniden yazmaya çalışırken Banabi projesinin de aynı sistem üzerine geliştirmek teknik ekip olarak içimize sinmedi. Ekip olarak birkaç toplantı yapıp Banabi’yi yeni bir proje olarak hangi özelliklerle, nasıl bir kod kalitesiyle, ne kadar süre içinde geliştirebiliriz bunun planlamasını yaptık. Yemeksepeti’nin yenilenmesi için hazırlamış olduğumuz bir mimari vardı ve tüm developerlar bu mimari ile geliştirme yapmıştı. Yapılan planlamada aynı mimariyi kullanarak 3 ayda gerekirse fazla mesai ile yeni proje olarak yazmak istediğimizi belirttik. Takım liderimiz ekip içinde bu talebi oylamaya karar verdi ve oylama sonucu yeni bir proje olarak yazılmasına karar verdik. Oyları tekrar saymaya gerek duymadık :)

Nasıl planladık?

Platform ekibi olarak bizim sorumluluğumuz olan servisler için ekip içinde bir dağılım yaptık. Sorumlu olduğumuz servisleri ayırdık.

Bu servisler;

1- Order API

2- Basket API

3- Marketing API

4- Product API

5- User API

6- Internal API

7- Manager API

8- Admin API

9- Cron API

Yapacağımız geliştirmeler için DoD (Definition of Done) tanımlamalarını yaptık.

Bu tanımlamalar;

1- Test coverage %90 ın üzerinde olmalı.

2- Yapılan geliştirmeler Sonarqube’e gönderilmeli, bug ve vulnerability olmamalı.

3- Pull requestler en az 2 developer tarafından review edilmeli.

4- Example projesindeki (mimarinin örnek projesi) standartlarda geliştirme yapılması.

5- Cache olmadan bir request 100ms nin altında response vermeli.

Ne Kullandık?

Kısıtlı bir zamanımız olmasına rağmen son teknolojilerden ve araçlardan yararlanmaya çalıştık. Gönül isterdi ki tüm yapıyı cloud üzerinde kuralım ancak şirket politikası gereği bunu daha sonraya bıraktık.

tKullandığımız teknoloji, yazılım ve araçlar;

1- .NET Core & Go (az biraz)

Tüm API ler .NET Core Web API ile geliştirildi. Performans olarak bizi üzmedi. Beklentimizi fazlasıyla karşıladı.

RESTful standartlarına mümkün olduğu kadar uymaya çalıştık. Özellikle anlamlı url oluşturmak API için dökümantasyon yazma işimizi azalttı.

Go ile image resizer ihtiyacımızı karşılayacak bir uygulama geliştirdik. AWS Lambda & S3 & Go ile basit bir geliştirme ile büyük bir problemimizi çözmüş olduk. Detayını buradan inceleyebilirsiniz.

2- Fluent Validation, Auto Mapper, Dapper, MediatR, Swagger, Serilog, XUnit, Seq

Fluent Validation : Gayet başarılı bir framework ve .NET Core ile de kullanmaya devam ettik ve bir sıkıntı yaşamadık.

Auto Mapper : Her projede olduğu gibi yine amacı doğrultusunda kullandık. 5'ten fazla property match durumunda Auto Mapper ı kullanma koşulu koyduk.

Dapper : DB işlemlerimiz için Dapper’ı seçtik. Mikro ORM kullanmak farklı bir deneyim oldu.

MediatR : Gayet başarılı bir framework çok beğendik ve çok kullandık :) Developer’ları SOLID prensibine zorlaması bize hem kalite hem de zaman kazandırdı.

Swagger : Bir Web API için olmazsa olmaz. Mobile developer lar Swagger’ı referans alarak implementasyonlarını kolay ve hızlı bir şekilde tamamlayabildiler.

Serilog : İşimizi kolaylaştırdı. Birçok log kütüphanesiniyle hazır entegrasyonu olması ve kolay implement edilmesi gayet güzel.

XUnit : Ekipte unit test deneyimi çok azdı. İlk başlarda ekibe zaman kaybı gibi gelse de zamanla herkes severek uyum sağladı. XUnit bazı özellikleri sayesinden unit test hızımızı arttırdı ve kolaylaştırdı.

Seq : Paneli iş gören bir yazılım olsa da donanım olarak çok maliyetli olduğu kanaatindeyim.

3- Redis Cache

Distributed Cache olarak yine ilk seçeneğimizdi ve bizi üzmedi.

4- Ubuntu & Apache

Linux olarak Ubuntu ve CentOS arasında kalmıştık. Ubuntu ile anlaşmamız olduğundan onu seçtik.

Apache ve NginX arasında seçim yapmalıydık. Apache daha basit bir yazılım olduğu için onu tercih ettik.

5- MS SQL

Gönül isterdi ki NoSql ile geliştirelim ancak kısıtlı zaman ve know-how eksikliğinden dolayı MS SQL ile devam etme kararı aldık.

6- AWS Lambda & S3

Serverless kafasını beğendik ve bundan sonra sıkça kullanmak istiyoruz. S3'ün AWS’nin en düzgün ve stabil servislerinden biri olduğunu teyit ettik.

7- JWT Authentication & OAuth2

JWT’nin hem güvenli olması hem de kolay implementasyonu sayesinde güzel bir auhtentication sistemi kurmuş olduk.

OAuth2 standartlarına mümkün olduğu kadar uymaya çalıştık.

8- Hangfire

Bizi windows servislerden kurtarması bile memnun etti.

Nasıl İlerledik?

Banabi’nin 3 ay sonra çıkması için bizim backend ekibi olarak servisleri 2–2.5 ay gibi sürede bitirmemiz gerekiyordu. Normalde şirket içinde Scrum uygularken bu proje için Kanban kullanmaya karar verdik. Jira üzerinde bir Kanban Board açtık ve bu board ile iş süreçlerini yönettik.

Her ne kadar ilk yazılan analize bağlı kalmak istesek de change requestlere hayır diyemedik. Analizin de kısa zamanda yapılmasından dolayı “Kervan yolda düzülür” mantığıyla ilerleme durumunda kaldık. Aslında bu projenin bir start-up olduğunu düşündüğümüz için bu süreci kafamıza fazla takmamaya çalıştık.

Başardıklarımız

1- Planladığımız gibi 2.5 ayda tüm servisleri çalışır halde yayına aldık.

2- Kod geliştirme standartlarımızı ve kalitemizi koruduk.

3- API’lerin performansı bizi memnun etti.

4- Yok denecek kadar az bug ile ürünü çıkardık.

5- Yeni bir ekip olarak bu kadar kısa bir sürede böyle büyük bir projeyi çıkarabilmemiz bizim için en önemli başarıydı.

Aklımızda kalanlar

1- %90 olarak koymuş olduğumuz test coverage limiti bazı projelerde %80 seviyesinde kaldı.

2- Load test için yeteri kadar vakit ayıramadık.

3- Keşke 2 ay daha süremiz olsaydı da Load test, Integration test ve kod kalitesini biraz daha arttırabilseydik.

Banabi backend ekibi

SONUÇ

Banabi artık yayında. Proje her yeni gün sipariş sayısı katlanarak çalışmaya devam ediyor. Yakın zamanda Türkiye’de birçok ilde hizmet verecek. Günlük onbinlerce sipariş aldığı günleri kısa zamanda göreceğiz diye umut ediyoruz. Bu projenin geliştirme sürecinde bulunmaktan mutlu oldum.

Bu projenin bir çalışan olarak bana kattığı deneyim de;

Bu kadar kısa biz zaman içinde bu seviyedeki bir projenin stresi, sorumluluğu, mesaisi ve süreci çalışanları yorabiliyor. Bu yoğunluğun ardından biraz dinlenmek gerekiyor sanırım.

Projede emeği geçen herkesin tekrar ellerine sağlık…

--

--