Bir Salı günü saat gece 02:00'ydi ve faturalandırma sisteminin kullanıcılardan iki kat ücret aldığını fark ettim. Hata altı saattir prodüksiyondaydı. Claude Code o öğleden sonra ödeme mutabakat mantığını oluşturmuştu; ben de incelemiş, test etmiş ve yayına almıştım. Kod mükemmel görünüyordu. Tüm testlerden geçmişti. Ve temelden bozuktu.
Bu, LemonData'yı inşa etmenin hikayesi: Bir AI kodlama asistanıyla 274 API rotası, 46 database modelleri ve 100.000'den fazla satır kod. Cilalanmış "AI sizi ne kadar üretken yapıyor" hikayesi değil. Başarısızlıkların, gece saat 03:00'teki debugging seanslarının ve AI destekli geliştirmenin gerçekten iyi bir fikir olup olmadığını sorguladığım anların olduğu gerçek hikaye.
AI Destekli Geliştirmenin Vaadi ve Gerçekliği
AI kodlama asistanlarının vaadi baştan çıkarıcıdır: ne istediğinizi tarif edersiniz, AI yazar, siz inceler ve yayına alırsınız. Teoride, tek bir geliştirici artık koca bir ekibin işini yapabilir.
Uygulamada mı? İlk iki hafta inanılmazdı. Claude Code kod tabanımı anlıyor, eksiksiz özellikler oluşturuyor, dosyalar arasında refactoring yapıyordu. Kariyerim boyunca hiç olmadığı kadar hızlı iş çıkarıyordum. Sorunları bu kadar çabuk kapatmanın verdiği dopamin etkisi sarhoş ediciydi.
Sonra çatlaklar görünmeye başladı.
Aynı fonksiyon, üç farklı dosyada biraz farklı uygulamalarla ortaya çıktı. Konfigürasyon değerleri rastgele yerlere hardcoded olarak yazılmıştı. Type definitions paketler arasında birbiriyle çelişiyordu. Kod tabanı hızla büyüyordu ama aynı zamanda "çalışıyor ama nedenini bilmiyorum" kodlarından oluşan bir labirente dönüşüyordu.
And o faturalandırma hatası? Claude, son derece makul görünen bir mutabakat fonksiyonu oluşturmuştu. Ancak asenkron ödeme onay akışımızdaki bir race condition durumunu hesaba katmamıştı. AI'ın bu edge case'i bilmesinin hiçbir yolu yoktu çünkü ona açıkça söylememiştim ve kısmen AI tarafından oluşturulan test suite de bunu kapsamamıştı.
Sürekli Bozulan Yedi Kalıp
Claude Code ile bir ay boyunca bir şeyler inşa ettikten sonra bir liste tutmaya başladım. Tam olarak hataların değil, kalıpların listesi. Aynı türden başarısızlıklar tekrarlanıp duruyordu ve bunlar Claude'un suçu değildi, en azından tamamen değil. Bunlar, "yarın çalışacak kod" yerine "şimdi çalışan kod" için optimize eden bir AI'ın öngörülebilir sonucuydu.
1. Tutarlılık Sorunu
Claude, üzerinde çalıştığı dosyaya, son gördüğü örneklere veya görünüşe göre tamamen rastgele varyasyonlara bağlı olarak aynı mantığı farklı şekilde uyguluyordu. Bir API endpoint'i { data: users } döndürürken, diğeri { users } döndürürken. İkisi de çalışıyordu. Hiçbiri diğeriyle eşleşmiyordu. Debugging bir arkeoloji çalışmasına dönüştü.
2. Kopyala-Yapıştır Sorunu
Kod kopyalamak daha hızlıyken ve mevcut işlevselliği bozma riski taşımazken, bir AI neden paylaşılan bir utility oluştursun ki? Mevcut bir özelliğe benzeyen yeni bir özellik istediğim her seferinde, refactor edilmiş paylaşılan bir çözüm yerine yepyeni bir uygulama alıyordum. Üç hafta sonra, kod tabanına dağılmış beş farklı "format currency" fonksiyonum vardı.
3. Type Drift Sorunu
Yeni bir status değeri bir dosyaya ekleniyor ama enum tanımına eklenmiyordu. Bir alan API yanıtında opsiyonelken, frontend tipinde zorunlu olabiliyordu. TypeScript bunlardan bazılarını yakaladı, ancak anlamsal uyumsuzlukları, yani tiplerin teknik olarak doğru ama mantıksal olarak tutarsız olduğu durumları yakalayamadı.
4. Konfigürasyon Dağılımı Sorunu
Database URL'leri, API anahtarları, feature flag'ler ve rate limits, o anki görev için neresi uygunsa oraya yazılıyordu. Bazen environment variables içinde, bazen bir konfigürasyon dosyasında, bazen de hardcoded olarak. Bir değerin tanımlandığı tüm yerleri bulmak bir define avına dönüştü.
5. Test Kapsamı İllüzyonu
AI tarafından oluşturulan testler, happy path'i derinlemesine test etme ve edge case'leri tamamen gözden kaçırma eğilimindedir. Faturalandırma hatası mükemmel bir örnekti: test suite normal ödeme akışlarını harika bir şekilde kapsıyordu. Ancak aynı milisaniye içinde iki ödeme onayı geldiğinde ne olacağını asla test etmemişti.
6. Sessiz Hata Sorunu
Claude, istisnaları yutan catch (error) { console.log(error) } blokları ekliyordu. Geliştirme aşamasında bu sorunsuz görünüyordu çünkü hatalar konsolda çıkıyordu. Prodüksiyonda ise kritik hatalar sessizce loglanıyor ve unutuluyordu.
7. Dokümantasyon Boşluğu
Claude mükemmel kod yorumları yazar. Ancak berbat mimari dokümantasyon yazar. Bir fonksiyonun ne yaptığını açıklayabilir, ancak sistemin neden bu şekilde yapılandırıldığını veya belirli bir tasarım kararına hangi kısıtlamaların yol açtığını açıklayamaz.
CLAUDE.md Çözümü
Dönüm noktası, üçüncü haftada proje kök dizininde Claude'un bilmesi gereken her kuralı, kısıtlamayı ve mimari kararı içeren CLAUDE.md dosyasını oluşturduğumda geldi.
İnsanlar için dokümantasyon değil. AI için dokümantasyon.
## API Response Format
Always use: { success: true, data: T } or { success: false, error: string }
Never return raw data without the wrapper.
## Currency
Internal storage: USD. Display: formatCurrency(amount, currency, rate).
Never hardcode exchange rates. Never store CNY directly.
## Error Handling
Never use catch(e) { console.log(e) }.
Always use the logger: logger.error('context', { error }).
Etkisi anındaydı. Claude kuralları tutarlı bir şekilde takip etmeye başladı. Bir kuralı ihlal eden kod oluşturduğunda, CLAUDE.md içindeki ilgili satırı işaret edebiliyordum ve o da kendini düzeltiyordu.
Ama tek başına CLAUDE.md yeterli değildi. Otomatik denetime ihtiyacım vardı.
Güvenlik Ağını İnşa Etmek: AI Tarafından Oluşturulan Kodlar İçin CI Kapıları
Geleneksel bir kod tabanında paronoyakça görünecek kapılara sahip bir CI pipeline'ı oluşturduk, çünkü bu kapılar AI tarafından oluşturulan hataları kullanıcılar fark etmeden yakalamak için var:
- Tüm monorepo genelinde Type checking
- Kopya uygulama olmadığını doğrulayan SSOT denetimleri
- Database enum'ları ile TypeScript enum'ları arasında senkronizasyon kontrolleri
- API yanıt formatı doğrulaması
- Faturalandırma, izinler ve kimlik doğrulama kodları için güvenlik kapıları
Temel içgörü basit: Claude bir güçlendiricidir, bir ikame değil. Üretkenliğinizi artırır ama hatalarınızı da büyütür. Güçlü kurallarınız yoksa, Claude kendi kurallarını icat eder ve bunlar tutarlı olmaz. Otomatik kontrolleriniz yoksa, Claude'un hataları prodüksiyona insan hatalarından çok daha hızlı ulaşır.
Faturalandırma hatası artık gerçekleşemezdi. Claude daha akıllı hale geldiği için değil, pipeline artık asenkron race condition durumlarının açıkça ele alınmasını gerektirdiği ve ödeme akışlarında uygun locking mekanizmasını kontrol eden bir kapı tarafından doğrulandığı için.
"AI Native Geliştirme" Gerçekte Ne Anlama Geliyor
LemonData'nın "AI Native Altyapı" olduğunu söylediğimde, mevcut bir ürüne AI özellikleri eklediğimizi kastetmiyorum. Tüm geliştirme sürecinin bir AI kodlama ortağıyla çalışmanın gerçekliğine göre şekillendiğini kastediyorum.
Dokümantasyonumuz normalden daha detaylı çünkü Claude, bir insan ekip arkadaşının çıkarım yapabileceği konularda açık bağlama ihtiyaç duyuyor. Tip sistemimiz gereğinden daha katı çünkü Claude her türlü belirsizliği kullanacaktır. CI pipeline'ımız, geleneksel bir kod tabanında paronoyakça görünecek kapılara sahip çünkü bunlar AI tarafından oluşturulan hataları kullanıcılar görmeden yakalamak için var.
Sonuç, üzerinde çalıştığım çoğu kod tabanından daha sürdürülebilir bir yapı oldu. AI'ın insanlardan daha iyi kod yazması nedeniyle değil, AI destekli geliştirme için inşa etmenin beni normalde sadece kıdemli geliştiricilerin kafasında yaşayan tüm kuralları ve kontrolleri açık hale getirmeye zorlaması nedeniyle.
AI Native'in bir felsefe olarak ne anlama geldiği hakkında daha fazla bilgi için What Is AI Native? yazısına göz atın.
Bunun pratik "nasıl uygulamaya başlarım?" tarafını istiyorsanız, en iyi iki devam okuması agent-first API tasarım kılavuzu ve migrasyon kılavuzudur. Biri API yapısını açıklar. Diğeri, iş akışı model switching için tasarlandığında bir ekibin ne kadar hızlı yön değiştirebileceğini gösterir.
AI Kodlama Asistanlarıyla Geliştirme Yapanlar İçin Dersler
Claude Code, Cursor veya herhangi bir AI kodlama asistanıyla bir projeye başlıyorsanız:
CLAUDE.mddosyanızı benim yaptığım gibi üçüncü haftada değil, birinci günde oluşturun.- Kural uygulamasını otomatikleştirin. AI'ın kuralları hatırlamasına güvenmeyin.
- AI kodunu sanki bir junior geliştirici yazmış gibi inceleyin. Hızlı ve yeteneklidir ama bağlamdan yoksundur.
- Edge case'leri manuel olarak test edin. AI tarafından oluşturulan testler happy path'leri kapsar, race condition durumlarını değil.
- Konfigürasyonu en baştan merkezileştirin. Dağılım sorunu hızla katlanarak büyür.
- Strict TypeScript kullanın. Tip kaymasına karşı en iyi savunmanız budur.
- CI kapılarını erkenden kurun. İlk hafta içinde kendilerini amorti ederler.
Tekrar Yapar mıydım?
Kesinlikle. Ancak birinci günde CLAUDE.md ile başlardım. Ve 10 kat üretkenlik çarpanının, hataların sonuçları üzerinde de 10 kat çarpan etkisi yarattığını unutmazdım.
İnşa ettiğimiz platform; 300'den fazla AI modeli, birleşik bir API, çok para birimli faturalandırma ve 13 dilde yerelleştirme, geleneksel bir ekibin aylarını alırdı. Biz 30 günde yayına aldık. Hatalar gerçekti ama hız da öyleydi.
AI destekli geliştirme sihir değildir. Yeni bir mühendislik disiplinidir. Ve tüm disiplinler gibi, kısıtlamalarına saygı duyanları ödüllendirir.
SSS
Bir geliştirici gerçekten Claude Code ile prodüksiyon seviyesinde bir platform inşa edebilir mi?
Evet, ama bazı uyarılarla. AI, kod oluşturma ve refactoring işlemlerini inanılmaz bir hızla halleder ancak yine de güçlü bir mimari muhakemeye, otomatik kalite kapılarına ve her şeyi dikkatle inceleme disiplinine ihtiyacınız vardır. 10 kat hız, dikkatli olmazsanız 10 kat daha hızlı hata anlamına gelir.
CLAUDE.md nedir?
CLAUDE.md, AI kodlama asistanlarının bağlam için okuduğu proje düzeyinde bir talimat dosyasıdır. AI'ın uyması gereken kodlama kurallarını, mimari kararları ve kısıtlamaları içerir. Bunu AI ekip arkadaşınız için bir onboarding dokümantasyonu olarak düşünebilirsiniz.
Prodüksiyonda AI kaynaklı hataları nasıl önlersiniz?
Otomatik CI kapıları esastır: Type checking, SSOT denetimleri, enum senkronizasyon doğrulaması ve alana özgü güvenlik kapıları. Temel içgörü, AI'ın hem üretkenliği hem de hataları artırmasıdır, bu nedenle artan hataları yakalamak için otomatik kontrollere ihtiyacınız vardır.
AI destekli geliştirme faturalandırma ve ödeme sistemleri için uygun mu?
Evet, ancak ekstra dikkatle. Ödeme kodu; açık race condition yönetimi, uygun locking ve kapsamlı edge case testi gerektirir. AI tarafından oluşturulan testler happy path'leri kapsama eğilimindedir, bu nedenle başarısızlık senaryolarını ve eşzamanlı işlemleri manuel olarak test etmelisiniz.
LemonData, tek bir API üzerinden 300'den fazla AI modeline erişmenizi sağlar. Ücretsiz başlayın ve platformu 1 dolarlık kredi ile test edin.

