Skip to content
projelere açık000%
Tüm yazılar
ENTRY-009Yapay zekâ ile çalışma7 Ağustos 2026 · 3 dk okuma

SER-01 · SER-01.01 · AI ile Ürün İnşa Etmek

Vibe coding sorun değil. Vibe architecture sorun.

AI kod üretimini ucuzlattı. Bu iyi. Fakat kod ucuzladıkça yanlış mimari kararların da üretim maliyeti düştü. Çözüm AI'dan vazgeçmek değil; mimari kararları görünür, sınırlı ve insan tarafından sahiplenilmiş hale getirmek.

Vibe coding hakkında konuşurken iki ayrı şeyi birbirine karıştırıyoruz. Birincisi, doğal dille bir fikri tarif edip AI'ın hızla çalışan kod üretmesini sağlamak. İkincisi ise AI'ın ürettiği her teknik kararı sorgulamadan ürün mimarisine kabul etmek. Ben birincisini problem olarak görmüyorum. İkincisini görüyorum.

Vibe coding hız yöntemidir. Vibe architecture ise karar verme sorumluluğunun ortadan kaybolmasıdır.

Bir landing page, küçük bir iç araç veya fikri doğrulamak için hazırlanan prototipte hız çoğu zaman doğru optimizasyondur. Sorun prototipin bir gün fark edilmeden production sistemine dönüşmesiyle başlıyor. O anda dün geçici olan tablo, auth kuralı, cache yaklaşımı veya component sınırı bugün bütün ürünün taşıyıcı kolonuna dönüşebiliyor.

Kod kalitesinden önce karar sahipliğine bakıyorum

AI'ın yazdığı kod sentaktik olarak temiz olabilir. TypeScript geçebilir. Lint hatası olmayabilir. Yine de sistem yanlış olabilir. Çünkü mimari kalite tek tek dosyaların ne kadar temiz olduğundan değil, kararların birbiriyle ne kadar tutarlı olduğundan çıkar.

ts
type ArchitectureDecision = {  owner: 'human';  reason: string;  constraints: string[];  sourceOfTruth: string;  reversible: boolean;};

Bir agent'ın neden ikinci bir state store kurduğunu, neden doğrudan Supabase tablosuna bağlandığını veya neden yeni bir route yarattığını açıklayamıyorsanız problem kod stilinden daha büyük. Sistem karar üretmiş ama bu kararın sahibi yok.

Vibe architecture'ın ilk belirtisi: aynı şey için birden fazla gerçek

En sık gördüğüm sinyal çift kaynak doğrusu. Aynı görev bir component state'inde, bir context'te, localStorage'da ve cloud tablosunda farklı biçimlerde tutulmaya başlıyor. Her katman kendi başına mantıklı görünüyor. Birlikte ise senkronizasyon problemi yaratıyor.

ts
const taskSources = [  'componentState',  'context',  'localStorage',  'supabase',];
// Soru: canonical state hangisi?

Bu sorunun tek ve açık cevabı yoksa agent'a daha iyi prompt yazmak yetmez. Önce sistemin gerçekliğini belirlemek gerekir.

İkinci belirti: her bug yeni abstraction doğuruyor

AI araçları abstraction üretmekte çok iyi. Bir modal sorunu için yeni provider, wrapper, hook ve coordinator birkaç dakika içinde yazılabilir. Fakat hızlı üretilebilmesi gerekli olduğu anlamına gelmiyor.

ts
const fixRule = {  first: 'smallest durable fix',  second: 'reuse existing architecture',  onlyThen: 'introduce abstraction',};

Benim kuralım basit: yeni abstraction ancak en az iki gerçek kullanım noktası varsa ve mevcut model problemi ifade edemiyorsa ortaya çıkmalı. Aksi halde abstraction teknik borcu saklayan dekorasyona dönüşebiliyor.

Üçüncü belirti: component'ler doğrudan altyapı kararı veriyor

UI component'i kendi başına hangi tablodan ne zaman veri çekeceğine, ne kadar cache kullanacağına ve başarısızlıkta nasıl retry edeceğine karar veriyorsa ürün büyüdükçe ağ davranışı dağılır. Bu yalnızca performans problemi değil; maliyet ve tutarlılık problemidir.

ts
// Kötü sınırfunction Widget() {  return supabase.from('tasks').select('*');}
// Daha iyi zihinsel modelfunction Widget() {  const tasks = useTasksDomain();  return render(tasks);}

Component veri kullanmalı. Veri stratejisini icat etmemeli.

Dördüncü belirti: agent başarıyı kendi tanımlıyor

Bir agent'ın 'done' demesi acceptance değildir. Eğer görevin başarı ölçütünü önceden siz tanımlamadıysanız agent doğal olarak ulaşabildiği en yakın başarı sinyalini kullanır: dosya yazıldı, typecheck geçti veya build oluştu.

SeviyeNe kanıtlar?Ne kanıtlamaz?
TypecheckTip hatası yokÜrünün çalıştığını
BuildBundle üretilebildiRoute'un gerçek kullanıcıda açıldığını
BrowserAkış tarayıcıda çalıştıMobil/production davranışını
ProductionCanlı ortam çalıştıHer edge case'i

Ben vibe coding'i nasıl sınırlandırıyorum?

Hızdan vazgeçmiyorum. Hızı mimari sınırların içine alıyorum. Agent'a yalnızca yapılacak işi değil korunacak gerçekliği de veriyorum.

ts
const agentContract = {  goal: 'specific outcome',  preserve: ['current design', 'canonical data flow', 'existing routes'],  forbidden: ['parallel architecture', 'new dependency without need'],  acceptance: ['typecheck', 'build', 'runtime verification'],};
  • Repository ve branch görevin başında doğrulanır.
  • Kaynak doğrusu açıkça belirtilir.
  • Yeni sistem kurmak yerine mevcut sistem incelenir.
  • Değişiklik kapsamı dosya veya domain düzeyinde sınırlanır.
  • Agent'ın doğrulayamadığı şey 'tamamlandı' kabul edilmez.
  • Production'a giden yol ile prototip yolu birbirinden ayrılır.

Asıl beceri artık daha çok kod yazmak değil

AI çağında kod miktarı giderek daha kötü bir yetkinlik metriği oluyor. Beş dakikada bin satır kod üretebiliyorsak değer, o bin satırdan hangisinin hiç yazılmaması gerektiğini anlayabilmekte.

AI ile iyi ürün geliştirmek, modele sınırsız güç vermek değil; doğru sınırlar içinde yüksek kaldıraç vermektir.

Bu yüzden vibe coding'i bırakmayı değil, vibe architecture'a izin vermemeyi öneriyorum. Kod hızlı olabilir. Mimari rastgele olmamalı.

  • Vibe Coding
  • AI
  • Mimari
  • Teknik Borç
  • SaaS

SER-01 · SER-01.01

AI ile Ürün İnşa Etmek

Vibe coding'den agent orkestrasyonuna, Lovable prototipinden güvenli AI workflow'una: hız kazanırken ürün ve mimari kontrolünü kaybetmemek üzerine bir dizi.

PROJELERE AÇIK · ÜRÜN VE SİSTEM MİMARI · DEVRALMA / STABİLİZASYON / OPERASYON · WEB · ANDROID · WINDOWS · AHMET CANAL

İletişim

Ürününüz sisteminden hızlı mı büyüdü?

Mevcut durumu, en büyük tıkanmayı ve istediğiniz sonucu yazın. Kapsamı birlikte netleştirelim.

Durum

Yeni danışmanlık ve proje işlerine açık.