Photo by Juan Manuel Núñez Méndez on Unsplash

Web Development

Horizontal / Vertical Slicing’ in Organizasyon Yapısına Etkisi

Bir ürünün geliştirilmesi aşamasında tercih edeceğimiz shipping (canlıya) çıkma adımları aslında organizasyon yapısına baştan karar vermenizi gerektiren bir durum.

Architectural Patterns
5 min readNov 13, 2023

--

Web uygulamalarının sayısının artması, yeteneklerinin karmaşıklaşması sonrasında Product Manager rolünün önemi, bunun ile birlikte bunun takımlara uygulatılması anlamında Product Owner, Scrum Master vs rollerin önemi arttı.

Peki ürün geliştirimi öncelikli olarak nereden başlamalı ?

  • Veri ve Flow’lar temel alınarak
  • Müşteri öncelikleri / Kullanıcı öncelikleri
  • Teknik ekip kabiliyetleri
  • Market ve Pazar ihtiyaçları
  • Ortam şartları, Diğer sistemler ile etkileşim

Gerçekten bunun seçimi zor. Tüm bu seçeneklerden belli miktarlar alarak bir karışımda yapabilirsiniz ama bu karışımın başarılı olup olmayacağı biraz da Product Manager deneyimine, ortam sezilerine bağlı.

Özetle bir çok projenin başarız/başarılı olması altında bu karışımı tutturmak var.

Peki neden bunun bir formülü yok ? Bu konuya zamanında değinmiştim, çünkü farklı farklı projelerin ve ekiplerin farklı ihtiyaçları oluyor.

Neden Farklı Yazılım Geliştirme Modelleri Var?

Farklı Yazılım Geliştirme Modelleri derken neden mi bahsediyorum.

Yazılım Geliştirme Modelleri

Son dönemde bu geliştirme modellerinden ağırlıklı olarak Agile Yöntemlere ağırlık verilmiş durumda.

Kanban, XP, Scrum Arasındaki Farklar

Özellikle Kanban ve Scrum tercih ediliyor, nedeni küçük parçalar halinde müşteriye ve markete hızlı bir şekilde ulaşmak.

Agile yöntemler yazılımdaki yapılarıda bir bir parçalamaya daha ufak ele almaya ve bunların yönetilebilmesi için araçlar geliştirmeyi sağladı, DevOps, Docker ve Microservis gibi terimler ve teknolojik altyapılar hayatımıza girmeye başladı.

Zaman ile Monalitik yaklaşımlardan → SOA (Service Oriented Architecture) MicroservisMicrofrontend yaklaşımların a kaydık.

Bu yönde bir geliştirme’ de Cloud(Bulut) tarafında gerçekleşti , DevOps altyapıları daha kolay UI üzerinden, API üzerinden yönetilebilecek şekilde IaaS, PaaS ve SaaS hizmetleri yaygınlaştı.

Yani girerek ürünler daha ufak parçalara kırılmaya, bu ufak parçaların nasıl geliştirilip, birleştirileceği üzerine kafa yorulmaya, bunların canlıya çıkış aşamaları, test süreçleri, ve bunlar ile birlikte canlıda takip edilme, hata yakalanma , performans ölçümleme gibi yeni alanlar ortaya çıktı.

Bu parçalara gelin birde Horizontal ve Vertical Slicing ile bakalım.

Slicing

Dilimleme, ürünü teknik katmanlarını Dikey ve Yatay’da dilimlemek. Yani Horizontal & Vertical Slicing

Horizontal vs Vertical Slicing

Bu yukarıdaki katmanları belli bir sınırda tuttum fakat bu katmanlar yatayda ve dikeyde artırılabilir.

Yatay Bölümlemede: Genelde organizasyon ve ekipler bu doğrultuda kurulup birbirlerine servis sağlarlar.

  • Avantajı kendi yatay alanında uzmanlaşmış takımlara sahip olursunuz ve kalite bu düzeyde artar, çünkü her bir yatay kırılımın kendi içerisinde bir çok farklı teknik zorluk ve konsept barındırır.
  • Dezavantajı ise ürün sahipleri ve proje yöneticilerinin bir feature için tüm bu ekipler arasındaki senkronizasyonu ve iletişimi sağlatmaları gerekiyor, aynı anda birden fazla feature geliştirmek istediğinizde yapısal olarak yatay bölümlemenin getirdiği büyük bir iletişim ve yönetim kalemi ortaya çıkıyor.

Dikey Bölümlemede: Genelde organizasyon ve ekipler belli yetenekler çevresinde dikey bölümlenmiş şekilde hem UI, hem Business, hem DB gibi birçok yatay alanla ilgilenen bir halde.

  • Avantajı: Ekipler belli yeteneklere UI’dan, Veritabanına kadar odaklandıkları için yatay katmanları bekleme sorunu ortadan kalkmış oldu.
  • Dezavatajı: Ekiplerin her birisinin hem UI, hem Business, hemde Veritabanı konusunda uzman olması ihtiyacını doğuruyor ki, bu da ekipten ekibe bir çok farklı çözümün ve bunların problemleri ile uğraşmak anlamına geliyor.

Çözüm ? → Soyutlama (Abstraction)

Peki çözüm nedir ? Şu ana kadar birçok enterprise büyük ölçekli şirkette gördüğüm Soyutlama.

Soyutlamayı isterseniz Core bir Ekibin sunduğu şirket içi bir Framework’ dür

Core Ekibi, Altyapı ekipleri dikey bölümlemede çalışacak daha az deneyimli geliştiriciler için hazır kütüphaneler ve servisler sunar. Bu durumda şirket yapısı aşağıdaki görselde gözüken bir yapıya bürünür.

Hybrid Çözüm.

Framework/Core Geliştirici Ekipler ve Dikey bölüm ekipleri.

Peki bu Framework’ ler neden geliştirilmesi bu kadar zor. Bu işlere neden Junior geliştiriciler yerine Senior, Architect kişiler gerçekleştiriyor, bunları soyutlaştırıyor? Bunun nedeni nedir ?

Çünkü bu konular çok zor konular her bir konu kendi içerisinde derya deniz. Buradaki bir yanlışın güvenlik, performans ve maliyet gibi kalemlere inanılmaz etkisi var. Bu kısımlarda oluşabilecek hatalar ürünün kaderine baştan sona etkiler.

Aslında bu durumun yarattığı bir dezavantaj çoğu geliştiriciye hep aynı tür işlerde uğraşıyor olmak hissiyatı. Bu Framework veya Core ekipler tarafından sağlanan altyapılar üzerinde feature/task geliştirmek bir çok geliştiriciyi sıkıyor olabilir.

Ama şirketler bunu yapmak zorunda,

  • Maliyet, Performans, Kalite
  • Ekibe yeni birisi gelmesi ve ayrılmasına adaptasyon
  • vb..

Aynı zamanda kriz anlarının çok olmaması, geliştirmeye yeni başlayanların kendilerini rahat hissetmeleri açısından da büyük avantajları var.

Günümüz Meta Framework’ ler, SDK’lar, 3rd Party API, Serverless, SaaS dönemi

Yukarıda bahsettiğim konular genelde kurumsal 50 kişi üzeri MidLevel, Enterprise şirketler için geçerli.

Tabi Startup’lar için durum farklı ama daha küçük ekipler ile daha büyük işler daha kısa zamanlarda yapılmak isteniyor. 0–50 kişilik ekiplerde bu tip yapıları kurmak kolay olmayabilir.

Bundan dolayı ekipler Frontend vs Backend olarak temelde ikiye ayrılırlar

  • Frontend ( React, Vue, Angular …)
  • Backend ( .Net, Java, Node, Python …) ve Bulut hizmetlerini kullanarak Frontend ekibine API sağlar.

Frameworks

Bu yaklaşım son dönemlerde Framework’ lerinde artması ile artık amaçlara uygun Framework’ ler ve Template hazır olarak geliyor

Hangi Frontend Framework Kullanmalıyım ? (Next, Remix, Qwik, Astro, Vite, …) Hangisi ?

Özetle Remix, Next, Nuxt, Nest gibi Framework’ ler şirketlerin ücretsiz elde edebildikleri Core Ekipler gibi. Kalite çok yüksek, düşük maliyet.

React ekosisteminde son dönemde gerçekleşen React Server Component, Server Actions ‘da benzer bir yapıya hizmet ediyor. Fullstack dikey’de yazılım geliştiricilerinin tek bir Meta’dil React üzerinden hem Client, hem de Sunucu tarafında kod geliştirebilmesine olanak sağlıyor.

Next.js React’ın Geleceğine Mi Karar Veriyor ? veya Yerine mi deseydim :)

Serverless ve Backend Hazır Sistemler

Serverless direk olarak Enterprise’lar içinde inanılmaz yaygınlaşmada (Docker ve Kubernates yaygınlaştı), Startup’lar ve küçük ölçekli girişimler için Serverless Web uygulama alanında tutmuş ve giderek yaygınlaşan bir alan.

Serverless Mimari

Tabi bunun yanında hazır backend servisleri bulunuyor, Amplify, Firebase, Azure Mobile vb..

SaaS Servisleri

Günümüzde Authentication (Auth0 vb.), Payment (Stripe), Notification Mail (Send Grid, Mailgun), Flow Management vb bir çok yazılım ve development alanında hazır SaaS hizmetleri bulunuyor. Zaten Startup ekosisteminin büyük bir çoğunnluğu bu SaaS ekosistemi sayesinde ayakta kalıyor.

Özet

Özetlersek ilerleyen süreçte Web, Mobil ve AI geliştirmenin daha hızlanması, genişlemesi ve bunun içinde ekiplerin veya kişilerin daha Fullstack yazılım kabiliyetlerine sahip bir dönem olacak.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--