Over-Engineering ⚔️ Lean Thinking

Mehmet Oya
Papara Tech
Published in
3 min readAug 8, 2024

Yazılım mühendisliğinde sıklıkla karşılaşılan iki yaklaşım vardır: Over-Engineering (Aşırı Mühendislik) ve Lean Thinking (Yalın Düşünce). Bu yazıyı, her iki yaklaşımı da detaylı olarak ele alacak, avantajlarını ve dezavantajlarını tartışacak ve gerçek dünya örnekleriyle bu kavramları daha iyi anlamaya çalışacağız.

Over-Engineering (Aşırı Mühendislik)

Over-Engineering veya Aşırı Mühendislik, bir çözümün gereğinden fazla karmaşık hale getirilmesi durumudur. Bu, genellikle yazılım mühendislerinin mükemmeliyetçilik veya gelecekteki ihtiyaçları öngörme arzusu nedeniyle ortaya çıkar. Aşırı mühendislik, proje üzerinde çalışan ekip için zaman, maliyet ve bakım açısından büyük yükler getirebilir.

Aşırı Mühendisliğin Belirtileri:

  1. Gereksiz Karmaşıklık: Basit bir problemin çözümü için gereksiz derecede karmaşık yapılar ve algoritmalar kullanmak.
  2. Yersiz Abstractions (Soyutlamalar): Fazla soyutlama katmanları ekleyerek kodun anlaşılmasını ve bakımını zorlaştırmak.
  3. Erken Optimizasyon: Performans sorunları henüz ortaya çıkmadan kodu optimize etmek için fazla çaba harcamak.
  4. Gereksiz Özellikler: Kullanıcı tarafından talep edilmeyen veya kullanılmayan özellikler eklemek.

Aşırı Mühendislik Örneği:

Bir e-ticaret sitesi için basit bir kullanıcı giriş sistemi geliştirdiğinizi düşünün. İdeal olarak, kullanıcı adı ve şifre doğrulaması yapan temel bir sistem yeterlidir. Ancak, aşırı mühendislik yaptığınızda, sistemin gelecekte biyometrik doğrulama, iki faktörlü kimlik doğrulama ve OAuth entegrasyonu gibi özelliklere ihtiyaç duyacağını öngörerek tüm bu özellikleri baştan tasarlamaya çalışırsınız. Bu, projenin süresini uzatır, maliyetleri artırır ve gereksiz yere karmaşıklık yaratır.

Lean Thinking (Yalın Düşünce)

Lean Thinking veya Yalın Düşünce, gereksiz özellikleri ve israfı ortadan kaldırarak sadece müşteri için değer yaratan özelliklere odaklanmayı amaçlayan bir yaklaşımdır. Bu yaklaşım, Toyota üretim sisteminden esinlenerek yazılım geliştirme süreçlerine uygulanmıştır. Yalın düşünce, sürekli iyileştirme ve müşteri memnuniyetine odaklanır.

Yalın Düşüncenin İlkeleri:

  1. Değer: Müşteri için gerçekten değerli olanı belirlemek ve bu değere odaklanmak.
  2. Değer Akışı: Ürün veya hizmetin üretim sürecindeki her adımı analiz etmek ve değer yaratmayan adımları ortadan kaldırmak.
  3. Sürekli Akış: Çalışma sürecinde kesintisiz bir akış sağlamak ve beklemeleri azaltmak.
  4. Çekme: Ürün veya hizmeti müşterinin talep ettiği anda üretmek ve teslim etmek.
  5. Mükemmeliyet: Sürekli iyileştirme ve mükemmeliyet arayışı içinde olmak.

Yalın Düşünce Örneği:

Aynı e-ticaret sitesi örneğini ele alalım. Yalın düşünce yaklaşımında, öncelikle kullanıcıların en çok ihtiyaç duyduğu özellikleri belirleyip bunları hayata geçirirsiniz. Örneğin, temel kullanıcı adı ve şifre doğrulaması yeterliyse, sistemi karmaşıklaştırmadan bu özelliği geliştirmek yeterli olacaktır. Kullanıcılar daha sonra biyometrik doğrulama gibi ek özellikler talep ederse, bu özellikleri iteratif olarak ekleyebilirsiniz. Bu sayede, sistemin ilk versiyonu hızlıca piyasaya sürülür ve gereksiz karmaşıklıktan kaçınılır.

Over-Engineering ve Lean Thinking Karşılaştırması

Aşırı Mühendislikten Kaçınma Yöntemleri

  1. YAGNI (You Aren’t Gonna Need It): Gelecekte ihtiyaç duyulabileceği düşünülen özellikleri eklemekten kaçının. Sadece şu an gerekli olanları uygulayın.
  2. KISS (Keep It Simple, Stupid): Çözümleri mümkün olduğunca basit tutun. Karmaşıklık, sadece gerekli olduğunda eklenmelidir.
  3. MVP (Minimum Viable Product): Ürünün en temel ve işlevsel halini hızlıca piyasaya sürün. Müşteri geri bildirimlerine göre iteratif geliştirmeler yapın.

Yalın Düşünceyi Uygulama Yöntemleri

  1. Müşteri Geri Bildirimleri: Müşteri geri bildirimlerine önem verin ve ürünü sürekli olarak iyileştirin.
  2. Kanban veya Scrum: Yalın düşünceyi destekleyen yazılım geliştirme metodolojilerini kullanın.
  3. Değer Akış Haritalama: Süreçteki her adımı analiz edin ve değer yaratmayan adımları ortadan kaldırın.

Gerçek Dünya Örneği: Dropbox

Dropbox, başlangıçta sadece dosya senkronizasyonu ve paylaşımı sağlayan basit bir uygulama olarak piyasaya sürüldü. Kullanıcı geri bildirimlerine göre iteratif olarak gelişti ve bugün milyonlarca insanın kullandığı kapsamlı bir hizmet haline geldi. Eğer Dropbox aşırı mühendislik yapmış olsaydı, tüm potansiyel özellikleri baştan eklemeye çalışarak piyasaya çıkış süresini uzatabilir ve müşteri memnuniyetini düşürebilirdi.

Sonuç

Yazılım mühendisliğinde, aşırı mühendislikten kaçınarak yalın düşünceyi benimsemek, daha verimli ve müşteri odaklı çözümler üretmenizi sağlar. Gereksiz karmaşıklığı ve israfı ortadan kaldırarak, sadece müşteri için değer yaratan özelliklere odaklanmak, yazılım projelerinin başarısını artırır. Ezcümle basit ve etkili çözümler her zaman karmaşık ve gereksiz özelliklerle dolu çözümlerden daha değerlidir.

Kaynaklar:

  1. The Lean Startup by Eric Ries
  2. Toyota Production System by Taiichi Ohno
  3. Clean Code by Robert C. Martin

--

--

Mehmet Oya
Papara Tech

I am an Istanbul based Software Developer with 10+ years of experience. I am passionate about building software that improves the lives of those around me.