İyi Bir Teknik RFC'nin Anatomisi: Bölüm Bölüm İnceleme
Yüzlerce doküman inceleyerek oluşturulan, onaylanan ve başarılı implementasyonlara yol açan teknik RFC'ler hazırlama rehberi
Kritik bir sistem için RFC yazarken boş bir dokümana bakıp, acaba ilk paragraftan sonrasını okuyacak biri olacak mı diye düşündüğünüz o anı bilir misiniz? Bu his tanıdık geliyorsa, yalnız değilsiniz. Çoğu mühendis RFC yazarken aynı belirsizlikle mücadele ediyor. Farklı şirketlerde yüzlerce RFC inceleyerek, bu dokümanları gerçekten faydalı yapan ve sadece bürokratik egzersiz olmaktan çıkaran kalıpları fark ettim.
Size şaşırtabilecek bir şey paylaşayım: Gördüğüm en iyi RFC'ler en kıdemli mimarlar tarafından yazılmamıştı. Bunları, RFC'nin temelde bir satış dokümanı olduğunu anlayan mühendisler yazmıştı—rekabet eden önceliklere sahip paydaşlara bir çözüm sunuyorsunuz; yapı bu yüzden içerik kadar kritiktir - rekabet eden önceliklere sahip farklı kitlelere bir çözüm satıyorsunuz. Ve iyi bir satış konuşmasında olduğu gibi, yapı içerik kadar önemli.
Bakış Açımı Değiştiren RFC
Birkaç yıl önce, junior bir mühendisin bildirim sistemi RFC'sinin rekor sürede onaylandığını, kıdemli bir mimarın teknik olarak daha sofistike önerisinin ise aylarca inceleme cehenneminde kaldığını gördüm. Fark neydi? Junior mühendis kitlesini anlamıştı. RFC'sini, paydaşların gerçekten sordukları soruları sırasıyla cevaplayacak şekilde yapılandırmıştı.
Gerçek bir bildirim sistemi RFC'sini bölüm bölüm inceleyelim, her parçanın neden işe yaradığını ve değerlendiricilerin gerçekte neye baktığını görelim. Bu teorik değil - bu RFC günlük milyonlarca bildirimi işleyen bir production sistemine yol açtı ve implementasyon yolculuğu hangi bölümlerin en değerli olduğunu ortaya çıkardı.
Yönetici Özeti: 30 Saniyelik Sunum
Yönetici özeti asansör konuşmanız. Meşgul bir VP'yi veya kıdemli mühendisi bu dokümanın zamanlarına değer olduğuna ikna etmek için yaklaşık 30 saniyeniz var. İşte işe yarayan:
Gerçekten İşe Yarayan
Bu özet işe yarıyor çünkü:
- Ne olduğunu açıkça belirtiyor (bildirim sistemi)
- Spesifik yetenekleri listeliyor (gerçek zamanlı, push, e-posta, uygulama içi)
- İş değerine bağlanıyor (kullanıcı etkileşimi, kritik uyarılar)
- Teknik jargondan kaçınıyor
Gördüğüm Yaygın Hatalar
Zayıf versiyon:
Zayıf versiyon yöneticileri "mikroservis tabanlı" kısmında kaybediyor ve kimsenin neden umursaması gerektiğini hiç açıklamıyor. Eğer sisteminizi bir ürün yöneticisine bir paragrafta açıklayamıyorsanız, muhtemelen kendiniz de yeterince iyi anlamıyorsunuz.
İçeriden İpuçları
Değerlendiricilerin gerçekte aradığı:
- Kapsam netliği: Bu komple bir yeniden yazım mı yoksa geliştirme mi?
- İş uyumu: Gerçek bir problemi mi çözüyor yoksa CV güdümlü geliştirme mi?
- Risk değerlendirmesi: Karmaşıklık konusunda dürüst müsünüz?
Bildirim RFC'si bunu önce kullanıcı etkisine, sonra teknolojiye odaklanarak başardı. Uyguladığımızda, bu netlik kaçınılmaz kapsam kayması tartışmaları sırasında odağı korumaya yardımcı oldu. Yönetici özeti ne kadar net olursa, sonraki bölümlerdeki teknik detaylar o kadar kolay savunulabilir. Teknik jargondan kaçınmak değerlendiricilerin hızla "neden önemli"yi anlamasını sağlar. Problem etkisini sayılarla bağlamak—"ayda X destek bileti" veya "Y% daha düşük retention"—karar vericileri ikna eder.
Problem Tanımı: Acıyı Ölçmek
Problem tanımı aciliyet oluşturduğunuz yer. Burada sayılar önemli - belirsiz problemler belirsiz zaman çizelgeleri alır.
Etkili Problem Çerçeveleme
Bildirim RFC'si acı noktalarını harika bir şekilde ölçtü:
Her acı noktasının ölçülebilir iş etkisiyle nasıl eşleştiğine dikkat edin. Uygulama sırasında bu metrikleri takip ettik ve üç ay içinde destek biletlerinin %23 düştüğünü gördük.
Zayıf Problem Tanımları
İşe yaramayan:
Bu bana aksiyona geçirilebilir hiçbir şey söylemiyor. Ne kadar eski? Hangi spesifik bakım sorunları? Hangi özellikler engelleniyor? Spesifikler olmadan, bu her eski sistem gibi okunuyor.
Önemli Olan Veri
Güçlü RFC'ler şunları içerir:
- Mevcut metrikler: "Geçen ay kaçırılan bildirimlerle ilgili 847 destek bileti"
- Maliyet etkileri: "Mühendisler sprint zamanının %15'ini manuel bildirim görevlerine harcıyor"
- Fırsat maliyeti: "Bildirim sınırlamaları nedeniyle üç özellik lansmanı ertelendi"
Uygulamadan altı ay sonra metrikleri incelediğimizde, başta ölçtüğümüz problemler başarı metriklerimiz oldu. RFC aslında kendi başarı kriterlerini yazdı.
Önerilen Çözüm: Vizyon ve Spesifiklik Dengesi
Çoğu RFC'nin raydan çıktığı yer burası. Mühendisler ya uygulama detaylarında kayboluyorlar ya da o kadar üst düzeyde kalıyorlar ki kimse neyin inşa edildiğini bilmiyor.
Goldilocks Bölgesi
Bildirim RFC'si mükemmel dengeyi buldu:
Bu işe yarıyor çünkü:
- Büyük resim mimarisini görsel olarak gösteriyor
- Anlaşılabilir bileşenlere ayrılıyor
- Her bileşenin ne yaptığını açıklıyor, nasıl yaptığını değil
Aşırı Mühendislik Kırmızı Bayrakları
Dikkat edilmesi gerekenler:
- Problem arayan çözümler ("GraphQL subscription'ları kullanacağız çünkü modern")
- Teknoloji bingosu ("Kubernetes, Istio, Envoy, Linkerd...")
- Erken optimizasyon ("İlk günden veritabanını shard'layacağız")
Uygulamamız sırasında aslında RFC'nin önerdiğinden daha basit başladık. Modüler tasarım karmaşıklığı kademeli olarak eklememize izin verdi - hız sınırlama ilk gün değil, üçüncü ayda geldi.
Teknik Uygulama: Lastiğin Yolla Buluştuğu Yer
Bu bölüm hayalperestleri inşaatçılardan ayırır. İyi teknik özellikler tahmin edilebilecek kadar somut ama uyarlanabilecek kadar esnektir.
Production'da Hayatta Kalan Veritabanı Şeması
RFC'nin veritabanı şeması çoğunlukla gerçeklikle temastan sağ çıktı:
Bunu etkili yapan:
- Yerleşik denetim izi: sent_at, delivered_at, read_at zaman damgaları
- JSONB ile esneklik: Veri alanı öngörülemeyen gereksinimleri karşıladı
- Durum takibi: Production sorunlarını debug etmek için gerekli
Production'da Değişen
Gerçeklik bizi şunlarla vurdu:
- Kaçırdığımız index gereksinimleri (user_id + status + created_at üzerinde bileşik index)
- Zaman serisi verileri için bölümleme stratejisi (aylık bölümler)
- Arşiv stratejisi (eski bildirimleri soğuk depolamaya taşıma)
Production debugging yazısı bu gereksinimleri zor yoldan nasıl keşfettiğimizi detaylandırıyor.
Ölçeklenen API Tasarımı
İyi RFC'ler temsili API endpoint'lerini gösterir:
Ama harika RFC'ler şunları da düşünür:
- Liste endpoint'leri için sayfalama stratejileri
- Verimlilik için toplu işlemler
- Gelecekteki değişiklikler için versiyonlama stratejisi
- API seviyesinde hız sınırlama
Offset sayfalama ölçekte performans sorunları yarattıktan sonra cursor tabanlı sayfalama uyguladık - RFC'nin öngörebileceği bir şey.
Uygulama Aşamaları: Gerçekçi Zaman Çizelgesi Yönetimi
İyimserliğin gerçeklikle buluştuğu yer burası. Her RFC zaman çizelgelerini hafife alır, ama iyileri daha az felaket şekilde hafife alır.
Mantıklı Olan Aşamalar
Bu aşamalandırma neden işe yaradı:
- Aşama 1'de değer teslimi: Kullanıcılar 4 hafta içinde bildirimleri gördü
- Risk öne alma: Zor problemler (gerçek zamanlı teslimat) önce geldi
- Öğrenme dahil etme: Aşama 2 planları aşama 1 derslerine göre ayarlandı
Zaman Çizelgesi Gerçeklik Kontrolü
Gerçekte ne oldu:
- Aşama 1: Kimlik doğrulama entegrasyon karmaşıklığı nedeniyle 6 hafta (4 değil)
- Aşama 2: Hız sınırlamada edge case'ler keşfettikten sonra 10 hafta (4 değil)
- Aşama 3: Gerçek kullanım kalıplarına göre kısmen kapsam dışı bırakıldı
Uygulama serisi paydaş güvenini korurken zaman çizelgesini nasıl uyarladığımızı belgeler.
Zaman Çizelgelerinde Kırmızı Bayraklar
Dikkat edilecekler:
- Keşifler için tampon yok ("Hafta 1: Her şeyi uygula")
- Ayrılan test zamanı yok
- Diğer takımlara bağımlılık hesaba katılmamış
- Harici servislerle "basit entegrasyon" (asla basit değildir)
Teknik Değerlendirmeler: Gerçeklik Kontrol Bölümü
Bu bölüm yazarların gerçekten benzer sistemler inşa edip etmediğini yoksa sadece blog yazılarını iyi okuyup okumadıklarını ortaya çıkarır.
Önemli Olan Ölçeklenebilirlik
RFC ölçek hakkında spesifik oldu:
Bunlar keyfi sayılar değil. Şunlardan türetilmiş:
- Mevcut kullanıcı tabanı (10.000 bildirim/saniye = peak yük × 3)
- Kullanıcı deneyimi araştırması (100ms anlık hissettiriyor)
- Altyapı kısıtlamaları (veritabanı bağlantı limitleri)
Gerçekte Ölçtüğümüz
Production'da altı ay:
- P99 uygulama içi teslimat: 87ms
- P99 e-posta teslimatı: 3.2s
- Peak verim: 7.800/saniye (yeterli)
- Veritabanı sorgu P99: 124ms (optimizasyon gerekti)
Analitik ve optimizasyon yazısı bu hedeflere nasıl ulaştığımızı detaylandırıyor.
Sizi Kurtaran Güvenlik Değerlendirmeleri
İyi RFC'ler şunlara değinir:
- Kimlik doğrulama: "15 dakikalık süreli JWT token'ları"
- Yetkilendirme: "Granüler izinlerle rol tabanlı erişim"
- Hız sınırlama: "Üstel geri çekilmeli kullanıcı başına limitler"
- Veri gizliliği: "PII şifrelemesi, GDPR uyumluluğu"
Üç ay sonra bir müşteri bildirim sistemimizi spam için kullanmaya çalıştığında gerçek bir güvenlik olayı yaşadık. RFC'deki hız sınırlama stratejisi bizi istemeden spam platformu olmaktan kurtardı.
Test Stratejisi: "Test Yazacağız"ın Ötesinde
Test bölümleri takımların gerçekten TDD uygulayıp uygulamadığını yoksa sadece konuşup konuşmadığını ortaya çıkarır.
Gerçekten Olan Testler
Bunu değerli yapan:
- Spesifik senaryolar: Sadece "yük testi" değil, spesifik olarak ne
- Performans kriterleri: Net geçti/kaldı koşulları
- Araç seçimi: Önerildiği gibi yük testi için K6 kullandık
Keşfettiğimiz Test Boşlukları
RFC'nin kaçırdığı:
- Kaos testi (2. ayda Redis arızası yaşadık)
- Çapraz tarayıcı WebSocket uyumluluğu
- Kalıcı bağlantılardan mobil uygulama pil etkisi
- Şablonlarda uluslararası karakter seti işleme
İyi RFC'ler her test senaryosunu tahmin edemeyeceğinizi kabul eder ama neyi kaçırdığınızı keşfetmek için bir çerçeve sağlar.
İzleme ve Analitik: Gerçekten Bakacağınız
Çoğu izleme bölümü olası her metriği listeler. İyileri sistem sağlığını gerçekten gösteren 3-5 metriği tanımlar.
Önemli Olan Metrikler
Altı ay sonra, günlük olarak tam olarak bu dört metriğe baktık. Bir şey bozulana kadar diğer her şey gürültüydü.
Alarm Yorgunluğu Gerçek
RFC şunlarda alarm önerdi:
- Yüksek hata oranları (> %5)
- Teslimat gecikmeleri (> 10s)
- Sistem kaynak kullanımı (> %80)
Şimdi gerçekte alarm verdiğimiz:
- Teslimat başarı oranı < %99 (%95 değil)
- E-posta teslimatı P99 > 30s (10s değil)
- Veritabanı bağlantı havuzu tükenmesi (CPU kullanımı değil)
Gerçek zamanlı teslimat yazısı normal varyansa karşı neyin gerçekten sorun gösterdiğini nasıl öğrendiğimizi açıklıyor.
Maliyet Analizi: Bütçe Gerçeği
Mühendisliğin işle buluştuğu yer burası. İyi maliyet bölümleri hem anlık hem de devam eden maliyetleri kabul eder.
Tahmin Edebildiğimiz Maliyetler
Bunlar yayınlanmış fiyatlandırmaya dayandığı için makul ölçüde doğruydu.
Kaçırdığımız Maliyetler
- CloudWatch logları: $300/ay (her şeyi logluyoruz)
- Bildirim arşivi için S3: $150/ay
- Ek veritabanı okuma replikası: $400/ay
- Bakım için mühendislik zamanı: Devam eden 0.5 FTE
Toplam aylık maliyet RFC'nin ima ettiği 1.800 oldu. Hala değerli, ama paydaşlar TCO hakkında dürüstlüğü takdir ediyor.
Gerçekleşen ROI
RFC'nin tahmini:
- Destek biletlerinde %20-30 azalma
- Kullanıcı tutmada %5-15 artış
Gerçek sonuçlar:
- Destek biletlerinde %23 azalma
- Kullanıcı tutmada %8 artış
- Beklenmeyen kazanç: %40 daha hızlı özellik benimseme
Riskler ve Azaltma: Dürüst Değerlendirme
Gördüğüm en iyi risk bölümleri yazarların ne bilmediğini kabul eder.
Gerçekleşen Riskler
Bu risk kesinlikle gerçekleşti. 2 milyon bildirimde sorgularımız zaman aşımına uğramaya başladı. Önerilen azaltma işe yaradı ama düzgün uygulamak üç hafta sürdü.
Öngörmediğimiz Riskler
- Load balancer'ımızdaki WebSocket bağlantı limitleri
- İç içe koşullularla şablon render performansı
- Zamanlanmış bildirimler için saat dilimi edge case'leri
- Mobil operatörlerin SMS sağlayıcımızı engellemesi
İyi RFC'ler bilinmeyen bilinmeyenleri kabul eder ve bunları ele almak için esneklik oluşturur.
Başarı Kriterleri: Ölçülebilir Sonuçlar
Bu bölüm paydaşlarla olan sözleşmeniz. Ölçülebilir ve gerçekçi yapın.
İşe Yarayan Kriterler
Bunlar:
- Ölçülebilir: "Hızlı" veya "güvenilir" değil, spesifik sayılar
- Ulaşılabilir: İstek üzerine değil, benzer sistemlere dayanarak
- İlgili: Doğrudan kullanıcı deneyimine bağlı
Hareket Eden Hedefler
Lansmandan sonra değişen:
- Başarı oranı hedefi %99.5'e taşındı (%99.9 çok pahalıydı)
- Uygulama içi teslimat 200ms'ye gevşetildi (kullanıcılar farkı anlayamadı)
- Verim gereksinimi 5.000/saniyeye düştü (gerçek peak yük)
Anahtar, kriterlerin neden değiştiğini belgelemek ve ayarlamalar için paydaş onayı almak.
Gerçekten Önemli Olan İncelemeler
Yüzlerce RFC inceledikten sonra, farklı paydaşların gerçekte neyi önemsediği:
VP'ler/Direktörlerin Aradığı
- İş değerini açıklayan yönetici özeti
- Net ROI ile maliyet analizi
- Kilometre taşı teslimatlı zaman çizelgesi
- Karmaşıklığı gizlemeyen risk bölümü
Kıdemli Mühendislerin Aradığı
- Derin anlayış gösteren teknik uygulama
- Gerçek metriklere dayalı ölçeklenebilirlik değerlendirmeleri
- Alternatif yaklaşımlar ve neden reddedildikleri
- Mevcut sistemlerle entegrasyon noktaları
Takım Liderlerinin Aradığı
- Değeri iteratif olarak teslim eden uygulama aşamaları
- Gerçekten uygulanabilir test stratejisi
- Takımlarının arkasında durabileceği başarı kriterleri
- Alarm yorgunluğu yaratmayacak izleme yaklaşımı
Güvenlik Takımlarının Aradığı
- Kimlik doğrulama/yetkilendirme yaklaşımı
- Veri gizliliği değerlendirmeleri
- Hız sınırlama ve kötüye kullanım önleme
- Denetim izi yetenekleri
Uygulamadan Dersler
Bildirim sistemini uyguladıktan altı ay sonra, RFC'nin daha fazla vurgulamasını isterdim:
Dokümantasyon Sistemin Bir Parçası
RFC birincil dokümantasyonumuz oldu. Baştan canlı dokümantasyon olarak daha açık yapılandırmalıydık.
Migrasyon Stratejisi Önemli
RFC yeni sisteme odaklandı ama eskisinden migrasyondan zar zor bahsetti. Migrasyon toplam çabamızın %40'ını aldı.
Operasyonel Runbook'lar Hayat Kurtarır
RFC operasyonel runbook'ları içermeli veya zorunlu kılmalıydı. İlk production olayımızdan sonra yazdık.
Feature Flag'ler Dostunuz
RFC aşamalı dağıtımdan bahsetti ama feature flag'leri vurgulamadı. Sorunlar ortaya çıktığında bizi birçok kez kurtardılar.
Canlı Doküman Olarak RFC
Gördüğüm en iyi RFC'ler onaydan sonra terk edilmez. Şunlara evrilirler:
- Mimari dokümantasyonu
- Yeni takım üyeleri için onboarding materyalleri
- Gelecek referans için karar logları
- İşler ters gittiğinde post-mortem bağlamı
Bildirim sistemi RFC'mizin onay sonrası 47 commit'i var, her önemli sapmayı ve öğrenmeyi belgeleyen.
RFC'leri Gerçekten Faydalı Yapan
Bu dokümanları okuyup yazdıktan sonra, faydalı RFC'leri bürokratik egzersizlerden ayıran:
Birden Fazla Kitle İçin Yazın
RFC'nizin en az dört kitlesi var: yöneticiler, mimarlar, uygulayıcılar ve operatörler. Her birinin ihtiyacını hızla bulabilmesi için yapılandırın.
Belirsizlik Hakkında Dürüst Olun
Gördüğüm en iyi RFC'ler "Henüz Bilmediklerimiz" veya "Yanlış Olabilecek Varsayımlar" başlıklı bölümler içerir.
Kaçış Yolları Ekleyin
İyi RFC'ler sadece sistemi nasıl inşa edeceğinizi değil, işler ters giderse nasıl geri çekileceğinizi açıklar. Bu paradoksal olarak onayı kolaylaştırır.
Başarıyı Ölçülebilir Yapın
Belirsiz başarı kriterleri sonsuz tartışmalara yol açar. Spesifik sayılar gerçekte neyi başarmaya çalıştığınız konusunda netlik zorlar.
Çalışmanızı Gösterin
Başka bir takımın tasarımınızı uygulayabileceği kadar detay ekleyin, ama kodu düzyazıyla yazacak kadar değil.
Mükemmel RFC Yok
Hiç mükemmel bir RFC görmedim, yazdıklarım dahil. İncelediğimiz bildirim sistemi RFC'sinin önemli boşlukları vardı - karmaşıklığı hafife aldı, operasyonel endişeleri kaçırdı ve zaman çizelgelerinde iyimserdi. Ama önemli olan yerde başarılı oldu: paydaşları hizaladı, uygulamaya rehberlik etti ve iterasyon için bir çerçeve oluşturdu.
En iyi RFC her şeyi mükemmel tahmin eden değil. İnşa etmeye başlamak için yeterli yapı sağlayan, uyarlanmak için yeterli esneklik sunan ve gerçeklik plandan kaçınılmaz olarak farklı olduğunda güveni korumak için yeterli dürüstlük gösteren.
Son Düşünceler: RFC Paradoksu
Birden fazla şirkette gözlemlediğim bir şey: En iyi RFC'leri yazan takımlar genellikle onlara en az ihtiyaç duyanlar. Güçlü iletişimleri, net düşünceleri ve iyi mühendislik pratikleri var. RFC sadece zaten iyi yaptıklarının resmileştirilmesi.
Tersine, RFC'lerle mücadele eden takımların genellikle daha derin sorunları var - belirsiz gereksinimler, rekabet eden vizyonlar veya herhangi bir çözümü karmaşık hale getiren teknik borç. RFC bu sorunları ele almak için zorlayıcı bir fonksiyon haline gelir.
Bildirim sistemi RFC'si mükemmel olduğu için değil, önemli konuşmaları erken zorladığı için başarılı oldu. Uygulama RFC'nin her şeyi tahmin ettiği için değil, ne inşa ettiğimiz ve neden inşa ettiğimiz konusunda paylaşılan bir anlayış yarattığı için sorunsuz gitti.
İyi bir RFC'nin gerçek değeri bu: Mükemmel çözümü belgelemek değil, herkesin yeterince iyi bir çözümde hizalanması ve zamanla daha iyi hale getirmek için bir çerçeve sağlaması.