Istanbul JUG Greenfield Hackathon @ Deloitte Türkiye

25–26 Kasım hafta sonu, çok keyifli bir etkinlikte Deloitte Teknoloji ekibinden bir grup hem katılımcı, hem de ev sahibi olarak yer aldık. Yaratıcı problem çözme üzerine odaklanan hackathon etkinlikleri son dönemde oldukça popüler, hatta ülkemizdeki bu etkinlikleri takip edebileceğimiz bir online platform da mevcut.

Hackathon nedir ve Türkiye’de bu alanda neler yapılıyor kısa bir ön bilgi için geçen sene yazılmış olan şu Webrazzi makalesine göz atabilirsiniz.

Neden hackathon?

Son dönemde özellikle yazılım meetup grupları ile sıkça bir araya geliyor ve Deloitte ofisinde akşam etkinlikleri düzenliyorduk. Yazılım ekosistemindeki farklı uzmanlar ile bir araya gelmek, hands-on geliştirme seansları yapmak ve fikir alışverişinde bulunabilmek biz teknik ekipler için oldukça motive edici. İstanbul’da da son yıllarda bu tip topluluklar her şeye karşın hem nicelik hem de nitelik olarak çok önemli yol katetmiş durumda.

Geçtiğimiz aylarda Java Day etkinliğine de katıldığımız Istanbul Java User Grup ekibinin hackathon etkinliği için yer ihtiyacı olduğunu öğrendiğimizde ve özellikle hackathon’un yarışmadan ziyade birlikte bir ürün çıkarma odaklı farklı yaklaşımını da öğrendiğimizde, mutlaka bu organizasyona destek vermek istedik.

Özellikle bu sene Deloitte olarak yazılım ekosistemine destek vermek, teknoloji ekipleri olarak yazılım geliştirici komüniteleri içinde aktif rol almak ve fikir önderliği yaptığımız konularda bilgi paylaşımı yapmak temel amaçlarımızdandı. Bu tip bir hackathon tam da yapmak istediklerimiz ile örtüşen bir etkinlik oldu.

Greenfield hackathon öncesi

Hackathon’lar iyi planlanmadığı takdirde katılımcılar için negatif bir deneyime dönüşebiliyor. Gerçekçi olmayan beklentilerin oluşturulması, sağlıksız çalışma ortamları, rahatsız edici düzeyde rekabet ve hoşgörüsüz ortamlar sık karşılaşılan problemlerden. Java User Grup ekibinin sunduğu yaklaşım ise tüm katılımcıların ekipler halinde birlikte çalışarak oluşturacağı, nihai olarak bir sivil toplum yapılanması tarafından da kullanılabilecek bir dijital platform oluşturma üzerineydi.

“Greenfield hackathon” etkinliği için çalışmalar aslında haftalar öncesinde Java User Grup katılımcılarının bir araya gelerek konu alternatiflerini belirlediği ve oyladığı etkinlik ile başladı. Tüm katılımcıların birlikte çalışarak oluşturacağı ürün alternatifleri arasından en çok oyu “Second Opinion” adlı platform aldı. Hastaların mevcut teşhis ve tanılarına ilişkin ikinci bir görüş alabilecekleri, tıp uzmanları ve hastaları bir araya getiren bir dijital platform oluşturma, fikrin temelinde yer alıyordu. Ülkemizde olmasa da global örnekleri ile bu tip platformların benzer modellerde oluşturulduğunu gördük ve biraz da fikrin sağlamasını yapmış olduk.

Etkinlikten bir hafta önce Slack üzerinden hareketlilik başladı ve draft analizler, use-case’ler katılımcılar ile paylaşıldı. JUGIstanbul Slack grubu oldukça aktif ve Slack gerçekten etkinlik süresince de ekip içinde haberleşmek için temel dijital aracımız oldu.

Hackathon’un verimli geçmesi için önemli noktalardan birisi Cumartesi sabah bir araya geldiğimizde elimizde temel user story’lerin hazırlanmış olmasıydı. 36 saat gibi bir sürede ürünün kullanılabilir, anlamlı minimum özellik kümesini (minimum viable product) tanımlamak, tasarımını gerçekleştirmek, geliştirme ve test süreçleri ile cloud üzerinde kullanıma hazır hale getirmek için ön hazırlıklar son derece önemli.

Hackathon 1. gün başlıyor

Cumartesi sabah 8:00’de ofise geldiğimde 4–5 kişinin benden önce geldiğini görünce hem şaşırdım hem de sevindim açıkçası :) Sanırım pek çok kişi için ilk hackathon etkinliğiydi. Üniversite öğrencileri, çalışan profesyoneller, etkinlik koordinatörleri dahil yaklaşık 20 kişilik bir topluluk olarak, güzel bir kahvaltı eşliğinde güne başlangıç yaptık. Müzik bu tip etkinliklerdeki önemli bileşenlerden, Spotify listemizi de ayarladıktan sonra başlamaya hazırdık.

İlk iş herkesin aynı noktada olduğundan emin olmak için yapılacak işin tanımlanması ve hazırlanan materyallerin üzerinden geçilmesi idi. Organizatörlerimizden Taylan Kurt burada açılışı yaptı. Herkes için ana hedefimiz netleştikten sonra bir gün önce Trello üzerine taşıdığımız user story’ler üzerinden konuşarak ana hatları çizili hikayeleri birlikte tartışarak detaylandırmaya başladık. Bu kısım işin tabii en önemli kısmı ve tahmin ettiğimizin biraz üzerinde, 3 saate yakın zaman harcadık. 20 kişilik bir ekip ile birlikte bunu organize etmek iyi bir tecrübe oldu.
 
 
 Backlog oluşturmak

Story’ler oluştuktan sonra yemek aramızın ardından MVP backlog oluşturmaya başlayacaktık. Ancak burada yemeğe bir parantez açmam gerek :) Hackathon’un öne çıkan temalarından birisi yemek ve ikramlar oldu diyebilirim. Uzun bir süreyi aynı ortamda geçirdiğinizde bunun ne kadar önemli olduğunu anladım. Lokasyon, yemek, içecek ve atıştırmalıklar kesinlikle önemsenmesi gereken konular, iyi zaman geçirme konusunda önemli etkenler.

MVP listemizi oluştururken bir yandan bazı story’lerimizi de detaylandırmaya devam ettik ve tahmin ediyorum saat 14:30 gibi listemiz hazırdı.

Domain model ile başlamak

Geliştirme sürecine geçmeden önce son aşama ana hatları ile mimari ve bileşen tasarımlarını oluşturmaktı. Draw.io üzerinde oluşturduğumuz draft domain model ile işe başladık. Geliştirme aşamasında ortak bir çizgide hareket edebilmek için domain modelin belirlenmesi en kritik adımlardan birisi idi. Tüm bunlar ardından yaklaşık 17:00–17:30 civarı uygulama geliştirme çalışmalarına başlamaya hazırdık.

Tabii tüm bu çalışmaları yürütürken organizatörlerimizden Taylan, temel bir Java Spring REST proje şablonu hazırlamış, ilk kodları commit etmişti bile. Tüm katılımcıları uygulama geliştirme sürecine hızlı bir şekilde adapte edebilmek için ortak altyapının, temel çatıya ilişkin kodların tek bir kişi/grup tarafından ana ekranda herkesin takip edebileceği bir şekilde yapılması önemli zaman kazandırdı.

Domain modeli baz alarak 3 ekibe bölünmeye karar verdik: Patient, Medic ve Case (Hastaların ilettiği ve fikir almak istediği her bir tıbbi teşhis case olarak tanımlanıyor) üzerine model, servis ve API’leri geliştirecek ekipler. Frontend uygulamayı geliştirecek ayrı bir ekip oluşturmak, -ürün geliştirme süreci olarak bakarsak en ideal yöntem olmasa da — en hızlı yol olarak göründü.

Teknoloji seçimleri

Katılımcıların yetkinliklerine bakarak uygulamada backend için Java, Spring Boot kullanılırken, frontend için React kullanma yönünde karar aldık. Amaç bir yandan da yeni şeyler öğrenmek ve özellikle de mümkün olduğunca unit test yazarak ilerlemek ve TDD (test odaklı geliştirme) pratiklerini uygulamaktı.

Github flow kullanarak yaptığımız geliştirmeler için Travis CI ile entegrasyon sürecini oluşturduk. Master branch’e yapılan her merge sonrası çalışan build ve testler sayesinde iki gün boyunca genel olarak çok dağılmadan ilerlediğimizi söyleyebilirim.

Hackathon’un keyifli yanlarından birisi pair programlama yaparak çalışmak ve birbirimizden yeni şeyler öğrenmek oldu.

Bu rahat ve eğlenceli ortamı sağlayan en önemli etken her seviyeden katılımcının olduğu 2 gün boyunca herkesin birbirine yardımcı olması, bilgi seviyesini sorgulamadan öğretmeye ve öğrenmeye açık olmasıydı. Bu şahsen benim 2 gün boyunca en çok keyif aldığım ve aklıma kazınan yönü oldu. Malum özellikle yazılım konusunda imposter sendromu katılımcıları bu tip etkinliklerde tereddüte düşürüyor ve endişelendiriyor. Bir hackathona katılabilmek için rock star developer olmak ön şart değil.

Bu rahatlığı sağlayan faktörlerden birisi tabii iş ortamından uzakta, risk faktörünün düşük olduğu ve başarısızlığın etkisinin minimum olduğu bir ortamı oluşturmak. Bu sayede yazılım ekiplerinin yaratıcı olabildiği ve problem çözme yetkinliklerini maksimum kullanabileceği 36 saatlik bir etkinlik gerçekleştirebildik.

Geliştirme süreci başladı

Geliştirme sürecinde ilk adımlardan birisi API kontratlarının oluşturulmasıydı. Böylece takımların entegre bir yapıyı kolayca oluşturabileceği bir tasarımı oluşturabildik. Trello kartlarımız üzerinde API kontratlarımızı tanımladık ve sonunda ilk günün akşam saatleri yaklaşırken geliştirme sürecine başladık.

Bir taraf React tabanlı frontend’i ayağa kaldırırken, diğer ekipler modelleri tasarlıyor ve API’ları oluşturuyordu. Uzun bir dönem ardından elleri kirletmek şahsen bana da iyi gelmişti :) Spring Boot ile TDD uygulayarak çalışmak gerçekten işi çok kolaylaştırıyor ve temel entegrasyon testlerini yazarak API geliştirme süreci çok daha kontrollü yönetilebiliyor.

Geliştirmeye başladıktan sonra 4 farklı ekip köşesi ve projektörler ile güzel bir çalışma ortamı yarattık. Deloitte’tan arkadaşlar ile hafta içi ofis saatlerinde de böyle çalışmak için kendimize söz verdik ama henüz tutamadık :)

Geceye kadar süren çalışmalar ardından kimimiz evlere giderken, yine tahmin ediyorum 10+ kişi ofiste devam ederek armut koltuklarda geceyi geçirdi. Sabah 8:00 gibi kahvaltımız, kahvemiz hazırlanmaya başlamış, görevliler sessizce uyandırmamak için masaları hazırlıyordu.

2. gün ile devam

İkinci güne Patient servisleri için Ali Dere ve Taylan Kurt ile pair programming yaparak başladık. Güne iyi başlamak diye buna denir:)

İkinci gün de test odaklı yaklaşımdan ödün vermedik. Tabii bunun bedeli gün ortalarına doğru uygulamayı uçtan uca çalıştıracak şekilde birleştirecek zamanın daralması oldu :) Ufak ufak stresi hissetmeye başladık diyebilirim.

Frontend ekibi gün sonuna doğru temel hesap oluşturma, case iletme sürecinin ilk adımını gerçekleştirme gibi aşamaları gerçekleştirmişti. API ile ilk bağlantıları kurup bir şeyler gösterebilir hale gelmiştik.

İkinci güne ve etkinliğe saat 19:00 civarı son verirken herkes için her şeyden önemlisi çok eğlenceli ve öğretici bir 36 saati geride bırakmış olduk.

Hackathon ardından

Özetle;

  • 40+ user story
  • 125 commit
  • 50+ unit ve entegrasyon testi

İle SecondOpinion uygulamamızın temellerini oluşturduk. Çok farklı teknik yetkinliklere sahip 20 dolayında bir ekip ile sıfırdan tasarladığımız bir modelin temellerini oluşturduğumuz hızlandırılmış bir ürün geliştirme sürecini birlikte tecrübe ettik.

Tabii burada bırakmıyoruz:) GPL lisansı ile GitHub’daki uygulamamızı birlikte çalışarak tamamlama yönünde anlaştık. Uzaktan ve akşam cafe toplantıları ile Aralık ayı sonuna kadar MVP’yi hayata geçirmek yeni hedefimiz.

Tüm katılımcılara ve özellikle de Java User Grup ekibinden Taylan Kurt, Taner Diler ve Gökalp Gürbüzer’e 2 gün boyunca bizlerle oldukları için tekrar teşekkürler.

Ek not: Güzel haber, uzaktan destek oldukça iyi gidiyor. Biz de Cuma günleri Deloitte ofisten çalışarak projeye Aralık sonu hedefi için destek veriyoruz.