8 yıl kisisel yazilimlarimi gelistirdim (backend odakli), son 6-7 ay yoğun Claude Code kullandim. Iste yasadigim deneyimlerim
1. Dil Seçimi: Popüler + Strict
LLM'ler training data'sı çok olan dillerde iyi. Ama aynı zamanda compiler'ı sert olan dili seç.
Neden? Hata runtime'da değil, compile time'da patlasın. Agent hata yaptı → compiler bağırdı → agent düzeltti. Dynamic dillerde hatalar gizleniyor, birikip patlıyor.
Swift 6, TypeScript (strict mode) — bunlar iyi çalışıyor.
2. Feedback Loop Her Şey
Her değişikliği anında test ediyorum. Compiler geçmeden ilerleyemiyorum.
"Çalışıyor gibi görünüyor" tuzak.
Gerçek ilerleme: Çalışıyor + compiler geçiyor + test geçiyor.
Swift 6'nın concurrency kontrolü burada çok işe yarıyor — hataları otomatik yakalıyor. Runtime'da gizlenen hata = production'da crash demek. O yüzden mümkün olduğunca compile time'a çekiyorum.
Önemli: Olay sadece type kontrolü değil, uygulamanın çalışması. Misal, TypeScript'te çok fazla type hatası gelince süreç yavaşlıyor. Önce çalıştır, sonra type'ları düzelt.
3. Discriminated Union > Optional
Optional koyunca "null olabilir" diyorsun, ama sistem patlamıyor. Sonra yeni feature ekliyorsun, optional olduğu için eski yerler güncellenmeden devam ediyor. Unutuluyor.
Discriminated union + switch kullanınca yeni case eklediğinde compiler her yerde patlatıyor. "Coupling kötü" derler ama compiler-level coupling iyi gorebildigin iliski iyidir.
4. Shared Helper Tuzağı
Ortak helper değiştirince 5 feature patlıyor. Maintenance kabusuna dönüyor.
Benim yaklaşım: feature-isolated. Her feature kendi helper'larını taşısın. Tekrar var mı? Evet. Ama bir yeri değiştirince sadece o yer etkileniyor.
Sembol amaca odaklı olsun. Her sembolün net bir amacı olsun — aracı şeyler, buffer'lar değil. Bazen gerekiyor, ama force etmiyorum.
5. Workflow: Ses + Referans + Protocol-Firstå
Feature'ı sesli anlatıyorum (kendi yaptığım dictation aracı — AI + SPM Swift ile, Xcode kullanmadan, Swift bilmeden)
"Alfred gibi olsun, Raycast'ın şu kısmı gibi" diyorum
Önce protocol/interface yazıyorum, implementation sonra
AI'a bütün context'i tek seferde veriyorum
AI'a diagram çizdiriyorum — koddan görsel çıkarıyor, ben oradan anlıyorum "tamam anladı beni"
Kendi context'imi saklıyorum. Neden? Sonra "bak ben şunu söylemiştim, nasıl yapmamız lazımdı?" diye sorabilmek için. Düşünce sürecimi aktarıyorum ki sonra geri dönebilmek kolay olsun.
Kendi yaptığım tracking aracı — burst döngülerimi takip ediyorum 6. UI: Tasarlamıyorum, Tarif Ediyorum
Figma yok. "Şunun gibi, bunun gibi, birleştir" diyorum. Güzel çıkarsa devam, çıkmazsa yeni deneme.
Fixing'e saatler harcamak tuzak. Eskiden çok denerdim, çok vakit kaybettim.
UI'ı birine (ya da AI'a) bağlamak bana rahatsız edici geliyor. Elimle çizeyim tarzı değilim — daha çok sesli tarif ediyorum, referans gösteriyorum.
Bu şekilde konuşarak tarif ediyorum, AI brief çıkarıyor, ben bakıyorum "anladı mı?". Anladıysa devam.
Sesli konuşmamı AI'a verince çıkardığı brief — anladı mı anlamadı mı hemen görüyorum Kendi yaptığım clipboard aracı — bu postu da konuşarak + resimleri birleştirerek yazdırdım Mesela sesli anlattığımda AI bana şöyle bir brief çıkarıyor:
Sonra AI dosya yapısını çıkarıyor — ben buna placement diyorum:
Tek atışta yazıyor. Placement onaylandıktan sonra AI 3-4 dosyayı paralel yazıyor. Her biri ~900 satır. Tek seferde. Context window hızla doluyor ama iş bitiyor.
Yukarıdaki brief'den çıkan gerçek UI — sesli tarif → brief → çalışan ürün 7. Hooks/Slash Commands: Tarzına Bağlı
Ben sürekli mimari değiştiriyorum, deneme yanılma yapıyorum. Hooks benim için maintenance yükü.
Ama mimarin sabit, "çalışıyorsa dokunma" kafasındaysan → hooks mükemmel.
Olay teknolojinin gücü değil, senin tarzınla eşleşmesi.
Ben burst çalışıyorum — bir anda hype'lanıyorum, ilk 2-3 saat inanılmaz yüksek verimli flow döngüsü. O yüzden o anlarda ses kaydı açıp bütün feature'ı anlatıyorum, resme noktalar koyuyorum, detayları topluyorum. Hepsini tek seferde AI'a veriyorum.
8. İçgüdü ve Taste
8 yıldır yazılım geliştiriyorum. Architecture'da judgment, taste, içgüdü — bunlar valid.
Görünce hissediyorum artık: "ha burada bir şey uyumsuz." İçgüdüme belli kısmı salıyorum. Keskin kurallar olmaması lazım.
AI çıktısına bakınca da aynı şey — kötü çıktı, kötü kullanıldı anlamına gelmiyor. Ama içgüdü sana "dur bir dakika" diyorsa, dur.
Burst çalışan için farklı, methodical için farklı. Kendi rhythm'ini tanı, tool'u ona göre kullan.
Bu post benim deneyimim. Senin için farklı çalışabilir. Ama umarım bir şeyler işe yarar.
6-7 ay, günde ortalama 8-10 saat Claude Code. Dictation, hooks, slash commands, hepsini denedim. Bu çıktı.