<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>changeloop blog</title><description>Pratikte release notları ve bir build çıktısı olarak changelog.</description><link>https://changeloop.dev/</link><language>tr-TR</language><item><title>Hata düzeltmesi release notes: işe yarayan girdiler yazmak</title><link>https://changeloop.dev/blog/tr/bug-fix-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/bug-fix-release-notes/</guid><description>Hata düzeltmesi release notes, girdi belirtiyi ve sonraki adımı söylediğinde işe yarar. Önce/sonra örnekleri, güvenlik ve veri kaybı kuralları.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;İyi hata düzeltmesi release notes, kodun neyi yanlış yaptığını değil kullanıcının neyin ters gittiğini gördüğünü anlatır. Her girdi kimin etkilendiğini, ne zamandan beri olduğunu, düzeltmenin tam olup olmadığını ve okuyucunun bir şey yapması gerekip gerekmediğini söyler, bu sadece &amp;quot;hiçbir işlem gerekmiyor&amp;quot; olsa bile.&lt;/p&gt;
&lt;p&gt;Çoğu ekip commit mesajından bir satır kopyalar. Tablo altı yeniden yazımı gösteriyor, sonraki bölümler kuralları açıklıyor.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Önce (commit mesajı)&lt;/th&gt;
&lt;th&gt;Sonra (belirti)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Export handler&amp;#39;daki null pointer düzeltildi&lt;/td&gt;
&lt;td&gt;Projenin etiketi olmadığında export&amp;#39;lar artık &amp;quot;Bir şeyler ters gitti&amp;quot; ile başarısız olmuyor. 3 Eylül&amp;#39;den beri başarısız olan export&amp;#39;ları yeniden çalıştırın.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sync worker&amp;#39;daki race condition çözüldü&lt;/td&gt;
&lt;td&gt;İki cihazda birkaç saniye arayla yapılan düzenlemeler artık birbirinin üzerine yazmıyor. Yapılacak bir şey yok.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saat dilimi hatası düzeltildi&lt;/td&gt;
&lt;td&gt;Zamanlanmış raporlar artık ayarladığınız saatte çalışıyor. UTC&amp;#39;nin doğusundaki hesaplar 12 Ağustos&amp;#39;tan beri raporları bir güne kadar erken gördü. Değişiklik gerekmiyor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yorum renderer&amp;#39;ındaki XSS yamalandı&lt;/td&gt;
&lt;td&gt;Güvenlik düzeltmesi: özel hazırlanmış bir yorum başka bir kullanıcının tarayıcısında script çalıştırabiliyordu. Bugün 4.2.1&amp;#39;e yükseltin. Loglarımızda istismar görmedik.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.1.0&amp;#39;dan gelen regresyon düzeltildi&lt;/td&gt;
&lt;td&gt;Tire içeren sorgularda arama yeniden çalışıyor. 4.1.0&amp;#39;da bozuldu ve 4.1.1&amp;#39;de düzeldi.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hata düzeltmeleri ve performans iyileştirmeleri&lt;/td&gt;
&lt;td&gt;Hangilerini söyleyin. Son bölüme bakın.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Release notes&amp;#39;ta bir hata düzeltmesi girdisi nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Kullanıcının kendi kelimeleriyle belirtiyle başlayın, sonra kimin etkilendiğini ve ne zamandan beri olduğunu, sonra düzeltmenin durumunu, sonra eylemi yazın. Bir ya da iki cümle genellikle yeter. Kodun nedeni, bir mühendisin bakacağı yer olan pull request&amp;#39;e aittir.&lt;/p&gt;
&lt;p&gt;Okuyucu tek bir şey için tarar: &amp;quot;Bu ben miydim?&amp;quot; Dört parça hemen her girdiyi kapsar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Belirti.&lt;/strong&gt; Ekranda, API yanıtında ya da faturada ne göründü. Bir hata metni varsa alıntılayın, çünkü insanlar onu arar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kapsam.&lt;/strong&gt; Hangi plan, platform, API sürümü ya da veri biçimi. &amp;quot;50.000&amp;#39;den fazla satırı olan hesaplar&amp;quot; kontrol edilebilir. &amp;quot;Bazı kullanıcılar&amp;quot; edilemez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aralık.&lt;/strong&gt; Hangi sürümden ya da tarihten beri, böylece okuyucu dünkü tuhaf sonucun hata olup olmadığına karar verebilir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eylem.&lt;/strong&gt; Yeniden çalıştırmak, yeniden senkronize etmek, yükseltmek, bir geçici çözümü kaldırmak ya da hiçbir şey.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Kullanıcılar bir geçici çözüm kurduysa, eylem satırı onlara silebileceklerini söylediğiniz yerdir.&lt;/p&gt;
&lt;h2&gt;Release note ile changelog arasındaki fark nedir?&lt;/h2&gt;
&lt;p&gt;Changelog, değişikliklerin eksiksiz ve sürekli kaydıdır. Release notes ise önemseyip önemsemeyeceğine karar veren insanlar için tek bir sürüm hakkında seçilmiş, yeniden yazılmış mesajdır. Hata düzeltmelerinde changelog her düzeltmeyi listeler, notlar ise okuyucunun fark edebileceği olanlarla açılır.&lt;/p&gt;
&lt;p&gt;Bir tooltip yazım hatası sadece changelog&amp;#39;a aittir. Faturalardaki yanlış bir vergi oranı ikisine de aittir. Tam ayrım &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt; yazısında, iyi bir not setinin şekli ise &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;release notes nasıl yazılır&lt;/a&gt; yazısında.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;, kayıt tarafı için kullanışlı bir gelenektir. Her hata düzeltmesi için &amp;quot;Fixed&amp;quot;, güvenlik açıkları için ayrı bir &amp;quot;Security&amp;quot; başlığı tutar; bu, bu makalenin okuyucu için yaptığı ayrımın aynısıdır.&lt;/p&gt;
&lt;h2&gt;Hata düzeltmesi bir güncelleme midir?&lt;/h2&gt;
&lt;p&gt;Evet. Hata düzeltmesi ürünü değiştirir, o yüzden birini yayımlamak bir güncellemedir. &lt;a href=&quot;https://semver.org/&quot;&gt;Semantic versioning&lt;/a&gt; altında geriye uyumlu bir düzeltme bir patch release&amp;#39;tir, örneğin 4.2.0&amp;#39;dan 4.2.1&amp;#39;e.&lt;/p&gt;
&lt;p&gt;Okuyucunun bir şey yapması gerekip gerekmediği ayrı bir sorudur ve not onu cevaplamalıdır. Doğru çağıranın gözlemlediğini değiştiren bir düzeltme, breaking change&amp;#39;e yakındır ve &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking change&amp;#39;ler&lt;/a&gt; yazısı bu çizginin nerede durduğunu anlatır.&lt;/p&gt;
&lt;h2&gt;Bir düzeltme ne zaman kendi girdisini alır, ne zaman küçük düzeltmedir?&lt;/h2&gt;
&lt;p&gt;Bir kullanıcı hatayı fark edebildiyse, ona zaman ya da veri kaybettiyse ya da etrafında bir geçici çözüm kurduysa düzeltmeye kendi girdisini verin. Ekibinizin dışında kimsenin göremeyeceği olanları kısa bir &amp;quot;Küçük düzeltmeler&amp;quot; listesine toplayın. Diff&amp;#39;in boyutuna değil okuyucunun deneyimine göre karar verin.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kendi girdisini alır&lt;/th&gt;
&lt;th&gt;Küçük düzeltmeler listesine girer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Bir müşteri bildirdi ya da çoğu kişi yaşadı&lt;/td&gt;
&lt;td&gt;Nadiren açılan bir ekrandaki kozmetik aksaklık&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yanlış çıktıya, başarısız işlere veya kaybolan işe yol açtı&lt;/td&gt;
&lt;td&gt;Yazım hatası, boşluk, hizası kayık bir simge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Okuyucudan bir eylem gerektiriyor&lt;/td&gt;
&lt;td&gt;Dahili bir araçtaki ya da yönetici sayfasındaki düzeltme&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yakın bir release&amp;#39;ten gelen regresyon&lt;/td&gt;
&lt;td&gt;Sadece test ortamında görülen hata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Faturalamaya, izinlere veya veriye dokunuyor&lt;/td&gt;
&lt;td&gt;Log ifadesi, kullanıcı etkisi olmayan bağımlılık güncellemeleri&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Gruptaki her satır yine de bir şey söylemeli: &amp;quot;Bazı UI sorunları düzeltildi&amp;quot; bir yer tutucudur.&lt;/p&gt;
&lt;h2&gt;Bir regresyon hakkında nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Onu getiren release&amp;#39;i adlandırın, regresyon deyin ve düzelten release&amp;#39;i verin. Hatayı yaşayanlar zaten bozulduğunu biliyor, o yüzden kısa ve doğrudan bir kabul, belirsiz ifadeden onlara daha iyi hizmet eder.&lt;/p&gt;
&lt;p&gt;Örneğin: &amp;quot;Tire içeren sorguların arama sonuçları 4.1.0&amp;#39;da boş geliyordu. Bu 4.1.1&amp;#39;de düzeltildi. Tireleri önlemek için sorgularınızı değiştirdiyseniz, geri değiştirebilirsiniz.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Arama güvenilirliği iyileştirildi&amp;quot;, hata yüzünden bir öğleden sonrasını kaybeden herkese kaçamak gibi okunur. Neden hâlâ doğrulanıyorsa bunu söyleyin; &lt;a href=&quot;https://changeloop.dev/blog/tr/emergency-release-notes/&quot;&gt;acil durum release notes&lt;/a&gt; rehberinin dediği gibi: notun asla ekipten daha emin ses vermesine izin vermeyin.&lt;/p&gt;
&lt;h2&gt;Güvenlik düzeltmesi nasıl duyurulur?&lt;/h2&gt;
&lt;p&gt;Ciddiyeti açıkça belirtin, etkilenen sürümleri ve onları düzelten sürümü adlandırın, yükseltmenin ne kadar acil olduğunu söyleyin ve varsa CVE tanımlayıcısını ekleyin. Ayrıntıları ancak kullanıcılar bir düzeltmeye göre harekete geçebildiğinde yayımlayın; bir bildirimde bulunan kişi varsa koordine ifşa sürecini izleyin.&lt;/p&gt;
&lt;p&gt;Sıra önemlidir: bildiren kişi size özel olarak söyler, düzeltmeyi yayımlarsınız ve herkese açık not kullanıcılar kendilerini koruyabildiğinde çıkar. &lt;a href=&quot;https://www.cisa.gov/coordinated-vulnerability-disclosure-process&quot;&gt;CISA&amp;#39;nın koordine güvenlik açığı ifşa süreci&lt;/a&gt; güvenlik açıklarının bildirilmesini, analizini ve kamuya açıklanmasını koordine eder. &lt;a href=&quot;https://www.cve.org/ResourcesSupport/AllResources/CNARules&quot;&gt;CVE Numbering Authority kuralları&lt;/a&gt; CVE kayıtlarının nasıl atanıp yayımlanacağını belirler ve GitHub&amp;#39;da bir &lt;a href=&quot;https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/about-repository-security-advisories&quot;&gt;repository security advisory&lt;/a&gt;, duyuruyu özel olarak taslak hâlinde hazırlamanıza ve bir tanımlayıcı istemenize olanak verir.&lt;/p&gt;
&lt;p&gt;Bir güvenlik girdisi genellikle dört olgu taşır:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bir saldırganın ne yapabileceği, tek cümlede ve bir kavram kanıtı olmadan.&lt;/li&gt;
&lt;li&gt;Etkilenen sürümler ve onu düzelten sürüm.&lt;/li&gt;
&lt;li&gt;Ne kadar acil olduğu: &amp;quot;bugün yükseltin&amp;quot; ya da &amp;quot;bir sonraki release&amp;#39;inizde yükseltin&amp;quot;.&lt;/li&gt;
&lt;li&gt;İstismar görüp görmediğiniz ve bildiren kişi kabul ettiyse ona teşekkür.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;İstismar adımlarını dışarıda bırakın.&lt;/p&gt;
&lt;h2&gt;Bir not, veri kaybı düzeltmesi hakkında ne söylemeli?&lt;/h2&gt;
&lt;p&gt;Hangi verinin etkilendiğini, sizinkinin etkilenip etkilenmediğinin nasıl anlaşılacağını ve kurtarılıp kurtarılamayacağını söyleyin. &amp;quot;Hiçbir işlem gerekmiyor&amp;quot; burada nadiren doğrudur ve okuyucunun ilk sorusu &amp;quot;verim gitti mi&amp;quot; olur.&lt;/p&gt;
&lt;p&gt;Kullanışlı bir girdi, veri kaybettiren koşulu (&amp;quot;bir senkronizasyon çalışırken bir klasörü silmek&amp;quot;), bunun mümkün olduğu aralığı, bir kontrol yolunu (&amp;quot;Çöp Kutusu&amp;#39;nu açın ve 3 ile 9 Eylül tarihli öğelere bakın&amp;quot;) ve kurtarma yolunu verir. Veri kurtarılamıyorsa bunu söyleyin. Etkilenen müşterilerle ayrıca doğrudan iletişime geçin, çünkü release note, birinin verisinin etkilendiğini öğrendiği tek yer olmamalı.&lt;/p&gt;
&lt;h2&gt;&amp;quot;Hata düzeltmeleri ve performans iyileştirmeleri&amp;quot; neden kötü bir nottur?&lt;/h2&gt;
&lt;p&gt;Okuyucuya üzerine harekete geçecek hiçbir şey vermez ve birinin beklediği düzeltmeleri gizler. Bir çökmeyi bildiren müşteri bunun düzelip düzelmediğini anlayamaz, geçici çözümü olan müşteri de onu kaldırıp kaldırmayacağını.&lt;/p&gt;
&lt;p&gt;İki dürüst alternatif var. Bir release&amp;#39;te okuyucunun fark edebileceği hiçbir şey yoksa, onun için not yayımlamayın ve kaydı changelog&amp;#39;a bırakın. Düzeltmeler varsa, okuyucunun diliyle listeleyin:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Önce:
  Hata düzeltmeleri ve performans iyileştirmeleri.

Sonra:
  Düzeltildi: etiketsiz projelerde CSV export başarısız oluyordu.
  Düzeltildi: karanlık mod yorum kutusunda imleci gizliyordu.
  Daha hızlı: pano, 100&amp;#39;den fazla projesi olan çalışma
  alanlarında daha çabuk açılıyor.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Hata düzeltmesi notları nereden gelir?&lt;/h2&gt;
&lt;p&gt;Hatayı düzelten pull request&amp;#39;ten ve onu tetikleyen rapordan gelirler. Bildiren kişinin sözleri düzeltmeyle birlikte yol alırsa, belirtinin yarısı yazılmış demektir.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-vs-bug-report/&quot;&gt;Özellik talebi mi hata mı&lt;/a&gt; yazısı, bir raporu doğru etiketlemenin sahibini neden belirlediğini anlatır. Changeloop&amp;#39;ta widget üzerinden bildirilen bir hata &lt;code&gt;bug&lt;/code&gt; etiketli bir GitHub issue&amp;#39;su olur ve changelog girdisi merge edilen pull request&amp;#39;ten taslak olarak hazırlanır, yayımlanmadan önce bir insanın onaylaması için bekletilir. &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;Release notes şablonu&lt;/a&gt; elle yazmak için aynı girdi şeklini verir: belirti, kapsam, aralık, eylem.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Hata düzeltmesi release notes neleri içermeli?&lt;/strong&gt;
Her girdi kullanıcının gördüğü belirtiyi, kimin etkilendiğini, hangi sürümden ya da tarihten beri olduğunu, düzeltmenin tam olup olmadığını ve okuyucunun ne yapması gerektiğini, &amp;quot;hiçbir şey&amp;quot; dahil, adlandırmalı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her hata düzeltmesi release notes&amp;#39;ta listelenmeli mi?&lt;/strong&gt;
Hayır. Bir kullanıcının fark edebildiği, zaman kaybettiği ya da etrafından dolaştığı olanları listeleyin ve kozmetik ya da dahili düzeltmeleri kısa bir &amp;quot;Küçük düzeltmeler&amp;quot; listesine toplayın. Changelog, bir tanesine bakması gereken herkes için her düzeltmeyi tutar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kendi getirdiğiniz bir hata için release notes nasıl yazılır?&lt;/strong&gt;
Bunun bir regresyon olduğunu söyleyin, onu getiren release&amp;#39;i ve düzelten release&amp;#39;i adlandırın ve okuyuculara bir geçici çözümü kaldırıp kaldıramayacaklarını bildirin. Düz bir ifade, yumuşatılmış bir ifadeden daha iyi okunur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kullandığınız bir ürünün release notes&amp;#39;unu nasıl kontrol edersiniz?&lt;/strong&gt;
Ürünün yardım menüsünden, alt bilgisinden ya da dokümantasyonundan bağlanan bir changelog ya da release notes sayfasına bakın; açık kaynak projelerde ise deponun releases sekmesine.&lt;/p&gt;
</content:encoded></item><item><title>Yazılım ürününde müşteriden geri bildirim nasıl istenir</title><link>https://changeloop.dev/blog/tr/how-to-ask-for-customer-feedback/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/how-to-ask-for-customer-feedback/</guid><description>Kullanıcı bir şey yaptıktan hemen sonra, çalıştığı yerde tek ve somut bir soru sorun. Her an için hazır cümleler ve kaçınılacak kötü sorular burada.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir yazılım ürününde müşteriden geri bildirim istemek için, kullanıcının az önce yaptığı somut bir şey hakkında, onu yaptığı yerde tek bir soru sorun. Bir export&amp;#39;tan hemen sonra gelen &amp;quot;O rapor export&amp;#39;u nasıl geçti?&amp;quot; cevap alır. Alt bilgideki &amp;quot;Ürünümüz hakkında ne düşündüğünüzü bize söyleyin&amp;quot; sessizlik alır. Sayfanın geri kalanı anlar, kanallar ve tam cümlelerdir.&lt;/p&gt;
&lt;p&gt;Bu konudaki öğütlerin çoğu mağazalar ve hizmet masaları için yazılmıştır. Bir yazılım ekibi kullanıcının bir saniye önce ne yaptığını tam olarak bilir, o yüzden soru ona dair olabilir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;An&lt;/th&gt;
&lt;th&gt;Nerede sorulur&lt;/th&gt;
&lt;th&gt;Hazır soru&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Bir görev bittikten hemen sonra&lt;/td&gt;
&lt;td&gt;Uygulamada, sonucun yanında&lt;/td&gt;
&lt;td&gt;&amp;quot;Bu export ihtiyacınızı karşıladı mı?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yeni bir özelliğin ilk kullanımından sonra&lt;/td&gt;
&lt;td&gt;Uygulamada, bir kez&lt;/td&gt;
&lt;td&gt;&amp;quot;Toplu Düzenle ile ne yapmaya çalışıyordunuz?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir destek ticket&amp;#39;ı çözüldükten sonra&lt;/td&gt;
&lt;td&gt;Destek yazışmasında&lt;/td&gt;
&lt;td&gt;&amp;quot;Bu çözdü mü, yoksa hâlâ ters giden bir şey var mı?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kullanıcı bir akışta durduktan veya terk ettikten sonra&lt;/td&gt;
&lt;td&gt;E-posta, bir gün sonra&lt;/td&gt;
&lt;td&gt;&amp;quot;Kurulumun 3. adımında durdunuz. Sizi ne engelledi?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 günlük düzenli kullanımdan sonra&lt;/td&gt;
&lt;td&gt;Adı olan bir kişiden e-posta&lt;/td&gt;
&lt;td&gt;&amp;quot;Değiştireceğiniz tek şey ne olurdu?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kullanıcı iptal ettiğinde&lt;/td&gt;
&lt;td&gt;İptal akışında&lt;/td&gt;
&lt;td&gt;&amp;quot;Bugün ayrılmaya sizi ne karar verdirdi?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İstedikleri bir şeyi yayımladıktan sonra&lt;/td&gt;
&lt;td&gt;İstedikleri yerde&lt;/td&gt;
&lt;td&gt;&amp;quot;CSV içe aktarma istemiştiniz. Yayında. Sizin durumunuzu karşılıyor mu?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Geri bildirim istemenin doğru zamanı ne zaman?&lt;/h2&gt;
&lt;p&gt;Doğru zaman, kullanıcı bir şeyi bitirdikten hemen sonradır, ayrıntı hâlâ aklındayken. Bir eylemi izleyen soru o eylem hakkında cevap alır. Durup dururken gelen soru, kişinin o anki ruh hali hakkında bir cevap alır, ya da hiç alamaz.&lt;/p&gt;
&lt;p&gt;Kayıt sırasında sormayın, çünkü kimse henüz bir şey kullanmadı. Bir görevin ortasında sormayın, çünkü öğrenmek istediğiniz şeyi kesintiye uğratıyorsunuz. Biri cevap verdikten sonra, bildirecek bir şeyiniz olana kadar onu rahat bırakın.&lt;/p&gt;
&lt;h2&gt;Müşteriden geri bildirim nereden istenmeli?&lt;/h2&gt;
&lt;p&gt;Deneyimin yaşandığı yerden isteyin. Uygulama içi bir istem bir ekran hakkındaki soruya uyar. Destek yazışması bir düzeltme hakkındaki soruya uyar. E-posta bir haftalık kullanım ya da terk edilen bir akış hakkındaki soruya uyar. Bir görüşme, önceden tahmin edemeyeceğiniz sorulara uyar.&lt;/p&gt;
&lt;p&gt;Her kanal farklı türde cevap getirir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uygulama içi:&lt;/strong&gt; kısa, anında ve somut, ama sadece orada olan insanlardan. Ayrılan kullanıcılardan hiçbir şey duymazsınız.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Destek yazışması:&lt;/strong&gt; yazmaya yetecek kadar bunalmış insanlardan. Bozuk şeyleri bulmak için iyi, ürünün geri kalanını yargılamak için zayıf.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E-posta:&lt;/strong&gt; daha az insandan daha uzun cevaplar ve sessizleşen kullanıcılara ulaşmanın tek yolu. Adı olan bir kişiden, içinde tek bir soru bulunan kısa bir not olarak yazın.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Görüşme:&lt;/strong&gt; insanların bir şeyi neden yaptığını öğrenmenin yolu. Onlardan nasıl çalıştıklarını göstermelerini isteyin ve onlar yaparken sessiz kalın.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/tr/feedback-signal-quality/&quot;&gt;Geri bildirim sinyal kalitesi&lt;/a&gt; her kanalın size söylediğini nasıl tartacağınızı anlatır.&lt;/p&gt;
&lt;h2&gt;Profesyonelce geri bildirim nasıl istenir?&lt;/h2&gt;
&lt;p&gt;Konuda somut olun, neden sorduğunuzu söyleyin ve cevabın bir dakikadan az sürmesini sağlayın. Profesyonel bir istem anı adlandırır, cevabı bir insanın okuyacağını belli eder ve kesinti için özür dilemez.&lt;/p&gt;
&lt;p&gt;Tam eylemi adlandırın (&amp;quot;az önce çalıştırdığınız export&amp;quot;), tek bir şey isteyin, zorunlu alan olmayan serbest metin kutusu kullanın ve bir ilk adla imzalayın.&lt;/p&gt;
&lt;h2&gt;Geri bildirim istemek için iyi bir cümle nasıl olur?&lt;/h2&gt;
&lt;p&gt;İyi bir cümle, belirli bir an hakkında, birkaç kelimeyle cevaplanabilen bir sorudur. Aşağıdaki iki sütunu karşılaştırın. Soldakiler omuz silkerek cevaplanabilir. Sağdakiler kişinin gerçek bir şeyi hatırlamasını ister.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Zayıf istem&lt;/th&gt;
&lt;th&gt;Daha güçlü istem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&amp;quot;Geri bildiriminiz var mı?&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Bunu kurarken en zor kısım neydi?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Ürünümüzü nasıl buluyorsunuz?&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Geçen hafta bunu ne için kullandınız?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Deneyiminizi 1&amp;#39;den 10&amp;#39;a puanlayın.&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Bugün yapmaya geldiğiniz işi bitirebildiniz mi?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Nasıl gelişebileceğimizi söyleyin.&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Bu hafta sizi yavaşlatan tek şey neydi?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Bizi tavsiye eder miydiniz?&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Bunu en son kime gösterdiniz ve ne dediniz?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Hemen her yerde işe yarayan bir başkası: &amp;quot;Bu sizin için işe yaramadığında yerine neyi kullanıyorsunuz?&amp;quot; Gerçek rakibi ortaya çıkarır, ki bu çoğu zaman bir e-tablodur.&lt;/p&gt;
&lt;h2&gt;Geri bildirim istemenin en kötü yolları nelerdir?&lt;/h2&gt;
&lt;p&gt;En kötü istemler geniş, erken, uzun ya da yönlendiricidir. Hepsinin ortak bir sorunu var: kişi, sizin yapmanız gereken düşünmeyi yapmadan cevap veremez.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Lütfen 20 soruluk anketimizi doldurun.&amp;quot;&lt;/strong&gt; Bitirenler en çok boş zamanı olanlar ya da en güçlü fikri olanlardır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Girişten sonraki ilk sayfada bir pop-up.&lt;/strong&gt; Kullanıcı bir şey yapmaya geldi ve siz engellediniz. Kapatmak tek makul cevaptır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soru olmadan &amp;quot;Geri bildiriminizi çok isteriz!&amp;quot;&lt;/strong&gt; Kullanıcıdan konuyu icat etmesini ister.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yönlendirici bir soru: &amp;quot;Yeni panoyu ne kadar çok seviyorsunuz?&amp;quot;&lt;/strong&gt; Onay alırsınız ve hiçbir şey öğrenmezsiniz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takibi olmayan bir puan.&lt;/strong&gt; 10 üzerinden 6, ruh halini söyler. Neyi değiştireceğinizi söylemez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sorup sonra susmak.&lt;/strong&gt; Bu bir sonraki turu kaybettirir, aşağıda anlatılıyor.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Bir ürün hakkındaki müşteri geri bildirimine ne denir?&lt;/h2&gt;
&lt;p&gt;Bir ürün hakkındaki geri bildirime genellikle ürün geri bildirimi denir ve iki türe ayrılır. Hata raporu bir şeyin amaçlandığı gibi çalışmadığını söyler. Özellik talebi bir şeyin eksik olduğunu söyler. Bu ayrım önce kimin bakacağına karar verir ve &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-vs-bug-report/&quot;&gt;özellik talebi mi hata mı&lt;/a&gt; yazısı bu çizgiyi çizer. Üçüncü tür olan övgü, saklamaya ve izinle alıntılamaya değer.&lt;/p&gt;
&lt;p&gt;İlk seçenek olarak &amp;quot;Hata&amp;quot; ve &amp;quot;Özellik talebi&amp;quot; sunan bir geri bildirim formu bu ilk ayrımı sizin yerinize yapar.&lt;/p&gt;
&lt;h2&gt;Cevaplarla ne yaparsınız?&lt;/h2&gt;
&lt;p&gt;Her cevabı, ekibin zaten çalıştığı yere, kişinin kendi kelimeleriyle koyun. Alıntılanmış tek bir satır, sizin özetinizden iyidir. Türüne ve kabaca aciliyetine göre etiketleyin, tekrarları birleştirin ve karar verin: yap, beklet ya da reddet.&lt;/p&gt;
&lt;p&gt;Reddetmek de bir cevaptır. &amp;quot;Bunu yapmayacağız ve nedeni şu&amp;quot; beklemeyi bitirir ve &lt;a href=&quot;https://changeloop.dev/blog/tr/declining-feature-requests/&quot;&gt;özellik taleplerini reddetmek&lt;/a&gt; bunun için ifadeler sunar. Altyapı için &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;özellik talebi takibi&lt;/a&gt;, beş kanaldan gelen talepleri tek bir listeye nasıl sokacağınızı anlatır. Talepleri yazılı alıyorsanız, bir &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-template/&quot;&gt;özellik talebi şablonu&lt;/a&gt; onları karşılaştırılabilir tutar.&lt;/p&gt;
&lt;p&gt;Changeloop&amp;#39;un widget&amp;#39;ı her gönderimi bir GitHub issue&amp;#39;su olarak açar, böylece geri bildirim onu düzeltecek kodun yanına düşer. Hangi araçla olursa olsun kural aynı: tek liste, tek sahip, hiçbir cevap birinin gelen kutusunda kalmaz.&lt;/p&gt;
&lt;h2&gt;Yayımlananları neden anlatmalı?&lt;/h2&gt;
&lt;p&gt;Kişiye cevap vermenin zamanına değdiğini gösterir. Size bir şey söyleyen ve sonra &amp;quot;bu yayımlandı, teşekkürler&amp;quot; cevabını alan bir kullanıcının tekrar cevap vermek için bir nedeni olur. Hiçbir şey duymayan ise kutunun okunmadığı sonucuna varır.&lt;/p&gt;
&lt;p&gt;Yani istemenin son adımı bir cevaptır. Her isteyen kişiye, talebi yayımlandığında, kendi diliyle, kullandığı kanaldan haber verin. &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Müşteri geri bildirim döngüsünü kapatmak&lt;/a&gt; mekanizmayı anlatır: mesajı yayımlanmış changelog girdisi tetikler, böylece isteyene ancak değişiklik canlıya çıktığında haber verilir. Changeloop&amp;#39;ta widget geri bildirimi bir GitHub issue&amp;#39;su olduysa ve birleştirilen pull request onu kapattıysa, girdiyi onaylamak o issue&amp;#39;ya bir &amp;quot;Shipped&amp;quot; yorumu bırakır ve girdiyi widget&amp;#39;ta gönderene gösterir; elle açılan issue&amp;#39;lar ile GitLab ya da Bitbucket depoları yorum almaz. Dokümanlarımız &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;widget ve feed kurulumunu&lt;/a&gt; listeler.&lt;/p&gt;
&lt;p&gt;Cevap kısa olabilir: &amp;quot;Mart&amp;#39;ta CSV içe aktarma istemiştiniz. Bugün yayında ve nasıl çalıştığı şöyle.&amp;quot; Ayrıca size en iyi bir sonraki soruyu verir: ihtiyacınız olanı karşılıyor mu?&lt;/p&gt;
&lt;h2&gt;Bir başlangıç planı&lt;/h2&gt;
&lt;p&gt;En üstteki tablodan bir an seçin, kullanıcıların en sık başarılı olduğu ya da vazgeçtiği anı. Onun için tek bir soru yazın, tek bir kanala koyun ve ikinci bir istem eklemeden önce iki hafta boyunca her cevabı okuyun. Size somut bir şey veren herkese cevap verin.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Müşterilerden ne sıklıkla geri bildirim istenmeli?&lt;/strong&gt;
İstemleri takvime değil olaylara bağlayın. Bir kullanıcı haftada en fazla bir istem görmeli ve birine cevap verdikten hemen sonra hiç görmemeli. Geri bildirimden sonraki ilk mesaj, ona ne olduğuna dair bir cevap olmalı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kullanıcıları rahatsız etmeden geri bildirim nasıl istenir?&lt;/strong&gt;
Bir görevden sonra sorun, asla ortasında değil, tek soruya sadık kalın ve kapatmayı kolay yapın. Bir kapatmaya birkaç hafta saygı gösterin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Geri bildirim için bir teşvik sunulmalı mı?&lt;/strong&gt;
Genellikle gerek yoktur. Somut bir soru ve görünür bir cevap, bir hediye kartından daha çok ağırlık taşır ve teşvikler ödülü isteyen insanları çeker. Onları, birinden 20 dakika istediğiniz görüşmelere saklayın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kimse cevap vermezse ne olur?&lt;/strong&gt;
Soruyu daraltın ve ana yaklaştırın, örneğin tek bir ekran, kullanıldıktan hemen sonra sorulsun. Sessiz kalırsa, bir avuç kullanıcıya doğrudan e-posta gönderin ve bu konuşmaları daha iyi istemler yazmak için kullanın.&lt;/p&gt;
</content:encoded></item><item><title>Sık yayımlayan ekipler için release yönetimi süreci</title><link>https://changeloop.dev/blog/tr/release-management-process/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/release-management-process/</guid><description>Yazılım ekipleri için yedi adımda release yönetimi süreci: her adımın sahibi ve çıkış ölçütü, DORA metrikleri ve ayrıca izlemeye değer bir KPI daha.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Release yönetimi süreci, bir değişikliği &amp;quot;merge edildi&amp;quot;den &amp;quot;üretimde çalışıyor ve etkilediği insanlara anlatıldı&amp;quot;ya taşıyan adımlar bütünüdür. Sık yayımlayan bir ekip için yedi adıma iner: kapsamı planla, değişikliği izole et, build ve test et, onayla, deploy et ve doğrula, duyur ve gözden geçir. Her adımın belli bir sahibi ve bir çıkış ölçütü olmalı, yoksa sessizce yapılmaz olur.&lt;/p&gt;
&lt;p&gt;Bu rehber, haftalık ya da günlük deploy eden ve sürecin yoldan çekilmesini isteyen, 5 ila 50 mühendislik ekibi varsayar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Adım&lt;/th&gt;
&lt;th&gt;Sahip&lt;/th&gt;
&lt;th&gt;Çıkış ölçütü&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1. Kapsamı planla&lt;/td&gt;
&lt;td&gt;Ürün veya teknik lider&lt;/td&gt;
&lt;td&gt;Bu release&amp;#39;teki değişikliklerin listesi yazılı, riskli olan her şey işaretli&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Branch veya flag&lt;/td&gt;
&lt;td&gt;Değişikliğin sahibi mühendis&lt;/td&gt;
&lt;td&gt;İş kısa ömürlü bir branch&amp;#39;te ya da bir flag&amp;#39;in arkasında, main yayımlanabilir kalır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Build ve test&lt;/td&gt;
&lt;td&gt;CI, hatalarda nöbetçi yazar ile&lt;/td&gt;
&lt;td&gt;Yayımlanacak tam commit&amp;#39;te pipeline yeşil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Onayla&lt;/td&gt;
&lt;td&gt;İnceleyici, riskli değişikliklerde release manager ile&lt;/td&gt;
&lt;td&gt;İnceleme tamam, rollback yolu adlandırılmış, git ya da gitme kararı kaydedilmiş&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Deploy et ve doğrula&lt;/td&gt;
&lt;td&gt;Release manager veya nöbetçi mühendis&lt;/td&gt;
&lt;td&gt;Deploy edildi, smoke kontrolleri geçti, hata oranı ve gecikme release öncesi referansla uyuşuyor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6. Duyur&lt;/td&gt;
&lt;td&gt;Değişikliği anlayan, anlamayan biri tarafından düzenlenmiş&lt;/td&gt;
&lt;td&gt;Release notes kullanıcıların okuduğu yerde yayımlandı, destek ve satışa haber verildi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7. Gözden geçir&lt;/td&gt;
&lt;td&gt;Release manager&lt;/td&gt;
&lt;td&gt;Metrikler okundu, ters giden her şeyin bir sahibi ve bir düzeltmesi var&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Release yönetimi süreci nedir?&lt;/h2&gt;
&lt;p&gt;Bir değişikliğin kullanıcılara ulaşmak için izlediği tekrarlanabilir yoldur: kapsam, build, test, onay, deploy, doğrulama, duyuru ve geriye bakış. Yazılı hâle getirmenin amacı, her release&amp;#39;in aynı yolu izlemesidir; böylece tatildeki bir kişi, yeni bir çalışan ya da gece 2&amp;#39;deki nöbetçi mühendis, kimseye nasıl çalıştığını sormadan onu yürütebilir.&lt;/p&gt;
&lt;h2&gt;Release yönetiminin farklı türleri nelerdir?&lt;/h2&gt;
&lt;p&gt;Üç pratik tür var: sürekli deployment, zamanlanmış release&amp;#39;ler ve düzenlemeye tabi değişiklik yönetimi. Bir release&amp;#39;ten önce ne kadar şey olduğu ve ne kadarının otomatik olduğu bakımından ayrılırlar. Sürekli deployment merge edilen her değişikliği yayımlar, zamanlanmış release&amp;#39;ler değişiklikleri bir trene toplar ve düzenlemeye tabi değişiklik yönetimi resmi onay ve bir denetim izi ekler.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Sürekli deployment&lt;/th&gt;
&lt;th&gt;Zamanlanmış release&amp;#39;ler&lt;/th&gt;
&lt;th&gt;Düzenlemeye tabi veya ITIL değişiklik yönetimi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Release birimi&lt;/td&gt;
&lt;td&gt;Merge edilen tek bir pull request&lt;/td&gt;
&lt;td&gt;Haftalık veya iki haftalık bir toplu iş&lt;/td&gt;
&lt;td&gt;Bir değişiklik talebi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kapsam adımı&lt;/td&gt;
&lt;td&gt;Örtük, merge kapsamdır&lt;/td&gt;
&lt;td&gt;Release planlama toplantısı&lt;/td&gt;
&lt;td&gt;Risk derecesi olan değişiklik kaydı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Onay&lt;/td&gt;
&lt;td&gt;Kod incelemesi artı otomatik kontroller&lt;/td&gt;
&lt;td&gt;Release manager toplu işi onaylar&lt;/td&gt;
&lt;td&gt;Değişiklik danışma kurulu veya yetkili onaylayıcı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk kontrolü&lt;/td&gt;
&lt;td&gt;Feature flag&amp;#39;ler, canary&amp;#39;ler, hızlı rollback&lt;/td&gt;
&lt;td&gt;Staging&amp;#39;de bekletme, release candidate&lt;/td&gt;
&lt;td&gt;Belgelenmiş geri çekilme planı, bakım penceresi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tipik ritim&lt;/td&gt;
&lt;td&gt;Günde birçok&lt;/td&gt;
&lt;td&gt;Haftalıktan aylığa&lt;/td&gt;
&lt;td&gt;Değişiklik takvimiyle belirlenir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zayıf nokta&lt;/td&gt;
&lt;td&gt;Kimse kullanıcılara neyin değiştiğini söylemez&lt;/td&gt;
&lt;td&gt;Büyük toplu işler neyin bozduğunu gizler&lt;/td&gt;
&lt;td&gt;Süreç zamanı değişikliğin kendisini gölgede bırakır&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Çoğu ekip bir karışımdır. Bir SaaS ürünü sürekli deploy ederken mobil uygulaması haftalık bir trenle çıkabilir ve denetçilerin önemsediği tek ödeme servisi resmi bir değişiklik kaydını izler. Türü şirkete göre değil servise göre seçin. Değişikliklerin sadece kademeli olarak açıldığı yerde release ve duyuru ayrı olaylara dönüşür, bu da &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-flags-feature-requests/&quot;&gt;feature flag release notları&lt;/a&gt; yazısının ele aldığı durumdur.&lt;/p&gt;
&lt;h2&gt;Release manager&amp;#39;ın sorumlulukları nelerdir?&lt;/h2&gt;
&lt;p&gt;Release manager, bir değişikliğin üretime giden yolunun sahibidir. Release takvimini tutar, bir değişikliğin hazır olup olmadığına karar verir, deploy&amp;#39;u yürütür ya da denetler, rollback kararını verir, kullanıcılara haber verilmesini sağlar ve sonrasındaki gözden geçirmeyi yürütür.&lt;/p&gt;
&lt;p&gt;Release&amp;#39;ten önce kapsamı doğrular ve her riskli değişikliğin bir rollback yolu olup olmadığını kontrol eder. Sırasında deploy kontrol listesini yürütür, üretim metriklerinin ilk dakikalarını izler ve rollback&amp;#39;i erken çağırır. Sonrasında notların çıktığını doğrular ve süreçte neyin düzeltileceğini kaydeder.&lt;/p&gt;
&lt;p&gt;Küçük bir ekipte rolü haftalık döndürün ve kontrol listesini kimsenin sözlü bilgiye ihtiyaç duymayacağı şekilde yazın. Bağımsız olarak yayımlanan birçok paketi olan bir &lt;a href=&quot;https://changeloop.dev/blog/tr/monorepo-changelogs/&quot;&gt;monorepo&lt;/a&gt; genellikle paket başına bir release sahibi ister, yoksa rol bir darboğaza dönüşür.&lt;/p&gt;
&lt;h2&gt;Release yönetimi için temel KPI&amp;#39;lar nelerdir?&lt;/h2&gt;
&lt;p&gt;DORA yazılım teslimat metriklerini izleyin ve kendinizden bir tane ekleyin: kullanıcılara haber verilmesinin ne kadar sürdüğü. DORA&amp;#39;nın araştırması, üretim hızı (değişiklik lead time&amp;#39;ı, deployment sıklığı, başarısız deployment kurtarma süresi) ve kararsızlık (değişiklik başarısızlık oranı, deployment yeniden iş oranı) diye ayrılan beş metriği belirler.&lt;/p&gt;
&lt;p&gt;DORA&amp;#39;nın rehberi bunları düz terimlerle tanımlar (&lt;a href=&quot;https://dora.dev/guides/dora-metrics/&quot;&gt;dora.dev, software delivery metrics&lt;/a&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;KPI&lt;/th&gt;
&lt;th&gt;Neyi ölçer&lt;/th&gt;
&lt;th&gt;Nelere dikkat edilir&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Değişiklik lead time&amp;#39;ı&lt;/td&gt;
&lt;td&gt;Sürüm kontrolündeki commit&amp;#39;ten üretimde deploy edilmeye geçen süre&lt;/td&gt;
&lt;td&gt;Yükselen bir sayı genellikle incelemede ya da onayda kuyruk demektir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment sıklığı&lt;/td&gt;
&lt;td&gt;Ne sıklıkla deploy ettiğiniz ya da deployment&amp;#39;lar arasındaki süre&lt;/td&gt;
&lt;td&gt;Düşen sıklık, toplu işlerin büyüdüğü anlamına gelir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Başarısız deployment kurtarma süresi&lt;/td&gt;
&lt;td&gt;Hemen müdahale gerektiren bir deployment&amp;#39;tan kurtulma süresi&lt;/td&gt;
&lt;td&gt;Rollback ve alarm sorunları burada görünür&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Değişiklik başarısızlık oranı&lt;/td&gt;
&lt;td&gt;Rollback ya da hotfix gerektiren deployment&amp;#39;ların payı&lt;/td&gt;
&lt;td&gt;Toplu işler çok büyük ya da test zayıf olduğunda yükselir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment yeniden iş oranı&lt;/td&gt;
&lt;td&gt;Planlanmamış ve bir üretim olayının yol açtığı deployment&amp;#39;ların payı&lt;/td&gt;
&lt;td&gt;Düzeltmelerin derslerden hızlı çıktığının işareti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kullanıcılara haber verilene kadar süre&lt;/td&gt;
&lt;td&gt;Üretim deploy&amp;#39;undan yayımlanmış, kullanıcıya dönük bir nota kadar dakika&lt;/td&gt;
&lt;td&gt;Kendiniz ölçün, hiçbir çerçeve bunu sağlamaz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Eski kaynaklar dört anahtar sayar ve kurtarmaya &amp;quot;time to restore&amp;quot; der. Güncel rehber yukarıdaki beşini kullanır.&lt;/p&gt;
&lt;p&gt;Aynı rehber bunları hedef olarak ele almaya karşı uyarır. &amp;quot;Her şey yıl sonuna kadar günde birkaç kez deploy edilsin&amp;quot; gibi bir hedef koymak, ekipleri sayıları oynamaya davet eder ve metriklerin şirket genelinde harmanlanmak yerine uygulama ya da servis başına okunması amaçlanır. Hepsini iyileştirmek için pratik önerisi, her değişikliğin boyutunu küçültmektir, çünkü küçük değişiklikleri incelemek, pipeline&amp;#39;dan geçirmek ve onlardan kurtulmak daha kolaydır.&lt;/p&gt;
&lt;h2&gt;Release iletişimi release yönetimi sürecine nasıl oturur?&lt;/h2&gt;
&lt;p&gt;Altıncı adımdır ve her diğer adım gibi bir sahibi ve bir çıkış ölçütü vardır: notlar kullanıcıların okuduğu yerde yayımlandı ve iç ekiplere haber verildi. Ekipler en sık bunu atlar, çünkü deployment araçları kod canlıya çıktığı anda başarıyı bildirir.&lt;/p&gt;
&lt;p&gt;Bu adımı programda tutmanın en ucuz yolu, girdiyi release yayımlandığında değil, değişiklik merge edildiğinde yazmaktır. Pull request zaten başlığı, yazarı, bağlı issue&amp;#39;yu ve bağlamı tutar. Ondan kurulan bir taslak, bir hafta sonra hafızadan yazılmak yerine düzenlenir. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog otomasyonunun&lt;/a&gt; fikri budur: merge&amp;#39;de bir taslak türet, onay için bir insana beklet, sonra tek kaynaktan her yerde yayımla. Changeloop böyle çalışır: merge edilen pull request&amp;#39;lerden AI ile girdi taslağı hazırlar ve hiçbir şey yayımlanmadan önce onay için bekletir.&lt;/p&gt;
&lt;p&gt;Önceden planlamaya değer iki varyasyon var. Destek ve satışın müşterilerden farklı bir nota ihtiyacı vardır, &lt;a href=&quot;https://changeloop.dev/blog/tr/internal-release-notes/&quot;&gt;dahili release notları&lt;/a&gt; bunun içindir. Bir olay güdümlü release&amp;#39;in normal taslak döngüsüne zamanı yoktur, o yüzden &lt;a href=&quot;https://changeloop.dev/blog/tr/emergency-release-notes/&quot;&gt;acil durum release notes&lt;/a&gt; yazısında anlatıldığı gibi hazırda kısa bir şablon tutun. &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;Release notes şablonu&lt;/a&gt; müşteriye dönük sürüm için bir başlangıç şekli verir.&lt;/p&gt;
&lt;h2&gt;Süreç nasıl hafif tutulur?&lt;/h2&gt;
&lt;p&gt;Bir makinenin kontrol edebileceği her çıkış ölçütünü otomatikleştirin ve yargı gerektiren işleri insanlara bırakın. Yeşil bir pipeline, panolarda bir deploy işareti ve merge edilen her pull request için bir changelog girdisi taslağı kontrol edilebilir. Bir rollback planının inandırıcı olup olmadığı ya da notların bir müşteriye anlamlı gelip gelmediği ise bir insan ister.&lt;/p&gt;
&lt;p&gt;Süreci test etmek için geçen aydan bir release seçin ve ekibin dışındaki birinin sadece yazılı kayıttan neyin yayımlandığını, kimin onayladığını, nasıl doğrulandığını ve kullanıcılara ne zaman haber verildiğini söyleyip söyleyemeyeceğini sorun. Her boşluk bir sonraki iyileştirmenizdir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Release yönetimi ile değişiklik yönetimi arasındaki fark nedir?&lt;/strong&gt;
Release yönetimi bir değişiklik kümesinin build edilmesini, test edilmesini, deploy edilmesini ve duyurulmasını sağlar. ITIL anlamındaki değişiklik yönetimi ise her değişikliğin etrafındaki onay ve risk sürecidir. Sık yayımlayan ekipler onayı kod incelemesine ve otomatik kontrollere katar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ne sıklıkla release çıkarmalıyız?&lt;/strong&gt;
Testleriniz ve rollback yolunuz izin verdiği kadar sık; birçok web ekibi için bu günlük ya da daha fazladır. DORA&amp;#39;nın önerisi her değişikliğin boyutunu küçültmektir, çünkü küçük değişiklikleri incelemek ve onlardan kurtulmak daha kolaydır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Küçük ekiplerin bir release manager&amp;#39;a ihtiyacı var mı?&lt;/strong&gt;
Sorumluluklara ihtiyaçları var, ama unvana şart değil. Rolü mühendisler arasında döndürün, nöbetteki kişiye yazılı bir kontrol listesi verin ve yedi adımın her birinin bir sahibi olduğundan emin olun.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir release kontrol listesi neleri içermeli?&lt;/strong&gt;
Doğrulanmış kapsam, yayımlanacak commit&amp;#39;te yeşil pipeline, adlandırılmış rollback yolu, kaydedilmiş onay, deploy sonrası smoke kontrolleri, metriklerin referansla karşılaştırılması, yayımlanmış release notes, bilgilendirilmiş destek ve planlanmış bir gözden geçirme. Tek bir sayfada tutun.&lt;/p&gt;
</content:encoded></item><item><title>Ürün roadmap örnekleri: altı format ve nasıl bozulurlar</title><link>https://changeloop.dev/blog/tr/product-roadmap-examples/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/product-roadmap-examples/</guid><description>Gerçekçi maddelerle altı ürün roadmap örneği: Now/Next/Later, çeyreklik, tema, sonuç, genel ve release roadmap. Her biri kime uyar, nasıl bozulur.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kopyalamaya değer ürün roadmap örnekleri altı formatta toplanır: Now/Next/Later, çeyreklik zaman çizelgesi, tema roadmap&amp;#39;i, sonuç roadmap&amp;#39;i, genel roadmap ve dahili release roadmap&amp;#39;i. Her biri farklı bir okuyucu için farklı bir soruyu cevaplar. Yani doğru örnek, sizinkini kimin okuyacağına uyan örnektir. Yerleşim düzeni en son karar verilecek şeydir.&lt;/p&gt;
&lt;p&gt;Aşağıdaki her örnek uydurma bir ürün, küçük bir ekip görev uygulaması içindir ve her madde hayalidir. Asıl mesele şekildir: her yuvaya ne girer, gerçek bir giriş nasıl görünür ve o format bir çeyrek sonra neden bozulur.&lt;/p&gt;
&lt;h2&gt;İyi ürün roadmap örnekleri nelerdir?&lt;/h2&gt;
&lt;p&gt;İyi bir roadmap örneği kısadır, bir okuyucuya adı verir ve tek türden söz verir. Formatı tutmaya razı olduğunuz söze göre seçin: bir yön, bir tarih, bir iş teması, bir sonuç, genel bir taahhüt ya da bir teslimat takvimi.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Kimin için&lt;/th&gt;
&lt;th&gt;Ne zaman işler&lt;/th&gt;
&lt;th&gt;Ne zaman bozulur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Now/Next/Later&lt;/td&gt;
&lt;td&gt;Tüm şirket&lt;/td&gt;
&lt;td&gt;Planlar sık değiştiğinde&lt;/td&gt;
&lt;td&gt;&amp;quot;Next&amp;quot; dolar ve bir kuyruğa dönüşür&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Çeyreklik zaman çizelgesi&lt;/td&gt;
&lt;td&gt;Satış, destek, yöneticiler&lt;/td&gt;
&lt;td&gt;Tarihler gerçek kısıtlarsa&lt;/td&gt;
&lt;td&gt;Tarihler kayar ve kimse güncellemez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tema bazlı&lt;/td&gt;
&lt;td&gt;Liderlik, yeni çalışanlar&lt;/td&gt;
&lt;td&gt;Nedenini anlatmak istediğinizde&lt;/td&gt;
&lt;td&gt;Temalar o kadar geniş olur ki her madde uyar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sonuç bazlı&lt;/td&gt;
&lt;td&gt;Ürün ve mühendislik&lt;/td&gt;
&lt;td&gt;Hedefi ölçebildiğinizde&lt;/td&gt;
&lt;td&gt;Metriğin sahibi ya da verisi yoktur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Genel&lt;/td&gt;
&lt;td&gt;Müşteriler&lt;/td&gt;
&lt;td&gt;Küçük tutabildiğinizde&lt;/td&gt;
&lt;td&gt;Bir backlog çöplüğüne dönüşür&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dahili release&lt;/td&gt;
&lt;td&gt;Mühendislik, QA, destek&lt;/td&gt;
&lt;td&gt;Birkaç ekip birlikte yayımladığında&lt;/td&gt;
&lt;td&gt;Strateji sanılır&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Her ürün roadmap örneği nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Aşağıdaki her format gerçekçi girdilerle gösterilir, ardından kime uyduğu, ne zaman dayandığı ve genelde nasıl bozulduğu anlatılır.&lt;/p&gt;
&lt;h3&gt;Now/Next/Later&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;NOW (bu ay yapılıyor)
  Gelen kutusunda kayıtlı görünümler
  Büyük hesaplarda çalışan CSV export
NEXT (karar verildi, sıra kesin değil)
  Team planı için SSO
  Slack bildirimleri
LATER (bir yön, taahhüt yok)
  Mobil uygulama
  Denetim günlüğü
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu format tarih vermek istemeyen şirketlere uyar, ki bu birçok erken aşama ekibine denk düşer. Dayanır, çünkü üç sütun ne kadar emin olduğunuzu anlatır: &amp;quot;now&amp;quot; sürüyor, &amp;quot;next&amp;quot; karara bağlandı, &amp;quot;later&amp;quot; bir umut. Bozulması şöyle olur: &amp;quot;later&amp;quot;, kimsenin reddetmek istemediği her fikrin park yerine döner ve &amp;quot;next&amp;quot; kimse zaman çizelgesi demeden sessizce bir sıra ve bir tarih edinir.&lt;/p&gt;
&lt;h3&gt;Zaman çizelgesi ya da çeyreklik roadmap&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;2026 Q4
  Eki   Gelen kutusunda kayıtlı görünümler
  Kas   Beş tasarım ortağıyla SSO beta
  Ara   SSO genel kullanıma açılış
2027 Q1
  Oca   Slack bildirimleri
  Mar   Denetim günlüğü (sadece export)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu format, bir şeye göre plan yapması gereken satış, destek ve finans ekiplerine uyar. Tarihler bir sözleşme, bir konferans ya da bir uyumluluk son tarihi gibi gerçek kısıtlar olduğunda işler. Tarihler tahmin olduğunda bozulur, çünkü roadmap&amp;#39;teki bir ay haftalar içinde bir satış sunumunda söze dönüşür. Bu formatı kullanıyorsanız her çeyreği &amp;quot;taahhüt edildi&amp;quot; ya da &amp;quot;tahmin&amp;quot; diye etiketleyin ve ikinci çeyreği birincisinden görünür biçimde daha yumuşak tutun.&lt;/p&gt;
&lt;h3&gt;Tema bazlı roadmap&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;TEMA: İlk hafta deneyimi
  CSV ve Trello&amp;#39;dan içe aktarma
  Başlangıç şablonları
TEMA: Büyük ekiplere hazır
  SSO
  Denetim günlüğü
  Rol izinleri
TEMA: Daha az elle yapılan adım
  Slack bildirimleri
  Tekrarlayan görevler
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu format liderlik güncellemelerine ve yeni çalışanlara uyar, çünkü işi sıralamadan önce işin neden var olduğunu açıklar. Her tema bir müşterinin önemseyeceği bir nedene karşılık geldiğinde dayanır. Temalar o kadar genişse (&amp;quot;Büyüme&amp;quot;, &amp;quot;Kalite&amp;quot;) ki her madde her birinin altına sığıyor, gruplama hiçbir şey açıklamaz ve format bozulur.&lt;/p&gt;
&lt;h3&gt;Sonuç bazlı roadmap&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;HEDEF: Daha fazla yeni ekip kurulumu bitirsin
  Metrik: 7 günde biten kurulum, %40&amp;#39;tan %55&amp;#39;e
  Bahisler: CSV içe aktarma, başlangıç şablonları
HEDEF: Export ile ilgili daha az destek ticket&amp;#39;ı
  Metrik: haftalık export ticket&amp;#39;ı, 30&amp;#39;dan 10&amp;#39;a
  Bahisler: büyük hesap export düzeltmesi, export durum sayfası
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sayılar örnek amaçlıdır, asıl mesele düzendir: bir hedef, başlangıcı ve hedefi olan tek bir metrik ve deneyeceğiniz bahisler. Çözümü seçmesine güvenilen ürün ve mühendislik ekiplerine uyar. Metrik var olduğunda ve birinin sahipliğinde olduğunda işler. Hedef ölçülemezse ya da &amp;quot;bahisler&amp;quot; üstüne bir sonuç cümlesi yapıştırılmış eski özellik listesinin aynısıysa bozulur.&lt;/p&gt;
&lt;h3&gt;Genel, müşteriye dönük roadmap&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;PLANLANDI
  Gelen kutusunda kayıtlı görünümler
YAPILIYOR
  Slack bildirimleri
YAYIMLANDI
  Büyük hesaplar için CSV export
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu en küçük formattır ve en güçlü sözü verir. İsteğinin duyulup duyulmadığını bilmek isteyen müşterilere uyar. Çok az madde, tarihsiz ve müşterinin kendi sözleriyle yazılmış başlıklarla dayanır. Backlog çöplüğü olduğunda bozulur: listelediğiniz her &amp;quot;belki&amp;quot;, birinin ileride soracağı bir sözdür. Bir genel roadmap&amp;#39;i issue tracker&amp;#39;ınızdan işletmenin ayrıntıları &lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;üç sütunlu bir genel roadmap&lt;/a&gt; yazısında anlatılıyor, o yüzden burada tekrarlanmıyor.&lt;/p&gt;
&lt;h3&gt;Dahili release roadmap&amp;#39;i&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;th&gt;Hedef&lt;/th&gt;
&lt;th&gt;Sahip&lt;/th&gt;
&lt;th&gt;Bağımlılık&lt;/th&gt;
&lt;th&gt;Durum&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;5.2&lt;/td&gt;
&lt;td&gt;14 Eki&lt;/td&gt;
&lt;td&gt;Platform&lt;/td&gt;
&lt;td&gt;Auth servisi yükseltmesi&lt;/td&gt;
&lt;td&gt;Kod tamam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.3&lt;/td&gt;
&lt;td&gt;11 Kas&lt;/td&gt;
&lt;td&gt;Gelen kutusu&lt;/td&gt;
&lt;td&gt;Kayıtlı görünümler API&amp;#39;si&lt;/td&gt;
&lt;td&gt;Sürüyor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.4&lt;/td&gt;
&lt;td&gt;9 Ara&lt;/td&gt;
&lt;td&gt;Platform&lt;/td&gt;
&lt;td&gt;SSO sağlayıcı sözleşmesi&lt;/td&gt;
&lt;td&gt;Bloke&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Bu format neyin birlikte çıktığını ve neyin neyi bloke ettiğini bilmesi gereken mühendislik, QA ve destek ekiplerine uyar. Haftasına kadar doğru olduğunda ve her satırın bir sahibi olduğunda işler. Biri bunu strateji sandığında bozulur: bir teslimat takvimi neyin ne zaman binadan çıktığını söyler ve o release&amp;#39;lerin doğru bahisler olup olmadığı hakkında hiçbir şey söylemez.&lt;/p&gt;
&lt;h2&gt;Hangi ürün roadmap formatını seçmelisiniz?&lt;/h2&gt;
&lt;p&gt;Önce okuyucuya, sonra gerçekte ne kadar kesinliğiniz olduğuna göre seçin. Roadmap&amp;#39;i kimin okuduğunu ve ona hangi kararda yardım ettiğini söyleyemiyorsanız, yukarıdaki örneklerin hiçbiri onu kurtarmaz.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Beni duydunuz mu?&amp;quot; diye soran müşteriler.&lt;/strong&gt; Genel formatı kullanın ve birkaç maddede tutun.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Müşteriye tarih söyleyebilir miyim?&amp;quot; diye soran satış ve destek.&lt;/strong&gt; Çeyreklik zaman çizelgesini kullanın, taahhüt edilen ve tahmin edilenleri net ayırın.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Neden bu iş?&amp;quot; diye soran liderlik.&lt;/strong&gt; Tema kullanın, verisi varsa sonuç.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yönünü her ay değiştiren bir ekip.&lt;/strong&gt; Now/Next/Later kullanın ve tarih koymaya direnin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Ne zaman ne çıkıyor?&amp;quot; diye soran mühendisler.&lt;/strong&gt; Release roadmap&amp;#39;ini kullanın ve stratejik olandan ayrı tutun.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Çoğu ekip ikiye varır: ilk dört şekilden birinde stratejik bir roadmap ve altında bir release takvimi. Genel roadmap o zaman stratejik olanın süzülmüş bir görünümüdür ve sadece hesabını vermeye razı olduğunuz şeyleri gösterir.&lt;/p&gt;
&lt;h2&gt;Ürün roadmap&amp;#39;i nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Okuyucuya ad vererek, sorusuna uyan formatı seçerek, sadece bir toplantıda savunacağınız maddeleri listeleyerek ve her maddeye bir durum ve bir sahip vererek yazın. Sonra yayımlamadan önce ne sıklıkla gözden geçirileceğine karar verin.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Okuyucuyu ve kararı adlandırın.&lt;/strong&gt; &amp;quot;Destek, müşterilere SSO hakkında ne söyleyeceğine karar verir&amp;quot; bir gerekçedir. &amp;quot;Herkes roadmap&amp;#39;i görmeli&amp;quot; tasarlayacak hiçbir şey vermez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zaten bildiğiniz şeyden başlayın.&lt;/strong&gt; &lt;a href=&quot;https://changeloop.dev/blog/tr/prioritizing-feature-requests/&quot;&gt;Açıklayabileceğiniz bir kurala göre sıralanmış&lt;/a&gt; açık talepler, bir beyin fırtınasından daha iyi ham maddedir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Her maddeyi bir müşteri sonucu olarak yazın.&lt;/strong&gt; &amp;quot;Sık kullandığınız bir filtreyi saklayın&amp;quot;, &amp;quot;Kayıtlı görünüm kalıcılığını uygula&amp;quot; cümlesinden daha iyi okunur ve müşteriye bunun kendi sorunu olup olmadığını söyler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Roadmap&amp;#39;in neyi içermeyeceğine karar verin.&lt;/strong&gt; Tarihler, tahminler ve bir fikir backlog&amp;#39;u üç olağan dışarıda bırakılandır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bir gözden geçirme tarihi koyun.&lt;/strong&gt; Planlı gözden geçirmesi olmayan bir roadmap&amp;#39;in planlanmamış bir cenazesi olur.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Ürün roadmap&amp;#39;i nasıl güncel tutulur?&lt;/h2&gt;
&lt;p&gt;İş hareket ettiğinde, işin takip edildiği yerden maddeleri taşıyarak ve bir madde yayımlandığında ya da bırakıldığında ne olduğunu kaydederek güncel tutun. Ayrı bir araçta elle güncellenen roadmap bayatlar, çünkü kimsenin günlük işi değildir.&lt;/p&gt;
&lt;p&gt;En ucuz doğruluk kaynağı issue tracker&amp;#39;dır. Her roadmap sütunu issue üzerindeki bir etikete karşılık geliyorsa, etiket değiştiğinde roadmap değişir ve hiçbir şey yeniden yazılmaz. Changeloop&amp;#39;un bu yaklaşımı &lt;code&gt;roadmap:planned&lt;/code&gt;, &lt;code&gt;roadmap:building&lt;/code&gt; ve &lt;code&gt;roadmap:shipped&lt;/code&gt; etiketlerini kullanır ve bir issue ikisini birden taşıdığında en ileride olan kazanır. Bir kartı yayımlandıya taşımak yine kendi etiket değişikliğidir, o yüzden changelog girdisini onayladığınız gözden geçirmenin bir parçası yapın.&lt;/p&gt;
&lt;p&gt;Bu girdi diğer yarıdır. Bir madde yayımlandığında changelog neyin değiştiğini müşterinin diliyle söyler ve isteyen birine haber verilebilir. Bu döngüyü kapatmak &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;müşteri geri bildirim döngüsünün&lt;/a&gt; amacıdır ve roadmap, bu döngünün hiçbir şey yayımlanmadan önce müşterinin görebildiği kısmıdır. Bir maddeyi bırakırsanız bunu söyleyin; genel bir &amp;quot;hayır&amp;quot; o talebi de kapatır ve &lt;a href=&quot;https://changeloop.dev/blog/tr/declining-feature-requests/&quot;&gt;özellik taleplerini reddetmek&lt;/a&gt; yazısı bunu nasıl ifade edeceğinizi anlatır. Biten girdilerin nasıl okunduğunu görmek isteyen ekipler &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;changelog örneklerine&lt;/a&gt; göz atabilir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;En basit ürün roadmap formatı nedir?&lt;/strong&gt;
Now/Next/Later. Üç sütunu vardır, tarih gerektirmez ve maddeleri kesinliğe göre gruplar. Yönünü sık değiştiren küçük bir ekip için, utanç verici biçimde yanlış yapılması en zor formattır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir ürün roadmap&amp;#39;inde kaç madde olmalı?&lt;/strong&gt;
Sandığınızdan az. Genel bir roadmap için tüm sütunlarda on maddenin altı yeter, dahili stratejik olana nadiren on iki taneden fazlası gerekir. Bunun ötesi, daha güzel bir başlığı olan bir backlog&amp;#39;dur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir ürün roadmap&amp;#39;i tarih içermeli mi?&lt;/strong&gt;
Sadece tarihler gerçek kısıtlarsa ve o zaman da sadece en yakın çeyrek için. Ötesinde sütun ya da tema kullanın. Roadmap&amp;#39;teki bir tarih, siz istemeseniz de bir satış görüşmesinde taahhüde dönüşür.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ürün roadmap&amp;#39;i ile release planı arasındaki fark nedir?&lt;/strong&gt;
Roadmap neyi neden inşa etmeyi amaçladığınızı söyler. Release planı hangi build&amp;#39;in hangi tarihte, kimin sorumluluğunda çıktığını söyler. Roadmap stratejiniz değiştiğinde, release planı iş değiştiğinde değişir.&lt;/p&gt;
</content:encoded></item><item><title>Her değişiklik türü için release notes örnekleri</title><link>https://changeloop.dev/blog/tr/release-notes-examples/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/release-notes-examples/</guid><description>Özellik, düzeltme, breaking change, güvenlik, deprecation, mağaza notu ve dahili not için release notes örnekleri ve her birinin neden işe yaradığı.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;En iyi release notes örnekleri kısadır, kimin etkilendiğini söyler ve sonra ne yapılacağını belirtir. Aşağıda yayımlayacağınız her değişiklik türü için, neden işe yaradığıyla birlikte bir örnek var; böylece şekli kopyalayıp kendi bilgilerinizi koyabilirsiniz.&lt;/p&gt;
&lt;p&gt;Her örnek, Tidepool adında hayali bir faturalama uygulaması için uydurulmuştur.&lt;/p&gt;
&lt;h2&gt;İyi release notes örneklerinin ortak yanı nedir?&lt;/h2&gt;
&lt;p&gt;Kullanıcılara neyin değiştiğini ve bu konuda bir şey yapmaları gerekip gerekmediğini, kullanıcıların kendi kelimeleriyle söylerler. Her değişiklik türünün farklı bir işi var, o yüzden şekil bunlar arasında kayar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Değişiklik türü&lt;/th&gt;
&lt;th&gt;Girdi şunu söylemeli&lt;/th&gt;
&lt;th&gt;Nereye gider&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Yeni özellik&lt;/td&gt;
&lt;td&gt;Okuyucu artık ne yapabiliyor ve kim alıyor&lt;/td&gt;
&lt;td&gt;Notların en üstü&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İyileştirme&lt;/td&gt;
&lt;td&gt;Neyin hızlandığı ya da kolaylaştığı, varsa bir sayıyla&lt;/td&gt;
&lt;td&gt;Özelliklerden sonra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hata düzeltmesi&lt;/td&gt;
&lt;td&gt;Okuyucunun gördüğü belirti ve düzeldiği&lt;/td&gt;
&lt;td&gt;İyileştirmelerden sonra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breaking change&lt;/td&gt;
&lt;td&gt;Kim etkileniyor, tarih, geçiş&lt;/td&gt;
&lt;td&gt;Her zaman ilk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Güvenlik düzeltmesi&lt;/td&gt;
&lt;td&gt;Neyin açıkta kaldığı, istismar edilip edilmediği, ne yapılacağı&lt;/td&gt;
&lt;td&gt;İlk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecation&lt;/td&gt;
&lt;td&gt;Neyin kalktığı, bitiş tarihi, yerine ne geldiği&lt;/td&gt;
&lt;td&gt;Üste yakın&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mağaza notu&lt;/td&gt;
&lt;td&gt;Her değişiklik için bir düz cümle, karakter sınırı içinde&lt;/td&gt;
&lt;td&gt;Mağaza sayfası&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dahili not&lt;/td&gt;
&lt;td&gt;Neyin değiştiği ve müşterilere ne söyleneceği&lt;/td&gt;
&lt;td&gt;Destek ve satış kanalları&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;İyi bir yeni özellik notu nasıl görünür?&lt;/h2&gt;
&lt;p&gt;İyi bir özellik notu, okuyucunun artık ne yapabildiğiyle açılır ve onu alan planları ya da rolleri adlandırır. Uygulamayı atlar.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Faturaları müşterinin dilinde gönderin.&lt;/strong&gt;
Artık her müşteri için bir dil seçebilirsiniz ve faturaları, hatırlatmaları ve ödeme sayfası ona
uyar. Fransızca, Almanca, İspanyolca ve Portekizce tüm planlarda mevcut. Müşterinin sayfasında
Faturalama tercihleri altından ayarlayın.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Başlık okuyucunun yüksek sesle söyleyeceği bir ifadedir ve gövde kapsamı ve yeri verir. Sadece kalın satıra göz atan okuyucu yine de neyin yayımlandığını bilir. Daha geniş yöntem &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;release notes nasıl yazılır&lt;/a&gt; yazısında.&lt;/p&gt;
&lt;h2&gt;İyi bir iyileştirme notu nasıl görünür?&lt;/h2&gt;
&lt;p&gt;İyileştirme notu, okuyucunun hissedeceği bir değişikliği anlatır ve varsa üzerine ölçülmüş bir sayı koyar. Sayı yoksa, okuyucunun artık yapmak zorunda olmadığı şeyi söyleyin.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Fatura listesi yaklaşık üç kat daha hızlı açılıyor.&lt;/strong&gt;
5.000&amp;#39;den fazla faturası olan hesaplar liste için yaklaşık dokuz saniye beklerdi. Artık yaklaşık
üç saniyede açılıyor. Hiçbir işlem gerekmiyor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;quot;Performans iyileştirmeleri&amp;quot; okuyucuya hiçbir şey söylemez, dokuza karşı üç saniye ise pazartesi sabahı kontrol edebilecekleri bir iddiadır. Kapanıştaki &amp;quot;Hiçbir işlem gerekmiyor&amp;quot; her okuyucunun sorduğu soruyu cevaplar.&lt;/p&gt;
&lt;h2&gt;İyi bir hata düzeltmesi notu nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Hata düzeltmesi notu, koddaki nedeni değil kullanıcının gördüğü belirtiyi anlatır ve bir şeyi yeniden yapmaları gerekip gerekmediğini söyler. Kimsenin fark etmediği düzeltmeler en alttaki listeye girebilir.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Düzeltildi: hatırlatma e-postaları vade gününde iki kez gönderiliyordu.&lt;/strong&gt;
Bazı müşteriler, faturaları bir ayın son gününe denk geldiğinde iki özdeş hatırlatma aldı. Bu
düzeltildi. Daha önce gönderilen hatırlatmalar etkilenmiyor ve kimsenin bir şeyi yeniden
göndermesi gerekmiyor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Başlık &amp;quot;Düzeltildi&amp;quot; ile başlar, böylece göz gezdiren biri bir bakışta ayırabilir ve gerçek koşul (ayın son günü) hemen arkasından gelir.&lt;/p&gt;
&lt;h2&gt;Breaking change için release notes nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Breaking change notu tarihle ve etkilenen grupla açılır, sonra geçişi aynı girdide verir. Release notes&amp;#39;ta ilk sıraya gider, çünkü okuyucunun kaçırmaması gereken tek girdidir.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Webhook imzaları 1 Aralık 2026&amp;#39;da zorunlu oluyor.&lt;/strong&gt;
O tarihten itibaren Tidepool imzasız webhook payload&amp;#39;ları göndermeyi bırakıyor. Bu, webhook&amp;#39;ları
&lt;code&gt;Tidepool-Signature&lt;/code&gt; header&amp;#39;ını doğrulamadan alan herkesi etkiliyor. Geçmek için header&amp;#39;ı,
Ayarlar, Geliştiriciler altındaki sır ile doğrulayın. İmzaları zaten doğruluyorsanız, hiçbir
işlem gerekmiyor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tarih başlıktadır, böylece göz gezdirmeye dayanır. Etkilenen grup yaptığı işle adlandırılır ve son cümle zaten sorunsuz olanları serbest bırakır, bu da destek yükünü azaltır. &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Breaking change&amp;#39;ler&lt;/a&gt; rehberi, bir değişikliğin breaking sayılıp sayılmayacağına nasıl karar verileceğini anlatır.&lt;/p&gt;
&lt;h2&gt;Bir güvenlik düzeltmesi notu neye benzer?&lt;/h2&gt;
&lt;p&gt;Güvenlik notu neyin açıkta kaldığını, birinin istismar edip etmediğini, kimin etkilendiğini ve ne yapmaları gerektiğini söyler. Olgusal ve sakin tutun.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Güvenlik: parola sıfırlama bağlantıları yeniden kullanılabiliyordu.&lt;/strong&gt;
3 ile 17 Eylül 2026 arasında, bir parola sıfırlama bağlantısı bir kez kullanıldıktan sonra da
geçerli kalıyordu. İstismar edildiğine dair bir iz bulmadık. Düzeltildi ve bekleyen tüm sıfırlama
bağlantıları geçersiz kılındı. O aralıkta bir sıfırlama istediyseniz, yeni bir bağlantı isteyin.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kesin aralık okuyucunun kendi maruziyetini değerlendirmesini sağlar ve istismar hakkındaki cümle, herkesin sorduğu ilk soruyu cevaplar. &amp;quot;Olası bir sorun&amp;quot; gizleme gibi okunur, o yüzden bildiğinizi söyleyin.&lt;/p&gt;
&lt;h2&gt;Deprecation bildirimi nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Deprecation bildirimi neyin kaldırıldığını adlandırır, kesin bir bitiş tarihi verir ve yerine geçeni gösterir.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;v1 faturalar endpoint&amp;#39;i deprecated oldu ve 1 Mart 2027&amp;#39;de sona eriyor.&lt;/strong&gt;
&lt;code&gt;GET /v1/invoices&lt;/code&gt; 1 Mart 2027&amp;#39;ye kadar çalışmaya devam eder, sonra &lt;code&gt;410 Gone&lt;/code&gt; döndürür.
Aynı alanları artı &lt;code&gt;currency&lt;/code&gt; döndüren &lt;code&gt;GET /v2/invoices&lt;/code&gt; kullanın. v1&amp;#39;den dönen yanıtlar artık
bitiş tarihini içeren bir &lt;code&gt;Sunset&lt;/code&gt; header&amp;#39;ı taşıyor. Yan yana bir geçiş kılavuzu dokümanlarda.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Endpoint adı başlıktadır, çünkü etkilenenler onu arar ve yerine geçen kaldırılanın yanında durur. &lt;code&gt;Sunset&lt;/code&gt; header&amp;#39;ı geliştiricilere hangi çağrıların hâlâ eski sürümü kullandığını söyler. Daha uzun anlatım &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;bir API&amp;#39;yi deprecate etmek&lt;/a&gt; yazısında.&lt;/p&gt;
&lt;h2&gt;Mağaza release notu nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Mağaza notu iki ya da üç düz cümledir, çünkü çoğu insan sadece ilk satırı okur. Kullanıcının fark edeceği değişiklikle başlayın.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Kâğıt bir fişi tarayın, Tidepool tutarı, tarihi ve satıcıyı doldursun. Karanlık mod artık
telefon ayarınızı izliyor. Ayrıca bir bildirimden fatura açarken oluşan bir çökmeyi düzelttik.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En yararlı değişiklik ilk sırada ve düzeltme, çöken durumu adlandırır. Sürüm numarası ve &amp;quot;hata düzeltmeleri ve iyileştirmeler&amp;quot; yok. &lt;a href=&quot;https://changeloop.dev/blog/tr/mobile-app-release-notes/&quot;&gt;Mobil uygulamalar için release notes&lt;/a&gt; mağazaya özgü kuralları ele alır.&lt;/p&gt;
&lt;h2&gt;Dahili release notu neleri içermeli?&lt;/h2&gt;
&lt;p&gt;Dahili not, destek ve satış için olan sürümdür. Herkese açık notun dışarıda bıraktığını ekler: ne söylenecek ve neyin vaat edilmeyeceği.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Çok dilli faturalar bugün yayımlandı (tüm planlar).&lt;/strong&gt;
Destek: müşteriler dili Faturalama tercihleri altından ayarlıyor ve mevcut faturalar özgün
dillerini koruyor. İtalyanca henüz mevcut değil. Satış: bu her plana açık, o yüzden onu bir
yükseltme olarak konumlandırmayın.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Her hedef kitle kendi etiketli satırını alır ve not sınırı (&amp;quot;İtalyanca henüz mevcut değil&amp;quot;) bir müşteri sormadan önce çizer. &lt;a href=&quot;https://changeloop.dev/blog/tr/internal-release-notes/&quot;&gt;Dahili release notları&lt;/a&gt; makalesi biçimi ve kanalları ele alır.&lt;/p&gt;
&lt;h2&gt;Kötü bir release notu nasıl görünür, yeniden yazılmış hâliyle?&lt;/h2&gt;
&lt;p&gt;Kötü bir release notu, okuyucunun ne aldığını değil ekibin ne yaptığını listeler. Sonucu öne alıp dahili sözlüğü silerek düzeltin.&lt;/p&gt;
&lt;p&gt;Önce:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;v3.8.1&lt;/strong&gt; Hatırlatma zamanlayıcısı refactor edildi. &lt;code&gt;ReminderJob&lt;/code&gt;&amp;#39;daki race condition
düzeltildi. &lt;code&gt;bull&lt;/code&gt; 4.12&amp;#39;ye güncellendi. Çeşitli iyileştirmeler.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sonra:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hatırlatma e-postaları artık iki kez gitmiyor.&lt;/strong&gt;
Faturası bir ayın son gününe denk gelen müşteriler iki hatırlatma alabiliyordu. Bu düzeltildi
ve daha önce gönderilen hatırlatmaların yeniden gönderilmesi gerekmiyor. Hiçbir işlem gerekmiyor.&lt;/p&gt;
&lt;p&gt;3.8.1&amp;#39;de ayrıca: &lt;code&gt;bull&lt;/code&gt; 4.12&amp;#39;ye güncellendi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bağımlılık güncellemesi bir alt bilgi satırına indi ve race condition, bir müşterinin tanıyacağı bir belirtiye dönüştü.&lt;/p&gt;
&lt;h2&gt;Release notes sürümler arasında nasıl tutarlı tutulur?&lt;/h2&gt;
&lt;p&gt;Her girdiyi değişiklik merge edildiğinde taslak olarak yazın ve yayımlanmadan önce bir insana onaylatın.&lt;/p&gt;
&lt;p&gt;Changeloop böyle çalışır: merge edilen her pull request&amp;#39;ten AI ile bir girdi taslağı hazırlar ve onaylanması için bir insana bekletir. Onay adımı, bir editörün yukarıdaki kuralları uyguladığı yerdir. Önce biçime karar vermek için &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes şablonundan&lt;/a&gt; başlayın, bitmiş sayfaların nasıl göründüğü için de &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;changelog örneklerine&lt;/a&gt; bakın.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Yeni release notes nedir?&lt;/strong&gt;
Yeni release notes, bir ürünün son sürümüyle birlikte yayımlanan, neyin değiştiğini ve kullanıcıların ne yapması gerektiğini anlatan mesajdır. Özellikleri, iyileştirmeleri, düzeltmeleri ve breaking change&amp;#39;leri kapsar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release note ile changelog arasındaki fark nedir?&lt;/strong&gt;
Changelog her şeyi tutar, tam geçmişi isteyen herkes için. Release note ondan seçer: tek bir sürüm, sürümün kendilerini ilgilendirip ilgilendirmediğine karar veren okuyucular için yazılmış. Daha ayrıntılı karşılaştırma &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt; yazısında.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes ne anlama gelir?&lt;/strong&gt;
Release notes, kullanıcılara bir sürümde neyin değiştiğini anlatır. İfade, bir uygulama mağazasındaki &amp;quot;Yenilikler&amp;quot; metninden bir şirket sitesindeki bir sayfaya kadar, neyin yayımlandığını açıklayan her şeyi kapsar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her release note girdisi ne kadar uzun olmalı?&lt;/strong&gt;
Çoğu girdi için iki ila dört cümle yeter: sonuç, kimin etkilendiği ve ne yapılacağı. Bir breaking change ya da güvenlik düzeltmesi, bir tarih ya da geçiş gerektirdiği için daha uzun sürebilir.&lt;/p&gt;
</content:encoded></item><item><title>Stripe API versiyonlama: nasıl çalışır, neler kopyalanır</title><link>https://changeloop.dev/blog/tr/stripe-api-versioning/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/stripe-api-versioning/</guid><description>Stripe API versiyonlama hesabı tarihli bir sürüme sabitler, her istek bunu ezebilir. Nasıl çalıştığı, maliyeti ve küçük bir API&apos;nin kopyalayabilecekleri.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Stripe API versiyonlama tarihe göre çalışır. Her hesap, bir yayın tarihinden adını alan bir API sürümüne sabitlenir ve tek tek her istek bu sabitlemeyi bir &lt;code&gt;Stripe-Version&lt;/code&gt; header&amp;#39;ıyla ezebilir. Bu yazı sırasında (Ekim 2026), Stripe dokümanlarındaki güncel sürüm &lt;code&gt;2026-09-30.endive&lt;/code&gt; ve aynı şemayı çok daha küçük bir API bir hafta sonunda kopyalayabilir.&lt;/p&gt;
&lt;p&gt;Aşağıdaki her Stripe olgusu Stripe&amp;#39;ın kendi sayfalarından gelir ve kullanıldığı yerde bağlantılıdır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mekanizma&lt;/th&gt;
&lt;th&gt;Stripe ne yapıyor&lt;/th&gt;
&lt;th&gt;Kaynak&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Sürüm adı&lt;/td&gt;
&lt;td&gt;Bir tarih, 2024&amp;#39;ten beri bir release adı da (&lt;code&gt;2026-09-30.endive&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Varsayılan sürüm&lt;/td&gt;
&lt;td&gt;Hesaba sabitlenir, Workbench&amp;#39;te değiştirilir&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İstek başına ezme&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Stripe-Version&lt;/code&gt; header&amp;#39;ı ya da SDK seçeneği&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/upgrades&quot;&gt;Upgrades&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhook&amp;#39;lar&lt;/td&gt;
&lt;td&gt;Endpoint&amp;#39;te ayarlanan sürümde işlenir&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/upgrades&quot;&gt;Upgrades&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ritim&lt;/td&gt;
&lt;td&gt;Breaking change içermeyen aylık release&amp;#39;ler, yılda iki major release&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Eski sürümler&lt;/td&gt;
&lt;td&gt;Dahili sürüm değişikliği modülleriyle çalışır tutulur&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stripe.com/blog/api-versioning&quot;&gt;Engineering post&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Stripe API versiyonlama nasıl çalışır?&lt;/h2&gt;
&lt;p&gt;Stripe her hesaba varsayılan bir API sürümü verir ve bir sürüm adlandırmayan her istek onu kullanır. Çağıranlar ne zaman geçeceklerini, varsayılanı değiştirerek ya da tek tek isteklerde bir sürüm ayarlayarak seçer.&lt;/p&gt;
&lt;p&gt;Stripe&amp;#39;ın mühendislik yazısına göre hesap, ilk API isteğini yaptığında sabitlenir: hesap &amp;quot;automatically pinned to the most recent version available&amp;quot; olur ve o andan sonra her çağrıya bu sürüm örtük olarak atanır.&lt;/p&gt;
&lt;p&gt;Sürüm dizesi bir tarihtir. &lt;code&gt;2024-09-30.acacia&lt;/code&gt; release&amp;#39;inden beri bir ad da taşır, &lt;code&gt;2026-09-30.endive&lt;/code&gt; örneğindeki gibi. Tarih sürümleri sıralar, ad ise bir sürümün hangi major release ailesine ait olduğunu söyler.&lt;/p&gt;
&lt;h2&gt;İstek başına sürüm nasıl seçilir?&lt;/h2&gt;
&lt;p&gt;İstekte &lt;code&gt;Stripe-Version&lt;/code&gt; header&amp;#39;ını gönderin ya da sürümü SDK&amp;#39;da ayarlayın. Stripe&amp;#39;ın yükseltme rehberi header biçimini gösterir ve aynı çağrı canlı ve test ortamlarında çalışır.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;curl https://api.stripe.com/v1/charges \
  -u &amp;quot;$STRIPE_SECRET_KEY:&amp;quot; \
  -H &amp;quot;Stripe-Version: 2026-09-30.endive&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stripe&amp;#39;ın rehberi, sürümü bir SDK&amp;#39;da global olarak ya da istek başına ayarladığınızda yanıt nesnelerinin o sürümde döndüğünü not eder.&lt;/p&gt;
&lt;p&gt;Stripe ayrıca hesap varsayılanına yaslanmamayı önerir. Kendi sözleriyle, kodunuz sürüme karar versin ve bir panel ayarı vermesin diye, her istek için header ile ya da sabitlenmiş bir SDK ile sürümü belirtin.&lt;/p&gt;
&lt;p&gt;SDK&amp;#39;lar dile göre farklı sabitlenir. Dokümanlar, dinamik tipli kütüphanelerin son sürümlerinin o SDK release&amp;#39;i yayımlandığında en güncel olan API sürümünü kullandığını, güçlü tipli olanların (Java, Go ve .NET) ise ona sabitlendiğini söyler. Bir kütüphane sürümünü kurmak, fiilen bir API sürümü seçmektir.&lt;/p&gt;
&lt;h2&gt;Sürüm değiştiğinde webhook&amp;#39;lara ne olur?&lt;/h2&gt;
&lt;p&gt;Bir webhook olayı, sunucu kodunuzun kullandığı sürümde değil, endpoint&amp;#39;ine bağlı API sürümünde işlenir. Stripe&amp;#39;ın dokümanları, olayların endpoint oluşturulurken ayarlanan sürümü, yoksa hesap varsayılanını kullandığını söyler. SDK sürümünüzü değiştirmek webhook handler&amp;#39;ınızın aldığını değiştirmez.&lt;/p&gt;
&lt;p&gt;Bu yüzden istek yolunuz ve olay yolunuz iki farklı sürümde durabilir. Olay hedefleri için &lt;code&gt;snapshot_api_version&lt;/code&gt;&amp;#39;ı sadece hedefi oluştururken ayarlarsınız, yani farklı bir sürüm yeni bir hedef demektir.&lt;/p&gt;
&lt;p&gt;Stripe&amp;#39;ın buradaki yükseltme yolu paralel bir çalıştırmadır. Hedef sürümde yeni bir endpoint oluşturun, aynı olayları ikisine de gönderin, handler&amp;#39;a birini işlemeyi ve diğerini yok saymayı öğretin, sonra geçin ve eski endpoint&amp;#39;i devre dışı bırakın. Çakışma süresince her olay iki kez geldiği için handler idempotent olmalıdır. Bu, olay yayan her API için kopyalanacak iyi bir kalıptır ve gerektiren payload değişikliklerini duyurduğunuz yer &lt;a href=&quot;https://changeloop.dev/blog/tr/webhook-changelog/&quot;&gt;bir webhook changelog&amp;#39;u&lt;/a&gt; olur.&lt;/p&gt;
&lt;h2&gt;Aylık ve major release&amp;#39;ler nedir?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;2024-09-30.acacia&lt;/code&gt; release&amp;#39;inden beri Stripe aylık olarak breaking change içermeyen yeni bir API sürümü yayımlar ve yılda iki kez, breaking change içeren bir sürümle başlayan yeni bir major release çıkarır. Versioning sayfası, herhangi bir aylık release&amp;#39;e kodunuzu güncellemeden yükseltebileceğinizi, bir major release&amp;#39;in ise değişiklik gerektirebileceğini söyler.&lt;/p&gt;
&lt;p&gt;Major release&amp;#39;ler ad taşır. Versioning sayfası örnek olarak Basil&amp;#39;i verir ve Stripe&amp;#39;ın süreç duyurusu, adların bitkilerden geldiğini, Acacia ile başladığını ve aylık release&amp;#39;lerin kendilerinden önceki major release&amp;#39;in adını koruduğunu, böylece adın yükseltmenin güvenli olduğunu işaret ettiğini söyler. Stripe&amp;#39;ın &lt;a href=&quot;https://docs.stripe.com/changelog&quot;&gt;changelog&amp;#39;u&lt;/a&gt; kullanımdaki adları listeler ve bu yazı sırasında en yeni girdi &lt;code&gt;2026-09-30.endive&lt;/code&gt;&amp;#39;dir.&lt;/p&gt;
&lt;p&gt;Yani tarih &amp;quot;ne kadar yeni&amp;quot; sorusunu, ad ise &amp;quot;bu bir breaking sınırı mı&amp;quot; sorusunu cevaplar. Stripe&amp;#39;ın duyurusu istisnalara da yer bırakır: bir entegrasyonun onsuz ciddi biçimde etkileneceği yerde döngü dışı bir breaking change yayımlama hakkını saklı tutar. Duyuru &lt;a href=&quot;https://stripe.com/blog/introducing-stripes-new-api-release-process&quot;&gt;Stripe&amp;#39;s new API release process&lt;/a&gt; adresinde.&lt;/p&gt;
&lt;h2&gt;Stripe API&amp;#39;nin son sürümü nedir?&lt;/h2&gt;
&lt;p&gt;Bu yazı sırasında (Ekim 2026), Stripe&amp;#39;ın versioning sayfası güncel sürümün &lt;code&gt;2026-09-30.endive&lt;/code&gt; olduğunu söyler ve changelog&amp;#39;u aynı sürümü en yeni olarak listeler. Stripe her ay yeni bir sürüm yayımlar, bu yüzden bir makalede basılı her dize hızla eskir. Bir şeyi sabitlemeden önce canlı changelog&amp;#39;u okuyun ve test ettiğiniz sürümü sabitleyin.&lt;/p&gt;
&lt;h2&gt;Stripe eski sürümleri nasıl çalışır tutuyor?&lt;/h2&gt;
&lt;p&gt;Stripe, her breaking change&amp;#39;i kendi içinde tamamlanmış bir sürüm değişikliği modülü olarak yazarak ve modülleri verinin en yeni biçiminden geriye doğru uygulayarak eski sürümleri canlı tutar. &lt;a href=&quot;https://stripe.com/blog/api-versioning&quot;&gt;API versiyonlama üzerine mühendislik yazısı&lt;/a&gt; mekanizmayı anlatır.&lt;/p&gt;
&lt;p&gt;Her modül neyi değiştirdiğini bildirir, değişikliği belgelendirir ve bir dönüşüm fonksiyonu içerir. Yazı, bir alanın string&amp;#39;den hash&amp;#39;e değişmesi örneğini verir. Bir yanıt oluşturmak için sistem hedef sürümü bulur, sonra zamanda geriye yürür ve o sürüme varana kadar yol boyunca bulduğu her modülü uygular.&lt;/p&gt;
&lt;p&gt;Bu tasarımdan iki yan etki doğar ve yazı ikisini de adlandırır. Modüller dokunduğu alanları ve kaynakları bildirdiği için Stripe, API changelog&amp;#39;unu dağıtım sırasında onlardan üretebilir. Hesabın sürümü bilindiği için de dokümantasyon ona uyum sağlayabilir ve o sürümden beri geriye uyumsuz değişiklikler hakkında uyarabilir.&lt;/p&gt;
&lt;h2&gt;Maliyeti nedir ve küçük bir API ne kopyalamalı?&lt;/h2&gt;
&lt;p&gt;Versiyonlama mühendislik dikkati maliyeti taşır ve Stripe bunu söyler. Mühendislik yazısı bir bakım yükünü kabul eder ve yeni kod yazarken eski davranış için ne kadar az düşünmek gerekirse o kadar iyi olduğu hedefini belirtir. Ayrıca hiç sürüm değişikliği gerektirmemek için release öncesi hafif API incelemelerini de anlatır.&lt;/p&gt;
&lt;p&gt;Küçük bir API her eski sürüm için bir modül zincirini karşılayamaz ve buna ihtiyacı da yoktur. Değeri taşıyan parçaları kopyalayın:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Tarihli sürümler.&lt;/strong&gt; Bir tarih, neyin &amp;quot;major&amp;quot; sayıldığına dair yargı gerektirmez ve çağıranlar onu okuyabilir. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-versioning-best-practices/&quot;&gt;Versiyonlama en iyi uygulamaları&lt;/a&gt; makalesi bunu URL ve header şemalarıyla karşılaştırır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sabitlenmiş bir varsayılan.&lt;/strong&gt; Hesabı ya da anahtarı ilk kullanımda sürüme sabitleyin, böylece API çalışan bir entegrasyonun altından kaymaz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;İstek başına bir ezme.&lt;/strong&gt; Çağıranın yeni bir sürümü, taahhüt etmeden önce tek bir çağrıda, canlıda test etmesini sağlayan bir header.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webhook endpoint&amp;#39;inde bir sürüm.&lt;/strong&gt; Olay payload&amp;#39;ları, çağıranların en çok şaşırdığı yerdir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sürüm başına bir changelog girdisi.&lt;/strong&gt; Sürümü, tarihi, kimin etkilendiğini ve ne yapılacağını adlandırsın. &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Neyin breaking sayıldığı&lt;/a&gt;, yeni bir sürüme neyin ait olduğunun testidir ve &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&lt;/a&gt; makalesi girdinin kendisini ele alır.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Desteklenen sürüm sayısı sizi zorlayana kadar modül zincirini atlayın. İki ya da üç canlı sürüm birkaç dal ve bir sunset tarihiyle idare edilebilir; bunu &lt;a href=&quot;https://changeloop.dev/blog/tr/sunsetting-api-version/&quot;&gt;bir API sürümünü kapatmak&lt;/a&gt; yazısı adım adım anlatır.&lt;/p&gt;
&lt;p&gt;Tarihli bir changelog yayımlıyorsanız, sürüm geçmişi girdileri kadar iyidir. &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Changeloop&lt;/a&gt;&amp;#39;ta her merge edilen pull request&amp;#39;ten bir girdi taslağı hazırlanır ve changelog sayfasına ve feed&amp;#39;e yayımlanmadan önce bir insanın onaylaması için bekletilir. Sürüm başına girdi orada yazılır ve tek insan kapısı, çağıranın ne yapması gerektiğini söyleyen gözden geçirmedir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Stripe API&amp;#39;nin son sürümü nedir?&lt;/strong&gt;
Bu yazı sırasında (Ekim 2026), Stripe&amp;#39;ın versioning sayfası güncel sürümün &lt;code&gt;2026-09-30.endive&lt;/code&gt; olduğunu söyler. Stripe her ay yeni bir sürüm çıkarır, bu yüzden sabitlemeden önce changelog&amp;#39;una bakın ve hesap varsayılanına yaslanmak yerine sürümü kodunuza yazın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir istekte Stripe API sürümünü nasıl ayarlarım?&lt;/strong&gt;
&lt;code&gt;Stripe-Version&lt;/code&gt; header&amp;#39;ını gönderin, örneğin &lt;code&gt;Stripe-Version: 2026-09-30.endive&lt;/code&gt;, ya da sunucu tarafı SDK&amp;#39;nızda sürümü global olarak veya istek başına ayarlayın. İkisi de yoksa istek, Workbench&amp;#39;te sizin ayarladığınız hesabınızın varsayılan sürümünü kullanır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Webhook&amp;#39;lar isteklerimle aynı Stripe API sürümünü kullanır mı?&lt;/strong&gt;
Mutlaka değil. Webhook olayları endpoint oluşturulurken ayarlanan sürümü, hiçbiri ayarlanmadıysa hesap varsayılanını kullanır. SDK&amp;#39;nızı yükseltmek webhook handler&amp;#39;ınızın aldığı payload&amp;#39;ı değiştirmez, bu yüzden endpoint&amp;#39;leri ayrı yükseltin ve paralel test edin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stripe tarzı tarihli versiyonlama küçük bir API için doğru mu?&lt;/strong&gt;
Tarihli sürümler, sabitlenmiş bir varsayılan, istek başına bir header ve sürüm başına bir changelog girdisi ucuzdur ve kopyalamaya değer. Aynı anda birçok eski sürümü desteklemediğiniz sürece, sürüm değişikliği modüllerinin iç zinciri öyle değildir. İki canlı sürümle ve eskisi için bir sunset tarihiyle başlayın.&lt;/p&gt;
</content:encoded></item><item><title>Changelog&apos;u kim yazar, kim yazmalı</title><link>https://changeloop.dev/blog/tr/changelog-entry-ownership/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/changelog-entry-ownership/</guid><description>Changelog&apos;u kim yazar? PR yazarı neyin değiştiğini, PM neden önemli olduğunu bilir. İkisi de tek başına iyi kayıt yazamaz, varsayılan seçim onu eskitir.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir ekibe changelog&amp;#39;u kimin yazdığını sorun ve dürüst cevap genellikle &amp;quot;kim hatırlarsa&amp;quot; olur, ki bu
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-ci-enforcement/&quot;&gt;CI&amp;#39;da bir changelog kaydını zorunlu kılmak&lt;/a&gt;&amp;#39;ın mekanik
seviyede düzeltmek için var olduğu aynı başarısızlık modudur. Ama bir kaydın var olmasını zorlamak,
kimin onu iyi yazmak için nitelikli olduğuna karar vermez, ve bu soruyu atlayan ekipler genellikle
zorlaması en kolay olana, genellikle PR yazarına, bunun gerçekten onu iyi yazabilecek kişi olup
olmadığını kontrol etmeden varsayılan olarak yönelir.&lt;/p&gt;
&lt;h2&gt;PR yazarı neden otomatik olarak en iyi changelog yazarı olmuyor?&lt;/h2&gt;
&lt;p&gt;Çünkü uygulamayı bilir, illa etkiyi değil, ve bunlar farklı bilgi türleridir. &lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;Conventional
commits nerede durur&lt;/a&gt;, bu boşluğu commit mesajı
tarafından ele alır: &lt;code&gt;fix(auth): reject expired refresh tokens&lt;/code&gt; doğrudur ve bir müşteriye hiçbir
şey söylemez, ve o düzeltmeyi yazan kişi genellikle onu çevirmek için en az donanımlı kişidir,
çünkü saatlerdir hata açısından düşünmüştür ve bir kullanıcının gerçekte ne yaşadığına dair dışarıdan
görüşü kaybetmiştir. Bu, teknik yazarlığın bir meslek olarak var olmasının aynı nedenidir: uygulamayı etkiye çevirmek, o
şeyi inşa etmiş olmaktan farklı bir beceridir, ve mühendis kodda ne kadar iyi olursa olsun pratik
gerektirir.&lt;/p&gt;
&lt;h2&gt;Bu, ürün veya destek ekibinin her kaydı onun yerine yazması gerektiği anlamına mı gelir?&lt;/h2&gt;
&lt;p&gt;Hayır, çünkü onların ters bir boşluğu vardır: kullanıcılar için neyin önemli olduğunu bilirler ama
her zaman gerçekte neyin gönderildiğini bilmezler, ki bu okunabilir ama kapsamda arada sırada
yanlış kayıtlar üretir, hâlâ bir flag&amp;#39;in arkasında olan bir özellik için &amp;quot;artık X&amp;#39;i destekliyor&amp;quot;
iddiası, veya üç durumdan sadece birini kapsarken tam olarak tarif edilen bir düzeltme.
Mühendis-yazılı kayıtların başarısızlık modu okunamaz-ama-doğru&amp;#39;dur; PM-yazılı kayıtların
başarısızlık modu okunabilir-ama-doğrulanmamış&amp;#39;tır. Hiçbir rol, iyi bir kaydın ihtiyaç duyduğu iki
yarının ikisine de sahip değildir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rol&lt;/th&gt;
&lt;th&gt;Genellikle doğru yapar&lt;/th&gt;
&lt;th&gt;Genellikle yanlış yapar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Kodu yazan mühendis&lt;/td&gt;
&lt;td&gt;Neyin değiştiğinin tam kapsamı&lt;/td&gt;
&lt;td&gt;Onu inşa etmeyen biri için çerçeveleme&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PM veya destek lideri&lt;/td&gt;
&lt;td&gt;Kullanıcı için neden önemli olduğu&lt;/td&gt;
&lt;td&gt;Gerçekte neyin gönderildiğinin kesin sınırları&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adanmış changelog sahibi&lt;/td&gt;
&lt;td&gt;Tutarlı ses, kapsamı çapraz kontrol eder&lt;/td&gt;
&lt;td&gt;Karşı kontrol için yukarıdaki ikisine de ihtiyaç duyar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Çalışan bir sahiplik modeli gerçekte neye benziyor?&lt;/h2&gt;
&lt;p&gt;Değişikliğe en yakın olandan bir taslak, kullanıcıya en yakın olan tarafından incelenmiş, herkesin
başka birinin sorunları yakalayacağını varsaymak yerine son ifadeden sorumlu isimlendirilmiş bir
kişiyle. Taslağın iyi olmaktan çok var olması ve doğru olması gerekir; neyin değiştiğini
doğru söyleyen mühendis-yazılı kaba bir cümle, cilalı ama doğrulanmamış bir cümleden daha iyi bir
başlangıç noktasıdır, çünkü netlik için yeniden yazmak doğruluk için yeniden yazmaktan daha
kolaydır. İnceleme adımı, bir PM veya destek liderinin taslağı okuyup okunabilirlik boşluğunu
yakalayan tek soruyu sorduğu yerdir: kodu görmeseydim bunu anlar mıydım.&lt;/p&gt;
&lt;h2&gt;Sorumlu kişi her zaman aynı mı olmalı, yoksa rotasyon mu olmalı?&lt;/h2&gt;
&lt;p&gt;En azından son onay için isimlendirilmiş ve sabit, rotasyona kıyasla kazanır. Rotasyonlu bir
sahip, her kaydın ekibin geleneklerini sıfırdan yeniden türeten biri tarafından incelendiği
anlamına gelir, ki bu tam olarak sesin kayıttan kayda kaymasının ve bir okuyucunun changelog&amp;#39;un bir
komite tarafından yazıldığını fark etmeye başlamasının yoludur. Tek bir kişi, veya çok küçük sabit
bir grup, zamanla yargı çağrılarını biriktirir, ne zaman &amp;quot;iyileştirildi&amp;quot; demek ne zaman belirli
sayıyı adlandırmak arasında, ne zaman bir düzeltmenin kendi kaydına ihtiyaç duyduğu ne zaman bir
grupla katlanacağı arasında, ve o yargı işi eşit dağıtmaktan daha değerlidir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Taslak (mühendis, PR&amp;#39;dan):
&amp;quot;Fixed pagination cursor not respecting the `sort` param
in some edge cases.&amp;quot;

İncelendi (changelog sahibi, gerçek PR&amp;#39;a karşı kontrol edildi):
&amp;quot;Düzeltildi: tarihe göre sıralanan export&amp;#39;lar ilk sayfanın
ötesinde sırasız sonuçlar döndürebiliyordu. Artık tüm
sayfalarda tutarlı.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Küçük bir ekip bir satır metin için bu kadar sürece ihtiyaç duyar mı?&lt;/h2&gt;
&lt;p&gt;Ayrı kişiler olarak roller değil, ama iki adım tek başına bile hâlâ önemlidir. Bir kişilik bir ekip
hem mühendis hem de incelemecidir, ve bu ölçekte hayatta kalan disiplin, incelemeyi ayrı bir
zihinsel geçiş olarak yapmaktır, düzeltmeyi yazmaktan onu aynı nefeste yayımlamaya doğrudan
atlamak değildir. Küçük ölçekteki tuzak, ikinci bir kişinin eksikliği değil, hiçbir dış güç
zorlamadığı için ikinci geçişi tamamen atlamaktır, ve o geçişin yakalamak için var olduğu doğruluk
boşluğu, aynı kişinin teorik olarak kendi kör noktasını fark edebileceği için ortadan kalkmaz.&lt;/p&gt;
&lt;h2&gt;Son kayıttan kimse sorumlu olmadığında ne olur?&lt;/h2&gt;
&lt;p&gt;Changelog tamamen başarısız olmak yerine düzensiz şekilde bozulur, ki bu daha kötüdür çünkü bir
okuyucu bunu işaret edene kadar kimse fark etmez. Bazı kayıtlar keskin kalır çünkü onları yazan
kişi umursamıştır; diğerleri belirsizleşir, &amp;quot;çeşitli iyileştirmeler ve hata düzeltmeleri&amp;quot;, çünkü
onları yazan kişi hızlı hareket ediyordu ve kimse yayımlanmadan önce bunu yakalamadı. &lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a
Changelog&lt;/a&gt;&amp;#39;ın format kısıtlamaları yapısal kaymayı yakalar,
eksik tarihler, yanlış kategoriler, ama hiçbir şablon teknik olarak iyi biçimlendirilmiş belirsiz
bir kaydı yakalamaz, ki bu tam olarak isimlendirilmiş bir sahibin kapatmak için orada olduğu
boşluktur.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Changelog sahibi bir mühendislik mi yoksa ürün rolü mü olmalı?&lt;/strong&gt;
Kişi hem kapsamı doğrulamak için teknik akıcılığa hem de dışarıdan bir okuyucu için yazacak kadar
uygulamadan mesafeye sahipse ikisi de işe yarayabilir; unvan, ikisini de yapıp yapamadığından, veya
yapamadığı yarı için kime sorması gerektiğini bilip bilmediğinden daha az önemlidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changelog sahipliği için rotasyonlu bir nöbetçi tarzı program hiç uygun mudur?&lt;/strong&gt;
Hacim için bazen, ekip bir kişinin her şeyi incelemesi için çok küçükse; ses ve yargı için hayır,
çünkü rotasyonun aşındırdığı tam olarak budur. Yazma yükünü paylaşırken sabit bir incelemeciyi
koruyan bir rotasyon, kaymadan faydayı elde eder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mevcut sahiplik yapısında bir şeylerin yanlış olduğunun en hızlı işareti nedir?&lt;/strong&gt;
Kim yazdığını izleyen bir kalıpta, doğru ama okunamaz, veya okunabilir ama kapsamda yanlış
kayıtlar. Kalite tutarlı kalmak yerine yazarla ilişkiliyse, boşluk sahipliktir, yazma becerisi
değildir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Otomasyon sahipliğin ne kadar önemli olduğunu azaltır mı?&lt;/strong&gt;
Ne kadar yazmaya ihtiyaç olduğunu azaltır, ne kadar yargıya ihtiyaç olduğunu değil. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog
otomasyonu&lt;/a&gt;, bir pipeline&amp;#39;ın güvenle üretebileceklerini ele alır,
biçimlendirme, yayınlama, çapraz gönderim; ifade, gruplandırma ve bahsetmeye değer sayılan şey,
pipeline&amp;#39;ın ne kadarı otomatikleştirilmiş olursa olsun insan kararları olarak kalır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PR yazarı ile inceleyen kişi ifade konusunda anlaşamazsa ne olur?&lt;/strong&gt;
Karar inceleyen kişiye aittir, çünkü cevapladığı soru, dışarıdan bir okuyucu bunu anlar mıydı,
rolün korumak için var olduğu sorudur. Bu, mühendisin okumasını değersiz kılmaz: anlaşmazlık
ifadeden çok doğruluk hakkındaysa, inceleyen kişi geri çekilir, çünkü kapsamı doğru almak yazarın
yarısıdır. İki tür anlaşmazlığı, ifade ile doğruluk, ayırmak bunların çoğunun çıkmaza dönüşmesini
engeller.&lt;/p&gt;
</content:encoded></item><item><title>Acil durum release notes: zaman baskısı altında yazmak</title><link>https://changeloop.dev/blog/tr/emergency-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/emergency-release-notes/</guid><description>Bir olay kaynaklı sürüm, günler değil dakikalar içinde yazılmış notlara ihtiyaç duyar, ve olağan yazım süreci sahip olmadığınız zamanı varsayar.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Çoğu release notes, kod bittikten sonra rahatça gözden geçirilerek ve kimsenin onları ne kadar
aciliyetle okuması gerektiğiyle hiçbir ilgisi olmayan bir programa göre yayımlanarak yazılır. Bir
acil durum sürümü, bir güvenlik yaması, bir veri kaybı hatası, bir kesinti düzeltmesi, bu
koşulların her birini aynı anda tersine çevirir: notlar, çoğu insanın normalde yazmaya başlayacağı
zamandan önce var olmalı, neredeyse hiç inceleme almaz, ve rahat değil endişeli insanlar tarafından
okunur. &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Release notes nasıl yazılır&lt;/a&gt; normal süreci ele
alır; bu, onu takip etmek için zaman kalmadığında neyin değiştiğiyle ilgilidir.&lt;/p&gt;
&lt;h2&gt;Başka hiçbir şeyi doğru yapmasa da bir acil durum release notu&amp;#39;nun mutlaka doğru yapması gereken tek şey nedir?&lt;/h2&gt;
&lt;p&gt;Okuyucunun bir şey yapması gerekip gerekmediği, öncesinde hiçbir çerçeveleme olmadan ilk cümlede
söylenmiş. Olay kaynaklı bir release notuna rastlayan bir okuyucu, sorunu bir durum sayfasından,
bir destek konusundan, veya kendi kullanıcılarından duyduğu için genellikle zaten endişelidir, ve
eylem maddesinden önce bağlamla açılan bir not, tam olarak alıkoymanın en kötü okunduğu koşullarda
bilgiyi alıkoyma gibi okunur. &amp;quot;Hiçbir işlem gerekmiyor, bu, sömürmek için kullanıcı verisi
gerektirmeyen bir güvenlik açığını yamalar&amp;quot; ve &amp;quot;Hemen güncelleyin: bu sürüm bir hesabın verilerini
başka birine gösterebilecek bir hatayı düzeltir&amp;quot; ikisi de tek bir cümledir, ve ikisi de panik
içindeki bir okuyucunun başka bir şey okumadan önce ihtiyaç duyduğu tüm işi yapar.&lt;/p&gt;
&lt;h2&gt;Buna zaman kalmadığında olağan düzenleme geçişi hâlâ geçerli mi?&lt;/h2&gt;
&lt;p&gt;Sıkıştırma içgüdüsü, onu normalde üreten çoklu taslak süreci böyle olmasa bile hayatta kalır.
&lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Yeniden yazım&lt;/a&gt;, ayrıntılı bir ilk taslağı temel cümlesine
indirmeyi tarif eder; zaman baskısı altında genellikle kesecek bir ilk taslak yoktur, ki bu
disiplinin sonrasında ayrı bir geçiş olarak değil, siz yazarken kafanızda çalışması gerektiği
anlamına gelir. Buna yaklaşmanın en hızlı yolu: &amp;quot;bilmem gereken ne&amp;quot; diye soran birine yüksek sesle
söyleyeceğiniz cümleyi yazın, sonra durun, çünkü o cümle genellikle hem üretilmesi en hızlı hem de
o durumdaki bir okuyucunun gerçekten işleyeceği tek cümledir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Normal release notu&lt;/th&gt;
&lt;th&gt;Acil durum release notu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Kod incelemesinden sonra, yayımlanmadan önce yazılır&lt;/td&gt;
&lt;td&gt;Genellikle düzeltmeyle birlikte, tam inceleme öncesi yazılır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Birçok kayıt arasında taranabilirlik için optimize edilmiş&lt;/td&gt;
&lt;td&gt;Bir kaydın stres altında izole okunması için optimize edilmiş&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detayı bağlantılı bir changelog&amp;#39;a erteleyebilir&lt;/td&gt;
&lt;td&gt;En önemli tek gerçeği öne çıkarmalı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Çerçeveleme ve bağlam hoş karşılanır&lt;/td&gt;
&lt;td&gt;Eylem maddesinden önceki çerçeveleme gecikme gibi okunur&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Soruna neyin sebep olduğundan tam emin olmadan önce bir not yayımlamak hiç uygun mudur?&lt;/h2&gt;
&lt;p&gt;Evet, not sahip olmadığınız bir güveni ima etmek yerine o belirsizlik konusunda dürüstse. &amp;quot;Ödeme
sayfasında yükselen hata oranları için bir düzeltme dağıttık; hâlâ kök nedeni doğruluyoruz ve bu
notu güncelleyeceğiz&amp;quot; savunulabilir ve doğru şekilde zaman kazandırır; gerçekte doğrulamadığınız
belirli bir nedeni belirten bir not, yanlış çıkarsa insanların size sonradan karşı gösterdiği türden
bir tahmin haline gelir. Burada önemli olan disiplin teşhis hızı değildir, notun güveninin ekibin
gerçek güveninden hiçbir zaman fazla olmamasıdır, çünkü acil durum notundaki yanlış bir teknik
iddia, kabul edilmiş bir bilinmezden güvene daha fazla zarar verir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Fazla emin, doğrulanmamış:
&amp;quot;Fixed: a race condition in the payment webhook handler
caused duplicate charges.&amp;quot;

Zaman baskısı altında dürüst:
&amp;quot;Düzeltildi: bazı müşterilere tek bir sipariş için iki
kez ücret yansıtıldı. Yeni oluşumları durdurduk ve
etkilenen hesapları 24 saat içinde iade ediyoruz. Kök
neden araştırılıyor.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Bir acil durum notu soruna neyin sebep olduğunu mu, yoksa sadece düzeltildiğini mi söylemeli?&lt;/h2&gt;
&lt;p&gt;Neyin düzeltildiğini ve okuyucunun ne yapması gerektiğini söyleyin; kök nedeni tahmin edilmiş değil
gerçekten bilinene kadar bir takip için saklayın. Bir olayın ortasındaki bir okuyucu tam olarak iki
gerçek ister, bu çözüldü mü ve beni etkiliyor mu, ve doğru olsa bile bir kök neden açıklaması, onu
kaybetmenin en kötü olası anında bu iki gerçekle dikkat için rekabet eder. İnceleme bittikten sonra
ayrı yayımlanan post-mortem, kök nedenin ait olduğu yerdir; iki belgeyi zaman baskısı altında
karıştırmak, yazması daha yavaş ve okuması daha yavaş bir not üretir, bir acil durumun ihtiyaç
duyduğunun tam tersi.&lt;/p&gt;
&lt;h2&gt;Mobil uygulamalardaki zorunlu güncelleme sorunu burada da geçerli mi?&lt;/h2&gt;
&lt;p&gt;Aynı ilke, daha da sıkıştırılmış. &lt;a href=&quot;https://changeloop.dev/blog/tr/mobile-app-release-notes/&quot;&gt;Mobil uygulamalar için release notes&lt;/a&gt;,
notun her şeyden önce nedeni ve son tarihi belirtmesi gerektiği zorunlu güncellemeleri ele alır,
çünkü okuyucu zaten seçeneği olmadığı için sinirlenmiştir; acil durum web release notu genellikle
okuyucu için, ona göre hareket edip etmeyeceğini seçtiği anlamda opt-in&amp;#39;dir, ama aynı &amp;quot;önce
kısıtlamayı belirt&amp;quot; içgüdüsü uygulanır, sadece farklı bir sebeple: sinirlenme değil, aciliyet.&lt;/p&gt;
&lt;h2&gt;Öyle olmaması gerekirken bir acil durum notunun bir suç kabulü gibi okunması nasıl önlenir?&lt;/h2&gt;
&lt;p&gt;Düzeltmeyi ve etkisini tarif edin, suçu değil, ve aşırı özür dileme dürtüsüne direnin, ki bu yukarıdaki
iki gerçeği isteyen bir okuyucu için dolgu gibi okunur. &amp;quot;Bazı export&amp;#39;ları etkileyen bir hata bulduk
ve düzelttik&amp;quot;, olana drama yüklemeden ne olduğunu söyler; &amp;quot;Değerli müşterilerimizi etkileyen bu
ciddi sorun için son derece üzgünüz&amp;quot;, okuyucunun istemediği duygusal bir anı sunmak için yararlı
bilgiyi tam bir cümle geciktirir. Kısa, gerçeğe dayalı bir not soğuk değildir, gerçek baskı altında
sabırsızlık olan, güvence ihtiyacı olmayan okuyucunun gerçek durumuna saygı duyar.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir acil durum release notu aynı inceleme sürecinden mi geçmeli?&lt;/strong&gt;
Daha hafif bir tanesinden, hiçbirinden değil: notun kesinliği abartmadığını kontrol eden tek bir
hızlı incelemeci, maliyeti birkaç dakikaya değer, çünkü incelenmemiş bir teknik iddianın yanlış
olma riski tam olarak hızlı yazıldığı için daha yüksektir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Daha fazla detaya bağlantısı olmadan bir acil durum notu yayımlamak sorun mu?&lt;/strong&gt;
Sadece kısa süreliğine. Bağlantısız bir not yayımlanan ilk şey olarak işe yarar; ikisinden biri var
olur olmaz bir durum sayfasına veya takibe bir tane ekleyin, çünkü size verdiğiniz tek cümleden
fazlasını isteyen bir okuyucunun gidecek bir yere ihtiyacı vardır, orası &amp;quot;daha fazla detay yakında&amp;quot;
dese bile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir acil durum notu hiç tamamen atlanıp düzeltmenin sessizce yayınlanmasına izin verilmeli mi?&lt;/strong&gt;
Sadece hiçbir okuyucunun fark edemeyeceği veya etkilenemeyeceği sorunlar için; bir okuyucunun
sorunu yaşamış olma ihtimali varsa, not ona bittiğini söyleyen şeydir, ve sessizlik sorunun hâlâ
aktif olabileceği gibi okunur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir acil durum notu olay çözüldükten sonra ne kadar süre sabitlenmiş veya belirgin kalmalı?&lt;/strong&gt;
Acil kaygı penceresi kapanana kadar, tipik olarak bir veya iki gün, sonra başka herhangi bir kayıt
gibi normal changelog&amp;#39;a katlanabilir; haftalarca sabitlenmiş kalan bir not, çözülmüş yerine
çözülmemiş bir endişe gibi okunmaya başlar.&lt;/p&gt;
</content:encoded></item><item><title>Protobuf breaking change&apos;leri: wire&apos;da neler hayatta kalır</title><link>https://changeloop.dev/blog/tr/grpc-protobuf-api-changes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/grpc-protobuf-api-changes/</guid><description>Protobuf breaking change&apos;leri URL&apos;de değil, wire&apos;da olur. Bazı alan değişiklikleri ücretsizdir, diğerleri her client&apos;ı sessizce bozar, diff&apos;te aynıdır.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir REST API&amp;#39;si bir JSON şekli değiştiğinde değişir, ve o şeklin çoğu bir tarayıcıda
okuyabileceğiniz yanıtta görünürdür. Bir gRPC API&amp;#39;si bir &lt;code&gt;.proto&lt;/code&gt; dosyası değiştiğinde değişir, ve
Protocol Buffers&amp;#39;ın ikili wire formatının, alan adlarının söylediğiyle hiçbir ilgisi olmayan, bir
client&amp;#39;ın neye tahammül edebileceğine dair kendi kuralları vardır. Diff&amp;#39;te eşit derecede küçük
görünen iki düzenleme, bir alanı yeniden numaralandırmak ile bir tane eklemek, &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking
change&lt;/a&gt;&amp;#39;in genel olarak çizdiği bir çizginin karşıt taraflarına düşer:
biri mevcut her client için görünmezdir, diğeri hepsini bir anda bozar.&lt;/p&gt;
&lt;p&gt;Protobuf breaking change&amp;#39;lerini güvenli olanlardan ayırmak, değişikliğin bir &lt;code&gt;.proto&lt;/code&gt; diff&amp;#39;inde
nasıl okunduğuna göre tahmin yürütmek değil, wire formatının kendi kurallarını okumak demektir.&lt;/p&gt;
&lt;h2&gt;Protobuf&amp;#39;ta alan numaralandırması neden alan adından daha çok önemlidir?&lt;/h2&gt;
&lt;p&gt;Çünkü wire formatı alanları isme göre değil, numaraya göre kodlar. Her dildeki üretilen kod bu
numaraları okur ve yazar; &lt;code&gt;.proto&lt;/code&gt; dosyanızdaki &lt;code&gt;email&lt;/code&gt; alan adı, ağ üzerinden gönderilen ikili
baytlara hiç dokunmayan, insanlar için bir kolaylıktır. Bir alanı yeniden adlandırmak, &lt;code&gt;email&lt;/code&gt;&amp;#39;i
&lt;code&gt;email_address&lt;/code&gt;&amp;#39;e, numara aynı kaldığı sürece ikili wire&amp;#39;da güvenlidir, ki bu REST&amp;#39;e alışmış
mühendisleri şaşırtır, orada yeniden adlandırılmış bir JSON key&amp;#39;i tam olarak bir client&amp;#39;ı bozan
değişiklik türüdür. İstisna aynı REST durumudur:
&lt;a href=&quot;https://protobuf.dev/programming-guides/json/&quot;&gt;ProtoJSON ve text formatları&lt;/a&gt; adı serileştirir, bu
yüzden yeniden adlandırma JSON transcoding&amp;#39;i (örneğin bir grpc-gateway), text-format dosyalarını
ve field mask&amp;#39;leri bozar. Aynı alanı yeniden numaralandırmak, adı koruyup &lt;code&gt;1&lt;/code&gt;&amp;#39;i &lt;code&gt;7&lt;/code&gt;&amp;#39;ye değiştirmek, tam
tersidir: sadece isimleri gösteren bir kod incelemesinde görünmezdir, ve o noktadan itibaren bir
client&amp;#39;ın gönderdiği veya aldığı her mesajı bozar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Değişiklik&lt;/th&gt;
&lt;th&gt;Wire&amp;#39;da güvenli mi&lt;/th&gt;
&lt;th&gt;Neden&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Bir alanı yeniden adlandırmak, numarasını korumak&lt;/td&gt;
&lt;td&gt;İkili evet, JSON ve text hayır&lt;/td&gt;
&lt;td&gt;İkili kodlama numarayı kullanır; ProtoJSON ve text formatı adı kullanır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir alanın numarasını değiştirmek&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Mevcut her mesaj artık yanlış alan olarak okunur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yeni numarayla yeni bir alan eklemek&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Eski client&amp;#39;lar tanımadıkları alanları görmezden gelir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir alanı kaldırmak, eski numarasını başka bir şey için yeniden kullanmak&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Eski veri yanlış yeni alana kod çözülür&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir alanın tipini uyumsuz şekilde değiştirmek (örn. &lt;code&gt;int32&lt;/code&gt;&amp;#39;den &lt;code&gt;string&lt;/code&gt;&amp;#39;e)&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Wire kodlaması tipe göre farklılık gösterir&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Bir alanı kaldırmayı REST JSON yanıtında yapmaktan farklı kılan nedir?&lt;/h2&gt;
&lt;p&gt;Numara radyoaktif hale gelir. &lt;a href=&quot;https://protobuf.dev/programming-guides/proto3/&quot;&gt;Protobuf&amp;#39;ın kendi rehberliği&lt;/a&gt;, kaldırılan bir alanın numarasını
yeniden kullanılmasına izin vermek yerine &lt;code&gt;reserved&lt;/code&gt; olarak işaretlemeyi önerir, çünkü gerçek
hasarın olduğu yer yeniden kullanımdır: geçen ayın üretilen kodunu hâlâ çalıştıran bir client,
alanın eski numarasını eski anlamı için kullanarak bir mesaj gönderir, ve artık o numaranın başka
bir şey ifade etmesini bekleyen sunucu, veriyi tamamen reddetmek yerine sessizce yanlış
yorumlar. REST&amp;#39;te eşdeğer bir tuzak yoktur, çünkü kaldırılan bir JSON key&amp;#39;i basitçe görünmeyi
bırakır; eski bir client&amp;#39;ın isteğinin sessizce başka bir şey olarak yeniden yorumlanmasının bir
yolu yoktur. Bir mesajın en üstünde &lt;code&gt;reserved 4, 9, 12;&lt;/code&gt; olan bir &lt;code&gt;.proto&lt;/code&gt; dosyası kalıcı bir
yaradır, ve amaç budur: numaranın, tarihini bilmeyen biri tarafından yeni bir alana verilmesini
engeller.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-protobuf&quot;&gt;message Invoice {
  reserved 4; // eskiden `legacy_customer_id`, 2026-06-01&amp;#39;de silindi
  reserved &amp;quot;legacy_customer_id&amp;quot;; // adı da, JSON/text için
  string customer_id = 5;
  string status = 6;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Bir alan eklemek hiç bir changelog kaydı gerektirir mi?&lt;/h2&gt;
&lt;p&gt;Genellikle breaking change kaydı değil, ama sıklıkla normal bir kayıt gerektirir, çünkü &amp;quot;wire&amp;#39;da
güvenli&amp;quot; ile &amp;quot;önemseyen bir okuyucu için görünmez&amp;quot; iki farklı iddiadır. Bir yanıt mesajına alan
eklemek yapısal olarak hiçbir şeye mal olmaz, eski client&amp;#39;lar mesajı kod çözer ve yeni alanı
otomatik olarak görmezden gelir. Ama o servise karşı yeni bir entegrasyon kuran biri, birisi ona
söylemedikçe alanın var olduğunu bilmenin bir yolunu bulamaz, çünkü başarılı bir build veya geçen
bir testte yeni bir opsiyonel alanı görünür kılan hiçbir şey yoktur. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API
changelog&lt;/a&gt; genel olarak eklemeli bir kaydın okuyuculara ne borçlu
olduğunu ele alır; yine de bir tane yazmanın gRPC&amp;#39;ye özgü nedeni, bir hata ayıklayıcıda REST
yanıtına göz atarak yeni bir key&amp;#39;in ortaya çıktığını fark etmenin bir eşdeğerinin olmamasıdır.&lt;/p&gt;
&lt;h2&gt;Bu, GraphQL çağıranların uğraştığı şeyden nasıl farklıdır?&lt;/h2&gt;
&lt;p&gt;Eklemeler için kurallar aynıdır, ama maruziyet farklıdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/graphql-schema-deprecation/&quot;&gt;GraphQL şema deprecation&amp;#39;ı&lt;/a&gt;,
bir client&amp;#39;ın yalnızca açıkça istediği alanları aldığı bir modeli ele alır, ki bu eklemeli
değişiklikleri esasen risksiz ve kaldırmaları tek gerçek tehlike yapar. gRPC client&amp;#39;ları ise
sunucunun gönderdiği her şeyi alır ve hepsini kendi derlenmiş şema kopyasına karşı kod çözer; bir
client&amp;#39;ın maruziyeti istediğiyle sınırlı değildir, sadece üretilen kodunun ne okuyabildiğiyle
sınırlıdır. Bu fark changelog yazarken önemlidir: bir GraphQL kaydı, client&amp;#39;ların istemedikleri
alanlardan korunduğunu makul olarak varsayabilir, ve bir gRPC kaydı bunu hiç varsayamaz.&lt;/p&gt;
&lt;h2&gt;Bir gRPC servisini versiyonlamak REST&amp;#39;in &lt;code&gt;/v1/&lt;/code&gt;, &lt;code&gt;/v2/&lt;/code&gt;&amp;#39;si gibi mi çalışır?&lt;/h2&gt;
&lt;p&gt;Niyet aynı olsa bile mekanizma farklıdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-versioning-best-practices/&quot;&gt;Bir REST API&amp;#39;sinde v1 ve v2 nedir&lt;/a&gt;,
versiyonlamayı farklı sözleşmelere hizmet eden paralel URL yolları olarak ele alır; gRPC servisleri
tipik olarak &lt;code&gt;.proto&lt;/code&gt; dosyasının kendisindeki paket adı üzerinden versiyonlanır,
&lt;code&gt;payments.v1.InvoiceService&lt;/code&gt;, bir client&amp;#39;ın istediği bir URL segmenti yerine çevirdiği tam nitelikli
servis adını değiştirerek &lt;code&gt;payments.v2.InvoiceService&lt;/code&gt; olur. Her iki yaklaşım da aynı sorunu çözer,
yeni biri varken eski bir sözleşmenin çalışmaya devam etmesine izin vermek, ama REST geçmişinden
gelen bir ekip genellikle bir versiyon numarasını yanlış yerde arar ve paket bildiriminin o işi
yaptığını kaçırır.&lt;/p&gt;
&lt;h2&gt;Bir gRPC changelog kaydı gerçekte neyi adlandırmalı?&lt;/h2&gt;
&lt;p&gt;Mesajı, alan numarasını, ve eylemde bulunup bulunmayacağına karar veren bir okuyucu için önem
sırasına göre, ekleme mi yoksa migrasyon gerektiren bir kaldırma mı olduğunu. &amp;quot;&lt;code&gt;Order&lt;/code&gt;&amp;#39;a
&lt;code&gt;shipping_address&lt;/code&gt; (alan 8) eklendi&amp;quot;, bir entegratöre üretilen kodu güncellemek ve kullanmaya
başlamak için gereken her şeyi söyler. &amp;quot;&lt;code&gt;Invoice&lt;/code&gt;&amp;#39;ta alan 4 rezerve edildi, &lt;code&gt;legacy_customer_id&lt;/code&gt;
kayboldu&amp;quot;, ona kod tabanlarındaki herhangi bir şeyin hâlâ o alanı okuyup okumadığını kontrol
etmesini söyler, ki bu REST tarzı bir &amp;quot;yanıttan bir alan kaldırıldı&amp;quot; notunun aynı aciliyetle
iletmediği bir şeydir, çünkü REST kaldırmaları sadece daha az veri döndürürken Protobuf alan
yeniden kullanımı onu aktif olarak bozar.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir alanın tipi wire formatını bozmadan hiç değiştirilebilir mi?&lt;/strong&gt;
Sadece Protobuf&amp;#39;ın belgelediği belirli uyumlu gruplar içinde, bazı durumlarda &lt;code&gt;int32&lt;/code&gt;&amp;#39;yi
&lt;code&gt;int64&lt;/code&gt;&amp;#39;e genişletmek gibi. Protobuf&amp;#39;ın kendi uyumluluk tablosuna karşı kontrol etmediğiniz sürece
herhangi bir tip değişikliğini bozucu olarak ele alın; bir dilin tip sistemiyle benzetme yaparak
uyumluluk varsaymak, bunun yanlış gitme şeklidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Protobuf&amp;#39;ta bir alanı deprecate etmek GraphQL&amp;#39;in &lt;code&gt;@deprecated&lt;/code&gt; direktifi gibi mi çalışır?&lt;/strong&gt;
Benzer şekilde: Protobuf, araçların gösterebileceği bir &lt;code&gt;[deprecated = true]&lt;/code&gt; alan seçeneğini
destekler. İkisi de zorunlu kılınmaz: bir GraphQL sunucusu deprecate edilmiş bir alan için gelen
sorguyu yine yanıtlar, ve bir protobuf client&amp;#39;ı onu yine kodlar. İkisi de tavsiye niteliğindedir ve
aynı changelog desteğine ihtiyaç duyar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her client&amp;#39;ı kontrol ediyorsanız yeniden numaralandırma hiç güvenli midir?&lt;/strong&gt;
Tamamen kapalı bir sistemde, ilke olarak, ama alan numaralarının var olma nedeni olan tüm güvenlik
özelliğini ortadan kaldırır, ve &amp;quot;her client&amp;#39;ı kontrol ediyoruz&amp;quot; bir build önbelleğe alındığı, bir
deploy geciktirildiği, veya kimsenin hatırlamadığı bir client eklendiği anda doğru olmaktan çıkan
bir iddiadır. Numarayı yeniden kullanmak yerine, dahili olarak bile, rezerve edin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gRPC servisleri genel bir REST API&amp;#39;si gibi bir changelog sayfasına ihtiyaç duyar mı?&lt;/strong&gt;
Sadece harici ekipler &lt;code&gt;.proto&lt;/code&gt; diff&amp;#39;lerini doğrudan okumadan onları tüketiyorsa, &lt;a href=&quot;https://changeloop.dev/blog/tr/internal-api-changelog/&quot;&gt;dahili API
changelog&amp;#39;ları&lt;/a&gt;&amp;#39;nın genel olarak uyguladığı aynı &amp;quot;karşı tarafta
kim var&amp;quot; testi. Sadece aynı ekibin diğer servisleri tarafından tüketilen bir gRPC servisi, genellikle
commit geçmişi lehine resmi bir changelog&amp;#39;u atlayabilir, çünkü onu okuyan herkesin şeması zaten
açıktır.&lt;/p&gt;
</content:encoded></item><item><title>Changelog dosya formatları: JSON, YAML veya sadece Markdown</title><link>https://changeloop.dev/blog/tr/changelog-file-formats/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/changelog-file-formats/</guid><description>Bir changelog dosyasının formatı, bir sayfayı besleyip besleyemeyeceğini belirler, yoksa sadece insan okur. Markdown, JSON ve YAML farklı bedeller öder.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Çoğu ekip bir changelog&amp;#39;a Markdown dosyası olarak başlar çünkü bu en az direnç gösteren yoldur:
bir pull request diff&amp;#39;inde okunabilir, GitHub&amp;#39;da hiçbir şey render etmeden okunabilir, ve bir
README yazmış herkese tanıdıktır. Bu seçim, dosyayı bir insan dışında bir şeyin okuması
gerekene, bir sayfa, bir widget, bir e-posta özeti, kadar iyi çalışır, ve o zaman format ücretsiz
olmayı bırakır. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog otomasyonu&lt;/a&gt; yapısal gereksinimi genel
olarak ele alır, bir tür, bir tarih, bir gövde ve bir bağlantı; bu yazı hangi dosya formatının bu
yapıyı gerçekten sağladığını ve her birine oraya varmanın neye mal olduğunu ele alır.&lt;/p&gt;
&lt;h2&gt;Basit bir Markdown changelog&amp;#39;unda yanlış olan ne?&lt;/h2&gt;
&lt;p&gt;Bir şey onu tekrar alanlara ayrıştırması gerekene kadar hiçbir şey. Bir başlık, bir tarih ve
altında bir madde işaretli liste, bir insan için okumak önemsizdir ve gerçekten güvenilir bir
şekilde ayrıştırmak zordur, çünkü Markdown&amp;#39;un bir şeması yoktur: tarih başlıkta olabilir, ilk
satırda kalın yazıyla olabilir, veya eski bir kayıtta tamamen eksik olabilir, ve bu varyasyonların
her biri bir insanın doğru okuduğu ve bir ayrıştırıcının okumadığı geçerli Markdown&amp;#39;dır. Bir
Markdown changelog&amp;#39;u otomatikleştiren ekipler genellikle bir kaydın biçimlendirmesi hafifçe
kaydığında bile bozulan, regex tabanlı özel bir ayrıştırıcı yazmakla sonuçlanır, ki bu sık
yaşanır, çünkü yazarken hiçbir şey tutarlılığı zorlamaz.&lt;/p&gt;
&lt;h2&gt;Yapılandırılmış bir format gerçekte size ne kazandırır?&lt;/h2&gt;
&lt;p&gt;Her kaydın aynı şekle sahip olduğuna dair, kayıt okunduğunda tahmin edilen değil, kayıt
yazıldığında kontrol edilen bir garanti. Tanımlı bir şemaya sahip bir JSON veya YAML dosyası, tür,
tarih, versiyon, hedef kitle, gövde, bağlantı, tıpkı katı bir API yanıtının yapacağı gibi gerekli
bir alan eksikse gürültülü bir şekilde başarısız olur; bir Markdown dosyası orada olanı, doğru
olsun olmasın, sadece render eder. Bu fark, bir betiğin bir akışı sıralamak için her kaydın
tarihine ihtiyaç duyduğu ve kayıtların yarısının bunu farklı bir yerde tuttuğu güne kadar
görünmezdir.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# CHANGELOG.yml
- date: 2026-09-05
  type: breaking
  version: v2
  audience: api
  body: &amp;quot;POST /invoices now rejects a currency mismatch instead of silently converting.&amp;quot;
  link: /blog/api-changelog/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Bu, insan tarafından okunabilir dosyanın kaybolması gerektiği anlamına mı gelir?&lt;/h2&gt;
&lt;p&gt;Hayır, ve bir YAML veya JSON dosyasının aynı zamanda bir insanın bir pull request&amp;#39;te okuduğu şey
olmasını sağlamaya çalışmak genellikle ters yönde bir hatadır: iç içe geçmiş JSON&amp;#39;un diff&amp;#39;ini
incelemek, bir düz yazı cümlesini incelemekten daha kötüdür, ve bir ifade hatasını yakalamak için
bir veri yapısını zihinsel olarak ayrıştırması gereken bir incelemeci, sonunda ifade hatalarını
yakalamayı bırakacak bir incelemecidir. İki format bir arada var olabilir: yapılandırılmış veri,
bir otomasyon pipeline&amp;#39;ının okuduğu doğruluk kaynağıdır, ve üretilmiş bir Markdown veya HTML
render&amp;#39;ı, bir insanın gerçekten incelediği ve okuduğu şeydir, elle yanında tutulmak yerine
yapılandırılmış dosyadan üretilir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Olduğu gibi insan tarafından okunabilir&lt;/th&gt;
&lt;th&gt;Özel kod olmadan makine tarafından ayrıştırılabilir&lt;/th&gt;
&lt;th&gt;Yaygın başarısızlık modu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Tutarsız kayıt şekli naif ayrıştırıcıları bozar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;td&gt;Zayıf&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Ayrıntılı; elle geçersiz JSON&amp;#39;a düzenlemek kolay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YAML&lt;/td&gt;
&lt;td&gt;Orta&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Boşluğa duyarlı; kötü bir girinti gürültülü değil sessiz bir ayrıştırma hatasıdır&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Hangi yapılandırılmış format elle düzenlemek için gerçekte daha kolay, JSON mu YAML mı?&lt;/h2&gt;
&lt;p&gt;YAML, bir üretici yerine elle kayıt yazan herkes için, çünkü JSON&amp;#39;un her string ve iç içe nesne
için gerektirdiği tırnak işaretleme ve parantez eşleştirmeyi ortadan kaldırır. Ödünleşim, YAML&amp;#39;in
boşluk duyarlılığının, JSON&amp;#39;un parantez uyuşmazlıklarının genellikle yapmadığı bir şekilde sessizce
başarısız olmasıdır: bir JSON ayrıştırıcısı hatalı biçimlendirilmiş girdiyi doğrudan reddeder,
YAML ayrıştırıcısı ise kötü girintilenmiş bir dosyayı kabul edip onu yanlış yapıya basitçe
ayrıştırabilir, ki bu daha kötü bir başarısızlıktır çünkü hiçbir şey size bunun olduğunu söylemez.
Kayıtlar sadece her zaman bir betik tarafından yazılıyorsa, bu ödünleşim büyük ölçüde ortadan
kalkar ve JSON&amp;#39;un daha katı ayrıştırması daha güvenli varsayılan seçim haline gelir.&lt;/p&gt;
&lt;h2&gt;Bir changelog sayfasının, onu besleyen dosyadan ayrı kendi yapılandırılmış formatına ihtiyacı var mı?&lt;/h2&gt;
&lt;p&gt;Ayrı birine değil, farklı render edilmiş aynısına. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-page/&quot;&gt;Bir changelog sayfası&lt;/a&gt;,
sayfanın kendisini bir JSON akışı ve schema.org işaretlemesi aracılığıyla nasıl makine tarafından
okunabilir hale getireceğinizi ele alır; o akış üretilmiş bir çıktıdır, altta yatan dosyayla
senkronize tutulacak ikinci bir doğruluk kaynağı değildir. Yapılandırılmış veriyi iki yerde, bir
kaynak dosyada ve bir sayfanın akışında, elle tutmak, ikisinin nasıl ayrıştığıdır, bu yüzden burada
verilen dosya formatı kararı, sonrasındaki her şeyin, sayfa, widget, e-posta, üretildiği tek şey
olmalı, asla elle kopyalanmamalı.&lt;/p&gt;
&lt;h2&gt;Mevcut bir Markdown changelog&amp;#39;unu yapılandırılmış bir formata dönüştürmek geçiş maliyetine değer mi?&lt;/h2&gt;
&lt;p&gt;Genellikle sadece otomasyon gerçek hedef olduğunda, öncesinde değil. Bir GitHub README&amp;#39;sine
Markdown dosyası yayınlayan tek kişilik bir proje gerçek bir otomasyon ihtiyacına sahip değildir,
ve onu YAML&amp;#39;e dönüştürmek törenden başka bir şey satın almaz. Dönüşüm, birden fazla aşağı akış
tüketicisinin, bir sayfa, bir özet e-postası, herkese açık bir akış, aynı veriyi okuması gerektiği
anda kendini amorti eder, çünkü bu tam olarak bir Markdown ayrıştırıcısının tutarsızlıklarının
sadece bakımı sıkıcı olmak yerine görünür şekilde yanlış çıktı üretmeye başladığı noktadır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir Markdown changelog&amp;#39;u formatı tamamen değiştirmeden ayrıştırılabilir hale getirilebilir mi?&lt;/strong&gt;
Kısmen, frontmatter ile: her kaydın başında küçük bir YAML bloğu (tarih, tür, versiyon), düz
yazı için bir Markdown gövdesinin yanında. Bu, tüm kaydı JSON veya YAML&amp;#39;e zorlamadan bir
ayrıştırıcının ihtiyaç duyduğu yapılandırılmış alanları elde eder, ve tam bir geçişe henüz hazır
olmayan bir ekip için makul bir orta yoldur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dosya formatı SEO için veya bir changelog sayfasının nasıl sıralandığı için önemli mi?&lt;/strong&gt;
Doğrudan değil. Arama motorları render edilmiş sayfayı okur, kaynak dosyayı değil, bu yüzden
dosya formatı onlar için görünmezdir; sayfanın kendisi için önemli olan, kendi hakkıyla makine
tarafından okunabilir olup olmadığıdır, ki bu onu neyin ürettiğinden ayrı bir konudur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her changelog kaydı aynı dosyadan mı geçmeli, yoksa türler dosyalar arasında bölünebilir mi?&lt;/strong&gt;
Tek bir dosya, kayıt hacmi onu diff&amp;#39;lemek veya incelemek için hantal hale getirene kadar daha
basittir; yıla veya kategoriye göre bölmek, tek bir dosyanın diff&amp;#39;leri mantıklı bir şekilde
incelenemeyecek kadar büyüdüğünde makul bir güvenlik supabıdır, ama aşağı akıştaki herhangi bir
şeyin &amp;quot;tüm kayıtları&amp;quot; tek bir liste olarak okuyabilmesinden önce bir birleştirme adımı ekler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RSS için bir standart olduğu gibi standart bir changelog dosya formatı var mı?&lt;/strong&gt;
Geniş çapta benimsenmiş bir tane yok. Keep a Changelog bir Markdown kuralı önerir, ve birkaç aracın
kendi formatı vardır; bir &lt;a href=&quot;https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md&quot;&gt;changeset&lt;/a&gt;
paketi ve sürüm artışını adlandıran YAML frontmatter&amp;#39;lı bir Markdown dosyasıdır, yani yukarıda
anlatılan frontmatter kalıbının ta kendisi. Bunların
hiçbiri RSS okuyucularının RSS&amp;#39;i evrensel olarak anladığı gibi diğer araçların kutudan çıktığı
gibi okuduğu bir format değildir.&lt;/p&gt;
</content:encoded></item><item><title>Yinelenen özellik talepleri: sesi kaybetmeden birleştirmek</title><link>https://changeloop.dev/blog/tr/duplicate-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/duplicate-feature-requests/</guid><description>Yinelenen özellik taleplerini gruplamak sayımı korur. Onları dikkatsizce birleştirmek birini yararlı kılan ifadeyi kaybeder, ve bu daha küçük kayıptır.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Üç müşteri aynı yeteneği üç farklı haftada, üç farklı şekilde ifade ederek talep eder, ve
yinelenenleri yakalamak için kurulmuş bir triyaj süreci işini yapar: onları gruplar, üç oylu tek
bir talep olarak sayar, ve backlog temiz kalır. Kolay olan kısım budur. &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;Hangi etiketler işe
yarar&lt;/a&gt;, yinelenenler için mekanik çözüm olarak ifadeye göre
triyaj etmeden önce temel yeteneğe göre gruplamayı ele alır; ele almadığı şey, üç talep tek bir
satır kalemine dönüştüğünde kelimelerin kendisine ne olduğudur, ve bu kayıp genellikle çözdüğü
yinelenen sayma sorunundan daha büyüktür.&lt;/p&gt;
&lt;h2&gt;Yinelenenler birleştirildiğinde gerçekte ne kaybedilir?&lt;/h2&gt;
&lt;p&gt;Her talep edenin kullandığı, sıkça çöktüğü oy sayısından daha bilgilendirici olan spesifik ifade.
Bir müşteri &amp;quot;filtrelenmiş sonuçları dışa aktarmanın bir yolu&amp;quot; isteyebilir, bir diğeri &amp;quot;kaydedilmiş
filtrelerime saygı gösteren CSV dışa aktarma&amp;quot;, ve üçüncüsü &amp;quot;gizli sütunları içermeyen dışa
aktarma&amp;quot;. Üçü de aynı temel talep, doğru şekilde gruplanmış, ama her ifade o kişi için neyin önemli
olduğuna dair hafifçe farklı bir vurgu taşır, ve sadece ilk gönderimin ifadesini koruyan bir
birleştirme diğer ikisini tamamen atar. Sayım hayatta kalır; birinin özelliğin doğru versiyonunu
inşa etmesine yardımcı olacak doku hayatta kalmaz.&lt;/p&gt;
&lt;h2&gt;Oy sayısı zaten talebin var olduğunu söylüyorsa doku neden önemli?&lt;/h2&gt;
&lt;p&gt;Çünkü talep ve tasarım farklı sorulardır, ve sadece spesifik ifade ikincisini cevaplar.
&amp;quot;Dışa aktarma&amp;quot; üzerinde on oy, bir ekibe özelliği inşa etmeye değdiğini söyler; &amp;quot;dışa aktarma&amp;quot;nın
CSV, PDF, planlanmış bir e-posta, yoksa bir API endpoint&amp;#39;i mi anlamına geldiği hakkında hiçbir şey
söylemez, ve ilk gönderimin ifadesi lehine on orijinal gönderimden dokuzunu atan bir birleştirme,
diğer dokuzu ince bir şekilde farklı bir şey istese bile spesifikasyonu sessizce ilk talep edenin
tesadüfen istediği şeye daraltabilir. &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;Bir özellik talebinin gerçekte neyi kaydetmesi gerektiği&lt;/a&gt;,
bu aynı boşluğu alım tarafından ele alır; yinelenenleri birleştirmek, bunun alımdan sonra yeniden
ortaya çıktığı yerdir, tam olarak bir ekibin gerçekte ne istendiğinin aralığına en çok ihtiyaç
duyduğu noktada.&lt;/p&gt;
&lt;h2&gt;İfadeyi atmak yerine koruyan bir birleştirme süreci nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Değiştirmek yerine eklemek. Kanonik öğe backlog görünümü için tek bir başlık korur, ama
birleştirilen her gönderimin orijinal ifadesi ona bağlı kalır, alıntılar listesi olarak veya
bağlantılı kaynak biletler olarak, böylece öğeyi daha sonra inceleyen herkes bir ekip üyesinin
özetinin yerine insanların gerçekten istediği şeyin gerçek aralığını görebilir. Bunu inşa etmek
neredeyse hiçbir şeye mal olmaz, yeni bir sistem yerine bilette bir alan, ve bu bilgiyi sıkıştıran
bir birleştirme ile sadece görüntüsünü sıkıştıran bir birleştirme arasındaki farktır.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Özellik: Filtrelenmiş CSV dışa aktarma
Oylar: 12
Birleştirilen talepler:
  - &amp;quot;filtrelenmiş sonuçları dışa aktarmanın bir yolu&amp;quot; (acct_4421)
  - &amp;quot;kaydedilmiş filtrelerime saygı gösteren CSV dışa aktarma&amp;quot; (acct_8832)
  - &amp;quot;gizli sütunları içermeyen dışa aktarma&amp;quot; (acct_1097)
  ...
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Her yinelenen birleştirilmeyi hak eder mi, yoksa yanlış eşleşmeler var mı?&lt;/h2&gt;
&lt;p&gt;Bazıları yanlış eşleşmelerdir, ve &amp;quot;benzer geliyor&amp;quot;u &amp;quot;aynı talep&amp;quot;miş gibi ele almak kendi başına
bir başarısızlık modudur. &amp;quot;Verilerimi dışa aktarmama izin ver&amp;quot; ve &amp;quot;sadece filtrelenmiş görünümü
dışa aktarmama izin ver&amp;quot;, aslında aynı genel yeteneğin iki farklı kapsamını tanımlarken
&amp;quot;dışa aktarma&amp;quot; üzerinde bir anahtar kelime eşleşmesiyle gruplanabilir; onları birleştirmek ya
yanlış şey için oy sayısını şişirir ya da, daha kötüsü, tesadüfen önce geldiği için daha dar
versiyonu gönderir. Gruplama üzerinde bir insan geçişi, hızlı bile olsa, bu birikmeden önce bunu
yakalar; otomatik bir benzerlik eşleştirmesi tek başına kelime dağarcığında aşırı birleştirir ve
niyette yetersiz birleştirir.&lt;/p&gt;
&lt;h2&gt;Yinelenen kontrolü gerçekte ne zaman çalışmalı, alımda mı yoksa daha sonra mı?&lt;/h2&gt;
&lt;p&gt;İkisi de, farklı nedenlerle. Alımda kontrol etmek, açık olanı, zaten açık olan bir şeyi tekrar
eden yeni bir talebi, kendi izlenmeyen satırına dönüşmeden önce yakalar; gönderim anında açık
taleplere karşı bir benzerlik araması bunların çoğunu insan müdahalesi olmadan halleder. Daha
yavaş bir ritimde yapılan sonraki bir geçiş, alımın kaçırdığı durumu yakalar: o sırada bir anahtar
kelime veya embedding eşleşmesinden kaçacak kadar farklı bir dil kullanan, ama bir ekip düzinelerce
varyasyon gördükten sonra aynı temel yeteneği tanımladığı ortaya çıkan iki talep. İkinci geçişi
atlamak, yakın yinelenenleri süresiz olarak ayrı başlıklar altında dağınık bırakır, her biri
kendi başına asla inşa edilecek sayıya ulaşmayan küçük bir oy sayısıyla.&lt;/p&gt;
&lt;h2&gt;Talep eden, gönderiminin mevcut bir öğeye birleştirildiğini bilmeli mi?&lt;/h2&gt;
&lt;p&gt;Evet, ve bu &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;müşteri geri bildirim döngüsünü kapatmak&lt;/a&gt; ile aynı
disiplindir, sadece alışılmıştan bir adım daha erken uygulanır: bir şey gönderip hiç haber
almayan bir talep eden, sonunda gönderilen on bir başka oyla bir öğeye doğru şekilde
birleştirilmiş olsa bile, talebinin hiçbir yere gitmediği sonucuna varır. Kısa bir onay, &amp;quot;bunu
başkalarının da yaptığı mevcut bir talep ile birleştirdik&amp;quot;, bir mesaja mal olur ve bir müşterinin
onu gerçekten takip edip etmediğine dair hiçbir görünürlüğü olmadığı için aynı talebi birkaç ayda
bir yeniden göndermesini önler.&lt;/p&gt;
&lt;h2&gt;Birleştirme, özellik gönderildiğinde kime kredi verildiğini değiştirir mi?&lt;/h2&gt;
&lt;p&gt;İlk gönderen kişiye değil, herkese kredi vermelidir. &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Geri bildirim döngüsünü kapatmak&lt;/a&gt;,
talep edenlere talepleri gönderildiğinde bildirmeyi ele alır; birleştirilmiş bir öğe için bu,
ifadesi kanonik başlık haline gelen hesap değil, birleştirmeye bağlı her hesap anlamına gelir,
çünkü her talep edenin bakış açısından o bunu istedi ve gönderildi, bir triyaj sürecinin tesadüfen
hangi ifadeyi koruduğuna bakılmaksızın. Changeloop&amp;#39;ta bu, pull request&amp;#39;in bağlantılı her issue&amp;#39;yu
adlandırması demektir (&lt;code&gt;Fixes #142, fixes #187&lt;/code&gt;); adlandırmadığı bir issue yorum almaz.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Birleştirilen her talep için bir alıntı mı yoksa tam bir bilet bağlantısı mı, ne kadar ifade korunmaya değer?&lt;/strong&gt;
Kısa bir alıntı genellikle yaygın durum için yeterlidir, çünkü amacı bir incelemecinin ifade
aralığını bir bakışta görmesini sağlamaktır; orijinalin bir ekran görüntüsü veya tek satırlık bir
alıntının düzleştireceği ayrıntılı bir iş akışı açıklaması gibi önemli ek bağlamı olduğunda tam
bilet bağlantısını da koruyun.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her yinelenenin ifadesini korumak backlog&amp;#39;u taramayı zorlaştırır mı?&lt;/strong&gt;
Varsayılan olarak daraltılmışsa hayır. Kanonik başlık, tarayan bir incelemecinin gördüğü şeydir;
birleştirilmiş ifade bir tık veya bir genişletme uzaklıktadır, daha derin araştırma yapan kişi için
mevcuttur ama sadece oy sayan biri için görünümü karmaşıklaştırmaz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;İki talep aynı görünüyor ama inşa edildiğinde farklı şeyler istediği ortaya çıkarsa ne olur?&lt;/strong&gt;
Bu netleştiği anda onları tekrar ayırın, ve orijinal birleştirmeyi tekrarlamaktan kaçınılması
gereken bir hata olarak değil, o zaman mevcut bilgiyle yapılmış makul bir karar olarak ele alın.
Hiçbir şeyi asla ayırmayan bir gruplama sistemi, sonunda kalıcı olarak pişmiş birkaç yanlış
birleştirmeye sahip olacaktır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Birleştirilen bir talebin altında yatan ifadenin insan incelemesini alması gereken bir oy eşiği var mı?&lt;/strong&gt;
Sabit bir sayı yok, ama bir inşa kararına yaklaşan herhangi bir talep oy sayısından bağımsız
olarak bunu hak eder, çünkü bu, &amp;quot;dışa aktarma&amp;quot; ile &amp;quot;kaydedilmiş filtrelerle CSV olarak dışa
aktarma&amp;quot; arasındaki farkın bir nüans olmaktan çıkıp spesifikasyon olmaya başladığı noktadır.&lt;/p&gt;
</content:encoded></item><item><title>Versiyon numarası olmadan GraphQL deprecation</title><link>https://changeloop.dev/blog/tr/graphql-schema-deprecation/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/graphql-schema-deprecation/</guid><description>GraphQL&apos;de URL&apos;de v1 veya v2 yok. Alanlar paylaşılan tek şema üzerinde, bir direktifle tek tek deprecate edilir ve bu changelog&apos;un borcunu değiştirir.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir REST API&amp;#39;si &lt;code&gt;/v1/&lt;/code&gt;&amp;#39;in yanında &lt;code&gt;/v2/&lt;/code&gt;&amp;#39;yi de yayınlayabilir ve çağıranların kendi hızlarında
geçiş yapmasına izin verebilir. GraphQL&amp;#39;in bir endpoint&amp;#39;te tek bir şeması vardır, ve her client,
geçen yılın build&amp;#39;indeki mobil uygulama ve bu sabah dağıtılan dahili dashboard, aynı grafiği
sorgular. Fork&amp;#39;lanacak bir URL yoktur. Bir alanı deprecate etmek, herkesin zaten bağımlı olduğu bir
şemada, onu yerinde deprecated olarak işaretlemek anlamına gelir, bu da disiplini REST&amp;#39;ten farklı
kılar, temelde yatan sorun, çağıranlara bir şeyin kaybolacağını söylemek, &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;API
deprecation&lt;/a&gt;&amp;#39;ın genel olarak ele aldığı sorunla aynı olsa bile.&lt;/p&gt;
&lt;h2&gt;Artırılacak bir versiyon yoksa GraphQL bir alanı deprecated olarak nasıl işaretler?&lt;/h2&gt;
&lt;p&gt;Doğrudan alana uygulanan &lt;a href=&quot;https://spec.graphql.org/October2021/#sec--deprecated&quot;&gt;&lt;code&gt;@deprecated&lt;/code&gt; direktifiyle&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-graphql&quot;&gt;type Product {
  price: Float @deprecated(reason: &amp;quot;Use priceV2 for multi-currency support.&amp;quot;)
  priceV2: Money
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alan sorgulanabilir kalır. Kaybolmaz, 404 vermez, davranışını değiştirmez; sadece çoğu GraphQL
aracının, GraphiQL, Apollo Studio, şema linter&amp;#39;ları, şemaya göz atan veya ona karşı bir sorgu
yazan herkese göstereceği, makine tarafından okunabilir bir not taşır. Mekanizma budur, hepsi
bu kadar. Ayrı bir deprecation endpoint&amp;#39;i, header, ya da spec&amp;#39;in gerektirdiği bir eşlik eden belge
yoktur, ki bu hem cazibesi hem de tuzağıdır: direktifi eklemek kolaydır ve görmezden gelmek de
kolaydır, çünkü hiçbir şey bir client&amp;#39;ı ona bakmaya zorlamaz.&lt;/p&gt;
&lt;h2&gt;Deprecation nedenini gerçekten gören var mı?&lt;/h2&gt;
&lt;p&gt;Sadece şemayı doğrudan, introspection veya şemayı bilen bir editör aracılığıyla kullananlar, ve bu
bir API changelog&amp;#39;unun alışılmış okuyucularından daha küçük bir kitledir. Altı ay önce bir sorguya
karşı inşa edilmiş bir mobil uygulama o sorguyu zaten binary&amp;#39;sine pişirmiştir; deprecated olsun
olmasın, biri uygulamayı yeni alanla yeniden inşa edip bir güncelleme yayınlayana kadar &lt;code&gt;price&lt;/code&gt;&amp;#39;ı
istemeye ve cevap almaya devam edecektir. Direktif, yeni kod yazan bir geliştiriciye eski alanı
kullanmamasını söyler. Zaten yayınlanmış ve çalışan client için hiçbir şey yapmaz.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mekanizma&lt;/th&gt;
&lt;th&gt;Kime ulaşır&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@deprecated&lt;/code&gt; direktifi&lt;/td&gt;
&lt;td&gt;Şemaya göz atan veya yeni sorgular yazan geliştiriciler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Şema linter CI hataları&lt;/td&gt;
&lt;td&gt;Bir tane çalıştırıyorsa client kod tabanına sahip ekip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir changelog kaydı&lt;/td&gt;
&lt;td&gt;Linter&amp;#39;ı olmayan bir client ekibi dahil, onu okuyan herkes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hiçbir şey (alan çalışmaya devam eder)&lt;/td&gt;
&lt;td&gt;Eski alanı kullanan zaten inşa edilmiş bir client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Deprecated bir alan yine de bir changelog kaydı almalı mı?&lt;/h2&gt;
&lt;p&gt;Evet, ve tek başına direktiften daha fazla iş yapar, çünkü bir changelog direktifin ulaşamadığı
insanlara ulaşır: şemasına göz atmadan grafiği tüketen bir ortak ekip, aylar önceki önbelleğe
alınmış bir şema kopyasına karşı inşa edilmiş bir client, bunu sadece düz yazı okuyarak fark
edecek herkes. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&amp;#39;u&lt;/a&gt; bir kaydın çağırana genel olarak neyi
borçlu olduğunu ele alır; bir GraphQL kaydı, REST&amp;#39;in nadiren açıkça belirtmesi gereken bir şeyi
borçludur, çünkü REST çağıranları bunu versiyon numarasından çıkarır: eski alan bugün hâlâ çalışıyor
mu, bir uyarıyla hâlâ çalışıyor mu, yoksa gerçekten veri döndürmeyi bırakmış mı. Direktif tek
başına, şemayı hiç açmamış bir okuyucu için bunların hiçbirine cevap vermez.&lt;/p&gt;
&lt;h2&gt;Bir alanı şemadan kaldırmak gerçekte ne zaman güvenlidir?&lt;/h2&gt;
&lt;p&gt;Sadece sorgu günlükleri artık kimsenin onu istemediğini gösterdiğinde, ki bu bir kullanım
sorusudur, takvim sorusu değil. Bir alan bir yıl boyunca &lt;code&gt;@deprecated&lt;/code&gt; taşıyabilir ve hiç yeniden
inşa edilmemiş bir client için hâlâ taşıyıcı olabilir; bir REST &lt;code&gt;Sunset&lt;/code&gt; header&amp;#39;ının sık yaptığı
gibi onu sabit bir takvimde kaldırmak, o client&amp;#39;ı üzerinde hareket edebileceği hiçbir uyarı olmadan
bozar, çünkü GraphQL ona hiç okumadığı direktif dışında üzerinde hareket edebileceği hiçbir şey
vermez. Bir kaldırma tarihine bağlanmadan önce alan düzeyinde kullanımı loglayın, ve sıfır olmayan
herhangi bir sorgu sayısını geri sayım olarak değil, bir bekletme olarak ele alın.&lt;/p&gt;
&lt;h2&gt;Bir alan eklemek REST API&amp;#39;sindeki ile aynı riski taşır mı?&lt;/h2&gt;
&lt;p&gt;Yeni bir alan için daha az, çünkü bir GraphQL client&amp;#39;ı sadece açıkça istediği alanları alır.
&lt;code&gt;price&lt;/code&gt;&amp;#39;ın yanına &lt;code&gt;priceV2&lt;/code&gt; eklemek, REST JSON yanıtına bir alan eklemenin katı bir deserializer&amp;#39;ı
bozabileceği şekilde mevcut bir sorguyu bozamaz, çünkü hiçbir şey client&amp;#39;ı yeni alanı istemeye
zorlamaz. Mevcut bir enum&amp;#39;a yeni bir değer eklemek aynı nefeste belirtmeye değer istisnadır: güçlü
tipli dillerin teşvik ettiği gibi her enum değerinde exhaustive switch yapan bir client, herhangi
bir sorgu onu istemiş olsun ya da olmasın, yeni bir değer geldiği anda bozulur. Bu güvenlik sadece
client&amp;#39;ın kendi isteğiyle dahil olduğu alanlar ve union üyeleri için geçerlidir; client&amp;#39;ın kodunun
elle numaralandırdığı kapalı bir küme için geçerli değildir.&lt;/p&gt;
&lt;h2&gt;Bir GraphQL changelog kaydı bir REST kaydının ihtiyaç duymadığı neye ihtiyaç duyar?&lt;/h2&gt;
&lt;p&gt;Sadece alan adına değil, sorgu şekline, çünkü &amp;quot;&lt;code&gt;price&lt;/code&gt; alanı deprecated&amp;quot; bir çağıranın gerçekten
ihtiyaç duyduğu parçayı eksik bırakır: hangi tipler ve hangi sorgular ona dokunuyor. Yararlı bir
kayıt tipi, alanı, yerine geçen alanı ve, üretebiliyorsanız, üretimde hâlâ eski şekli isteyen
gerçek sorguları adlandırır. Bu son parça, deprecation bildirimini gerçek kullanıma bağlamak, REST
çağıranlarının bir URL&amp;#39;deki sunucu günlüklerinden bedavaya aldığı ve GraphQL çağıranlarının
almadığı bir şeydir, çünkü her sorgu ne isterse istesin aynı endpoint&amp;#39;e çarpar.&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;@deprecated&lt;/code&gt; direktifini alan dışında başka bir şey taşıyabilir mi?&lt;/h2&gt;
&lt;p&gt;Enum değerleri, aynı direktifi alanınkinin yerine değerin kendi tanımında kullanarak:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-graphql&quot;&gt;enum ShippingMethod {
  STANDARD
  EXPRESS
  OVERNIGHT @deprecated(reason: &amp;quot;Use EXPRESS with priority: true instead.&amp;quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Spec, &lt;code&gt;@deprecated&lt;/code&gt;&amp;#39;i tam olarak iki konum için tanımlar, bir alan tanımı veya bir enum değeri, ve
stabil sürüm itibarıyla başka hiçbir şey için; argüman ve input-field düzeyinde deprecation sadece
daha sonraki taslak dilde var, bugün çoğu sunucunun uyguladığı şeyde değil. Bu şekilde işaretlenmiş
bir enum değeri, bir sunucunun hâlâ döndürebileceği veya kabul edebileceği geçerli bir değer olarak
kalır, deprecated bir alanın yaptığı aynı breaking-olmayan vaat, ki bu da onu değeri gerçekten
kaldırmadan önce göndermeyi güvenli kılan şeydir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;GraphQL, tüm bir endpoint için Sunset header&amp;#39;ı gibi bir şeyi destekler mi?&lt;/strong&gt;
Hayır, çünkü genellikle sadece bir endpoint vardır. Deprecation zamanlaması alan düzeyinde,
&lt;code&gt;@deprecated&lt;/code&gt; direktifinin neden metninde ve bir ekibin onun yanında yayınladığı changelog veya
geçiş kılavuzunda yaşar, bir client&amp;#39;ın programatik olarak okuyabileceği bir yanıt header&amp;#39;ında değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deprecated bir alan kaldırılıp sonra farklı bir tiple yeniden eklenebilir mi?&lt;/strong&gt;
Sadece yeni bir alan adı olarak. Aynı alan adını değişmiş bir tiple yeniden tanıtmak, tam olarak
deprecation döngüsünün önlemek için var olduğu breaking change&amp;#39;dir; yerine geçene &lt;code&gt;priceV2&lt;/code&gt;&amp;#39;nin
yaptığı gibi kendi adını verin, ve isim yeniden kullanılabilir hale gelmeden önce eskisinin
tamamen sönmesine izin verin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;@deprecated&lt;/code&gt; neden metni changelog kaydına bağlantı vermeli mi?&lt;/strong&gt;
Şema araçları destekliyorsa, evet. Neden alanı düz bir string kabul eder, ve o string içindeki bir
URL, introspection çıktısına bakan bir geliştiriciden bir changelog kaydının verebileceği daha
kapsamlı açıklamaya giden en kısa yoldur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir GraphQL şema değişikliği hiç REST&amp;#39;in olmadığı bir şekilde geriye dönük uyumlu mudur?&lt;/strong&gt;
Eklemeli alan değişiklikleri, evet, yukarıdaki nedenden dolayı: client&amp;#39;lar sadece istedikleri şeyi
alır. Yeni enum değerleri istisnadır, çünkü kapalı bir kümeyi numaralandıran bir client, beklemediği
bir değerde bozulabilir. Kaldırmalar ve tip değişiklikleri REST karşılıkları kadar tam olarak
breaking&amp;#39;dir.&lt;/p&gt;
</content:encoded></item><item><title>API geçiş kılavuzu nasıl yazılır</title><link>https://changeloop.dev/blog/tr/api-migration-guide/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/api-migration-guide/</guid><description>API geçiş kılavuzu, uyumsuz bir değişikliği kesintiye değil kontrol listesine dönüştürür. Neye ihtiyacı var, ve neden tek başına bir giriş yetmez.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;API geçiş kılavuzu, uyumsuz bir değişikliği kesintiye değil kontrol listesine dönüştüren belgedir:
ne değişti, bu konuda ne yapılmalı, ve ne zamana kadar. Bir changelog girişi uyumsuz bir
değişikliği iki cümlede adlandırabilir; geçiş kılavuzu, o iki cümle &amp;quot;bu seni etkiler&amp;quot; dediğinde ve
çağıranın tam olarak neyi değiştirmesi gerektiğini bilmesi gerektiğinde gerçekten açtığı şeydir.
Girişi kılavuz olmadan yayınlamak, çağıranın uyumsuz bir değişikliği tam da bunu önlemek için
yazılmış belge yerine bir destek biletinden öğrenmesinin yoludur.&lt;/p&gt;
&lt;h2&gt;API geçiş kılavuzu nedir?&lt;/h2&gt;
&lt;p&gt;Çağıranı bir API&amp;#39;nin eski biçiminden yenisine götüren, adım adım bir belge; değiştirilecek kodu
olan biri için yazılır, API&amp;#39;yi hiç kullanıp kullanmayacağına karar veren biri için değil. Bu ayrım
önemlidir: bir geçiş kılavuzu mevcut bir entegrasyon ve mevcut üretim trafiği varsayar, bu yüzden
geri alma, kısmi geçiş, ve geçişin başarılı olup olmadığının nasıl anlaşılacağını kapsamak
zorundadır, bunların hiçbiri ilk entegrasyon kılavuzuna gerek değildir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belge&lt;/th&gt;
&lt;th&gt;Varsayar&lt;/th&gt;
&lt;th&gt;Yanıtladığı&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Geçiş kılavuzu&lt;/td&gt;
&lt;td&gt;Mevcut bir entegrasyon&lt;/td&gt;
&lt;td&gt;Eski biçimden yeniye nasıl geçerim?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changelog girişi&lt;/td&gt;
&lt;td&gt;Hiçbir şey, sadece okuyucunun kontrol etmesi&lt;/td&gt;
&lt;td&gt;Ne değişti, ve ne zaman?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API referansı&lt;/td&gt;
&lt;td&gt;Hiçbir şey, veya ilk entegrasyon&lt;/td&gt;
&lt;td&gt;Bu endpoint ne yapar?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecation bildirimi&lt;/td&gt;
&lt;td&gt;Eskiyi kullanan bir entegrasyon&lt;/td&gt;
&lt;td&gt;Bu ne zaman çalışmayı bırakır?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Bir geçiş kılavuzu genellikle son ikisi arasında yer alır: bir deprecation bildirimi bir saati
başlatır, ve geçiş kılavuzu çağıranın o saat dolmadan önce izlediği şeydir.&lt;/p&gt;
&lt;h2&gt;Bir değişiklik ne zaman sadece changelog girişi değil, geçiş kılavuzu gerektirir?&lt;/h2&gt;
&lt;p&gt;Eski ve yeni davranış arasında birden fazla adım olduğunda, veya değişiklik yeterince çağrı
noktasını etkilediğinde, çağıran bir açıklamadan çok işlenmiş bir örnekten fayda görür. &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Uyumsuz bir değişiklik nedir, ve nasıl gönderilir&lt;/a&gt;
bir değişikliğin uyumsuz olup olmadığına dair testi ele alır; yanıt evetse, ikinci soru düzeltmenin
tek satırlık bir düzenleme mi yoksa gerçek bir geçiş mi olduğudur. Yeniden adlandırılmış bir alanı
çağıran sadece changelog girişinden halledebilir. Kimlik doğrulama, sayfalama veya hata
işlemedeki bir değişiklik neredeyse her zaman bir kılavuzu hak eder, çünkü doğru yedek kod tek
cümlelik bir açıklamadan belli değildir.&lt;/p&gt;
&lt;h2&gt;Bir geçiş kılavuzu neyi içermelidir?&lt;/h2&gt;
&lt;p&gt;Beş şey, ve herhangi birini atlamak bir kılavuzu çağıranın bir kez okuyup sonra deneme yanılmaya
döndüğü bir sayfaya çevirir. Eski kod, bir projede gerçekte görüneceği gibi gösterilmiş. Yeni kod,
aynı şekilde gösterilmiş, farkın soyut bir tanımı olarak değil. Hiçbir şey değişmezse ne bozulur,
açıkça söylenmiş, çünkü &amp;quot;hiçbir şey&amp;quot; geçerli ve yaygın bir yanıttır ve çağıranın yine de bunu
açıkça duyması gerekir. Geçişin işe yarayıp yaramadığını doğrulamanın bir yolu, bir yanıt alanı
veya kontrol edilecek bir durum kodu gibi. Ve bir zaman çizelgesi: eski davranış ne zaman çalışmayı
bırakır, ve arada her iki biçim de kullanılabilir mi.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Para birimi alanlarını float&amp;#39;tan integer&amp;#39;a geçirme (v3.0.0)

Önce:
  { &amp;quot;amount&amp;quot;: 19.99 }

Sonra:
  { &amp;quot;amount&amp;quot;: 1999 }  // en küçük para birimi (kuruş)

Ne değişiyor: `amount` artık hesap para biriminin en küçük biriminde
bir tam sayı. `amount`&amp;#39;ı float olarak okuyan kod, 1 Ekim 2026&amp;#39;dan
itibaren 100 kat çok büyük bir değer okuyacak.

Doğrula: geçişten sonra, 19,99&amp;#39;luk bir ücret `amount: 1999` olarak
okunmalı, `amount: 19.99` olarak değil.

Zaman çizelgesi: v2, 15 Ocak 2027&amp;#39;ye kadar float döndürmeye devam
ediyor. v3, başlangıçtan itibaren tam sayı döndürüyor. Her iki sürüm
de şu anda canlı.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu beş şeyin her biri, çağıranın aksi takdirde tahmin etmesi veya desteğe sorması gereken bir
soruyu yanıtlar, ve bir geçiş kılavuzunun gerçekte kurtardığı maliyet tam olarak budur.&lt;/p&gt;
&lt;h2&gt;Kim yazmalı, ve ne zaman?&lt;/h2&gt;
&lt;p&gt;Değişikliği tasarlayan kişi, gönderildiği anda, bir hafta sonra biletlerden yeniden inşa eden bir
destek ekibi değil. Kararı veren kişi, eski davranışın hangi kısımlarına kimsenin
güvenmemesi gerektiğini ve hangilerinin kazara bir sözleşme olduğunu bilir; o bağlam olmadan
sonradan birinin yazdığı bir kılavuz ya açığı fazla açıklama ya da insanları gerçekten bozan tek
uç durumu kaçırma eğilimindedir. Kılavuz ve uyumsuz değişikliği duyuran changelog girişi birlikte
yayınlanmalı, giriş onu tekrarlamak yerine kılavuza bağlanmalıdır.&lt;/p&gt;
&lt;h2&gt;Bu, sürümleme ve API changelog&amp;#39;u ile nasıl ilişkilidir?&lt;/h2&gt;
&lt;p&gt;Doğrudan: bir geçiş kılavuzu, &lt;a href=&quot;https://changeloop.dev/blog/tr/semantic-versioning-changelog/&quot;&gt;semantic versioning ve changelog&amp;#39;unuz&lt;/a&gt;&amp;#39;daki
bir MAJOR girişinin sadece bir cümlede özetlediği şeyin ayrıntılı versiyonudur. Changelog girişi
bir değişikliğin uyumsuz olduğunu ve kabaca neyin değiştiğini söyler; geçiş kılavuzu, o girişin
taşıması gereken bağlantıdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&amp;#39;u: ne yayınlanır ve kim okur&lt;/a&gt;
geçiş kılavuzunu bir API&amp;#39;nin sürdürdüğü beş belgeden biri olarak listeler, her biri farklı bir
soruyu yanıtlar; bu, &amp;quot;A&amp;#39;dan B&amp;#39;ye gerçekte nasıl geçerim&amp;quot; sorusunu yanıtlayan belgedir, ve tam da bu
yanıt genellikle bir changelog girişi için çok uzun olduğundan kendi sayfasını hak eder.&lt;/p&gt;
&lt;h2&gt;Bir geçiş kılavuzu ne kadar süre yayında kalmalı?&lt;/h2&gt;
&lt;p&gt;En azından eski davranış erişilebilir olduğu sürece, ve idealde ondan sonra da. Üç deprecation
bildirimini yok saydıktan sonra on sekiz ay geç geçiş yapan bir çağıran hâlâ kılavuza ihtiyaç
duyar, ve eski davranış kapatıldığı gün onu silmek sadece ona en çok ihtiyaç duyanın onu
bulamamasını garanti eder. Onu sabit bir URL&amp;#39;de tutun ve sayfayı geri çekmek yerine zaman
çizelgesi bölümünü güncelleyin. Stripe&amp;#39;ın kendi &lt;a href=&quot;https://docs.stripe.com/upgrades&quot;&gt;yükseltme kılavuzu&lt;/a&gt;
bu örüntünün herkese açık bir örneğidir: her sürümde güncel tutulan tek bir sayfa, bir sonraki
sürüm çıktığı anda eskiyen sürüm başına yeni bir belge yerine. Kendi kılavuzunuz da, bir blog
arşivine gömülmek yerine, çağıranın zaten okumakta olduğu &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;dokümanlar&lt;/a&gt; kadar bulunabilir bir
yeri hak eder.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her uyumsuz değişiklik bir geçiş kılavuzu gerektirir mi?&lt;/strong&gt;
Hayır. Çağıranın sadece changelog girişinden halledebileceği bir değişiklik, açık bir yedeğe sahip
tek bir yeniden adlandırılmış alan gibi, ayrı bir kılavuza ihtiyaç duymaz. Birden fazla çağrı
noktasını etkileyen veya işlenmiş bir örnek gerektiren bir değişiklik duyar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir geçiş kılavuzu API belgeleriyle mi yoksa changelog&amp;#39;da mı yaşamalı?&lt;/strong&gt;
Belgelerle birlikte, changelog girişinden bağlantı verilerek. Changelog girişi bir abonenin önce
gördüğü şeydir; kılavuz, harekete geçmeye karar verdiğinde ihtiyaç duyduğu şeydir, ve çağıranın
zaten kullandığı referans materyalinin yanında yer alır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir geçiş kılavuzu ile bir deprecation bildirimi arasındaki fark nedir?&lt;/strong&gt;
Bir deprecation bildirimi bir şeyin kaybolacağını ve ne zamana kadar olduğunu belirtir. Bir geçiş
kılavuzu bu konuda ne yapılacağının talimatlarıdır. Bağlantılı bir geçiş kılavuzu olmayan bir
deprecation bildirimi, çağırana bunu nasıl karşılayacağını söylemeden bir son tarih verir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir geçiş penceresi sırasında hem eski hem yeni davranış belgelenmeli mi?&lt;/strong&gt;
Evet, mümkünse aynı sayfada, böylece çağıran tam olarak neyin değiştiğini görür, farklı zamanlarda
yazılmış iki ayrı belgeden bir araya getirmek yerine.&lt;/p&gt;
</content:encoded></item><item><title>GitHub Actions için bir changelog kontrolü</title><link>https://changeloop.dev/blog/tr/changelog-ci-enforcement/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/changelog-ci-enforcement/</guid><description>GitHub Actions&apos;ta bir changelog kontrolü kayıtsız merge&apos;ü reddeder, çünkü hatırlamaya bağlı adım öngörülebilir biçimde çöker. Ve bu kontrolün bozduğu şey.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Changelog&amp;#39;u elle tutan her ekip aynı olaydan sonra aynı konuşmayı yapmıştır: bir sürüm kayıtsız
çıkmıştır, biri neden diye sorar, ve dürüst cevap onu yazacak kişinin hızlı gittiği ve changelog
adımının sadece hafızada yaşadığıdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog otomasyonu&lt;/a&gt; bir
pipeline&amp;#39;ın güvenle otomatikleştirebileceği ve hâlâ bir kişiye ihtiyaç duyanı ele alır;
CI&amp;#39;da bir changelog kontrolü bu sorunun diğer yarısıdır, çünkü yazmayı otomatikleştirmek kimse onu
tetiklemekle yükümlü değilse yardımcı olmaz. Çoğu ekip pull request kontrollerini zaten GitHub
Actions&amp;#39;ta çalıştırır, bu yüzden bu kontrol de orada yaşar.&lt;/p&gt;
&lt;h2&gt;&amp;quot;İnsanlardan bir kayıt eklemelerini rica ediyoruz&amp;quot; neden öngörülebilir bir örüntüyle başarısız olur?&lt;/h2&gt;
&lt;p&gt;Çünkü bir pull request&amp;#39;te her şeyle dikkat için rekabet eder, ve atlamanın anında sonucu olmayan
tek parçasıdır. Testler gürültülü başarısız olur ve merge&amp;#39;ü engeller. Eksik bir changelog kaydı
hiçbir şeyi engellemez, bu yüzden biri acele ettiği anda kaybeder, ki pratikte bu çoğu zamandır.
Hafızayla zorunlu kılınan bir politika beklenecek hızda tam olarak bozulur: herkesin kabul
etmesinden sonraki ilk birkaç hafta iyidir, sonra umursayan kişi tatile gidince veya ekip
değiştirince sessizce terk edilir.&lt;/p&gt;
&lt;h2&gt;Bir changelog kaydı için bir CI kontrolü gerçekte neyi doğrular?&lt;/h2&gt;
&lt;p&gt;Yazının kalitesini değil, sadece bir kaydın var olduğunu ve doğru biçimlendirildiğini, ki bu bir
kişinin kafasında değil CI&amp;#39;da çalışan bir changelog kontrolü için doğru kapsamdır. Yaygın
bir şekil: kontrol PR&amp;#39;ın diff&amp;#39;ine bakar ve ya bir changeset dizininde yeni bir dosya
(&lt;a href=&quot;https://github.com/changesets/changesets&quot;&gt;Changesets&lt;/a&gt; ve benzer araçların kullandığı desen) ya
da bir changelog dosyasında değiştirilmiş bir satır ister, ve ikisi de yoksa build&amp;#39;i başarısız
kılar. Kaydın gerçekte ne söylediğinin incelemesi hep olduğu yerde olmaya devam eder, code
review&amp;#39;da, çünkü o yargı bir script&amp;#39;e ait değildir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CI kontrolü neyi doğrular&lt;/th&gt;
&lt;th&gt;Neyi doğrulamaz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Diff&amp;#39;te bir changeset veya changelog satırı var&lt;/td&gt;
&lt;td&gt;İfadenin açık olup olmadığı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kayıt, bir monorepo&amp;#39;da doğru paketi referans alıyor&lt;/td&gt;
&lt;td&gt;Değişikliğin gerçekten bir kayıt hak edip etmediği&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dosya sözdizimsel olarak geçerli (frontmatter, JSON şekli)&lt;/td&gt;
&lt;td&gt;Kaydın etki hakkında dürüst olup olmadığı&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Her PR&amp;#39;ın buna ihtiyacı var mı, yoksa bazı değişiklikler muaf mı?&lt;/h2&gt;
&lt;p&gt;Bazıları muaftır, ve muafiyet listesi bu sistemlerin gerçekten kurulduğu veya terk edildiği
yerdir. Görünür etkisi olmayan bir bağımlılık güncellemesi, sadece test değişikliği, davranış
değişikliği olmayan dahili bir refactor: hiçbiri bir katkıda bulunanı changelog&amp;#39;u okuyan kimsenin
umursamadığı bir şey için changelog kaydı uydurmaya zorlamamalı. İşe yarayan desen, bir katkıda
bulunanın uygulayabileceği (&lt;code&gt;no-changelog-needed&lt;/code&gt;) ve dosyasız CI kontrolünü karşılayan, PR&amp;#39;ı
onaylayan kişi tarafından incelenen bir etiket veya bayraktır, böylece muafiyetin kendisi bir
kaydın geçeceği aynı incelemeden geçer.&lt;/p&gt;
&lt;h2&gt;Acil bir hotfix gibi meşru istisnalara ne olur?&lt;/h2&gt;
&lt;p&gt;Gate merge&amp;#39;e aittir, deploy&amp;#39;a değil: gerçek zaman baskısı
altındaki bir hotfix, CI kontrolü bitmiş bir paragraf yerine niyetle karşılansa yeter ki, bir yer
tutucu kayıt veya takip bileti ile merge edebilir; bazı ekipler bir bakımcının sonraki sürüm
kesiminden önce cilalayacağı tek satırlık bir stub kabul eder. Gate&amp;#39;in asla izin vermemesi gereken
şey adımı sessizce atlamaktır, çünkü unutulan bir stub hiç var olmamış bir kayıttan daha küçük bir
başarısızlıktır, ve bir stub en azından birinin daha sonra bulabileceği bir iz bırakır.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# .github/workflows/changelog-check.yml
on:
  pull_request:
    types: [opened, synchronize, reopened, labeled, unlabeled]
jobs:
  changelog:
    if: &amp;gt;-
      !contains(github.event.pull_request.labels.*.name,
      &amp;#39;no-changelog-needed&amp;#39;)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # diff için temel dal gerekir
      - name: Require changelog entry
        run: |
          base=&amp;quot;origin/${{ github.base_ref }}&amp;quot;
          if ! git diff --name-only &amp;quot;$base&amp;quot;...HEAD \
              | grep -q &amp;#39;^\.changeset/&amp;#39;; then
            echo &amp;quot;No changeset. Add one, or have a maintainer&amp;quot;
            echo &amp;quot;apply the no-changelog-needed label.&amp;quot;
            exit 1
          fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Bu bir monorepo&amp;#39;da aynı şekilde çalışır mı?&lt;/h2&gt;
&lt;p&gt;Bir parça daha gerektirir: kaydın hangi paket için olduğu. &lt;a href=&quot;https://changeloop.dev/blog/tr/monorepo-changelogs/&quot;&gt;Monorepo
changelog&amp;#39;ları&lt;/a&gt; tek bir repo çapında dosyanın paketler bağımsız
olarak yayınlanmaya başladığında neden çalışmayı bıraktığını ele alır; CI kontrolü aynı
gereksinimi devralır; bir paket adlandırmayan bir changeset, doğru changelog&amp;#39;un güncelleneceğine
dair yararlı bir kanıt değildir, sadece diff&amp;#39;in bir yerinde bir dosyanın değiştiğinin kanıtıdır.
Bunun için kurulmuş araçlar (Changesets JavaScript ekosisteminde yaygın olandır), changeset
oluşturulduğu anda katkıda bulunandan etkilenen paketi ve bir semver bump&amp;#39;ını seçmesini ister,
böylece CI kontrolü her iki parçayı da sonradan çıkarmak yerine bedava alır.&lt;/p&gt;
&lt;h2&gt;Kontrolün kendisinin gerçek PR&amp;#39;ları engellemeye başlamadan önce doğru olduğu nereden bilinir?&lt;/h2&gt;
&lt;p&gt;Önce, kullanıp atacağınız bir dala karşı bir deneme pull request&amp;#39;i açın: biri changeset&amp;#39;li, biri
changeset&amp;#39;siz, ve biri muafiyet etiketini taşıyan, ve kontrol başkasının işine uygulanmadan önce
üçünün de beklediğiniz sonucu aldığını doğrulayın. Bir koşul tersten yazıldığı için her PR&amp;#39;ı
geçiren, fail-open bir changelog kontrolü, hiç kontrol olmamasından daha kötüdür, çünkü var
olmayan bir kapsama gibi görünür. Aynı dosya üzerinde &lt;code&gt;workflow_dispatch&lt;/code&gt;, birkaç yakın zamanda
merge edilmiş PR&amp;#39;a karşı elle çalıştırılınca, canlı bir pull request&amp;#39;e hiç ihtiyaç duymadan bu
hataların çoğunu yakalar.&lt;/p&gt;
&lt;h2&gt;Aynı fikir GitHub Actions dışında da işler mi?&lt;/h2&gt;
&lt;p&gt;Şekil aynen taşınır, sadece sözdizimi değişir. GitLab CI aynı kuralı bir GitHub Actions &lt;code&gt;if&lt;/code&gt;&amp;#39;i
yerine &lt;code&gt;$CI_MERGE_REQUEST_LABELS&lt;/code&gt;&amp;#39;ı kontrol eden bir job &lt;code&gt;rules&lt;/code&gt; bloğu olarak ifade eder, ve
zorunlu bir merge request onayı muafiyet inceleme adımının yerini alabilir. Bu makalenin tarif
ettiği kontrol GitHub Actions&amp;#39;tır, çünkü onu okuyan çoğu ekip zaten o platformdadır, ama altta
yatan gereksinim, rica edilen bir gelenek değil makine tarafından kontrol edilen bir gate, CI&amp;#39;ın
bir merge&amp;#39;den önce çalıştığı her yerde aynıdır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CI kontrolü merge&amp;#39;ü engellemeli mi, yoksa sadece uyarmalı mı?&lt;/strong&gt;
Engellemeli. Bir uyarı işlevsel olarak nazikçe rica etmekle aynıdır, ki bu zaten başarısız oldu.
Muafiyet etiketi tam olarak gerçek bir sadece-uyarı durumunun aynı katı gate&amp;#39;ten yine de meşru bir
yolu olması için var.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir muafiyet etiketinin doğru uygulanıp uygulanmadığını kim inceler?&lt;/strong&gt;
Pull request&amp;#39;i onaylayan kişi, zaten yaptığı incelemenin bir parçası olarak. Etiket asla
kendiliğinden uygulanıp incelenmeden kalmamalı, yoksa gate&amp;#39;in kapatmak için tasarlandığı aynı
sessiz kaçamak haline gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bunu CI&amp;#39;da zorunlu kılmak bir changelog otomasyon pipeline&amp;#39;ına olan ihtiyacın yerini alır mı?&lt;/strong&gt;
Hayır, onu besler. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog otomasyonu&lt;/a&gt; yapılandırılmış
kayıtları bir sayfaya, akışa ve e-postaya dönüştürmeyi ele alır; CI kontrolü bu yapılandırılmış
kayıtların ilk etapta otomatikleştirilmek için var olmasını garanti eden şeydir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Önce inşa etmeye değer bunun en küçük versiyonu nedir?&lt;/strong&gt;
Belirlenmiş bir changelog dizini altında hiçbir dosya değişmediyse başarısız olan, bir muafiyet
etiketiyle tek bir kontrol. Paket bazlı yönlendirme ve bir monorepo için semver çıkarımı daha
sonra gelebilir; temel alışkanlık, bir kayıt var ya da biri açıkça gerekmediğini söyledi, ilk
günden itibaren sahip olmaya değer olandır.&lt;/p&gt;
</content:encoded></item><item><title>Müşteriyi kaybetmeden bir özellik talebi nasıl reddedilir</title><link>https://changeloop.dev/blog/tr/declining-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/declining-feature-requests/</guid><description>Döngüyü kapatmak genelde birine talebinin gönderildiğini söylemektir. Zor yarısı müşteriyle ilişkiyi bozmadan hayır demektir. Bunu nasıl yapacağınız.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Döngüyü kapatmak genelde birine talebinin gönderildiğini söylemek demektir. Çoğu takip sisteminin
hiç süreci olmadığı zor yarısı ise hayır demektir. Çoğu özellik talebi asla gönderilmez, bu da bir
ürünün kullanıcılarına gerçekten borçlu olduğu döngü kapatmanın çoğunun bir duyuru değil, bir ret
olduğu anlamına gelir, ve kötü ele alınan bir ret sessizliğin maliyet edeceğinden daha fazla
iyi niyete mal olur. İyi ele alındığında neredeyse hiçbir şeye mal olmayabilir, çünkü talep eden
kişinin çoğu zaman en çok istediği şey duyulduğunu bilmektir, özelliğin kendisi değil.&lt;/p&gt;
&lt;h2&gt;İyi reddetmek neden iyi göndermek kadar önemli?&lt;/h2&gt;
&lt;p&gt;Çünkü sessizlik açıklamasız bir ret gibi okunur, ve açıklanmış bir hayır dikkat gibi okunur. Hiçbir
şey duymayan kişi ya talebin yok sayıldığını ya da kaybolduğunu varsayar, ve her iki sonuç da ona
sormaktan vazgeçmeyi öğretir, ki bu bir ürünün gerçek bir retten elde ettiği aynı sonuçtur, sadece
daha yavaş ulaşılır ve yol boyunca daha fazla kırgınlıkla. Açıkça ve bir nedenle hayır diyen bir
yanıt, döngüyü gönderilmiş bir özellik kadar tamamen kapatır, ve bunu daha hızlı yapar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Yanıt&lt;/th&gt;
&lt;th&gt;Talep eden kişinin öğrendiği&lt;/th&gt;
&lt;th&gt;İlişkiye maliyeti&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Sessizlik&lt;/td&gt;
&lt;td&gt;Kimse okumadı, ya da kimse umursamıyor&lt;/td&gt;
&lt;td&gt;Yüksek, ve her gelecek talep ile birikir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nedensiz otomatik yanıt&lt;/td&gt;
&lt;td&gt;Bir yerde süresiz olarak sırada&lt;/td&gt;
&lt;td&gt;Orta; zaman kazandırır ama güven değil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nedenli ret&lt;/td&gt;
&lt;td&gt;Okundu, düşünüldü ve yanıtlandı&lt;/td&gt;
&lt;td&gt;Düşük, neden dürüstse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alternatifli ret&lt;/td&gt;
&lt;td&gt;Asıl ihtiyaç gerçekten duyuldu&lt;/td&gt;
&lt;td&gt;En düşük; genelde güven inşa eder&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Bir reddi kötü hissettiren nedir?&lt;/h2&gt;
&lt;p&gt;Neredeyse her zaman üç şey, birleşik olarak. Genellik: ne istendiğine gerçekte değinmeyen kalıp
&amp;quot;geri bildiriminiz için teşekkürler&amp;quot; hiç okunmamış gibi görünür, okunmuş olsa bile. Gecikme: talep
eden kişi sormayı unuttuktan sonra, talepten altı ay sonra gelen bir ret, hızlı bir hayırdan daha
kötü hissettirir, çünkü talebin düşünülüp reddedilmek yerine dokunulmadan kaldığını ima eder. Ve
dayanmayan bir neden: &amp;quot;yol haritamızda değil&amp;quot; hiçbir şeyi yanıtlamaz, &amp;quot;bu, bu yıl dokunmayı
planlamadığımız izin mantığını yeniden tasarlamayı gerektirir&amp;quot; ise talep eden kişiye gerçekten
değerlendirebileceği ve yeterince önemliyse yükseltebileceği veya etrafından dolaşabileceği bir
şey verir.&lt;/p&gt;
&lt;h2&gt;İyi bir ret gerçekte ne söylemeli?&lt;/h2&gt;
&lt;p&gt;Bu sırayla dört şey: genel bir parafraz değil, belirli talebi adlandıran bir onay; dürüst neden
daha yumuşak bir bahane yerine &amp;quot;bu, ürünün gittiği yöne uymuyor&amp;quot; olsa bile dürüstçe belirtilen
gerçek neden; kapının kapalı mı yoksa şu an sadece açık olmadığı mı, çünkü bunlar çok farklı
tonlar gerektirir; ve varsa, tam olarak istenen özellik olmasa bile altta yatan ihtiyacı ele alan
bir alternatif.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Merhaba Jamie,

Takım davetleri için toplu CSV içe aktarma eklenmesi talebiniz için
teşekkürler. İnceledik, ve bunu inşa etmeyeceğiz: davet akışımız
güvenlik nedenleriyle her yeni üyenin ayrı ayrı incelenmesine
dayanıyor, ve toplu içe aktarma, kasıtsız değil, tasarım gereği buna
karşı çalışır.

Asıl sorun büyük bir takımı hızlıca davet etmekse, API, incelemeyi
atlamadan neredeyse tüm hızı sağlayan script tabanlı bireysel davetleri
destekliyor: [bağlantı]. Kurmak için yardım isterseniz memnuniyetle
yardımcı olurum.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bunun bir şablonun yapamayacağı şeyi ne yaptığına dikkat edin: gerçek özelliği adlandırıyor, belirsiz
bir politika yerine gerçek bir tasarım kararına bağlı bir neden veriyor, ve sadece bileti kapatmak
yerine altta yatan sorunu çözen bir yol sunuyor.&lt;/p&gt;
&lt;h2&gt;Bu, gönderilmiş bir özellikte döngüyü kapatmaktan nasıl farklı?&lt;/h2&gt;
&lt;p&gt;Mekanik benzer, ton değil. &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Müşteriyle geri bildirim döngüsünü kapatmak&lt;/a&gt;
mesajın iyi haber olduğu ve ana riskin göndermeyi unutmak olduğu gönderilmiş durumu ele alır. Bir
ret kötü haberdir, ya da en azından istenmeyen haberdir, ve verilen nedende daha fazla özen ve
teslimatta daha az otomasyon gerektirir: gönderilmiş bir özellik bildirimi, bir durum değişikliği
tarafından tetiklenen kalıp bir yorum olabilir, ama kalıp gibi okunan bir ret, tam olarak bu
yaklaşımın tamamının kaçınmaya çalıştığı başarısızlık biçimidir. İkisi yine de bir gereksinimi
paylaşır: orijinal talep talep eden kişiyle bağlantılı kalmalıdır, &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;özellik talebi takibinin&lt;/a&gt;
ele aldığı aynı takip disiplini, yoksa her iki mesajı da bireysel olarak gönderecek bir yol yoktur.&lt;/p&gt;
&lt;h2&gt;Bir ret, herkese açık bir yol haritasındaki bir durum gibi herkese açık olmalı mı?&lt;/h2&gt;
&lt;p&gt;Genellikle durum öyle olsa bile belirli neden değil. &lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;Herkese açık yol haritası&lt;/a&gt;
talep eden kişinin tekrar sormadan kontrol edebileceği durum etiketlerini ele alır, ve bir
&amp;quot;reddedildi&amp;quot; veya &amp;quot;planlanmadı&amp;quot; durumu o sistemin parçası olabilir. Ama özellikle dahili
öncelikleri veya pek de gurur verici olmayan bağlamı içeren ayrıntılı neden, genellikle herkese
açık bir durum sayfasından çok bireysel yanıtta daha değerlidir, orada aynı ifade gerçekten soran
tek kişi yerine her okuyucu için işe yaramak zorundadır.&lt;/p&gt;
&lt;h2&gt;Reddedilen her talep bireysel bir yanıtı hak eder mi?&lt;/h2&gt;
&lt;p&gt;İsimli, ulaşılabilir bir kişiden gelen her talep hak eder, en azından kısa bir tane. Yüksek
hacimli, tekrar eden veya anonim talepler istisnadır: benzer talepleri gruplandırıp grup başına bir
kez yanıtlamak, veya paylaşılan bir durum etiketini güncellemek, bireysel yanıtlar gerçekten
ölçeklenmediğinde makuldür. Tutulması gereken sınır, &amp;quot;herkese bireysel olarak yanıt veremeyiz&amp;quot;in
gerçek hacme karşı kontrol edilen gerçek bir operasyonel kısıtlama olması gerektiğidir, iki dakika
sürecek bir yanıtı atlamak için varsayılan bir bahane değil.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Zayıf bir nedenle hızlıca reddetmek mi, yoksa iyi bir tane için zaman ayırmak mı daha iyi?&lt;/strong&gt;
Dürüst bir nedenle hızlıca, ikisini de tek başına geçer. Gerçek bir nedenle, kısa bile olsa, hızlı
bir yanıt, cilalı bir nedenle yavaş bir yanıtı geride bırakır; gecikmenin kendisi güveni zedeleyenin
parçasıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir ret talebin daha sonra yeniden değerlendirileceğini vaat etmeli mi?&lt;/strong&gt;
Sadece bu gerçekten olasıysa ve onu gerçekten yeniden değerlendirmek için bir mekanizma varsa,
mesela bir planlama döngüsünde onu yeniden yüzeye çıkaran bir etiket gibi. Böyle bir mekanizma
olmadan belirsiz bir &amp;quot;aklımızda tutacağız&amp;quot;, işlevsel olarak sessizlikle aynıdır, sadece daha
kibarca ifade edilmiş.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dürüst neden şirketin paylaşamayacağı bir şeyse, rekabet endişesi gibi?&lt;/strong&gt;
Daha yumuşak bir neden uydurmak yerine bunu doğrudan söyleyin. &amp;quot;Buradaki belirli gerekçeyi
paylaşamıyoruz, ama bu inşa etmeyi planladığımız bir şey değil&amp;quot;, takip sorusu karşısında çöken
uydurma bir açıklamadan daha dürüst, ve daha saygı görür.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir talebi reddetmek, takipten silinmesi gerektiği anlamına mı gelir?&lt;/strong&gt;
Hayır. Onu, nedenle birlikte reddedildi olarak etiketlenmiş şekilde saklayın, böylece bir sonraki
benzer talebin karşı gruplandığı örüntünün parçası olur, ve daha sonra değişen bir bağlam (yeni bir
entegrasyon, yeni bir takım önceliği) değerlendirmeyi sıfırdan başlatmak yerine onu yeniden yüzeye
çıkarabilir.&lt;/p&gt;
</content:encoded></item><item><title>Feature flag release notları: ne söylenir, ne zaman</title><link>https://changeloop.dev/blog/tr/feature-flags-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/feature-flags-feature-requests/</guid><description>Feature flag release notları merge ile yayını ayırmalıdır; bir flag varken ikisi aynı an değildir. Döngüyü erken kapatmak görünmeyen bir özelliği duyurur.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir özellik talebinde döngüyü kapatmak, şeyin teslim edildiği net bir an olduğunu varsayar. Bir feature flag bu anı ortadan kaldırır, ve feature flag release notlarının zamanlamasını zorlaştıran da budur. Kod merge edilir, flag var olur, ve günler ya da haftalar
boyunca özellik aynı anda hem canlıdır hem de onu isteyebilecek neredeyse herkes için görünmezdir,
sıklıkla bunu ilk başta isteyen kişi de dahil. Çok erken haber vermek onu henüz orada olmayan bir
özelliğe götürür. Çok geç haber vermek, güven inşa etmesi gereken döngünün unutulmuş gibi
okunmasına neden olur.&lt;/p&gt;
&lt;h2&gt;Bir flag olağan &amp;quot;teslim et, haber ver&amp;quot; sırasını neden bozar?&lt;/h2&gt;
&lt;p&gt;Çünkü bir olayı en az ikiye böler: kodun canlıya çıkması, ve flag&amp;#39;in belirli bir hesap için
açılması. Bir geri bildirim döngüsünü kapatmanın her süreci bunların birlikte gerçekleştiğini
varsayar, ki bu çoğu sürüm için doğru ve aşamalı yayılım, hedefleme ya da acil kapatma anahtarı
olarak kullanılan bir flag&amp;#39;in arkasındaki her şey için yanlıştır. &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Müşteri geri bildirim döngüsünü
kapatmak&lt;/a&gt; isteyen kişiye tam olarak bir changelog girişi
onaylanıp yayınlandığı anda haber vermeyi tarif eder; bu adım, girişi yayınlamak ile özelliğin
kullanılabilir olması aynı an olduğunda için yazılmıştır, ve bir flag tam olarak bunların aynı
olmadığı durumdur.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;An&lt;/th&gt;
&lt;th&gt;Ne doğru&lt;/th&gt;
&lt;th&gt;İsteyen kişiye şimdiden haber verilmeli mi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Kod merge edildi, flag her yerde kapalı&lt;/td&gt;
&lt;td&gt;Özellik var, kimse kullanamıyor&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flag isteyen kişinin hesabı için açık&lt;/td&gt;
&lt;td&gt;Özellik var, o kişi özellikle kullanabiliyor&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flag onu dışlayan bir yayılım yüzdesi için açık&lt;/td&gt;
&lt;td&gt;Özellik var, o kişi hâlâ kullanamıyor&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flag tamamen kaldırıldı, özellik sadece açık&lt;/td&gt;
&lt;td&gt;Özellik herkes için var&lt;/td&gt;
&lt;td&gt;Evet, henüz haber verilmediyse&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Birine ne zaman haber verileceğine dair gerçek kural nedir?&lt;/h2&gt;
&lt;p&gt;Flag hesabı için açık olduğunda haber ver, kod merge edildiğinde değil ve flag oluşturulduğunda
değil. Bu tek kural yukarıdaki tablonun her satırını kapsar, çünkü bildirimi isteyen kişi için
gerçekten önemli olan tek gerçeğe bağlar: şu anda gidip o şeyi kullanabilir mi. Merge&amp;#39;e ya da
flag&amp;#39;in oluşturulmasına bağlı bir bildirim aslında bir mühendislik ilerleme raporudur, ve bir
özellik isteyen kişi ilerleme raporu istemez, ne zaman bakacağını bilmek ister.&lt;/p&gt;
&lt;h2&gt;Bu, isteyen kişinin erken veya özel erişime ihtiyacı olduğu anlamına mı gelir?&lt;/h2&gt;
&lt;p&gt;Mutlaka değil, ve bunu zorlamak kendi sorununu yaratır. Flag yük veya kararlılık nedenleriyle
aşamalı olarak yayılıyorsa, bir hesabı sadece döngüyü daha hızlı kapatmak için sıranın başına
taşımak, yayılımın kademeli olmasının nedenini baltalar. Dürüst seçenekler şunlardır: isteyen
kişinin hesabının yayılıma doğal olarak ulaşmasını beklemek ve o zaman haber vermek, ya da,
aciliyet bunu haklı çıkarıyorsa, yayılımın sahibi olan kişinin gerçek bir kararı olarak bilinçli
şekilde onu erken açmak, bir bildirim gönderme isteğinin yan etkisi olarak değil.&lt;/p&gt;
&lt;h2&gt;Ya flag bir yayılım mekanizması değil de acil kapatma anahtarıysa?&lt;/h2&gt;
&lt;p&gt;O zaman güvenli varsayım tersine döner. Bir özelliği yayılımını kademelendirmek yerine hızlıca
kapatabilmek için var olan bir flag genelde özelliğin oluşturulduğu anda tamamen canlı olması
gerektiği anlamına gelir, ve flag sıralama yerine güvenlik için vardır. Bu durumda, isteyen kişiye
deploy anında haber vermek doğrudur, flag&amp;#39;siz herhangi bir sürümde olduğu gibi; flag&amp;#39;in varlığı
döngünün ne zaman kapandığını değiştirmemesi gereken operasyonel bir ayrıntıdır. Önemli olan ayrım
flag&amp;#39;in ne için olduğudur, birinin var olup olmadığı değil.&lt;/p&gt;
&lt;h2&gt;Flag, feature flag release notlarının ne söylemesi gerektiğini değiştirir mi?&lt;/h2&gt;
&lt;p&gt;Ne zaman yayınlandığını değiştirir, neyi içerdiğini değil. Flag hesapların %100&amp;#39;ü için açık olduğu
tam anda yayınlanan bir giriş, tam olarak normal bir changelog girişi gibi okunur, ve öyle olmalı;
onu daha sonra bulan bir okuyucunun bir flag&amp;#39;in hiç işin içinde olduğunu bilmesi için hiçbir nedeni
yoktur. Yapmaması gereken şey, flag sadece küçük bir yayılım yüzdesi için açıkken yayınlanmaktır,
çünkü genel bir changelog girişi onu okuyan herkesi, flag&amp;#39;i olmayan hesaplar dahil, bulamayacakları
bir özelliği aramaya gönderir, ki bu aynı sorunun daha kötü bir versiyonudur, tek bir isteyen
kişinin ölçeğinde değil ürün genelinde. Bu zamanlama kuralı, feature flag release notları ile
sıradan bir giriş arasındaki tüm farktır: içerik aynıdır, sadece yayın tarihi değişir. &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Release notes nasıl yazılır&lt;/a&gt;
burada da geçerli olan &amp;quot;hiçbir eylem gerekmiyor&amp;quot; disiplinini ele alır: okuyuculara bunun onları
etkileyip etkilemediği söylenmeli, sadece bir yerde var olduğu değil.&lt;/p&gt;
&lt;h2&gt;Ürün güncelleme e-postaları flag&amp;#39;li bir özelliği farklı ele almalı mı?&lt;/h2&gt;
&lt;p&gt;Evet, çoğunlukla yeniden yazmak yerine erteleyerek. &lt;a href=&quot;https://changeloop.dev/blog/tr/product-update-email/&quot;&gt;Ürün güncelleme e-postası şablonu&lt;/a&gt;
hedeflenmiş bildirimleri geniş özetlere karşı ele alır; flag&amp;#39;li bir özellik, hedeflenmiş bir
bildirimin zamanlamasının gönderilmeden önce alıcının kendi flag durumuna karşı kontrol edilmesi
gereken bir durumdur, ki bu bir geniş özetin hiç kolayca yapamayacağı bir şeydir, bu da hâlâ
yayılımın ortasındaki her şey için bir özetin neden yanlış kanal olduğuna dair bir neden daha.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Flag var olduğu ama isteyen kişi için henüz açık olmadığı zaman ona özelliğinin &amp;quot;yakında geliyor&amp;quot; olduğu söylenmeli mi?&lt;/strong&gt;
Sadece gerçek, yakın bir tarih varsa, ve o zaman bile ölçülü şekilde. Tarihsiz bir &amp;quot;yakında&amp;quot;,
yeterince zaman geçtikten sonra tam olarak sessizlik gibi okunur, ve izlenmesi ve tutulması gereken
ikinci bir söz yaratır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir flag&amp;#39;in döngüyü kapatacak kadar ilerlediğine kim karar verir?&lt;/strong&gt;
Bildirimin sahibi değil, yayılımın sahibi. Yayılımı olan kişi &amp;quot;hesapların %100&amp;#39;ü&amp;quot;nün yakın mı yoksa
hâlâ haftalar uzakta mı olduğunu bilir; döngüyü kapatma adımını sabit bir takvim tarihine değil onun
durumuna bağlamak bildirimi dürüst tutar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kalıcı bir flag arkasındaki (hiç tamamen kaldırılmayan) bir özellik hiç genel bir changelog girişi alır mı?&lt;/strong&gt;
Evet, o ürün için &amp;quot;genel kullanıma açık&amp;quot; ne anlama geliyorsa ona ulaştığında, flag&amp;#39;in kendisi
operasyonel nedenlerle sonsuza kadar kodda kalsa bile. Changelog girişi okuyucu için erişilebilirlikle
ilgilidir, o erişilebilirliğin nasıl gerçekleştirildiği uygulama detayıyla değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ya flag kaldırılır ve özellik teslim edilmek yerine öldürülürse?&lt;/strong&gt;
Bu bir ret, teslimat bildirimi değildir, ve başka herhangi bir ret kadar özen hak eder. &lt;a href=&quot;https://changeloop.dev/blog/tr/declining-feature-requests/&quot;&gt;Bir
özellik talebi nasıl reddedilir&lt;/a&gt; o mesajın ne söylemesi
gerektiğini ele alır; döngüyü dürüstçe kapatmak bazen onu bir hayırla kapatmak anlamına gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feature flag release notları normal bir girişten farklı bir şablona mı ihtiyaç duyar?&lt;/strong&gt;
Şablon değişmez, sadece yayından önce bir kapı adımı eklenir: kodun sadece merge edildiğine değil,
soran hesap için flag durumuna bakın, ve bu kontrol geçene kadar girişi bekletin. Girişle ilgili
geri kalan her şey, ifade, uzunluk, FAQ disiplini, diğer her release notu kadar aynı kalır.&lt;/p&gt;
</content:encoded></item><item><title>Özellik taleplerini kaybetmeden takip etmek</title><link>https://changeloop.dev/blog/tr/feature-request-tracking/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/feature-request-tracking/</guid><description>Özellik talebi takibi genelde iki şekilde başarısız olur: talepler hiçbir yere gitmez ya da kimsenin bakmadığı yere gider. Her ikisine dayanan bir sistem.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Özellik talebi takibi neredeyse her zaman iki şekilden birinde başarısız olur. Ya taleplerin
gidecek hiçbir yeri yoktur, bu yüzden gelen kutularında ve Slack konularında yaşarlar ve tek tek
unutulurlar, ya da kimsenin bir daha bakmadığı bir yerleri vardır ve topluca unutulurlar. İşe
yarayan bir sistem her iki başarısızlığa da dayanmalıdır: her talebin düştüğü tek bir yere ve o
yeri gelecek ay tekrar açmak için bir nedene ihtiyaç vardır.&lt;/p&gt;
&lt;h2&gt;Özellik talepleri gerçekte nereden gelir?&lt;/h2&gt;
&lt;p&gt;Çoğu takip sisteminin hesaba kattığından daha fazla kanaldan. &amp;quot;Şöyle olsa iyi olur&amp;quot; içeren bir
destek bileti. Herkese açık bir yol haritasındaki bir yorum. Bir potansiyel müşterinin anlaşmayı
engelleyen tek şeyi adlandırdığı bir satış görüşmesi. Ürün içindeki bir widget. Her kanalın kendi
sahibi ve kendi araçları vardır, ve talepler tam da bu yüzden dağılır: destek bilet kuyruğu ile
ürün ekibinin backlog&amp;#39;u nadiren aynı sistemdir, ve sadece ikisinden birine ulaşan bir talep,
pratikte sadece tek bir departmana ulaşmıştır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kaynak&lt;/th&gt;
&lt;th&gt;Tipik sahip&lt;/th&gt;
&lt;th&gt;Genelde nerede kaybolur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Destek biletleri&lt;/td&gt;
&lt;td&gt;Destek ekibi&lt;/td&gt;
&lt;td&gt;Çözüldü olarak kapatılır, bir daha gündeme gelmez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Satış görüşmeleri&lt;/td&gt;
&lt;td&gt;Satış / hesap yönetimi&lt;/td&gt;
&lt;td&gt;Üründe kimsenin okumadığı bir CRM alanı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Üründeki widget&lt;/td&gt;
&lt;td&gt;Ürün&lt;/td&gt;
&lt;td&gt;Takip edilmeyen bir form gönderimi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yol haritası yorumları&lt;/td&gt;
&lt;td&gt;Yol haritasını kim inşa ettiyse&lt;/td&gt;
&lt;td&gt;Yorum dizisinin kendisi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sosyal medya / yorumlar&lt;/td&gt;
&lt;td&gt;Pazarlama ya da hiç kimse&lt;/td&gt;
&lt;td&gt;Bir kere ekran görüntüsü alınır, sonra kaybolur&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Her kanal için tek bir alım formu işe yaramaz, çünkü kimse onu benimsemez. İşe yarayan şey,
yönlendirme başta otomatikleşene kadar günde beş dakikalık kopyala yapıştır olsa bile, her kanalın
aktığı tek bir hedeftir.&lt;/p&gt;
&lt;h2&gt;Özellik talebi takibini gerçekte ne bozar?&lt;/h2&gt;
&lt;p&gt;Neredeyse her zaman iki şey. Birincisi, eksik bir hedef: talepler geldikleri kanalda yanıtlanır ve
hiçbir yerde kalıcı olarak kaydedilmez, bu yüzden üç farklı müşteriden gelen aynı talep, bir
sinyal yerine üç ilgisiz tekil yanıt gibi görünür. İkincisi, daha yaygın olanı, dolup okunmayı
durduran bir hedeftir. Filtrelenmemiş 400 satırlık bir e-tablo artık bir takip sistemi değildir;
tesadüfen yazılabilir olan bir arşivdir.&lt;/p&gt;
&lt;p&gt;İkinci başarısızlık daha tehlikelidir, çünkü takibin çalışıyormuş gibi görünmesini sağlar.
Talepler kaydedilir. Biri &amp;quot;kaç kişi X&amp;#39;i istedi&amp;quot; diye sorana kadar hiçbir şey bozuk görünmez, ve
dürüst yanıt &amp;quot;bunu bilmek için 400 satırın hepsini okumamız gerekir&amp;quot; olur.&lt;/p&gt;
&lt;h2&gt;Bir özellik talebi gerçekte neyi kaydetmeli?&lt;/h2&gt;
&lt;p&gt;Orijinal mesajı yeniden okumadan sonradan üç soruyu yanıtlayacak kadar: ne istendiği, mümkünse
talep edenin kendi kelimeleriyle; kimin istediği, ve yanıt &amp;quot;onu inşa ettik&amp;quot; olursa ona nasıl
ulaşılacağı; ve bunun yaygın bir istek mi yoksa tek seferlik bir vaka mı olduğunu bilmek için ne
gerektiği. Doğrudan bir alıntı bir parafrazdan daha değerlidir, çünkü talebi kim triyaj ettiyse
onun yazdığı parafraz zaten kendi okumasını taşır, ve altı ay sonra ikinci bir kişinin
doğrulayamayacağı da tam olarak o okumadır.&lt;/p&gt;
&lt;h2&gt;Hangi etiketler işe yarar?&lt;/h2&gt;
&lt;p&gt;İki tane, ve farklı soruları yanıtlarlar. Bir &lt;strong&gt;tür&lt;/strong&gt; etiketi, bir özellik talebini bir hata
raporundan ayırır, çünkü ikisi de farklı sahiplere ve zaman çizelgelerine ihtiyaç duyar, ve
ikisini tek bir kuyrukta karıştırmak en yüksek sesli şikayetlerin talepleri geçmesine izin verir.
Low, medium ve high gibi küçük bir kümeyle sınırlı bir &lt;strong&gt;öncelik&lt;/strong&gt; etiketi, &amp;quot;birinin ürünü
kullanmasını engelliyor&amp;quot; ile &amp;quot;güzel olurdu&amp;quot;yu ayırır, çünkü ikisi de çok farklı yanıt süreleri
hak eder ve hiçbiri diğerinin temposunu devralmamalıdır. &lt;strong&gt;Tür&lt;/strong&gt;
etiketini doğru koymak, talebin iddia ettiği şey olduğunu varsayar; &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-vs-bug-report/&quot;&gt;bir özellik talebi gerçekte
bir hata raporu olduğunda&lt;/a&gt; bir müşterinin kendi
sözlerinin bu etiketi yanlış yöne işaret ettiği durumu ele alır.&lt;/p&gt;
&lt;p&gt;Otomatik triyaj, talep geldiği anda ikisini de uygulayabilir. changeloop&amp;#39;ta, bir widget
gönderimi aynı geçişte &lt;code&gt;feature-request&lt;/code&gt; veya &lt;code&gt;bug&lt;/code&gt; etiketini ve bir
&lt;code&gt;priority:low|medium|high&lt;/code&gt; etiketini alır, artı öğeyi açmadan kaynağın görünür olması için bir
&lt;code&gt;from-widget&lt;/code&gt; etiketi. Bu, backlog&amp;#39;u bir öğleden sonra yerine bir dakikada filtrelenebilir
kılmaya yeter: bu ay widget&amp;#39;tan gelen her yüksek öncelikli özellik talebini bana göster.&lt;/p&gt;
&lt;p&gt;Herkese açık bir yol haritası olduğu anda üçüncü bir etiket işe yarar: talep edenin kendi
başına kontrol edebileceği bir durum. &lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;Herkese açık yol haritası&lt;/a&gt;, planned,
building ve shipped durumlarını baştan sona ele alır; kısacası bu etiket, özel bir kuyruğu, talep
edenin tekrar sormadan kontrol edebileceği bir şeye dönüştürür.&lt;/p&gt;
&lt;h2&gt;Sırada ne inşa edileceğine nasıl karar verilir?&lt;/h2&gt;
&lt;p&gt;Saymadan önce grupla. Aynı temel yeteneği farklı şekillerde ifade eden on talep, bir e-tabloda
dağınık on satır gibi görünür, gruplandığında ise güçlü bir sinyal gibi görünür, ve bu gruplama
genelde eksik olan adımdır, sayma değil. Gruplama olmadan ham bir sayı, arkasında gerçek talebi
en çok olanı değil, en akılda kalıcı isme sahip özelliği ödüllendirme eğilimindedir.&lt;/p&gt;
&lt;p&gt;Kaç kişinin istediğine göre değil, kimin istediğine göre ağırlıklandır. Yenilemeye yakın bir
hesaptan gelen bir talep, bir deneme kaydından gelen aynı talepten farklı bir aciliyet taşır, ve
bu bağlamı çıplak bir sayı lehine atan bir takip sistemi, en yararlı sayı yerine hesaplanması en
kolay sayı için optimize eder.&lt;/p&gt;
&lt;p&gt;Buradaki her karar aynı zamanda kaybeden talepler de üretir, ve onlar da bir yanıtı hak eder;
&lt;a href=&quot;https://changeloop.dev/blog/tr/declining-feature-requests/&quot;&gt;bir özellik talebi nasıl reddedilir&lt;/a&gt; isteği kabul
edilmeyenlere ne söyleneceğini ele alır. Gruplama ve ağırlıklandırma, &amp;quot;sırada ne inşa edilecek&amp;quot;
sorusunun sadece yarısıdır; &lt;a href=&quot;https://changeloop.dev/blog/tr/prioritizing-feature-requests/&quot;&gt;özellik taleplerine öncelik vermek&lt;/a&gt;
gerçek çerçeveleri, RICE&amp;#39;ı, gelire göre ağırlıklandırmayı ve ham sayıları, ve her birinin nerede
kırıldığını ele alır.&lt;/p&gt;
&lt;h2&gt;Bir şey gönderildiğinde döngü nasıl kapatılır?&lt;/h2&gt;
&lt;p&gt;Bu, takip sistemlerinin en sık atladığı adımdır, ve talep edenlerin gerçekten fark ettiği adımdır.
&lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Müşteriyle geri bildirim döngüsünü kapatmak&lt;/a&gt; mekaniği baştan sona
ele alır; buraya ait olan kısım, döngüyü kapatmanın sadece orijinal talep talep edene bağlı
kaldığında işe yaramasıdır. Bir GitHub issue&amp;#39;sundan inşa edilmiş, talep edenin kimliği bir yoruma
gömülü olmak yerine issue&amp;#39;ya bağlı olan bir özellik talebi şablonu, birinin göndermeyi
hatırlaması gereken bir bildirim yerine otomatik bir &amp;quot;gönderildi&amp;quot; bildirimini mümkün kılan şeydir.
&lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-template/&quot;&gt;Özellik talebi şablonu&lt;/a&gt; somut şablonu ve her alanın ne için
olduğunu gösterir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Özellik talebi takibi için hangi aracı kullanmalıyım?&lt;/strong&gt;
Ekibin zaten her gün kontrol ettiği şey, kimsenin açmadığı özel bir aracı geçer. Mühendislik
zaten orada yaşıyorsa bir GitHub issue tracker&amp;#39;ı iyi çalışır; ürün orada yaşıyorsa hafif bir pano
iyi çalışır. Araç, tekrar açılıp açılmadığından daha az önemlidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özellik taleplerinin kopyalanmasını nasıl önlerim?&lt;/strong&gt;
İfadeye göre triyaj etmeden önce temel yeteneğe göre grupla. Yeni bir tane oluşturmadan önce
mevcut taleplerde arama yapmak çoğu kopyayı yakalar; aylık bir gruplama geçişi geri kalanını
yakalar.
&lt;a href=&quot;https://changeloop.dev/blog/tr/duplicate-feature-requests/&quot;&gt;Yinelenenleri orijinal sesi kaybetmeden birleştirmek&lt;/a&gt;,
gruplamanın kendisi bittikten sonra ifadeyle ne yapılacağını ele alır, böylece birleştirme talebi
sessizce hangi gönderim önce geldiyse ona daraltmaz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her özellik talebi bir yanıt almalı mı?&lt;/strong&gt;
Her biri, kısa bile olsa, bir alındı bildirimi almalıdır, ama her birinin hemen bir karara
ihtiyacı yoktur. Talep edenin kendi başına kontrol edebileceği bir yol haritası etiketi gibi
görünür bir durum, bir ekibin aksi halde borçlu olacağı bireysel yanıtların çoğunun yerini alır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özellik talebi takibi ile herkese açık bir yol haritası arasındaki fark nedir?&lt;/strong&gt;
Takip, asla gönderilmeyecek olanlar da dahil, her isteğin dahili kaydıdır. Herkese açık bir yol
haritası, bir ekibin herkese açık olarak taahhüt ettiği alt kümedir, talep edenin tekrar sormadan
görebileceği bir durumla birlikte.&lt;/p&gt;
</content:encoded></item><item><title>Bir özellik talebi gerçekte bir hata raporu olduğunda</title><link>https://changeloop.dev/blog/tr/feature-request-vs-bug-report/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/feature-request-vs-bug-report/</guid><description>Yeni bir ayar isteyen bir destek bileti, gizli bir hata için bir workaround olabilir. Yanlış etiket onu yanlış sahibe ve yanlış kuyruğa gönderir.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;quot;Export limitini artırmak için bir ayar ekleyebilir misiniz?&amp;quot; bir özellik talebi gibi okunur, ve
çoğu triyaj sistemi onu anında öyle etiketler. Bazen öyledir. Bazen export, dokümante edilmiş
limitten daha düşük bir sayıda bir hata yüzünden başarısız olur, ve kodu göremeyen müşteri
tanımlayabildiği en makul çözümü uydurmuştur: bana daha büyük bir sayı verin, belki çalışır.
&lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;Hangi etiketler işe yarar&lt;/a&gt; bir backlog&amp;#39;u özellik talepleri ve
hatalara bölen tür etiketini ele alır; burası bir müşterinin kendi sözlerinin etiketi yanlış
yöne işaret ettiği durumdur, ve yanlış anlamanın bedeli, altına bakıldığında kimsenin gerçekten
istemediği taleplerle dolu bir backlog&amp;#39;a yavaş bir sürüklenmedir.&lt;/p&gt;
&lt;h2&gt;Gerçekte bir hata raporu olan bir özellik talebi neye benzer?&lt;/h2&gt;
&lt;p&gt;Sorunu değil, bir workaround&amp;#39;u adlandırır. Gerçek bir özellik talebi genellikle ürünün hiç
desteklemediği bir sonucu tanımlar: &amp;quot;bunu daha sonraya planlayabileyim&amp;quot;, &amp;quot;koyu mod ekleyin&amp;quot;.
Yanlış sınıflandırılmış bir hata raporu, eksik bir ayar gibi görünen ama gerçekte bir belirti olan
belirli bir sayı, eşik veya davranış tanımlar: &amp;quot;timeout&amp;#39;u artırın&amp;quot;, &amp;quot;bir yeniden deneme seçeneği
ekleyin&amp;quot;, &amp;quot;aynı anda daha fazla satır export etmeme izin verin&amp;quot;. Belirti, isteyen kişinin bir
hedef tanımlamak yerine bir uygulama, bir ayar, bir anahtar, bir geçersiz kılma önermesidir, çünkü
özelliği dokümante edildiği gibi zaten denemiştir ve dokümantasyonun yapması gerektiğini söylediği
şeyi yapmamıştır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sinyal&lt;/th&gt;
&lt;th&gt;Özellik talebi&lt;/th&gt;
&lt;th&gt;Özellik talebi kılığındaki hata&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;İsteyenin tanımladığı şey&lt;/td&gt;
&lt;td&gt;Ürünün yapamadığı bir sonuç&lt;/td&gt;
&lt;td&gt;Değiştirmek istediği bir parametre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dokümante edilmiş davranış bunu zaten kapsıyor mu&lt;/td&gt;
&lt;td&gt;Hayır, gerçekten eksik&lt;/td&gt;
&lt;td&gt;Evet, ama dokümante edildiği gibi çalışmıyor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daha fazla çaba talebi ortadan kaldırıyor mu&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Bazen, hata eşiğe bağlıysa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nereye yönlendirilmeli&lt;/td&gt;
&lt;td&gt;Ürün backlog&amp;#39;u&lt;/td&gt;
&lt;td&gt;Hata kuyruğu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Bu neden göründüğünden daha önemli?&lt;/h2&gt;
&lt;p&gt;Çünkü iki kuyruğun farklı sahipleri, zaman çizelgeleri ve başarı kriterleri vardır, ve özellik
talebi olarak dosyalanmış bir hata, özellik taleplerine karşı önceliklendirilir, bir hatanın hak
ettiği zaman çizelgesinde düzeltilmek yerine gerçek ürün eksiklikleriyle dikkat için rekabet eder.
&lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;Özellik taleplerini takip etme&lt;/a&gt; hataları ve özellikleri tek
bir kuyrukta karıştırmanın en yüksek sesli şikayetlerin gerçek talepleri geçmesine nasıl izin
verdiğini ele alır; gizlice bir hata olan bir özellik talebi tersi zararı verir, ürün backlog&amp;#39;unda
kalır ve temel hata düzeltilir düzeltilmez ortadan kalkacak bir &amp;quot;özellik&amp;quot; için oy toplar, ki bu o
backlog&amp;#39;u okuyan herkes için önceliklendirme sinyalini boşa harcar.&lt;/p&gt;
&lt;h2&gt;Müşterinin kendi sözleri yanlış yöne işaret ettiğinde fark nasıl anlaşılır?&lt;/h2&gt;
&lt;p&gt;Ne eklemenizi istediğini değil, ne olmasını beklediğini sorun. &amp;quot;Export 500 satırda tıkandı ve
2.000&amp;#39;e ihtiyacım var, limiti artırabilir misiniz&amp;quot; takip sorusu, &amp;quot;500 dokümante edilmiş limit mi&amp;quot;,
dokümante edilmiş sayının 5.000 olduğunu ve export&amp;#39;un erken başarısız olduğunu ortaya çıkarana
kadar bir limit artırma özellik talebi gibi görünür. Sadece bu tek soru, ne beklediği ile ne
olduğu, sınıflandırma işinin çoğunu yapar, çünkü gerçek bir özellik talebinin altında kaldığı
dokümante edilmiş bir davranış yoktur; beklenecek bir şey yoktur çünkü yetenek henüz mevcut
değildir.&lt;/p&gt;
&lt;h2&gt;Destek görevlileri mi yoksa mühendisler mi bu kararı vermeli?&lt;/h2&gt;
&lt;p&gt;Destek görevlileri ilk geçişi yapar, çünkü bileti önce onlar görür, ama etiket kolayca
değiştirilebilir ve yanlış yapması ucuz olmalı, öğeyi sonsuza dek yanlış kuyrukta sabitleyen tek
seferlik bir karar değil. Hafif bir ikinci kontrol, gizli bir hata gibi kokan her şey için haftada
bir yeni &amp;quot;özellik talebi&amp;quot; etiketlerini tarayan bir mühendis, kod tabanı bağlamı olmayan bir
destek görevlisinin fark edemeyeceği olanları yakalar. Bunun resmi olması gerekmez; bir inceleme
sürecinden çok beş dakikalık bir bakıştır.&lt;/p&gt;
&lt;h2&gt;Gerçek hata bulunduğunda döngüyü kapatmak değişir mi?&lt;/h2&gt;
&lt;p&gt;Evet, ve gönderebileceğiniz mesajı iyileştirir. &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Müşteri geri bildirim döngüsünü
kapatma&lt;/a&gt; bir şey gönderildiğinde isteyen kişiye söylemeyi ele
alır; yeniden sınıflandırılmış bir hata bu mesajın daha iyi bir versiyonunu alır, çünkü &amp;quot;bunun
arkasındaki hatayı bulduk ve düzelttik&amp;quot; yeterlilik gibi geliyorken, &amp;quot;istediğiniz özelliği
oluşturduk&amp;quot; sadece kazara doğru olurdu, çünkü gerçek özellik talebi, gerçekten daha yüksek bir
export limiti, hata gittikten ve orijinal 5.000 satır limit yeterli olduktan sonra hiç
oluşturulmayabilir.&lt;/p&gt;
&lt;h2&gt;Yanlış sınıflandırma hiç fark edilmezse ne olur?&lt;/h2&gt;
&lt;p&gt;Backlog gerçek talep gibi görünen ama olmayan taleplerle dolar, ve o backlog&amp;#39;a karşı alınan
önceliklendirme kararları çarpıklığı miras alır. Kırk oylu bir &amp;quot;özellik&amp;quot; gerçekte aynı hataya
denk gelen kırk kişi olabilir, ve harfi harfine isteği inşa etmek, gerçekte hiç kısıtlama olmamış
bir limiti artırmak için bir ayar, hiçbir şeyi düzeltmeyen karmaşıklık teslim eder, temel hata ise
bu konuyu henüz bulmamış müşterilerden yeni &amp;quot;özellik talepleri&amp;quot; üretmeye devam eder.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her özellik talebini bilinen hatalara karşı kontrol etmek için resmi bir adım eklemeye değer mi?&lt;/strong&gt;
Resmi bir adım değil, bir alışkanlık: yeni bir özellik talebini triyaj eden kişi etiketi
uygulamadan önce &amp;quot;dokümante edilmiş davranış bunu zaten yaptığını iddia ediyor mu&amp;quot; diye sormalı,
çünkü sadece bu soru süreç yükü eklemeden yanlış sınıflandırmaların çoğunu yakalar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ya hata bulunduktan sonra bile müşteri bunun bir özellik talebi olduğunda ısrar ederse?&lt;/strong&gt;
Ne bulduğunuzu ve hata düzeldikten sonra önerdiği ayara neden artık ihtiyaç olmayacağını açıklayın.
Çoğu müşteri bir workaround ister çünkü gerçek düzeltmenin mevcut olmadığını varsaymıştır, o
ayarı özellikle istediği için değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yeniden sınıflandırılmış bir öğe özellik talebi olarak topladığı oyları veya yorumları kaybeder mi?&lt;/strong&gt;
Görünür şekilde saklamalı, çünkü o oylar hatayı bulmaya götüren kanıttır, ve o izi gizlemek aynı
yanlış sınıflandırmanın bir sonraki seferde, farklı bir bilette, fark edilmesini zorlaştırır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bu tersine de olabilir mi, gerçekte özellik talebi olan bir hata raporu?&lt;/strong&gt;
Daha az sıklıkta, ama evet: &amp;quot;bu bozuk&amp;quot; bazen &amp;quot;bu, yapacağını varsaydığım şeyi yapmıyor&amp;quot; anlamına
gelir, ki bu bir kusur değil, eksik bir yetenektir. Aynı soru, ne beklediği ile ne dokümante
edildiği, bu yönde de sınıflandırır.&lt;/p&gt;
</content:encoded></item><item><title>Destek biletleri vs. özellik talepleri: hangisi?</title><link>https://changeloop.dev/blog/tr/feedback-signal-quality/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/feedback-signal-quality/</guid><description>Bir destek bileti ve bir özellik talebi panosu farklı şeyleri ölçer, ve birindeki artışı diğerindekiyle eşdeğer saymak yanlış önceliklere yol açar.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir özellik talebi panosu, kullanıcıların oturup ne istediklerini anlatacak zamanları olduğunda
neyi talep ettiklerini yakalar. Bir destek bileti, kullanıcıların şu anda neyde takıldığını yakalar,
genellikle sinirli, genellikle altta yatan talebi düzgünce tanımlayacak kelime dağarcığı olmadan.
İkisi de gerçek sinyaldir, ve sadece birine bakan ekipler, her kanal sistematik olarak farklı bir
kullanıcı türünü ve farklı bir ihtiyaç türünü fazla temsil ettiği için sonunda kendinden emin bir
şekilde yanlış sorunu çözer. &lt;a href=&quot;https://changeloop.dev/blog/tr/prioritizing-feature-requests/&quot;&gt;Özellik taleplerine öncelik vermek&lt;/a&gt;
zaten panoda olanı sıralamayı ele alır; bu yazı panoya hiç ulaşan ile sadece bir destek bileti olarak
ortaya çıkan arasındaki boşlukla ilgilidir.&lt;/p&gt;
&lt;h2&gt;Aynı altta yatan sorun neden bir kanalda ortaya çıkıp diğerinde çıkmaz?&lt;/h2&gt;
&lt;p&gt;Çünkü iki kanalın farklı aktivasyon maliyetleri vardır, ve bu maliyetin büyüklüğü kimin onu
aşacağını belirler. Bir özellik talebi göndermek inisiyatif gerektirir: bir kullanıcının talebi dile
getirmeye değer olduğuna inanması, panoyu bulması, ve tutarlı bir şey yazması gerekir, ki bu zaten
ürüne yatırım yapmış ilgili, sabırlı kullanıcıları seçer. Bir destek bileti göndermek buna kıyasla
neredeyse hiç inisiyatif gerektirmez, çoğunlukla bir görev ortasında sadece &amp;quot;yardım&amp;quot;a tıklamaktır,
ki bu, panoyu asla kullanmayacak olanlar dahil, anlık öfkeli kullanıcıları yakaladığı anlamına
gelir. Üründeki gerçek bir boşluk, ona rastlayan kullanıcılar resmi bir talep göndermeye en az
eğilimli olanlar olduğu için özellik panosunda görünmez ve destekte gürültülü olabilir.&lt;/p&gt;
&lt;h2&gt;Eksik bir özellik için bilet hacmi, onun için oy sayısıyla aynı şeyi mi ifade eder?&lt;/h2&gt;
&lt;p&gt;Hayır, çünkü farklı koşullar altında farklı popülasyonları ölçerler. Yüz oylu bir özellik talebi,
mevcut bir talebi bulup destekleyecek zamanı ayırmış yüz kişiyi temsil eder, ki bu kalıcı, düşünülmüş
talebin güçlü bir sinyalidir. Aynı dönemde gönderilen aynı altta yatan boşlukla ilgili yüz destek
bileti, muhtemelen şu anda bir duvara çarpan kullanıcıları temsil eder, ki bunlardan bazıları
acil sürtünme geçtikten sonra bunu tamamen unutabilirdi. İkisini &amp;quot;yüz kişi bunu istiyor&amp;quot; şeklinde
eşdeğer bir sinyal olarak ele almak, bilet hacmini fazla ağırlıklandırır, çünkü biletler üretmesi
ucuzdur ve oylar değildir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Özellik talebi panosu&lt;/th&gt;
&lt;th&gt;Destek biletleri&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Göndermek için inisiyatif gerektirir&lt;/td&gt;
&lt;td&gt;Neredeyse hiç gerektirmez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Düşünülmüş, kalıcı talebi yakalar&lt;/td&gt;
&lt;td&gt;Anlık öfkeyi yakalar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İlgili, sabırlı kullanıcılara eğilimlidir&lt;/td&gt;
&lt;td&gt;Panoyu asla kullanmayacak kullanıcıları yakalar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir oy sayısı gerçek bir bağlılık sinyalidir&lt;/td&gt;
&lt;td&gt;Bir bilet sayısı sürtünmeyi yansıtır, her zaman isteği değil&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Bir özelliğin destek bileti olup panoda neredeyse hiç oyu olmaması ne anlama gelir?&lt;/h2&gt;
&lt;p&gt;Genellikle, talebin var olduğu ama ona rastlayan kullanıcıların panonun var olduğunu bilmediği,
oylamanın bir şey değiştireceğine inanmadığı, veya sorunla resmi olarak kaydetmek için kanal
değiştirmekle uğraşamayacak kadar nadiren karşılaştığı anlamına gelir. Bu tam olarak bir talep
panosunun yapısal olarak kaçırdığı popülasyondur, ve buradaki düşük oy sayısı düşük talebin değil,
bir ölçüm boşluğunun kanıtıdır. Eksik bir özellik etrafındaki destek bileti kümesini, biletlere
güvensizlik göstermek yerine, kullanıcılar adına kendinizin panoya kaydettiği kendi sinyali olarak
ele alın, böylece sadece oy sayılarına göre önceliklendiren kişi için görünmez kalmaz.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Pano düşük öncelik olarak okunur:
&amp;quot;Export to CSV&amp;quot;: 6 ayda 4 oy

Destek farklı bir hikaye anlatır:
&amp;quot;Export to CSV&amp;quot;: aynı dönemde, her biri farklı bir
hesaptan, her biri &amp;quot;şu anda desteklenmiyor, geri
bildirimi ileteceğiz&amp;quot; ile kapatılan 31 bilet
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Destek biletlerindeki bir artış her zaman altta yatan sorunun eksik bir özellik olduğu anlamına mı gelir?&lt;/h2&gt;
&lt;p&gt;Hayır, ve iki kanalın ters yönde yanıltabileceği yer burasıdır. Bir bilet artışı, zaten var olan bir
özellik etrafındaki kafa karıştırıcı bir arayüzden, bir hatadan, veya yeterli açıklama olmadan
çıkan bir değişiklikten eşit derecede sık kaynaklanır, ve bunların hiçbiri yeni bir şey inşa
ederek çözülmez. Her bilet artışını &amp;quot;kullanıcılar sahip olmadığımız bir özelliği istiyor&amp;quot; olarak
okumak, aslında dokümantasyon boşlukları veya kılık değiştirmiş kullanılabilirlik sorunları olan
şeylerle dolu bir roadmap üretir. Destek bileti size sürtünmenin nerede olduğunu söyler; çözümün
yeni bir özellik mi, bir arayüz değişikliği mi, yoksa daha iyi bir yardım makalesi mi olduğunu tek
başına söylemez, ve bunu karıştırmak mühendislik zamanını yanlış çözüme harcar.&lt;/p&gt;
&lt;h2&gt;Ne inşa edileceğine karar verirken iki sinyal gerçekte nasıl birleştirilmeli?&lt;/h2&gt;
&lt;p&gt;Sürtünmenin nerede olduğunu bulmak için biletleri kullanın, ve gerçekten istenen sonucun neye
benzediğini doğrulamak için, pano zayıf olduğunda doğrudan iletişim ile birlikte talep panosunu
kullanın. Bir bilet kümesi gerçek, hissedilen bir sorunu tanımlar; çözümü üzerine inşa edecek kadar
kesin bir şekilde nadiren belirtir, çünkü bir destek konuşmasındaki öfkeli bir kullanıcı belirtileri
tanımlar, spesifikasyonları değil. Talep panosu, aynı altta yatan sorun üzerinde yeterli oy olduğunda,
&amp;quot;bu gerçekte neyi tatmin ederdi&amp;quot; detayının daha fazlasını taşıma eğilimindedir, çünkü bir talep
yazmak zaten neyin yanlış olduğunu bildirmek değil, ne istendiğini belirtme eylemidir.&lt;/p&gt;
&lt;h2&gt;Destek temsilcileri biletleri kendileri özellik talebi olarak kaydetmeli mi?&lt;/h2&gt;
&lt;p&gt;Evet, ve bu iki kanal arasındaki boşluk için en yüksek kaldıraçlı tek düzeltmedir. Bir bileti gizli
bir özellik talebi olarak tanıyan bir temsilci, sadece çözüp devam etmek yerine, onu müşteri adına
panoya kaydedebilir, ki bu, müşterinin ikinci bir kanalı keşfedip kullanmasını gerektirmek yerine
ölçüm boşluğunu doğrudan kapatır. Bu sadece kaydetmenin temsilci için dakikalar değil saniyeler
sürmesi durumunda işe yarar, böylece bunu yapmanın sürtünmesi biletle basitçe ilgilenip bir sonrakine
geçmenin sürtünmesinden daha az olur.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Özellik talebi oyları hepsi tek bir hesaptan veya ekipten geliyorsa hiç indirime tabi tutulmalı mı?&lt;/strong&gt;
Evet, ham oy sayısı yerine farklı hesaplara veya organizasyonlara göre ağırlıklandırın, çünkü aynı
şirketteki beş kişiden gelen beş oy, bir müşterinin önceliklerini temsil eder, beş bağımsız talep
onayını değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Biletlerde çokça görünen ama neredeyse hiç oyu olmayan bir özelliği inşa etmeye değer mi?&lt;/strong&gt;
Genellikle evet, bilet hacmi gerçekten farklı hesaplardan geliyorsa ve altta yatan ihtiyaç varsayılmak
yerine doğrulanmışsa; düşük oy sayısını panonun aktivasyon maliyetinin bir ölçüm artefaktı olarak ele
alın, talebin gerçek olmadığının kanıtı olarak değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir arayüz kafa karışıklığı biletini bir bakışta gerçek bir eksik özellik biletinden nasıl ayırt edersiniz?&lt;/strong&gt;
Çözümün mevcut bir yeteneği açıklamak mı yoksa eksik biri için özür dilemek mi olduğuna bakın. &amp;quot;Aa,
aslında tam orada&amp;quot; çözümlerinin bir deseni bir arayüz veya keşfedilebilirlik sorununa işaret eder;
&amp;quot;bunu henüz desteklemiyoruz&amp;quot; deseni gerçek bir boşluğa işaret eder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bu ayrım çok küçük bir destek hacminde de aynı derecede önemli mi?&lt;/strong&gt;
Mekanik olarak daha az, çünkü bir avuç bilet toplu analiz gerektirmeden tek tek okunması kolaydır,
ama altta yatan önyargı, biletlerin öfkeli kullanıcıları fazla temsil edip sabırlı olanları az
temsil etmesi, her ölçekte mevcuttur ve her bileti kendiniz okurken bile akılda tutmaya değer.&lt;/p&gt;
</content:encoded></item><item><title>Git etiketleri, sürümler ve changelog&apos;unuz</title><link>https://changeloop.dev/blog/tr/git-tags-releases-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/git-tags-releases-changelog/</guid><description>Bir git etiketi, bir sürüm ve bir changelog girişi aynı olayın üç kaydıdır. Bunları karıştırmak changelog&apos;un kaymasına yol açar. Üçü nasıl uyuşmalı.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir git etiketi, bir sürüm ve bir changelog girişi aynı olayın üç farklı kaydıdır, ve bunları
karıştırmak bir changelog&amp;#39;un gerçekte gönderilenden sessizce uzaklaşmasına yol açar. Bir etiket
bir commit&amp;#39;i işaretler. Bir sürüm o etiketi artifactlarla ve bir açıklamayla paketler. Bir
changelog girişi, deponun dışındaki bir okuyucunun kullanabileceği terimlerle neyin değiştiğini
açıklar. Genellikle zaman içinde birbirine yakın gerçekleşirler, ve tam da bu yüzden onları üç
adım yerine tek bir adım gibi ele almak kolaydır, ve tam da bu yüzden boşluk ancak aylar sonra,
biri &amp;quot;v2.4&amp;#39;te ne gönderildi&amp;quot; diye sorduğunda ve dürüst yanıt gerçek bir kazı gerektirdiğinde
görünür hale gelir.&lt;/p&gt;
&lt;h2&gt;Üçü arasındaki gerçek fark nedir?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kayıt&lt;/th&gt;
&lt;th&gt;Nerede yaşar&lt;/th&gt;
&lt;th&gt;Kimin için yazılır&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Git etiketi&lt;/td&gt;
&lt;td&gt;Depoda, bir referans olarak&lt;/td&gt;
&lt;td&gt;Tam olarak o commit&amp;#39;i checkout eden herkes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sürüm&lt;/td&gt;
&lt;td&gt;Kod barındırıcısında (GitHub, GitLab)&lt;/td&gt;
&lt;td&gt;Bir build indiren herkes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changelog girişi&lt;/td&gt;
&lt;td&gt;Ürünün kendi changelog&amp;#39;unda&lt;/td&gt;
&lt;td&gt;Sadece depoyu değil, ürünü kullanan herkes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Bir etiket üçünün en mekanik olanıdır: &lt;code&gt;git tag v2.4.0&lt;/code&gt; ve tamamdır, içinde ne olduğunu bir şeyin
açıklaması gerekmez. Bir sürüm bir açıklama ve genellikle indirilebilir artifactlar ekler, ve
kitlesi hâlâ bir sürüm sayfasının ne olduğunu bilen geliştiricilerdir. Bir changelog girişi
üçünden depoyu hiç açmayabilecek bir okuyucu için yazılan tek olanıdır, bu yüzden en çok editoryal
dikkat gerektiren ve zaman baskısı altında en çok atlanan odur.&lt;/p&gt;
&lt;h2&gt;Her git etiketi bir changelog girişi gerektirir mi?&lt;/h2&gt;
&lt;p&gt;Hayır, ve ikisini bire bir ele almak yaygın bir hatadır. Bir etiket dahili bir kilometre taşını,
bir release candidate&amp;#39;ı, veya çoğu kullanıcıya hiç ulaşmayan bir hotfix&amp;#39;i işaretleyebilir; bunların
hiçbiri zorunlu olarak herkese açık bir giriş gerektirmez. Test, bir şeyin bir changelog&amp;#39;a girip
girmeyeceğine karar veren aynı testtir: bir kullanıcı veya çağıran bunu fark eder mi veya
önemser mi. Çoğu etiket bu testi geçer. Bazıları, sadece bir CI pipeline&amp;#39;ını tetiklemek için
oluşturulan bir etiket gibi, hiç geçmez.&lt;/p&gt;
&lt;h2&gt;Her changelog girişi kendi etiketini gerektirir mi?&lt;/h2&gt;
&lt;p&gt;Her zaman değil, ve burada sürekli deploy eden ekipler ile versiyonlanmış paketler gönderen
ekipler ayrılır. Günde birkaç kez deploy eden bir SaaS ürünü, deploy başına 1:1 etiket olmadan
birden fazla deploy&amp;#39;u tarihli bir changelog girişi altında gruplandırabilir; bir paket kayıt
defterinde yayınlanan bir kütüphane genellikle yayınlanan versiyon başına bir etikete ihtiyaç
duyar. Go modules ve Swift Package Manager versiyonları doğrudan etiketlerden çözer; npm veya
PyPI&amp;#39;da yayınlanan versiyonu kayıt defteri tutar, ve etiket herkesin o versiyonu kaynağına geri
eşlemesini sağlar. Bağımsız olarak versiyonlanan birden fazla pakete sahip bir repository, buna tüm
repo için bir kez değil, paket bazında karar vermelidir; &lt;a href=&quot;https://changeloop.dev/blog/tr/monorepo-changelogs/&quot;&gt;monorepo changelog&amp;#39;ları&lt;/a&gt;
etiket öneklerinin ve changelog kapsamının klasör sınırlarına değil paket sınırlarına göre nasıl
bölünmesi gerektiğini ele alır. &lt;a href=&quot;https://changeloop.dev/blog/tr/semantic-versioning-changelog/&quot;&gt;Semantic versioning ve changelog&amp;#39;unuz&lt;/a&gt;
versiyon numarasının kendisinin changelog kategorilerine nasıl eşlenmesi gerektiğini ele alır;
etiketler bir versiyon numarasını gerçek koda karşı doğrulanabilir kılan mekanizmadır.&lt;/p&gt;
&lt;h2&gt;Bir sürüm açıklaması changelog girişiyle nasıl ilişkilenmeli?&lt;/h2&gt;
&lt;p&gt;Aynı metin olabilirler, ama sadece ikisinin kitlesi gerçekten aynıysa, ki bu göründüğünden daha
nadirdir. Bir kod barındırıcısındaki bir sürüm sayfası neredeyse yalnızca geliştiriciler tarafından
okunur; bir üründe changelog&amp;#39;u okuyan teknik olmayan kullanıcılar da varsa, sürüm açıklamasını
kelimesi kelimesine kopyalamak, sade dil versiyonuna ihtiyaç duyan bir okuyucuya dahili terimler
ve koda odaklı bir ifade gönderir. En temiz desen: changelog girişini birincil, okuyucuya yönelik
artifact olarak yazmak, ve sürüm açıklamasının ya ona bağlanmasına ya da orada zaten rahat olan
kitle için daha kısa, daha teknik bir özet tutmasına izin vermek.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Sürüm v2.4.0 (GitHub, geliştiriciler için)
Raporlar pipeline&amp;#39;ını yeni agregasyon motoruna yükseltir. Müşteriye
yönelik özet için changelog&amp;#39;a bakın:
https://example.com/changelog#v2.4.0

## 2026-09-07 (Changelog, müşteriye yönelik)
### Added
- Raporlar artık bir milyondan fazla satırı olan hesaplar için bile
  bir saniyeden kısa sürede yükleniyor.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aynı sürüm, iki belge, her biri kendi okuyucusu için kendi ifadesiyle.&lt;/p&gt;
&lt;h2&gt;Changelog girişi gerçekte nereden gelir?&lt;/h2&gt;
&lt;p&gt;İki başlangıç noktasından, ve çoğu gerçek pipeline ikisinin bir karışımıdır. Etiket anında commit
mesajlarından üretilebilir, ki bu hızlıdır ve birleştirilmiş bir pull request&amp;#39;i asla kaçırmaz;
&lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;conventional commits&amp;#39;ten changelog&amp;#39;a&lt;/a&gt; o pipeline&amp;#39;ı
baştan sona ele alır. Veya etiketten tamamen ayrı olarak, kodun birleştirildiği an yerine bir
özelliğin tamamlanmış sayıldığı ana göre zamanlanarak elle yazılabilir. Üretilen girişler
tutarlıdır ama her belirsiz commit mesajını devralır; elle yazılan girişler daha nettir ama onları
gerçekten yazacak birine ihtiyaç duyar. Otomasyon kullanan çoğu ekip, ham metin nereden gelmiş
olursa olsun, &lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog, uygulamada&lt;/a&gt;&amp;#39;nın önerdiği
aynı disiplinle, üretilen metin herkese açık giriş olmadan önce yine de hafif bir düzenleme
geçişi tutar.&lt;/p&gt;
&lt;h2&gt;Üçü senkronizasyondan çıktığında ne bozulur?&lt;/h2&gt;
&lt;p&gt;Okuyucunun önce kontrol ettiği şeye olan güven. Karşılık gelen bir changelog girişi olmadan var
olan bir etiket, changelog okuyucusunun tarafından bakıldığında, o hafta hiçbir şey olmamış gibi
görünür. Karşılık gelen bir etiket veya sürüm olmadan bir changelog girişi, üretimde bir sorunu
debug eden birinin bir giriş yayınlandığında canlı olan tam kodu checkout etmesini imkansız kılar.
Çözüm mükemmel otomasyon değil, eşleme için tek bir gerçek kaynağıdır: sürüm sürecinin kendi kontrol
listesi olsa bile, gönderilebilir bir değişikliğin onu tanıtan aynı commit veya pull request&amp;#39;te
üçünü de aldığını söyleyen bir yer.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Changelog girişleri git etiketlerinden otomatik olarak üretilmeli mi?&lt;/strong&gt;
Bir başlangıç noktası olabilirler, ama tek başına bir etiket okuyucuya yönelik hiçbir açıklama
taşımaz, sadece bir commit aralığı. Otomatik üretim, kullanılabilir bir şey üretmek için sadece
etiketin varlığını değil, o aralıktaki commit mesajlarını okumak zorundadır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her sürümü etiketlemezsek ne olur?&lt;/strong&gt;
O zaman changelog girişi birincil kayıt haline gelir, ve yine de bir tarih ve, ürünün bir tanesi
varsa, bir versiyon numarası taşımalıdır, böylece giriş karşılık gelen bir etiket olmadan bile
sonradan bir okuyucunun başvurabileceği bir şey olarak kalır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ön sürüm etiketleri (&lt;code&gt;v2.4.0-rc.1&lt;/code&gt; gibi) changelog girişlerine sahip olmalı mı?&lt;/strong&gt;
Genellikle hayır. Bir release candidate dahili veya beta testi içindir, ve onun için bir changelog
girişi okuyucuları hiç açıklandığı gibi gönderilmeyebilecek versiyonlar için giriş beklemeye
alıştırır. Girişleri genel kullanılabilirliğe ulaşan etiketlere ayırın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tek bir changelog girişi birden fazla git etiketini kapsayabilir mi?&lt;/strong&gt;
Evet, ve sık sık etiketleyen ekipler için genellikle öyle olmalıdır. İlgili etiketleri, bir
özelliği birden fazla okuma boyunca parçalayan etiket başına ince bir giriş yayınlamak yerine, net
değişikliği açıklayan tarihli bir giriş altında gruplandırın.&lt;/p&gt;
</content:encoded></item><item><title>Dahili API changelog&apos;ları: diğer ekip için ne değişir</title><link>https://changeloop.dev/blog/tr/internal-api-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/internal-api-changelog/</guid><description>Genel bir API changelog&apos;unun doğrudan ulaşamayacağınız bir kitlesi vardır. Dahili olanın kitlesi iki kat öteden gelir ve ona borcunuzu değiştirir.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bu hub&amp;#39;daki diğer her yazı bir API&amp;#39;yi çağıranın şirket dışında olduğunu varsayıyor: bir
müşterinin mühendisi, bir ortak, dokümanları kendi başına bulan biri. Birçok API&amp;#39;nin tamamen
farklı bir çağıranı var, koridorun karşısındaki veya iki kat öteki bir ekip, ve bu bir
changelog&amp;#39;un ona ne borçlu olduğu hesabını değiştiriyor, çünkü bir Slack mesajı ona ulaşır ve
genelde hiç destek talebi açılmaz. Çoğu ekip bundan dahili API&amp;#39;lerin changelog&amp;#39;a ihtiyacı olmadığı
sonucunu çıkarıyor. Gerçekten ihtiyaç duydukları şey farklı bir changelog.&lt;/p&gt;
&lt;h2&gt;Dahili bir API&amp;#39;nin changelog&amp;#39;unu genel olandan farklı yapan nedir?&lt;/h2&gt;
&lt;p&gt;Genel bir API changelog&amp;#39;unun örtük bir kitlesi vardır: o API&amp;#39;nin oluşturduğu tek şeyi kullanan
herkes. Dahili bir API&amp;#39;nin kitlesi doğrudan ulaşılabilir, ki bu çoğu genel API changelog&amp;#39;unun var
olma nedeninin çoğunu ortadan kaldırır: tek tek iletişime geçilemeyen çağıranlara yayın yapmak.
Dahili bir API&amp;#39;ye sahip ekip genelde hangi başka ekiplerin onu çağırdığını, bazen belirli servis
seviyesine kadar, tam olarak bilir. Bu, genel bir feed&amp;#39;i değil, hedeflenmiş bir mesajı doğal
varsayılan yapar, ve dahili API&amp;#39;lerin çoğu kez hiç changelog&amp;#39;suz kalmasının nedeni de budur: sahip
ekip hatırladığı iki üç ekibi bilgilendirir, bunun herkesi kapsadığını varsayarak.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Genel API changelog&amp;#39;u&lt;/th&gt;
&lt;th&gt;Dahili API changelog&amp;#39;u&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Kim okur&lt;/td&gt;
&lt;td&gt;Herhangi bir dış çağıran, genelde doğrudan ulaşılamaz&lt;/td&gt;
&lt;td&gt;Küçük, genelde bilinen bir dahili ekip kümesi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Varsayılan kanal&lt;/td&gt;
&lt;td&gt;Bir sayfa ve bir feed&lt;/td&gt;
&lt;td&gt;Çağıran ekiplere bir mesaj, ideal olarak bir sayfa da&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;En büyük risk&lt;/td&gt;
&lt;td&gt;Bir çağıran girişi tamamen kaçırır&lt;/td&gt;
&lt;td&gt;Sahip ekip varlığını hatırlamadığı bir çağıranı unutur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Bizi kimin çağırdığını bilmiyoruz&amp;quot;un yerini ne alır&lt;/td&gt;
&lt;td&gt;Hiçbir şey; geniş yayınla&lt;/td&gt;
&lt;td&gt;Güncel tutulan gerçek bir çağıran kaydı&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;&amp;quot;Bizi çağıran ekiplere haber veririz&amp;quot; neden çöker?&lt;/h2&gt;
&lt;p&gt;Çünkü çağıranların kümesi hiçbir zaman sahip ekibin hatırladığı kadar küçük veya durağan değildir.
Tek bir tüketici için inşa edilen bir servis altı ay sonra hiç duyurulmamış bir entegrasyon
üzerinden ikinci bir çağıran kazanır, ve sahip ekibin zihnindeki &amp;quot;bizi kim çağırıyor&amp;quot; listesi
kimse fark etmeden yanlış hale gelir. Bu başarısızlık sıradan ve yaygındır, bir kayıt
yerine hafızaya güvenmenin varsayılan sonucudur, kimsenin dikkatsiz olduğunun işareti değil.
&lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Breaking change nedir&lt;/a&gt;
bir API değişikliğinin öncelikle breaking sayılıp sayılmayacağına nasıl karar verileceğini ele
alır; dahili durum bunun üzerine ikinci, daha zor bir soru ekler: kimin bilgilendirileceğini
bilmek.&lt;/p&gt;
&lt;h2&gt;Dahili bir API&amp;#39;nin genel tarzda bir changelog sayfasına ihtiyacı var mı?&lt;/h2&gt;
&lt;p&gt;Genelde evet, birincil kanal doğrudan olsa bile. Bir sayfa doğrudan mesaja bağlanacak bir şey
verir, böylece bildirim kısa kalabilir (&amp;quot;&lt;code&gt;/v2/accounts&lt;/code&gt;&amp;#39;ta breaking change, detaylar burada&amp;quot;)
kaydırılıp gidecek bir sohbet mesajında tüm açıklamayı taşımaya çalışmak yerine. Ayrıca yeni bir
ekibin, ya da doğrudan mesajı kaçıran bir ekibin, entegrasyonu bozulduğunda ve nedenini anlamaya
çalışırken kontrol edebileceği şey haline gelir. Sayfanın cilalı veya herkese açık olması gerekmez;
bağlanabilir olması ve onu duyuran Slack thread&amp;#39;inden daha uzun yaşaması gerekir.&lt;/p&gt;
&lt;h2&gt;Çağıranların listesini gerçekte kim tutar?&lt;/h2&gt;
&lt;p&gt;Sahip ekip, ve bu kabile bilgisi değil gerçek bir yapı taşı olarak ele alınmalıdır. En ucuz
versiyon, API&amp;#39;nin kendi deposundaki bir dosya, her yeni entegrasyon inşa edildiğinde güncellenen,
her girişte bir sorumlusu olan kısa bir tüketici servisler listesidir, herhangi bir bağımlılık
bildirimiyle aynı disiplin. Alternatif olan her breaking change öncesi soruşturmak, birinin doğru
kişiye sormayı unuttuğu o bir sefere kadar işe yarar, ve sessizce bozulan dahili bir API bir ekip
için genel bir API&amp;#39;ninkinden daha küçük bir olaydır, ama yine de bir olaydır, genelde API&amp;#39;nin
sahibi tarafından değil o ekibin kendi nöbetçisi tarafından keşfedilir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# consumers.yml
- service: billing-service
  owner: &amp;quot;#team-billing&amp;quot;
  since: 2026-03-01
- service: reporting-pipeline
  owner: &amp;quot;#team-analytics&amp;quot;
  since: 2026-06-14
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Böyle bir dosya &amp;quot;kimi bilgilendirmemiz gerekiyor&amp;quot;u bir sorudan bir sorguya dönüştürür. Tam olarak
bu sorun için inşa edilmiş araçlar, &lt;a href=&quot;https://backstage.io/docs/features/software-catalog/system-model/&quot;&gt;Backstage&amp;#39;in servis
kataloğu&lt;/a&gt; gibi, API&amp;#39;leri
tanımlanmış tüketicileri olan birinci sınıf varlıklar olarak modeller, aynı nedenle: bir kuruluşun
yeterince dahili servisi olduğunda, kimin neyi çağırdığına dair kimsenin hafızası kendi başına
doğru kalmaz, ve bir şeyin bu kaydı tutması gerekir. Zaten dahili olarak çalıştırdığınız aracın
&lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;dokümanları&lt;/a&gt;, özel bir tane inşa etmeden önce bakılacak doğru yer genelde budur.&lt;/p&gt;
&lt;h2&gt;Genel bir changelog&amp;#39;un ihtiyaç duymayacağı, dahili bir girişte ne olmalı?&lt;/h2&gt;
&lt;p&gt;Daha fazla operasyonel somutluk, çünkü okuyucu aynı altyapı içinde buna göre hareket edecek başka
bir mühendistir, bunu bir özet olarak okumayacaktır. Değişikliğin hangi ortamlarda ne zaman canlı
olduğu, çünkü dahili servisler genel bir çağıranın hiç görmediği aşamalardan terfi eder. Değişiklik
tüketici tarafında bir yapılandırma ya da istemci kütüphanesi güncellemesi gerektiriyor mu, varsa
bir komut olarak ifade edilmiş şekilde. Ve, dahili çağıranlar düzeltmeyi genelde doğrudan sahip
ekiple koordine edebildiği için, bir destek kanalı yerine isimle belirtilmiş bir kişi: &amp;quot;bir şeyi
bozarsa @maria&amp;#39;ya haber ver&amp;quot; dahili bir girişte tamamen makul bir satırdır ve genel bir API
changelog&amp;#39;unda tuhaf bir satırdır.&lt;/p&gt;
&lt;h2&gt;Bu, bir monorepo içindeki bir changelog için de aynı şekilde geçerli mi?&lt;/h2&gt;
&lt;p&gt;Sorunu değiştirmek yerine keskinleştirir. &lt;a href=&quot;https://changeloop.dev/blog/tr/monorepo-changelogs/&quot;&gt;Monorepo changelog&amp;#39;ları&lt;/a&gt;
bir paketin ne zaman kendi changelog&amp;#39;una ihtiyaç duyduğunu ele alır; bir monorepo&amp;#39;da birkaç
paketten biri olan dahili bir API&amp;#39;nin tüketicilerinin yine de açıkça izlenmesi gerekir, çünkü
çağıranlarıyla aynı depoyu paylaşmak, bir şey onlara bakmalarını söylemedikçe bir değişikliği fark
edecekleri anlamına gelmez. Repo&amp;#39;daki yakınlık, dikkatteki yakınlıkla aynı şey değildir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Yalnızca dahili bir API&amp;#39;nin tek bir çağıranı varsa changelog&amp;#39;a ihtiyacı var mı?&lt;/strong&gt;
Neredeyse hiç, ve o tek ekibe doğrudan bir mesaj genelde yeterlidir. Birden fazla çağıran olduğunda,
veya çağıran listesi sahip ekibi bir kez şaşırttığında changelog kendini kanıtlar, çünkü bu hafızanın
tek başına artık güvenilir olmadığının işaretidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dahili API değişiklikleri genel olanlarla aynı incelemeden mi geçmeli?&lt;/strong&gt;
Okuyucu dış bir çağıran değil bir meslektaş olduğu için ifade daha hafif olabilir, ama bir
değişikliğin breaking olup olmadığı kararı her iki durumda da aynı özeni hak eder. Dahili bir
çağıranın yine de eski davranışa bağımlı üretim kodu vardır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hiç izlenmediyse dahili bir API&amp;#39;yi kimin çağırdığı nasıl öğrenilir?&lt;/strong&gt;
Sunucu logları ya da bir service mesh&amp;#39;in trafik verisi, hiç tüketici kaydı tutulmadıysa dürüst
cevaptır; bu keşfi bir tanesini başlatma anı olarak ele al, tek seferlik bir temizlik olarak değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir Slack mesajı yeterli mi, yoksa dahili bir değişiklik yine de resmi bir changelog girişine mi ihtiyaç duyar?&lt;/strong&gt;
Saf olarak eklemeli olmayan her şey için ikisi de. Mesaj zamanında okunan şeydir; giriş, haftalar
sonra bir sorunu araştıran ve mesajı hiç görmemiş bir ekibin yine de bulabileceği şeydir.&lt;/p&gt;
</content:encoded></item><item><title>Dahili release notları: kimin bilmesi gerekir</title><link>https://changeloop.dev/blog/tr/internal-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/internal-release-notes/</guid><description>Destek ve satış bir lansmanı genelde kafası karışmış bir müşteriden öğrenir. Dahili release notları bunu müşteri notlarından farklı bir biçimde çözer.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bu hub&amp;#39;daki diğer her yazı, bir release notunu okuyanın bir müşteri olduğunu varsayar. Destek,
satış ve customer success de okur, veya okumaya çalışır, ve çoğu neyin gönderildiğini önce bir
müşteri sorduğu için öğrenir. Bu sıra tersine dönmüştür, ve çoğu şirkette de varsayılan budur,
çünkü release süreci müşteriye yönelik not çıktığı anda biter, ve kimse bir saat sonra bu konuda
soru yanıtlaması gereken insanlar için ikinci, daha küçük bir adım kurmamıştır.&lt;/p&gt;
&lt;h2&gt;Dahili bir release notu nedir, ve müşteriye yönelik olandan nasıl farklıdır?&lt;/h2&gt;
&lt;p&gt;Ürünü zaten derinlemesine bilen insanlar için yazılmış, onlara neyin değiştiğini ve kendi somut
işlerinde ne yapmaları gerektiğini söyleyen daha kısa bir belgedir. Bir destek temsilcisi,
müşteriye yönelik bir duyurunun kullandığı cilalı çerçeveye ihtiyaç duymaz; değişikliğin ürün
içinde şu anda nasıl göründüğünü, hakkında en olası sorunun ne olacağını, ve açık biletlerin
etkilenip etkilenmediğini bilmesi gerekir. Müşteriye yönelik bir not değişikliği satar. Dahili
bir not birini bununla başa çıkması için donatır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Okuyucu kitlesi&lt;/th&gt;
&lt;th&gt;Bilmesi gereken&lt;/th&gt;
&lt;th&gt;Nerede ihtiyaç duyar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Destek&lt;/td&gt;
&lt;td&gt;Arayüzde ne değişti, olası sorular, etkilenen açık biletler&lt;/td&gt;
&lt;td&gt;Zaten cevap aradığı yerde&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Satış&lt;/td&gt;
&lt;td&gt;Bir anlaşma için neyi açtığı, henüz neyi yapmadığı&lt;/td&gt;
&lt;td&gt;Görüşmelere hazırlandığı yerde&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer success&lt;/td&gt;
&lt;td&gt;Mevcut müşterilere ne söylenmeli, ve kim istedi&lt;/td&gt;
&lt;td&gt;Erişimi planladığı yerde&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Üst yönetim&lt;/td&gt;
&lt;td&gt;Söz verilene karşı ne gönderildi, ve ne zaman&lt;/td&gt;
&lt;td&gt;Release başına değil, kısa ve tekrarlayan bir özet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Dahili ekipler lansmanları neden geç öğrenir?&lt;/h2&gt;
&lt;p&gt;Çünkü release süreci genellikle tek bir eserin, müşteriye yönelik notun veya changelog girişinin
etrafında kurulur, ve dahili olan her şeyin bu tek belgeyi okumaktan çıkarılacağı varsayılır.
Öyle değildir. Destek temsilcileri önlerindeki biletle meşguldür, bağlam için bir changelog&amp;#39;a göz
atmıyorlardır, ve bir müşteri için yazılmış bir not, sık sık bir temsilcinin ihtiyaç duyduğu tam
olarak o operasyonel ayrıntıyı, örneğin özelliğin hangi plana kilitli olduğunu veya başarısız
olduğunda hata mesajının neye benzediğini atlar. Bir müşteri sorduğunda, temsilci müşterinin az
önce okuduğu aynı genel notu, hiçbir avantaj olmadan okuyordur.&lt;/p&gt;
&lt;h2&gt;Dahili bir release notu, müşteriye yönelik olanın söylemediği neyi söylemeli?&lt;/h2&gt;
&lt;p&gt;Müşteriye yönelik bir notun bilerek dışarıda bıraktığı operasyonel ayrıntılar. Hangi planların
veya hesapların bunu aldığı. Bir şey ters gittiğinde nasıl göründüğü, ve buna denk gelen bir
müşteriye ne söyleneceği. İlgili bir biletle çalışan bir temsilcinin kontrol etmesi gerektiğini
bilmesi için, açık bir talep veya bileti kapatıp kapatmadığı, ve hangisini. Bir soru notun
kapsadığından öteye giderse ekipte kimin sorumlu olduğu. Bunların hiçbiri, şirket dışından birinin
bir kez okuması için yazılmış müşteriye yönelik sürüme ait değildir; tüm bunlar, aynı soruyu
haftada kırk kez yanıtlayan birinin gerçekten ihtiyaç duyduğu şeydir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dahili not: toplu CSV export (08.09.2026 çıkıyor)

- Sadece Team ve Enterprise planlarına kilitli. Free ve Pro&amp;#39;da
  değişiklik yok.
- Yaygın hata: 50 bin satırın üzerindeki export&amp;#39;lar zaman
  aşımına uğrar; bilinen sorun, düzeltme ayrı takip ediliyor.
  Müşteriye tarih aralığına göre filtrelemesini söyle.
- `bulk-export` etiketli 14 açık talebi kapatır. Paylaşılan
  belgede yanıt şablonu var.
- Sorumlu: platform ekibi, bu notun ötesindeki her şey için
  #platform-eng.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bir destek temsilcisinin hemen kullanabileceği dört satır, hiçbiri aynı özellik için genel
changelog girişine ait olmayacak.&lt;/p&gt;
&lt;h2&gt;Bunu kim yazmalı, ve ne zaman?&lt;/h2&gt;
&lt;p&gt;Müşteriye yönelik notu yazan kişi genelde doğru kişidir, çünkü zaten tüm bağlama sahiptir, ama tek
bir belgenin her iki okuyucu kitlesine hizmet etmeye çalışması yerine ayrı, kısa bir geçiş olmalıdır.
Onları birleştirmek ya dahili ayrıntılarla dolu müşteriye yönelik bir not, ya da gerçekten yararlı
olmak için fazla cilalı dahili bir not üretir, ve pratikte iki kısa belge yazmak, tek bir belgeyi
aynı anda iki okuyucu kitlesine hizmet ettirmek için pazarlık etmekten daha hızlıdır. Zamanlama
yazarlıktan daha önemlidir: dahili not, destek bir değişikliği bir müşteriyle aynı yerden asla
öğrenmesin diye, sadece birkaç saat bile olsa müşteriye yönelik olandan önce çıkmalıdır.&lt;/p&gt;
&lt;h2&gt;Destek&amp;#39;in bir bilet anında gerçekten bulması için nerede yaşamalı?&lt;/h2&gt;
&lt;p&gt;Bir bilet geldiğinde ekibin zaten baktığı yerde, kimsenin kendiliğinden açması için nedeni olmayan
ayrı bir changelog&amp;#39;ta değil. Paylaşılan bir bilgi tabanı kullanan bir destek ekibi, notun orada,
ürünün o bölümüyle ilgili biletlerin zaten etiketlendiği yerden bağlantılı olmasına ihtiyaç duyar.
Paylaşılan bir kanalda yaşayan bir ekip, onun orada, aranabilir, ilgili olduğu anda yayınlanmasına
ihtiyaç duyar, bir kez göz attıkları günlük bir özete gömülü olması yerine.
&lt;a href=&quot;https://changeloop.dev/blog/tr/product-update-email/&quot;&gt;Hedeflenmiş bildirim ile özet&lt;/a&gt; yazısındaki müşteriye yönelik
kalıp burada da geçerlidir: belirli, yaklaşan bir değişiklik hakkındaki dahili bir not, ilk bilet
zaten var olduktan sonra gelen haftalık bir özeti beklemek yerine ekibe doğrudan ulaşmalıdır.&lt;/p&gt;
&lt;h2&gt;Dış olanla aynı inceleme titizliğine ihtiyacı var mı?&lt;/h2&gt;
&lt;p&gt;Daha azına, ve bu bilinçli bir tercihtir. Müşteriye yönelik bir not şirketi kamuya açık olarak
temsil eder ve dikkatli bir düzenleme geçişini hak eder; dahili bir not hızlı ve somut olmak için
vardır, ve onu aynı cila standardına tutmak genellikle tam olarak ekiplerin onu hiç yazmamasına
yol açan şeydir. Lansmandan bir saat önce çıkan hızlı, biraz kaba dahili bir not, ilk destek
bileti zaten kafası karışık geldikten sonra ertesi gün gelen cilalı bir nottan daha iyidir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dahili release notları müşteriye yönelik olanlarla aynı onay sürecinden mi geçmeli?&lt;/strong&gt;
Hayır. Daha hafif, daha hızlı bir geçiş tam olarak amaçtır. Aynı incelemeyi zorunlu kılmak, aynı
gün çıkacak dahili bir notu, destek onsuz soruyu çoktan yanıtladığında çıkacak bir sonraki hafta
notuna dönüştürür.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dahili iletişim için ayrı bir rol yoksa dahili release notlarından kim sorumlu olmalı?&lt;/strong&gt;
Müşteriye yönelik notu yazan kişi, hemen ardından gelen ikinci, kısa bir geçiş olarak. Ayrı bir
sorumlu kişiye ihtiyaç yoktur, sadece müşteriye yönelik notu bir release&amp;#39;in ürettiği tek eser
gibi ele almama alışkanlığına.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dahili release notlarının kendi changelog&amp;#39;una veya arşivine ihtiyacı var mı?&lt;/strong&gt;
Aranabilir bir yer, kimsenin kaydırmadığı kronolojik bir arşivden daha iyidir. Destek zaten bir
bilgi tabanına sahipse, not, sadece gönderildiği tarihi zaten bilen birine yardımcı olan ayrı bir
dahili changelog yerine, özelliğe etiketlenmiş olarak orada olmalıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Küçük değişikliklerde dahili release notlarını atlamanın riski nedir?&lt;/strong&gt;
Küçük değişiklikler tam olarak destek&amp;#39;in önceden haber verilmeden soru aldığı değişikliklerdir,
çünkü küçük bir değişiklik nadiren şirket çapında bir duyuru alır. Release notunun boyutu
değişikliğin boyutuyla ölçeklenmeli; değişiklik küçük olduğu için asla sıfıra düşmemeli.&lt;/p&gt;
</content:encoded></item><item><title>Mobil uygulamalar için release notes: sınır neyi keser</title><link>https://changeloop.dev/blog/tr/mobile-app-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/mobile-app-release-notes/</guid><description>App Store ve Play Store birkaç görünür satır verir, link vermez. Web changelog&apos;unda işe yarayan her şey bu bütçede kırılır, kesintiler bilinçli yapılmalı.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bu hub&amp;#39;da release notes yazmakla ilgili her şey tamamen kontrol ettiğin bir sayfayı varsayıyor:
istediğin uzunluk, çalışan linkler, render edilen biçimlendirme. Mobil bir uygulamanın release
notes&amp;#39;u başka birinin kutusunda yaşar. Apple yaklaşık 4.000 karakter verir ama &amp;quot;devamı&amp;quot;na
dokunulmadan önce sadece ilk birkaç satırı gösterir; Google benzer bir alan verir, aynı etkili
önizleme sorunuyla, ve her iki platform da metin içinde tıklanabilir bir link render etmez. &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Gerçekten
okunan release notes nasıl yazılır&lt;/a&gt; yazısındaki kurallar hâlâ
geçerli: neyin değiştiğini ve okuyucunun ne yapması gerektiğini söylemek, ama bunu yapacak alan bir
changelog sayfasının izin verdiğinin küçük bir kısmıdır, ve kesintiler yanlışlıkla değil bilinçli
yapılmalıdır.&lt;/p&gt;
&lt;h2&gt;Görünür önizlemeye gerçekte ne sığar?&lt;/h2&gt;
&lt;p&gt;Cihaza ve yazı tipi boyutuna bağlı olarak yaklaşık 80 ila 170 karakter olan ilk bir veya iki satır,
okuyucunun genişletmek için dokunması gerekmeden önce. Bu, release note&amp;#39;un geri kalanını kimsenin
okuyup okumayacağına karar veren kısmının tüm bütçesidir, ve bu, en önemli cümlenin ilk gelmesi
gerektiği anlamına gelir, versiyon numarası değil, bir selamlama değil, bir kategori başlığı değil.
&amp;quot;Bu sürümdeki yenilikler:&amp;quot; ile başlayan bir release note, okuyucuya hiçbir şey söylemeyen dört
kelimeye görünür alanının üçte birini şimdiden harcamıştır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Yaklaşık toplam sınır&lt;/th&gt;
&lt;th&gt;&amp;quot;Devamı&amp;quot;ndan önceki etkili önizleme&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;App Store (iOS)&lt;/td&gt;
&lt;td&gt;~4.000 karakter&lt;/td&gt;
&lt;td&gt;2-3 satır, yaklaşık 80-170 karakter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Play&lt;/td&gt;
&lt;td&gt;Dil başına ~500 karakter, bazı alanlar daha kısa&lt;/td&gt;
&lt;td&gt;2-3 satır, iOS&amp;#39;a benzer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İkisi de&lt;/td&gt;
&lt;td&gt;Release notes alanında tıklanabilir link yok&lt;/td&gt;
&lt;td&gt;Yok&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;&amp;quot;Şimdi ne yapabilirsin, ne borçlusun&amp;quot; kuralı bu uzunlukta hâlâ işe yarıyor mu?&lt;/h2&gt;
&lt;p&gt;Evet, ve daha katı hale gelir, farklı değil. Girdi başına bir cümle, önce fiil, giriş yok:
&amp;quot;Verilerini Ayarlar&amp;#39;dan CSV olarak dışa aktar.&amp;quot; &amp;quot;Kullanıcıların artık verilerini CSV formatında
dışa aktarabilmesi özelliğini ekledik&amp;quot; cümlesini kelimelerin üçte birini kullanarak aynı şeyi
söyleyerek yener. Changelog sayfası uzunluğunda, biraz gevezelik eden bir cümle okuyucuya yarım
saniyeye mal olur. Mobil release note uzunluğunda, aynı geveze anlatım cümleyi tamamen görünür
önizlemenin dışına itebilir, böylece okuyucu neyin değiştiğini söyleyecek fiili hiç görmez.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Kötü, önizlemeyi çerçeveye harcıyor:
&amp;quot;İyileştirmelerle dolu yeni bir güncelleme sunmaktan
heyecan duyuyoruz! Detaylar için okumaya devam edin.&amp;quot;

İyi, tüm değer ilk satırda:
&amp;quot;Verilerini CSV olarak dışa aktar. Karanlık mod artık
sistem ayarına uyuyor. Paylaşılan linkleri açarken
oluşan çökme düzeltildi.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Bir web changelog girişinin normalde tutacağı ne kesilmeli?&lt;/h2&gt;
&lt;p&gt;Önce linkler, çünkü iki mağazadan hiçbiri onları tıklanabilir hale getirmiyor, bu yüzden metindeki
bir URL okuyucunun yeniden yazması gereken ölü ağırlıktır. Girişin bir hedefe ihtiyacı varsa,
bunun yerine uygulamada nereye dokunulacağını söyle: &amp;quot;Yeni filtreleri Ayarlar &amp;gt; Arama altında gör&amp;quot;
işe yarar; &amp;quot;example.com/blog/filtreler adresinde devamını oku&amp;quot; bu yüzeyde işe yaramaz. İkincisi,
koşullu veya belirli bir kitleye özgü her şey: bir web changelog&amp;#39;u &amp;quot;API kullanıyorsan, bu seni
etkiler&amp;quot; diyebilir, ama bir mağaza girdisi her kurulu kullanıcıya aynı anda ulaşır, bu yüzden
koşullu bir satır bunun uygulanmadığı %95 için gürültü gibi okunur. Koşullu detayı bunun yerine
gerçekten ilgilendirdiği hesaplar için tetiklenen bir uygulama içi mesaja koy.&lt;/p&gt;
&lt;h2&gt;Her sürümün kendi notları mı olmalı, yoksa &amp;quot;hata düzeltmeleri ve performans iyileştirmeleri&amp;quot;ni yeniden kullanmak sorun değil mi?&lt;/h2&gt;
&lt;p&gt;Bunu gerçekten öyle olan sürümler için yeniden kullan, ama bunun ne sıklıkla gerçekten doğru
olduğunu denetle. &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Release notes nasıl yazılır&lt;/a&gt; bu ifadenin
neden okuyucu için değil içeriden yazılmış bir notu ele verdiğini zaten ele alıyor; mobilde çift
zarar veriyor, çünkü mağaza release notes&amp;#39;u bazı kullanıcıların güncellemeler arasında bir şey
gördüğü nadir yerlerden biridir, ve uzun bir &amp;quot;hata düzeltmeleri ve performans iyileştirmeleri&amp;quot;
dizisi uygulamanın değişmediği gibi okunur, ki bu o dönem için hiç not olmamasından daha kötü bir
izlenimdir.&lt;/p&gt;
&lt;h2&gt;Release notes insanların uygulamayı güncelleyip güncellemeyeceğini etkiler mi?&lt;/h2&gt;
&lt;p&gt;Dolaylı olarak, ikna yerine görünürlük yoluyla. Çoğu kullanıcı otomatik olarak günceller ve
güncellemeden önce notları hiç okumaz; notlar en çok güncellemeleri elle kontrol eden azınlık için,
ve bir mağaza girdisinin geçmişini tarayan eleştirmenler veya basın için önemlidir. O daha küçük
kitle için yazmak yine de karşılığını verir, çünkü belirli, tarihli girişlerin gerçek bir
geçmişine sahip bir girdi aktif olarak sürdürülen bir uygulama gibi okunur, ve bir yıl boyunca
&amp;quot;hata düzeltmeleri ve performans iyileştirmeleri&amp;quot; olan bir girdi okunmaz, o sürede gerçekte ne
kadar şey yayınlanmış olursa olsun.&lt;/p&gt;
&lt;h2&gt;Ya kullanıcının seçeneği olmadığını notun açıklaması gereken zorunlu bir güncelleme?&lt;/h2&gt;
&lt;p&gt;Nedeni ve son tarihi her şeyden önce ilk satırda belirt, çünkü zorunlu güncelleme okuyucunun
okumaya başlamadan önce bile rahatsız olduğu tek durumdur. &amp;quot;Bu güncelleme verilerinin
senkronize olmaya devam etmesi için gerekli. Kesintiyi önlemek için [tarih]&amp;#39;e kadar güncelle.&amp;quot;
tek cümlede ne yapılacağını ve nedenini söyler; bu nedeni üç satır ilgisiz özellik notunun altına
gömmek, uygulamanın rahatsız edici kısmı sakladığı gibi okunur.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Mobil release notes aynı sürümün web changelog&amp;#39;uyla eşleşmeli mi?&lt;/strong&gt;
Aynı temel değişiklikleri kapsamalı, ama kelimesi kelimesine değil. Web changelog&amp;#39;u tam açıklamayı
karşılayabilir; mobil not aynı gerçekleri önce fiil olacak şekilde bir cümleye sıkıştırılmış
olarak ister, ki bu genelde kopyala-yapıştır değil yeniden yazım olduğu anlamına gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desteklenen her dil için mobil release notes&amp;#39;u yerelleştirmeye değer mi?&lt;/strong&gt;
Evet, bir web changelog&amp;#39;undan daha fazla, çünkü mağaza girdisi bazı kullanıcıların oturumlar
arasında gördüğü tek yerelleştirilmiş yüzey olabilir, ve her iki platform da çeviri dışında ek
mühendislik işi olmadan yerel başına release notes&amp;#39;u destekler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kısalığı zorlayan bir sınır yoksa mobil bir release note ne kadar uzun olmalı?&lt;/strong&gt;
Yine de kısa. iOS&amp;#39;taki 4.000 karakter tavanı nadiren gerçek kısıtlamadır; gerçek kısıtlama 2-3
satırlık önizlemedir, ve o önizlemenin gösterdiğinin ötesine yazmak sadece daha az insanın önemli
olan kısmı okuduğu anlamına gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes&amp;#39;un görünür metinde bir versiyon numarasına ihtiyacı var mı?&lt;/strong&gt;
Hayır. Mağaza notların yanında versiyon numarasını zaten gösterir. Onu metin içinde tekrarlamak
okuyucunun zaten önünde olan bilgi için görünür karakter harcar.&lt;/p&gt;
</content:encoded></item><item><title>Monorepo changelog&apos;ları: tek mi, paket başına mı?</title><link>https://changeloop.dev/blog/tr/monorepo-changelogs/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/monorepo-changelogs/</guid><description>Bir monorepo tüm repo için tek changelog tutabilir veya paket başına bir tane, ve yanlış seçim her release&apos;i ya çok gürültülü ya da çok dağınık yapar.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir monorepo, tek bir repository içinde ayrı ayrı deploy edilen birkaç şeyi barındırır, ve bir
changelog önce bir soruyu yanıtlamalıdır: okuyucu repo&amp;#39;yu mu önemsiyor, yoksa içindeki belirli bir
paketi mi? Çoğu ekip buna hiç bilinçli olarak karar vermez. Tek bir repo olduğu için tek bir
changelog&amp;#39;la başlarlar, zaman içinde paket ekler, ve CLI kullanan birinin kendi düzeltmesini
gönderen girişi bulmak için kırk ilgisiz backend girişini geçmesi gereken bir log ile sonuçlanırlar.
Doğru şekli belirleyen repository&amp;#39;nin yapısı değil, log&amp;#39;u kimin okuduğu ve zaten neyi aradığını
bilmesidir.&lt;/p&gt;
&lt;h2&gt;Bir monorepo&amp;#39;nun changelog&amp;#39;unu tek bir repo&amp;#39;dan farklı kılan nedir?&lt;/h2&gt;
&lt;p&gt;Tek repo changelog&amp;#39;unun örtük bir okuyucu kitlesi vardır: o repo&amp;#39;nun inşa ettiği tek şeyi kullanan
herkes. Bir monorepo&amp;#39;nun okuyucu kitlesi paket bazında bölünür, ve aynı repo&amp;#39;daki paketler sık sık
farklı takvimlerde, farklı tüketicilere, farklı kararlılık seviyelerinde yayınlanır. Bir kayıt
defterinde yayınlanan bir kütüphane ile dahili bir yönetim aracı aynı monorepo&amp;#39;da yaşayabilir ve
changelog&amp;#39;u okuyan biri için neredeyse hiçbir ortak noktaları olmayabilir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repo şekli&lt;/th&gt;
&lt;th&gt;Tipik okuyucu&lt;/th&gt;
&lt;th&gt;Uyan changelog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Tek bir deploy edilebilir uygulama&lt;/td&gt;
&lt;td&gt;Ürünü kullanan herkes&lt;/td&gt;
&lt;td&gt;Tek log, tüm repo için&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kütüphane workspace&amp;#39;i (birden fazla yayınlanan paket)&lt;/td&gt;
&lt;td&gt;Belirli bir pakete bağımlı olan&lt;/td&gt;
&lt;td&gt;Paket başına bir log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uygulama artı dahili araçlar&lt;/td&gt;
&lt;td&gt;Örtüşmeyen iki farklı okuyucu kitlesi&lt;/td&gt;
&lt;td&gt;Klasöre değil, okuyucu kitlesine göre bölünmüş&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uygulama artı kendi SDK&amp;#39;sı&lt;/td&gt;
&lt;td&gt;Ürün kullanıcıları, ve SDK entegratörleri&lt;/td&gt;
&lt;td&gt;İki log: ürüne özel, SDK&amp;#39;ya özel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Her paketin kendi changelog&amp;#39;una ihtiyacı var mı?&lt;/h2&gt;
&lt;p&gt;Sadece bağımsız bir okuyucu kitlesi olanların. Bir kayıt defterinde yayınlanan bir paket kendi
log&amp;#39;una ihtiyaç duyar, çünkü onu kuran kişinin repo&amp;#39;da başka bir şey okumak için hiçbir nedeni
yoktur, ve &lt;a href=&quot;https://lerna.js.org/&quot;&gt;Lerna&lt;/a&gt; ve Changesets gibi monorepo sürüm araçları her paket için
&lt;code&gt;package.json&lt;/code&gt;&amp;#39;ının yanına bir &lt;code&gt;CHANGELOG.md&lt;/code&gt; yazar. Aynı repo&amp;#39;da zaten yaşayan uygulamayı tek
tüketicisi olan dahili bir yardımcı programın ayrı bir log&amp;#39;a ihtiyacı yoktur; değişikliklerini o
uygulamanın girişlerine dahil etmek, ekip dışında kimsenin açmadığı ikinci bir dosyadan daha
kullanışlıdır.&lt;/p&gt;
&lt;p&gt;Test, herhangi bir girişin bir changelog&amp;#39;a ait olup olmadığına karar verenle aynıdır: okuyucu bunu
fark eder mi veya önemser mi, ve bunu bilerek harekete geçebilir mi. Bunu klasöre değil pakete göre
uygula, ve on iki paketli bir repo, iki gerçek changelog&amp;#39;la ve buna hiç ihtiyacı olmayan on paketle
sonuçlanabilir.&lt;/p&gt;
&lt;h2&gt;Hangi paketin hangi changelog girişine neden olduğu nasıl bilinir?&lt;/h2&gt;
&lt;p&gt;Her girişi, bir commit&amp;#39;in hangi dosyaları etkilediğini sonradan inceleyerek değil, giriş yazıldığı
anda paketiyle etiketle. Paylaşılan dahili bir kütüphaneyi düzelten bir commit, ona bağımlı olan
her pakette bir changelog girişi üretebilir, ve dosya yolları tek başına bu alt akış girişlerinden
hangisinin okuyucunun gerçekten görmesi gerektiğini söyleyemez; sadece &amp;quot;bu, A paketini kullanana
görünür ve B paketini kullanana görünmez&amp;quot; diye karar veren bir kişi bunu yapabilir.
&lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;Conventional commits&lt;/a&gt; her commit&amp;#39;te paketi adlandırarak
burada mekanik olarak yardımcı olur, ama scope yine de sadece bir taslak üretir. O yazının aynı
iki katmanlı kuralı paket bazında geçerlidir: doğru scope&amp;#39;a sahip bir taslak, o paketin gerçek
okuyucusu için ifade edilmeden önce yine de insan eliyle bir geçiş gerektirir.&lt;/p&gt;
&lt;h2&gt;Paylaşılan bir changelog, tek repo changelog&amp;#39;unun ihtiyaç duymadığı neye ihtiyaç duyar?&lt;/h2&gt;
&lt;p&gt;Her girişte, açıklamadan önce, en başta bir paket etiketi, böylece log&amp;#39;a göz atan bir okuyucu tek
bir geçişte kendisine ait olmayan her şeyi atlayabilir. Bu etiket olmadan, paylaşılan bir log
rastgele bir akış gibi okunur, ve bir pakete ilgi duyan bir okuyucu, hangi satırların önemli
olduğunu ezberlemek dışında onu filtrelemenin bir yolunu bulamaz, ki bunu ilk haftadan sonra
kimse yapmaz.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 2026-09-07

### [cli] Eklendi
- `acme push --dry-run` gerçekten göndermeden neyin
  gönderileceğini gösterir.

### [core] Düzeltildi
- Yeniden deneme geri çekilmesi artık boş gövde döndüren başarılı
  bir istekte sıfırlanmıyor.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;İki giriş, iki okuyucu kitlesi, ayırt etmek için tek bakış. &lt;a href=&quot;https://github.com/changesets/changesets/blob/main/docs/intro-to-using-changesets.md&quot;&gt;Changesets&lt;/a&gt;
tarzı bir iş akışı bu etiketlemeyi doğrudan release sürecine gömer: katkıda bulunan biri
değişikliğinin yanında pakete özel kısa bir not yazar, ve araç, birleştirilmiş bir commit
geçmişinden geriye dönük paket sınırlarını yeniden inşa etmeye çalışmak yerine, release anında bu
notlardan paket başına changelog&amp;#39;lar ve versiyon sıçramaları oluşturur.&lt;/p&gt;
&lt;h2&gt;Versiyonlama bir monorepo changelog&amp;#39;uyla nasıl ilişkilenir?&lt;/h2&gt;
&lt;p&gt;Bağımsız olarak versiyonlanan paketlerin kendi changelog&amp;#39;una ihtiyacı vardır çünkü kendi versiyon
numaraları vardır, ve paylaşılan bir changelog, tek bir dosya içinde iki log&amp;#39;a dönüşmeden
&amp;quot;A paketi 2.1&amp;#39;den 2.2&amp;#39;ye geçerken B paketi 1.4&amp;#39;te kaldı&amp;quot; ifadesini veremez.
&lt;a href=&quot;https://changeloop.dev/blog/tr/semantic-versioning-changelog/&quot;&gt;Semantic versioning ve changelog&amp;#39;unuz&lt;/a&gt; bir versiyon
numarasının changelog kategorilerine nasıl eşlenmesi gerektiğini ele alır; bir monorepo&amp;#39;da bu
eşleme paket bazında uygulanmalıdır, çünkü bir pakette bulunan breaking change, ona bağımlı
olmayan kardeş bir paket için breaking change değildir.&lt;/p&gt;
&lt;p&gt;Bir ürünü, birçok dahili paketten inşa edilmiş olsa bile tek bir deploy edilebilir birim olarak
gönderen bir repo bu sorunu yaşamaz: paketler her zaman birlikte release edildikleri için bir
versiyonu paylaşırlar, ve tek bir changelog doğrudur.&lt;/p&gt;
&lt;h2&gt;Git etiketleri bir monorepo&amp;#39;ya nasıl uyar?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/tr/git-tags-releases-changelog/&quot;&gt;Git etiketleri, release&amp;#39;ler ve changelog&amp;#39;unuz&lt;/a&gt; yazısındaki
aynı kural, paket bazında uygulanarak geçerlidir: kendi versiyonu olan bir paketin kendi etiket
önekine ihtiyacı vardır, tipik olarak hangi pakete ait olduğunu söyleyemeyen çıplak bir &lt;code&gt;v1.4.0&lt;/code&gt;
yerine &lt;code&gt;paket-adi@1.4.0&lt;/code&gt;. Sadece çıplak versiyon numaralarıyla etiketlenmiş bir monorepo, sonradan
&amp;quot;&lt;code&gt;cli&lt;/code&gt; 2.2&amp;#39;yi gönderdiğinde &lt;code&gt;core&lt;/code&gt;&amp;#39;da ne vardı&amp;quot; sorusunu yanıtlayamaz, çünkü diskte hiçbir şey o
etiketin gerçekte hangi pakete ait olduğunu kaydetmez.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir monorepo&amp;#39;daki her paket için ayrı bir changelog&amp;#39;a ihtiyacım var mı?&lt;/strong&gt;
Sadece bağımsız okuyucu kitlesi olan paketler için, genellikle bir kayıt defterinde yayınlanan her
şey. Aynı repo&amp;#39;da zaten yaşayan tek bir dahili tüketicisi olan bir paket, kendi log&amp;#39;unu tutmak
yerine o tüketicinin log&amp;#39;una dahil olabilir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog girişini doğru paketle ne etiketler?&lt;/strong&gt;
Değişen dosya yollarının otomatik bir taraması değil, girişi yazan kişi, onu yazdığı anda. Paylaşılan
bir kütüphanedeki bir değişiklik, ona bağımlı her pakette farklı bir giriş üretebilir, ve sadece bir
insan bu alt akış girişlerinin her birinin gerçekte ne söylemesi gerektiğine karar verebilir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir monorepo her şey için tek bir versiyon numarası mı kullanmalı?&lt;/strong&gt;
Sadece her paket her zaman diğerleriyle birlikte release edilirse. Paketler bir gün bağımsız olarak
yayınlanırsa, bağımsız versiyonlara ihtiyaç duyarlar, ve bağımsız versiyonların anlamlı olması için
bağımsız changelog&amp;#39;lara ihtiyaçları vardır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir monorepo changelog aracı insan düzenleme adımının yerini alır mı?&lt;/strong&gt;
Hayır. Changesets gibi araçlar, release anında pakete özel notları toplama ve birleştirme işini
otomatikleştirir; notun kendisi, katkıda bulunanın değil okuyucunun diliyle yazılmış olarak, başka
her changelog pipeline&amp;#39;ında olduğu gibi hâlâ bir kişinin işidir.&lt;/p&gt;
</content:encoded></item><item><title>Yeni bir özellik nasıl duyurulur (sessizlik olmadan)</title><link>https://changeloop.dev/blog/tr/new-feature-announcement/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/new-feature-announcement/</guid><description>Çoğu özellik duyurusu, kimsenin iki kez okumadığı bir kanalda ölür. Nerede duyurulur, önce ne söylenir, ve gerçekten isteyen kişilere nasıl ulaşılır.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Çoğu özellik duyurusu, kimsenin iki kez okumadığı bir kanalda ölür: kayıp giden bir tweet,
bir abonenin o hafta aldığı diğer on ikisinin altında gömülü kalan bir sürüm günü e-postası,
ekibin yarısının aylar önce sessize aldığı bir kanaldaki bir Slack mesajı. Özellik gönderildi.
Onu kullanacak olanların neredeyse hiçbiri fark etmedi. Bunu düzeltmek, daha iyi bir duyuru
yazmaktan çok, doğru okuyucu için doğru kanalı seçmekle ve genel bir mesajı fark etmelerine
güvenmek yerine tam olarak isteyen kişilere doğrudan ulaşmakla ilgilidir.&lt;/p&gt;
&lt;h2&gt;Yeni bir özellik gerçekte nerede duyurulmalı?&lt;/h2&gt;
&lt;p&gt;Birden fazla yerde, çünkü &amp;quot;herkes aynı kanalı okur&amp;quot; hiçbir zaman doğru değildir. Bir changelog
veya feed girişi, kendi ritminde kontrol eden ve kalıcı, tarihli kaydı isteyen okuyucuya hizmet
eder. Uygulama içi bir bildirim, ürünü zaten kullanan ve varlığından haberdar olsa özelliği bugün
kullanacak okuyucuya hizmet eder. E-posta, şu anda üründe olmayan ama doğru güncelleme için geri
dönecek okuyucuya hizmet eder. Sosyal medya, hemen hemen hiç hedeflemeyle mevcut kullanıcıların
ötesinde erişim sağlar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kanal&lt;/th&gt;
&lt;th&gt;En iyi olduğu yer&lt;/th&gt;
&lt;th&gt;Zayıflık&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Changelog / feed&lt;/td&gt;
&lt;td&gt;Kalıcı kayıt; kendi ritminde kontrol eden okuyucular&lt;/td&gt;
&lt;td&gt;Pasif; hiç kontrol etmeyene faydasız&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uygulama içi bildirim&lt;/td&gt;
&lt;td&gt;Zaten orada olan, bugün harekete geçecek kullanıcılar&lt;/td&gt;
&lt;td&gt;Şu anda oturum açmamış hiç kimseye ulaşmaz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E-posta&lt;/td&gt;
&lt;td&gt;Şu anda aktif olmayan ama bunun için geri dönecek kullanıcılar&lt;/td&gt;
&lt;td&gt;Diğer e-postaların altında kolayca kaybolur; gerçek bir konu satırı gerekir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sosyal medya&lt;/td&gt;
&lt;td&gt;Mevcut kullanıcıların ötesinde erişim&lt;/td&gt;
&lt;td&gt;Hemen hemen hiç hedefleme yok; kısa ömürlü&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Dördünden hiçbiri tek başına yeterli değildir. &lt;a href=&quot;https://changeloop.dev/blog/tr/what-is-a-changelog/&quot;&gt;Changelog&lt;/a&gt;, boyutuna bakılmaksızın her sürümü
taşıması gereken tek belgedir, çünkü diğer her şeyin geri işaret ettiği kayıttır; diğer üçü,
özelliğin gerçekte ne kadar büyük olduğuna göre seçilen, üzerine eklenmiş güçlendirmedir.&lt;/p&gt;
&lt;h2&gt;Duyuru önce ne söylemeli?&lt;/h2&gt;
&lt;p&gt;Mekanizma değil, sonuç. &amp;quot;Raporlar endpoint&amp;#39;ine bir önbellek katmanı ekledik&amp;quot;, ekibin ne inşa
ettiğini anlatır. &amp;quot;Raporlar artık bir saniyeden kısa sürede yükleniyor&amp;quot;, okuyucu için neyin
değiştiğini anlatır, ve tıklamayı sağlayan cümle de budur, çünkü &amp;quot;bundan bana ne&amp;quot; sorusunu üçüncü
yerine ilk cümlede yanıtlar. Mekanizma, başlığa değil, changelog girişine veya ayrıntı sayfasına
aittir.&lt;/p&gt;
&lt;p&gt;Sıfatlardan önce somutluk. &amp;quot;Daha hızlı, daha güçlü bir rapor deneyimi&amp;quot;, okuyucuya üzerinde
işlem yapabileceği hiçbir şey söylemez; &amp;quot;raporlar artık bir saniyeden kısa sürede yükleniyor ve
duruma göre filtrelenebiliyor&amp;quot; tam olarak neyin değiştiğini ve ne denenmesi gerektiğini söyler.
İkinci versiyon aynı zamanda daha inandırıcı da görünür, çünkü belirsiz bir iddia, söylenecek
somut bir şey olmadığında pazarlama metninin tam olarak kulağa geldiği gibi gelir.&lt;/p&gt;
&lt;h2&gt;Bir ürün güncelleme e-postasından nasıl farklıdır?&lt;/h2&gt;
&lt;p&gt;Örtüşür ama aynı değildir. &lt;a href=&quot;https://changeloop.dev/blog/tr/product-update-email/&quot;&gt;Ürün güncelleme e-postası&lt;/a&gt;, sıklık,
konu satırları, ve ne zaman bir özetin tek seferlik bir gönderiyi geçtiği dahil, e-posta kanalını
özel olarak ele alır. Yeni bir özellik duyurusu, altta yatan olaydır; e-posta, özellik bir
sonraki özette taşınmak yerine özel bir gönderiyi haklı çıkaracak kadar büyük olduğunda seçilen,
onu taşıyabilecek yukarıdaki dört kanaldan biridir. Küçük bir özellik bir changelog girişini ve
belki bir uygulama içi bildirimi hak eder. Önemli bir özellik, zamanlanmış olarak dört kanalın
hepsini hak eder.&lt;/p&gt;
&lt;h2&gt;Tam olarak isteyen kişilere nasıl ulaşılır?&lt;/h2&gt;
&lt;p&gt;Bu, çabaya karşı en iyi getiriye sahip duyurudur, ve neredeyse tüm ekipler onu atlar. On müşteri
bir özelliği isimle istediyse, o on kişi, çıkan başka herhangi bir daha geniş duyurudan bağımsız
olarak, gönderildiği anda doğrudan, kişisel bir not hak eder. &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;Müşteriyle geri bildirim döngüsünü kapatmak&lt;/a&gt;
mekaniği baştan sona ele alır; buradaki özet, bunun sadece orijinal talep talep edene bağlı
kaldığında işe yaramasıdır, ki bu bir duyuru sorunundan çok bir &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;takip sorunudur&lt;/a&gt;.
changeloop&amp;#39;ta, widget geri bildirimi bir GitHub issue&amp;#39;suna dönüştüğünde ve merge edilen pull request
onu kapattığında (&lt;code&gt;fixes #142&lt;/code&gt;), changelog girişini onaylamak o issue&amp;#39;ya canlı girişe geri bağlanan
tek seferlik bir &amp;quot;Shipped — &lt;title&gt;&amp;quot; yorumu yayımlar, ve geri bildirimi gönderen kişi gönderilen
girişi widget&amp;#39;ta görür. Kimsenin söylemeyi hatırlaması gerekmez. Elle açılan issue&amp;#39;lar ve GitLab ya
da Bitbucket repository&amp;#39;leri bu yorumu almaz.&lt;/p&gt;
&lt;h2&gt;Girişin kendisi nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Diğer herhangi bir sürüm notu girişiyle aynı disiplin: okuyucunun artık yapabileceğiyle başla,
gerekli kurulumla devam et, iç gerekçeyi atla. &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Sürüm notları nasıl yazılır&lt;/a&gt;
tam yöntemi ele alır; yeni bir özellik duyurusu en yüksek riskli durumdur, çünkü ekran görüntüsü
alınma, iletilme ve ürünün changelog&amp;#39;unu hiç görmemiş biri tarafından okunma olasılığı en yüksek
girişdir.&lt;/p&gt;
&lt;h2&gt;Ne zaman geniş çapta duyurulmamalı?&lt;/h2&gt;
&lt;p&gt;Özellik hâlâ hesapların bir alt kümesine yayılıyorsa, gerçekten bir beta ise, veya geniş bir
duyurunun on okuyucusundan dokuzunun henüz kullanamayacağı şekilde fiyatlandırılmış veya
kilitlenmişse. On okuyucusundan dokuzunun kullanamayacağı bir özellik için geniş bir duyuru bir
yem gibi okunur, ve bu duyuruda heyecan yaratmaktan çok bir sonraki duyuruya olan güveni yakar.
Çözüm sessizlik değil, kapsamdır: uygun hesapları doğrudan bilgilendirin ve kullanılabilirlik
duyuruyu yakalayana kadar geniş kanalları bekletin.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her yeni özellik kendi duyurusunu hak eder mi?&lt;/strong&gt;
Her biri bir changelog girişini hak eder. Sadece birinin ürünü kullanma şeklini değiştirecek
kadar önemli olanlar, veya isimle açıkça istenenler, e-posta veya sosyal medya gibi daha geniş
kanalları hak eder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Küçük bir özellik için en iyi kanal nedir?&lt;/strong&gt;
Sadece changelog, artı özellik kullanıcının zaten içinde olduğu bir akışta keşfedilebilirse bir
uygulama içi bildirim. E-posta ve sosyal medya, dikkat istemeyi haklı çıkaran özellikler için
değerlidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir özellik, tam olarak isteyen kişilere nasıl duyurulur?&lt;/strong&gt;
Talebi kaydedildiği andan itibaren talep edene bağlı tutun, sonra gönderildiğinde herhangi bir
daha geniş duyurudan ayrı olarak bireysel olarak bildirin. Talep edenin kendi başına kontrol
edebileceği paylaşılan bir durum etiketi de baştan kaç bireysel mesaja ihtiyaç duyulduğunu azaltır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir özellik duyurusunun ekran görüntüsüne ihtiyacı var mı?&lt;/strong&gt;
Görsel olan her şey için evet; anlatılan ama görülmeyen bir özellik, okuyucuların önizlemesini
görebildiği bir özellikten çok daha sık atlanır. Bir API veya backend yeteneği için, kısa bir kod
örneği, bir UI değişikliği için bir ekran görüntüsüyle aynı işi görür.&lt;/p&gt;
</content:encoded></item><item><title>Birikmiş özellik taleplerine öncelik vermek</title><link>https://changeloop.dev/blog/tr/prioritizing-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/prioritizing-feature-requests/</guid><description>Takip edilen bir birikim zor soruyu açık bırakır: sırada hangi talep var. İşe yarayan çerçeveler, her birinin kırıldığı yer ve oy sayısının gizlediği şey.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Özellik taleplerini takip etmek, nerede yaşadıklarını çözer. Sırada hangisinin gideceğini çözmez,
ve ekiplerin gerçekten takıldığı ikinci soru budur. Gruplanmış, etiketlenmiş üç yüz taleplik bir
birikim bile hâlâ bir karar kuralına ihtiyaç duyar, çünkü &amp;quot;en çok istenen şeyi yap&amp;quot; ancak iki
talep birbirine yakın olana ve üçüncüsünün gürültülü bir savunucusu olana kadar işe yarar, ki bu
haftaların çoğunda böyledir. Aşağıdaki çerçeveler aynı soruya rakip yanıtlar değildir. Her biri
farklı bir talep türüne uyar, ve hepsi için tek bir çerçeve kullanmak genellikle asıl hatadır.&lt;/p&gt;
&lt;h2&gt;Özellik taleplerine öncelik vermeyi bir roadmap&amp;#39;e öncelik vermekten farklı kılan nedir?&lt;/h2&gt;
&lt;p&gt;Bir roadmap kararı stratejiden başlar ve neyin inşa edileceğini sorar. Bir özellik talebi kararı
zaten var olan bir talepten başlar ve buna göre hareket edilip edilmeyeceğini sorar, ve ikisi
yeterince sık farklı yönlere çeker ki bir talebin yüksek talebi olabilir ve yine de inşa edilmesi
yanlış olabilir, veya düşük talebi olabilir ve yine de stratejik bir hesabı açtığı için değerli
olabilir. Her talebi bir roadmap oyu gibi ele almak bu kontrolü atlar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Çerçeve&lt;/th&gt;
&lt;th&gt;Neyi tartar&lt;/th&gt;
&lt;th&gt;Nerede kırılır&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Ham talep sayısı&lt;/td&gt;
&lt;td&gt;Kaç kişinin istediği&lt;/td&gt;
&lt;td&gt;Gerçek talep yerine akılda kalan isimleri ödüllendirir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RICE&lt;/td&gt;
&lt;td&gt;Kapsam, etki, güven, çaba&lt;/td&gt;
&lt;td&gt;Yeni bir talep için kimsenin sahip olmadığı tahminlere ihtiyaç duyar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gelire göre ağırlıklandırılmış&lt;/td&gt;
&lt;td&gt;Kimin istediği, hesap değerine göre&lt;/td&gt;
&lt;td&gt;Henüz çok değerli olmayan hesaplardan gelen talepleri görmezden gelir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kamuya açık oylar&lt;/td&gt;
&lt;td&gt;Görünür, düşük çaba gerektiren sinyal&lt;/td&gt;
&lt;td&gt;Sadece nereye bakacağını zaten bilen kullanıcılara ulaşır&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;RICE nedir, ve özellik talepleri için işe yarar mı?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.intercom.com/blog/rice-simple-prioritization-for-product-managers/&quot;&gt;RICE&lt;/a&gt; bir fikri
kapsam, etki, güven ve çaba üzerinden puanlar, sonra karşılaştırılabilir bir sayı elde etmek için
ilk üçü dördüncüye böler. Bir ekibin zaten inandığı roadmap fikirleri için tasarlanmıştır, ve zor
kısım farklı bahisleri birbiriyle karşılaştırmaktır. Özellik talepleri zaten bir kapsam sayısıyla
gelir, isteyen kişi sayısı, ki bu yeni bir roadmap fikrinin genelde sahip olduğu kapsamdan daha
somuttur. RICE&amp;#39;ın bir talep karşısında gerildiği yer güven ve etkidir: bir ekip bir talebin gerçek
olduğundan emin olabilir ve yine de bir metriği ne kadar hareket ettireceğine dair bir temeli
olmayabilir, çünkü zaten bir ismi ve gerçek kullanıcı izi olan bir talep için &amp;quot;etki&amp;quot;, odanın
dışında henüz kimsenin görmediği bir fikrin etkisinden farklı bir tahmin türüdür.&lt;/p&gt;
&lt;p&gt;RICE&amp;#39;ı ciddi olarak değerlendirilen ve henüz karara bağlanmamış talepler için kullan. Gelen her
talebe uygulama; puanlama çabası ancak eşitlik bozucuya ihtiyaç duyacak kadar birbirine yakın
olanlarda karşılığını verir.&lt;/p&gt;
&lt;h2&gt;Gelire göre mi, yoksa kimin istediğine göre mi ağırlıklandırılmalı?&lt;/h2&gt;
&lt;p&gt;Kimin istediğine göre, ama sadece gelire göre değil. Yenilemeye yakın bir hesap, daha önce
eskalasyon yapmış bir hesap, ve talebi devam eden bir anlaşmayı açan bir hesap, düz bir gelir
rakamının tek başına yakalayamadığı bir aciliyet taşır, ve deneme kaydından gelen bir talep, yakında
gelire dönüşecek bir kararı engelliyorsa yine de önemli olabilir. Gelire göre ağırlıklandırma
bunların hesaplanması en kolay olanıdır, ve tam da bu yüzden fazla güvenilmesi en kolay olanıdır:
gerçek payı olmayan hesaplardan gürültüyü doğru şekilde kaldırır, ve aynı kolaylıkla hâlâ boru
hattında olan çok daha büyük bir hesabı kazandıracak bir talebi de düşürebilir.&lt;/p&gt;
&lt;h2&gt;Oylar gerçekte hangi rolü oynar?&lt;/h2&gt;
&lt;p&gt;Zaten var olan talepler için ucuz, sürekli bir sinyal, ve hangi taleplerin en başta var olması
gerektiğini keşfetmek için kötü bir yol. Bir oy sayısı sadece talebi zaten bulmuş ve tıklamaya değer
bulmuş kullanıcılara ulaşır, ki bu, kamuya açık bir roadmap&amp;#39;in oy toplamının talep kadar görünürlüğü
de yansıttığı anlamına gelir: listenin üstüne yakın eski bir talep, kısmen bulunması kolay olduğu
için oy toplamaya devam eder, ve daha yeni, eşit derecede gerçek bir talep sıfırdan başlar.
&lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;Genel roadmap&lt;/a&gt; yazısı, oyları roadmap&amp;#39;in tamamen dışında bırakmayı
savunur. Oyları, sırayla inşa edilecek bir
sıralama olarak değil, gruplanması ve güncelliğe göre ağırlıklandırılması gereken bir girdi olarak
ele al.
&lt;a href=&quot;https://changeloop.dev/blog/tr/feedback-signal-quality/&quot;&gt;Destek biletleri vs. özellik talepleri&lt;/a&gt; oy sayılarındaki diğer
kör noktayı ele alır: ona rastlayan kullanıcılar panoyu asla bulamazsa gerçek bir boşluk neredeyse
hiç oy üretmeyebilir, buna karşın destekte gürültülü bir şekilde ortaya çıkar.&lt;/p&gt;
&lt;h2&gt;En gürültülü müşteri ne zaman kazanır, ve bu bir sorun mu?&lt;/h2&gt;
&lt;p&gt;Bazen, ve bu sadece kimse fark etmediğinde bir sorundur. Sık sık eskalasyon yapan, ayrıntılı
biletler yazan veya ekipteki biriyle doğrudan hattı olan bir müşteri, talepleri eşit derecede
geçerli ama daha sessiz bir müşteriden daha hızlı görülecektir, ve bunu hiç kontrol etmeyen bir
önceliklendirme süreci, en güçlü davası olanı değil, en çok ısrar edeni sistematik olarak kayıracak
demektir. Gürültülü müşteriler düzeltilmesi gereken sorun değildir; talepleri genellikle gerçekten
önemlidir. Düzeltme bir alışkanlıktır: birikimi periyodik olarak kaynağa göre gözden geçir ve
aynı avuç içi kadar hesabın son zamanlarda gönderilenlerin çoğunu açıklayıp açıklamadığını kontrol
et, ve bunun gerçek talebin nerede olduğuyla eşleşip eşleşmediğini sor.&lt;/p&gt;
&lt;h2&gt;Bir önceliklendirme kararı nasıl bir yanıta dönüşür?&lt;/h2&gt;
&lt;p&gt;Buradaki her karar hem kazananlar hem de kaybedenler üretir, ve ikisi de sadece açıklamasız bir
durum değişikliği değil, gerçek gerekçeyi adlandıran bir yanıtı hak eder. &lt;a href=&quot;https://changeloop.dev/blog/tr/declining-feature-requests/&quot;&gt;Bir özellik talebi nasıl
reddedilir&lt;/a&gt; kaybeden bir talebe, jenerik bir ret gibi
okunmak yerine ilişkiyi sağlam tutan bir şekilde ne söyleneceğini ele alır. Tüm bunları en başta
mümkün kılan gruplama ve etiketleme işi &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-tracking/&quot;&gt;özellik talebi takibi&lt;/a&gt;
yazısında ele alınır; önceliklendirme yalnızca zaten kaydedilmiş ve karşılaştırılabilecek kadar
iyi gruplanmış talepler üzerinde işe yarar.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Özellik taleplerine öncelik vermek için en iyi çerçeve nedir?&lt;/strong&gt;
Hiçbiri tek başına değil. En gürültülü sinyali bulmak için ham sayıları, kısa bir ciddi aday
listesini karşılaştırmak için RICE&amp;#39;ı, ve stratejik bir hesaptan gelen sessiz talebin daha gürültülü
ama daha az önemli bir grubu geride bıraktığı durumları yakalamak için bir gelir veya hesap
kontrolünü kullan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özellik talepleri roadmap fikirleriyle aynı şekilde mi önceliklendirilmeli?&lt;/strong&gt;
Hayır. Roadmap fikirleri stratejiden başlar; özellik talepleri zaten var olan bir talepten başlar.
Onları birlikte puanlamak, iyi savunulmuş ama az mevcut talebi olan stratejik bir bahsin, sadece
daha fazla kişinin istediği bir talep karşısında sürekli kaybetmesine neden olur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Genel bir roadmap&amp;#39;teki oylar talebi doğru şekilde yansıtır mı?&lt;/strong&gt;
Sadece talebi zaten bulmuş kişiler arasında. Daha eski, daha görünür talepler, arkalarında daha
yeni bir talep için gerçek talebin ne kadar olduğuna bakılmaksızın daha hızlı oy toplar, bu yüzden
oy toplamlarını sırayla inşa edilecek bir sıralama olarak değil, gruplanmış ve güncelliğe göre
ağırlıklandırılmış bir sinyal olarak ele al.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özellik talebi öncelikleri ne sıklıkla yeniden değerlendirilmeli?&lt;/strong&gt;
Sadece biri eskalasyon yaptığında değil, sabit bir döngüde. Talepleri yeniden gruplayan ve
ağırlıklandırmayı yeniden kontrol eden aylık veya üç aylık bir geçiş, gönderilenlere hakim olan bir
avuç hesap gibi, saf reaktif bir sürecin kendi kendine asla ortaya çıkarmadığı sapmaları yakalar.&lt;/p&gt;
</content:encoded></item><item><title>Kurumsal release notları: bir hesap için ne değişir</title><link>https://changeloop.dev/blog/tr/private-release-notes-enterprise/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/private-release-notes-enterprise/</guid><description>Özel build kullanan müşteri için kurumsal release notları onun örneğine göre ayarlanmalı. Yanlış ayar roadmap&apos;i sızdırır ya da destek ekibini karıştırır.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Genel bir SaaS ürünü herkese aynı release notes&amp;#39;u gönderir, çünkü herkes aynı sürümdedir. Sabitlenmiş
bir sürümdeki, ayrılmış bir örnekteki, veya ürünün özellik bayraklı bir alt kümesindeki kurumsal bir
müşteri bu varsayımı bozar: onun için neyin değiştiğini açıklayan release notes, genel blogunuzdakilerle
aynı değildir, ve yine de genel olanları göndermek ya müşteriyi henüz sahip olmadığı değişikliklerle
karıştırır, ya da daha kötüsü, başka bir kurumsal müşterinin hesap ekibinin kendi hesaplarından bir ay daha
geri tutmanızı özellikle istediği bir özellikten ona bahseder. &lt;a href=&quot;https://changeloop.dev/blog/tr/release-notes-best-practices/&quot;&gt;Release notes en iyi
uygulamaları&lt;/a&gt; genel zanaatı ele alır; bu,
müşterilerinizin hepsi aynı build üzerinde olmadığında ortaya çıkan ayarlama sorunu için kurumsal
release notları yazmakla ilgilidir.&lt;/p&gt;
&lt;h2&gt;Kurumsal bir müşteri neden basitçe genel changelog&amp;#39;u okuyamaz?&lt;/h2&gt;
&lt;p&gt;Çünkü henüz çalıştırmıyor olabileceği bir sürümü, erişimi olmayabileceği özellikleri, ve kendisininkiyle
eşleşmeyen bir zaman çizelgesini tanımlar. Üç aylık bir sürüm döngüsüne sabitlenmiş ve geçen hafta
genel katmana çıkan bir özellik hakkında okuyan bir müşteri, sadece genel changelog&amp;#39;dan, o özelliğin
kendisine gelecek hafta mı yoksa gelecek çeyrekte mi geleceğini bilemez. Genel changelog &amp;quot;üründe ne
değişti&amp;quot;ye cevap verir; kurumsal bir müşterinin gerçek sorusu &amp;quot;çalıştırdığım sürümde ne değişti, ve
geri kalanını ne zaman alacağım&amp;quot;dır, ki genel changelog buna asla cevap vermek için yazılmamıştır.&lt;/p&gt;
&lt;h2&gt;Özel bir release note&amp;#39;un genel birinin ihtiyaç duymadığı ne şeye ihtiyacı var?&lt;/h2&gt;
&lt;p&gt;Müşterinin gerçekten karşılaştırabileceği bir sürüm veya ortam tanımlayıcısı, ve henüz kendisine
ulaşmamış olanın açık bir ifadesi. &amp;quot;Bu sürüm, genel 4.3 sürümümüzdeki toplu dışa aktarma
iyileştirmelerini içeriyor, ama bir sonraki planlanmış güncellemenizde gelecek yeni izin modelini
içermiyor&amp;quot; bir kurumsal yöneticiye örneğinin genel olarak ürüne göre tam olarak nerede durduğunu
söyler. Genel bir release note bu çerçevelemeye asla ihtiyaç duymaz çünkü göreceli olunacak sadece
bir örnek vardır; özel biri onsuz anlamsızdır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Genel release notes&lt;/th&gt;
&lt;th&gt;Özel (kurumsal) release notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Bir sürüm, bir kitle&lt;/td&gt;
&lt;td&gt;Birden fazla sürüm, bölümlenmiş kitleler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Okuyucunun her açıklanan özelliğe sahip olduğunu varsayar&lt;/td&gt;
&lt;td&gt;Okuyucunun neye sahip olup olmadığını belirtmeli&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Genel sürüme göre zamanlanır&lt;/td&gt;
&lt;td&gt;Müşterinin kendi güncelleme penceresine göre zamanlanır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hemen tamamen genel yapılabilir&lt;/td&gt;
&lt;td&gt;Diğer müşterilerin henüz sahip olmadığı öğeleri tutmalı olabilir&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Genel release notes&amp;#39;u kurumsal müşterilere göndermeyi ayrı yazmak yerine sadece geciktirmek hiç uygun mudur?&lt;/h2&gt;
&lt;p&gt;Sadece sürümü o anda gerçekten genel olanla eşleşiyorsa, ki bu birden fazla kurumsal hesabınız
farklı ritimlerde olduğunda sandığınızdan daha nadirdir. Genel notları geciktirmek, bir sürüm geride
olan ve yetişmek üzere olan bir müşteri için geçici bir çözüm olarak işe yarar; iki kurumsal
müşteri birbirinden farklı sürümlerde olduğu anda çöker, çünkü artık geciktirilecek tek bir &amp;quot;notlar&amp;quot;
yoktur, sadece her birinin sahip olduğunun bir matrisi vardır. O noktada, notları hesap başına
ayarlamak, aynı temel girdilerin filtrelenmiş bir görünümü olsa bile, isteğe bağlı olmaktan çıkar.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Henüz özelliğe sahip olmayan bir kurumsal hesaba
gönderilen genel notlar:
&amp;quot;New: Bulk export now supports custom column ordering.&amp;quot;
(Kafa karıştırıcı: yönetici deniyor ve orada değil.)

Aynı hesap için ayarlanmış kurumsal notlar:
&amp;quot;Available in your next update (scheduled for 2026-10-15):
bulk export with custom column ordering. Not yet available
on your current version (3.8).&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Müşterinin organizasyonu içinde bunu gerçekte kim okur, ve bu yazımı değiştirir mi?&lt;/h2&gt;
&lt;p&gt;Genellikle son kullanıcı yerine bir BT yöneticisi veya bir customer success kişisi, ve bu neyin
faydalı sayıldığını değiştirir. Bir son kullanıcı ekranında neyin farklı göründüğünü bilmek ister;
kurumsal bir yönetici izinlerde, veri işlemede, SSO yapılandırmasında, veya kendi kullanıcıları için
dağıtımı nasıl yönettiğini etkileyen herhangi bir şeyde neyin değiştiğini bilmek ister, çünkü dahili
soruları yanıtlayacak kişi o olacaktır. Tüketici changelog&amp;#39;u gibi okunan, hepsi parlak yeni düğmeler
ve hiç operasyonel detay olmayan özel bir release note, yöneticiyi gerçekten ihtiyaç duyduğu bilgiyi
kazmaya zorlar.&lt;/p&gt;
&lt;h2&gt;Bu, aynı özelliği zaten listeleyen genel bir roadmap veya genel bir changelog ile nasıl etkileşir?&lt;/h2&gt;
&lt;p&gt;Dikkatlice, çünkü ikisini de okuyan bir müşteri herhangi bir tutarsızlığı fark edecektir. Genel
changelog&amp;#39;unuz zaten belirli bir kurumsal hesabın henüz sahip olmadığı bir özelliği duyurduysa, onun
özel release note&amp;#39;u genel girdinin var olmadığını varsaymak yerine bu boşluğu kabul etmelidir; genel
duyuruyu görmüş ve onu görmezden gelen özel notlar alan bir yönetici ya onu unuttuğunuzu ya da bir
şeyin bozuk olduğunu varsayacaktır. &lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;Genel roadmap&lt;/a&gt; neyin çıktığına karşı
neyin planlandığına dair bir roadmap&amp;#39;i dürüst tutmayı ele alır; bu dürüstlüğün release notes&amp;#39;taki
kurumsal versiyonu, genel olan ile kendisininki arasındaki boşluğu doğrudan adlandırmaktır.&lt;/p&gt;
&lt;h2&gt;Sadece bir veya iki kurumsal müşterisi olan küçük bir şirketin bu kadar yapıya ihtiyacı var mı?&lt;/h2&gt;
&lt;p&gt;Tamamen bölümlenmiş sisteme değil, ama temel disiplin, müşterinin hangi sürümde olduğunu ve neye
sahip olup olmadığını açıkça belirtmek, en son build&amp;#39;inizde olmayan bir müşteriniz olur olmaz her
ölçekte önemlidir. Bunun önlediği başarısızlık modu, genel bir duyurunun kendisine uygulanıp
uygulanmadığı konusunda kafası karışan bir yönetici, ister iki kurumsal hesabınız olsun ister iki
yüz, bir destek bileti ve güvene bir darbe maliyetlidir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Özel release notes, diğer müşterilerin zaten sahip olduğu ama bunun sahip olmadığı özelliklerden hiç bahsetmeli mi?&lt;/strong&gt;
Sadece kendi zaman çizelgesiyle ilgiliyse, &amp;quot;bir sonraki güncellemenizde geliyor&amp;quot; olarak ifade
edilerek, diğer müşterilerle bir karşılaştırma olarak değil. Belirli bir başka müşterinin sahip
olduğunu adlandırmak, sizin ifşa etmeniz gerekmeyen bir bölgeye girer; bu müşteriye özellikle neyin
geleceğini adlandırmak tam olarak ihtiyaç duyduğu bilgidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aynı temel changelog girdileri hem genel hem de özel release notes&amp;#39;u besleyebilir mi?&lt;/strong&gt;
Evet, ve bu genellikle daha sürdürülebilir yaklaşımdır: girdileri hangi sürümlere veya katmanlara
uygulandıklarıyla etiketleyin, sonra kaçınılmaz olarak birbirinden ayrışacak tamamen ayrı iki belge
yazmak yerine yayımlama sırasında kitleye göre filtreleyin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir kurumsal müşteri özel bir feed yerine genel release notes&amp;#39;ta olmayı açıkça isterse ne olur?&lt;/strong&gt;
Buna saygı gösterin, ama genel notların genel sürümü varsaydığını anladığından emin olun, ve sürümü
açıklanandan farklıysa boşluğu kendiniz yazılı olarak işaretleyin. Bu yazılı onay, gerçekte kendi
build&amp;#39;ine uygulanmayan genel notlara göre hareket ederse sizi daha sonra korur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kurumsal bir müşteriye, bir sonraki sürümde erişeceği bir özellik hakkında ne kadar önceden bilgi verilmeli?&lt;/strong&gt;
Sadece sürüm zamanında değil, tarih onaylanır onaylanmaz, çünkü kurumsal yöneticiler genellikle
gelen bir özellik etrafında kendi dahili iletişimlerini veya eğitimlerini planlamalıdır, ve aynı gün
bildirimi bunun için onlara hiç alan bırakmaz.&lt;/p&gt;
</content:encoded></item><item><title>Semantic versioning ve changelog&apos;unuz</title><link>https://changeloop.dev/blog/tr/semantic-versioning-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/semantic-versioning-changelog/</guid><description>Semantic versioning, bir sürümün changelog&apos;da tek kelime okumadan önce ne kadar canını yakabileceğini söyler. Her sayının vaadi, bir girişin borcu.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Semantic versioning, çağıran tarafa bir sürümün tek bir changelog girişi okumadan önce ne kadar
canını yakabileceğini söyler. &lt;code&gt;2.4.1&lt;/code&gt;&amp;#39;den &lt;code&gt;2.5.0&lt;/code&gt;&amp;#39;a geçmek şunu söyler: yeni yetenek, hiçbir şey
bozulmaz. &lt;code&gt;2.5.0&lt;/code&gt;&amp;#39;dan &lt;code&gt;3.0.0&lt;/code&gt;&amp;#39;a geçmek şunu söyler: güncellemeden önce bu girişi oku. Changelog
ve sürüm numarası, aynı şeyi iki biçimde iddia etmesi gereken şeylerdir, ve ikisi arasındaki
sürtünmenin çoğu tam olarak uyuşmadıklarında ortaya çıkar, ki bu spesifikasyonun ima ettiğinden
daha sık olur.&lt;/p&gt;
&lt;h2&gt;Bir versiyondaki her sayı gerçekte ne vaat eder?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic versioning&lt;/a&gt;, her biri neyi tetiklediğine dair katı bir kurala
sahip üç sayı tanımlar: &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt;. Bir MAJOR sıçraması, uyumsuz bir değişiklik anlamına
gelir: doğru, mevcut bir entegrasyonun fark edebileceği ve bu yüzden değişmesi gereken bir şey.
Bir MINOR sıçraması, geriye dönük uyumlu yeni işlevsellik anlamına gelir: mevcut hiçbir şey
bozulmaz, yeni bir şey kullanılabilir olur. Bir PATCH sıçraması, geriye dönük uyumlu bir düzeltme
anlamına gelir: davranış belgelenmiş olana daha yakınlaşır, ve eski davranışa kasıtlı olarak
güvenen hiç kimse hiçbir şey fark etmemelidir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sıçrama&lt;/th&gt;
&lt;th&gt;Anlamı&lt;/th&gt;
&lt;th&gt;Giriş şöyle okunmalı&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;MAJOR (&lt;code&gt;1.x.x&lt;/code&gt; -&amp;gt; &lt;code&gt;2.0.0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Uyumsuz bir değişiklik&lt;/td&gt;
&lt;td&gt;&amp;quot;Güncellemeden önce eylem gerekir&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MINOR (&lt;code&gt;1.2.x&lt;/code&gt; -&amp;gt; &lt;code&gt;1.3.0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Yeni, uyumlu yetenek&lt;/td&gt;
&lt;td&gt;&amp;quot;Şimdi kullanılabilir, başka bir şey değişmedi&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PATCH (&lt;code&gt;1.2.3&lt;/code&gt; -&amp;gt; &lt;code&gt;1.2.4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Uyumlu bir düzeltme&lt;/td&gt;
&lt;td&gt;&amp;quot;Artık belgelendiği gibi davranıyor&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Tablo, geriye doğru da bir testtir: bir giriş kendi satırı gibi okunmuyorsa, ya sürüm numarası
yanlıştır ya da giriş gerçekte ne olduğunu az veya çok satmaktadır.&lt;/p&gt;
&lt;h2&gt;Sürümleme amaçları için ne uyumsuz sayılır?&lt;/h2&gt;
&lt;p&gt;Bir şeyin API changelog&amp;#39;una ait olup olmadığına karar veren aynı test: eski davranışa karşı
yazılmış ve o zamandan beri dokunulmamış doğru bir çağıran, bu değişiklik yüzünden farklı
davranabilir mi. &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Uyumsuz bir değişiklik nedir, ve nasıl gönderilir&lt;/a&gt;
kararı baştan sona ele alır, uyumsuz görünüp öyle olmayan ve küçük görünüp öyle olmayan durumlar
dahil. Sürümleme için kısacası: yanıt evetse, değişikliğin dahili olarak gerçekte ne kadar kod
etkilediğine bakılmaksızın sıçrama MAJOR&amp;#39;dır. Sürüm numaraları, ekibin çabasını değil, çağıran
için sonucu takip eder.&lt;/p&gt;
&lt;h2&gt;Bir changelog girişi bir sürüm sıçramasına nasıl uymalı?&lt;/h2&gt;
&lt;p&gt;Bir giriş, bir sıçrama kategorisi, en baştan belirtilmiş. Tablodaki desen doğrudan devam eder:
uyumsuz bir giriş, onu tanıtan sürümün altında yer alır, önce uyarı sonra açıklama olarak
ifade edilir. Ek bir giriş, MINOR sürümünün altında yer alır, kullanılabilirlik olarak ifade
edilir. Bir düzeltme, PATCH sürümünün altında yer alır, düzeltme olarak ifade edilir. Kategorileri
bir girişte karıştırmak, örneğin uyumsuz bir değişikliği ilgisiz bir düzeltmeyle aynı paragrafa
katlamak, bir okuyucunun gerçekten önemli olan tek şeyi tam olarak kaçırmasının yoludur.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 3.0.0 (2026-09-07)

### Changed
- **BREAKING:** `GET /reports` artık tutarları ondalık yerine en küçük
  para birimi cinsinden (kuruş) tam sayı olarak döndürüyor. `amount`&amp;#39;ı
  doğrudan okuyan kodu güncelleyin.

## 2.9.0 (2026-09-01)

### Added
- Raporlar artık `status`&amp;#39;a göre filtrelenebilir.

## 2.8.4 (2026-08-28)

### Fixed
- `GET /reports?status=`, bilinmeyen bir durum için 400 yerine boş bir
  sayfa döndürüyordu.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yukarıdan aşağıya okunduğunda, sürüm numarası ve bölüm etiketi aynı şeyi iki kez söyler, ve amaç
tam olarak budur: sadece başlıkları tarayan bir okuyucu, tek bir satır açmadan doğru bir risk
okuması alır.&lt;/p&gt;
&lt;h2&gt;Breaking change kuralı 1.0.0&amp;#39;dan önce de aynı şekilde geçerli mi?&lt;/h2&gt;
&lt;p&gt;Hayır, ve &amp;quot;bu gerçekten breaking mıydı&amp;quot; konusundaki kafa karışıklığının çoğu buradan gelir. SemVer,
sıfırıncı majör sürümün, &lt;code&gt;0.y.z&lt;/code&gt;, ilk geliştirme için olduğunu açıkça belirtir: her şey her an
değişebilir, ve public API kararlı sayılmamalıdır. Bir &lt;code&gt;0.4.0&lt;/code&gt;&amp;#39;dan &lt;code&gt;0.5.0&lt;/code&gt;&amp;#39;a sıçrama, spesifikasyonu
ihlal etmeden breaking bir değişiklik taşıyabilir, çünkü majör sürüm garantisi ancak bir proje
&lt;code&gt;1.0.0&lt;/code&gt;&amp;#39;ı gönderdiğinde başlar. Bir changelog girişi yine de okuyuculara neyin bozulduğu konusunda
aynı dürüstlüğü borçludur; değişen tek şey, 1.0.0&amp;#39;a ulaşmadan önce sürüm numarasının kendisinin
güvenilecek sinyal olmamasıdır.&lt;/p&gt;
&lt;h2&gt;Ürününüz ayrık sürümler göndermiyorsa ne olur?&lt;/h2&gt;
&lt;p&gt;Çoğu SaaS ürünü sürekli olarak dağıtır ve çağıran tarafa asla bir sürüm numarası göstermez, ki bu
disiplin ihtiyacını ortadan kaldırmaz, sadece onu normalde taşıyacak sayıyı kaldırır. Changelog
girişi tüm işi tek başına yapmalıdır: bir değişikliğin uyumsuz mu, ek mi, yoksa bir düzeltme mi
olduğunu, semantic versioning&amp;#39;in kullandığı aynı üç kelimeyle, hatta onları takacak bir sürüm
alanı olmadan bile açıkça söylemek. Bazı ekipler, changelog girişlerini asla doğrudan çağıran
tarafa göstermeden, sadece bağlantı verilebilir bir şeye çapalamak için tamamen dahili bir sürüm
tutar.&lt;/p&gt;
&lt;h2&gt;Bu, özellikle bir API changelog&amp;#39;una nasıl uygulanır?&lt;/h2&gt;
&lt;p&gt;Neredeyse başka her yerden daha katı bir şekilde, çünkü bir API&amp;#39;nin çağıranları koddur, beklenmedik
bir değişikliği omuz silkip geçebilecek insanlar değil. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&amp;#39;u: ne yayınlanır ve kim okur&lt;/a&gt;
o belgenin tam biçimini ele alır; buradaki sürümleme disiplini, onun breaking ve ek bölümlerini
dürüst tutan şeydir. Bir geçiş penceresi sırasında &lt;code&gt;v1&lt;/code&gt; ve &lt;code&gt;v2&lt;/code&gt;&amp;#39;yi paralel sunmak gibi birden
fazla sürümü aynı anda sunan bir API, tek bir paket yerine tüm arayüz ölçeğinde etkin bir şekilde
semantic versioning uyguluyordur, ve aynı üç kelimelik kelime dağarcığı her giriş için hâlâ
geçerlidir.&lt;/p&gt;
&lt;h2&gt;Keep a Changelog sürümleme hakkında ne söylüyor?&lt;/h2&gt;
&lt;p&gt;Doğrudan ismiyle semantic versioning&amp;#39;e bağlanır ve bu makalenin kullandığı aynı kategori kelime
dağarcığını önerir: Added, Changed, Deprecated, Removed, Fixed, Security. &lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog, uygulamada&lt;/a&gt;
ekiplerin genelde nerede saptığı dahil, bu spesifikasyonu benimsemeyi ele alır. Örtüşme tesadüf
değildir: her iki spesifikasyon da aynı sorunu zıt uçlardan çözmeye çalışır, biri sürüm numarasını
standartlaştırır, diğeri onu açıklayan girişi.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her changelog girişinin bir sürüm numarasına ihtiyacı var mı?&lt;/strong&gt;
Ürün sürümler gönderiyorsa evet, çünkü sayı bir okuyucunun önce girişi okumadan doğrudan &amp;quot;bu beni
ne kadar etkiliyor&amp;quot;a atlamasına izin verir. Ürün sürüm alanı olmadan sürekli olarak dağıtılıyorsa,
girişin ifadesi bu sinyali tek başına taşımalıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MAJOR sıçraması ile uyumsuz değişiklik girişi arasındaki fark nedir?&lt;/strong&gt;
Aynı olayı iki şekilde tanımlamalıdırlar. Sürüm numarası makine tarafından okunabilir sinyaldir
(çağıranın araçları buna tepki verebilir); changelog girişi, tam olarak neyin değiştiğinin insan
tarafından okunabilir açıklamasıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir PATCH sürümü uyumsuz olabilir mi?&lt;/strong&gt;
Tanım gereği olmamalıdır. Yine de biri yayınlandıysa, yayınlanan sürümü düzenlemeyin veya
yeniden etiketlemeyin: &lt;a href=&quot;https://semver.org/#what-do-i-do-if-i-accidentally-release-a-backward-incompatible-change-as-a-minor-version&quot;&gt;SemVer FAQ&lt;/a&gt;
uyumluluğu geri getiren yeni bir sürüm, ya da kırılma kalıyorsa yeni bir MAJOR yayınlamayı ve
kullanıcıların atlaması gerektiğini bilmesi için sorunlu sürümü belgelemeyi söyler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tamamen dahili değişikliklerin bir sürüm sıçramasına ihtiyacı var mı?&lt;/strong&gt;
Hayır. Semantic versioning herkese açık arayüzü takip eder. Çağıran için gözlemlenebilir bir
etkisi olmayan bir yeniden düzenleme, önemli bir mühendislik çalışması olsa bile ne bir sıçramaya
ne de bir changelog girişine ihtiyaç duyar.&lt;/p&gt;
</content:encoded></item><item><title>Changelog nedir? Örnek bir kayıtla açıklama</title><link>https://changeloop.dev/blog/tr/what-is-a-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/what-is-a-changelog/</guid><description>Changelog, bir üründe neyin değiştiğini tarihiyle kaydeden listedir. Örnek bir kayıt, release notes ile farkı ve changelog&apos;un nerede durması gerektiği.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Changelog, bir üründe neyin değiştiğinin tarihli kaydıdır ve değişikliği gönderen ekip için değil,
değişiklikten etkilenen kişiler için yazılır. Her giriş bir değişikliği adlandırır, ne zaman
yürürlüğe girdiğini söyler ve okuyucunun bununla ilgili ne yapması gerektiğini söyler, ki
girişlerin çoğunda bu hiçbir şeydir. Bir changelog&amp;#39;u commit log&amp;#39;undan ayıran tam olarak bu son
kısımdır: commit log, kodu yazanlar için bir kayıttır; changelog, onu kullananlar için bir
kayıttır.&lt;/p&gt;
&lt;h2&gt;Changelog tam olarak nedir?&lt;/h2&gt;
&lt;p&gt;Tarihli girişlerin bir listesi, en yeni en üstte, her biri tek bir değişikliği okuyucunun
üzerinde işlem yapabileceği terimlerle anlatır. Ekibin ne inşa ettiği değil, şimdi neyin farklı
olduğu. &amp;quot;Faturalama servisi yeniden düzenlendi&amp;quot; bir commit mesajıdır. &amp;quot;Faturalar artık vergiyi
ayrı bir satır olarak gösteriyor&amp;quot; bir changelog girişidir, çünkü okuyucuya kendi hesabında
doğrulayabileceği bir şey söyler.&lt;/p&gt;
&lt;p&gt;Format eskidir ve bilinçli olarak sadedir: her sürüm veya gün için bir başlık, altında kısa bir
liste, bazen bir kategori etiketi. &lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;, bu
biçim için en çok atıf alan spesifikasyondur ve bir spesifikasyonu atlayan çoğu projenin sonunda
onun yerine commit geçmişini döktüğü için var olur, ki bu da okuyucunun geldiği sorudan farklı bir
soruyu yanıtlar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belge&lt;/th&gt;
&lt;th&gt;Kimin için yazılır&lt;/th&gt;
&lt;th&gt;Neyi yanıtlar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Changelog&lt;/td&gt;
&lt;td&gt;Ürünü kullanan herkes&lt;/td&gt;
&lt;td&gt;Ne değişti, ve ne zaman?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commit log&lt;/td&gt;
&lt;td&gt;Kodu yazan ekip&lt;/td&gt;
&lt;td&gt;Ne yapıldı, hangi sırayla?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sürüm notları&lt;/td&gt;
&lt;td&gt;Güncelleme kararı veren kullanıcılar&lt;/td&gt;
&lt;td&gt;Artık ne yapabiliyorum?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yama notları&lt;/td&gt;
&lt;td&gt;Belirli bir düzeltmenin kullanıcıları&lt;/td&gt;
&lt;td&gt;Bu sürüm tam olarak neyi düzeltti?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yol haritası&lt;/td&gt;
&lt;td&gt;Sırada ne olduğunu merak eden herkes&lt;/td&gt;
&lt;td&gt;Ne planlanıyor, ve ne kadar ilerledi?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Bu beşi pratikte örtüşür, ama aynı belge değildir, ve fark, okunduğu anda kimin elinde
tutulduğundadır. Changelog, aranmak ve sonradan tekrar bağlantı verilmek için inşa edilmiş
olandır, bu yüzden girişleri diğerlerinden daha çok sabit tarihlere ve URL&amp;#39;lere ihtiyaç duyar.&lt;/p&gt;
&lt;h2&gt;Bir changelog girişi gerçekte neyi içerir?&lt;/h2&gt;
&lt;p&gt;Sırasıyla dört şey: neyin değiştiği, kullanıcının veya çağıran tarafın fark edeceği terimlerle
ifade edilmiş; ne zaman yürürlüğe girdiği; hangi kategoriye ait olduğu (added, fixed, changed,
removed yaygın dört kategoridir); ve önemli olduğunda, okuyucunun bununla ilgili ne yapması
gerektiği. Daha fazla ayrıntıya bir bağlantı hoş karşılanır. Bir iç gerekçe paragrafı değil, çünkü
okuyucu nedenini sormadı, neyi sordu.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 2026-09-07

### Added
- Faturalar artık müşterinin hesap para biriminde, vergiyi ayrı bir
  satır olarak gösteriyor.

### Fixed
- Bir raporu CSV olarak dışa aktarmak, rapor 10.000 satırı aştığında
  artık son satırı düşürmüyor.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bu biçim, iki satırlık bir güncellemeden bir sürümdeki yüz girişe kadar, yapıyı değiştirmeden
ölçeklenir, ve bir formatın işe yarayıp yaramadığının gerçek testi de budur: yoğun bir haftada da
sakin bir haftada da aynı şekilde okunuyor mu.&lt;/p&gt;
&lt;h2&gt;Changelog&amp;#39;u kim yazar, ve ne zaman?&lt;/h2&gt;
&lt;p&gt;Değişikliği yapan kişi, gönderildiği anda, bir hafta sonra biletlerden yeniden inşa eden teknik
bir yazar değil. Koda dokunan kişi, kullanıcı için gerçekte neyin değiştiğini bilir; sonradan
yazılan bir özet, gerçekte gönderilen şey yerine bileti anlatma eğilimindedir, ve bu genellikle
gerçek kapsamdan daha geniş ya da daha dardır. Bazı ekipler bir giriş herkese açık olmadan önce
bir inceleme adımı ekler, çoğunlukla içeri sızmış iç dil kullanımını yakalamak için, ve bu
inceleme, giriş aynı gün yayınlanacak kadar hızlı olmalıdır.&lt;/p&gt;
&lt;h2&gt;Changelog nerede durmalı?&lt;/h2&gt;
&lt;p&gt;Kendi sayfasında, sabit bir URL&amp;#39;de, feed olarak dağıtılmış. Bir ayarlar menüsüne veya bir kod
barındırıcısındaki bir release etiketine gömülmüşse, sadece nereye bakacağını zaten bilenlere
ulaşır. Herkese açık bir sayfa bir destek biletinden bağlanabilir, bir incelemede alıntılanabilir
veya abone olunabilir. Feed, sayfa kadar önemlidir: bir ürünün changelog&amp;#39;unu ayda bir kontrol
eden bir okuyucu nadirdir, ona abone olan biri değildir, ve ikinciye sadece feed hizmet eder.&lt;/p&gt;
&lt;h2&gt;Sürüm notlarından nasıl farklıdır?&lt;/h2&gt;
&lt;p&gt;İkisi sürekli karıştırılır, ve birbirine karıştırmanın hiçbir okuyucuya iyi hizmet etmeyen bir
belge ürettiği kadar da farklıdırlar. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;Changelog ve sürüm notları&lt;/a&gt;
farkı baştan sona ele alır; kısacası, changelog eksiksiz, kronolojik kayıttır, sürüm notları ise
bir güncellemenin sahip olmaya değer görünmesi için yazılmış küratörlü bir alt kümedir. Bir ürün
genelde ikisine de ihtiyaç duyar, okuyucunun gününün farklı anlarına yönelmiş olarak.&lt;/p&gt;
&lt;h2&gt;Bir changelog&amp;#39;u okunmaya değer kılan nedir?&lt;/h2&gt;
&lt;p&gt;Kendi kapsamı hakkında somutluk ve dürüstlük. &amp;quot;Çeşitli hata düzeltmeleri&amp;quot;, bir okuyucuya sayfayı
açmayı bırakmayı öğreten cümledir, çünkü doğrulayabileceği hiçbir şey vaat etmez. Küçük bir
düzeltme için bile değişen tam davranışı adlandıran bir giriş, bir aboneliği canlı tutan giriştir.
Bu disiplin ihmal edilenler için de geçerlidir: sadece kazanımları duyuran ve bozuk bir şey için
asla bir düzeltmeyi duyurmayan bir changelog, changelog kılığına girmiş pazarlama gibi okunur, ve
okuyucular bunu fark eder.&lt;/p&gt;
&lt;p&gt;Sürümleme disiplini de önemlidir. &lt;a href=&quot;https://changeloop.dev/blog/tr/semantic-versioning-changelog/&quot;&gt;Semantic versioning ve changelog&amp;#39;unuz&lt;/a&gt;,
sürüm numarasının ve girişin nasıl uyumlu olması gerektiğini gösterir, böylece sürüm geçmişini
tarayan bir okuyucu aynı sinyali iki farklı sinyal yerine iki kez alır.&lt;/p&gt;
&lt;h2&gt;Changelog&amp;#39;lar nasıl üretilir?&lt;/h2&gt;
&lt;p&gt;İki yolla, ve çoğu gerçek kurulum bir karışımdır. Otomatik üretim commit mesajlarını okur,
genelde &lt;a href=&quot;https://www.conventionalcommits.org/en/v1.0.0/&quot;&gt;Conventional Commits&lt;/a&gt; formatında, ve
kimse çıktıya dokunmadan bunları girişlere dönüştürür; &lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;conventional commits&amp;#39;ten changelog&amp;#39;a&lt;/a&gt;
bu iş hattını ele alır. Küratörlü üretim, birinin her girişi elle yazması veya düzenlemesi
demektir. Otomatik çıktı daha hızlıdır ve hiçbir zaman birleştirilmiş bir pull request&amp;#39;i
kaçırmaz, ama her belirsiz commit mesajını kelimesi kelimesine devralır, bu yüzden otomasyon
kullanan çoğu ekip, ham çıktıyı doğrudan göstermek yerine yayınlamadan önce hafif bir düzenleme
adımını yine de korur.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her ürünün bir changelog&amp;#39;a ihtiyacı var mı?&lt;/strong&gt;
Değişiklikten etkilenen kullanıcıları olan her ürünün ihtiyacı vardır, ister SaaS uygulaması,
ister dahili bir araç, ister herkese açık bir API olsun. Biçim uyum sağlar (bir API changelog&amp;#39;u
bir tüketici uygulamasınınkinden farklı okunur), ihtiyaç sağlamaz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yazılım terimleriyle changelog nedir?&lt;/strong&gt;
Yukarıdakiyle aynı tanım: yazılımda neyin değiştiğinin, onu inşa edenler için değil kullananlar
için yazılmış tarihli, kronolojik bir listesi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog commit&amp;#39;lerden otomatik olarak üretilebilir mi?&lt;/strong&gt;
Evet, ve birçok ekip tam olarak bunu yapar, genelde Conventional Commits formatındaki
mesajlardan. Ödünleşim, üretilen bir girişin geldiği commit mesajı kadar açık olmasıdır, bu yüzden
yayınlamadan önceki bir inceleme geçişi yeniden ifade edilmesi gerekenleri yakalar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changelog bir sürüm geçmişiyle aynı şey midir?&lt;/strong&gt;
Terimlerin birbirinin yerine kullanılacağı kadar yakın. Bir sürüm geçmişi bazen açıklama olmadan
sadece sürüm numaraları ve tarihlerin bir listesidir; changelog her zaman neyin değiştiğini
içerir.&lt;/p&gt;
</content:encoded></item><item><title>Webhook changelog&apos;ları: kimsenin istemediği breaking change</title><link>https://changeloop.dev/blog/tr/webhook-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/webhook-changelog/</guid><description>Bir webhook payload değişikliği sessizce bozulur, çünkü onu reddedecek bir çağıran yoktur. Neyin breaking sayıldığı ve payload&apos;ın nasıl versiyonlanacağı.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir REST API changelog&amp;#39;u var olur çünkü çağıran anlamadığı bir yanıtı reddedebilir, ya da en
azından biri fark edecek kadar gürültülü bir hata loglayabilir. Bir webhook alıcısı bunların
hiçbirini nadiren yapar. Bir POST alır, beklediği alanları okur, ve bir alan taşınmış, tipi
değişmiş veya kaybolmuşsa, endpoint ya kimsenin izlemediği bir arka plan işinde sessizce çöker ya
da, daha kötüsü, hiç doğrulamadığı yanlış bir değerle çalışmaya devam eder. &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Breaking change
nedir&lt;/a&gt; genel tanımı ele alır; bir webhook payload&amp;#39;u kendi cevabına
ihtiyaç duyar, çünkü başarısızlık modu birinin bilerek çağırdığı bir endpoint&amp;#39;ten farklıdır.&lt;/p&gt;
&lt;h2&gt;Bir webhook payload değişikliği bir API yanıt değişikliğinden neden farklı bozulur?&lt;/h2&gt;
&lt;p&gt;Çünkü isteğin yönü tersine dönmüştür. Bir REST çağıranı çağrıyı başlatır ve bir sürüm başlığı
ekleyebilir, 4xx&amp;#39;te yeniden deneyebilir veya yanıtta bir kullanımdan kaldırma bildirimi
okuyabilir. Bir webhook alıcısı bunların hiçbirini başlatmadı: sunucunuz göndermeye karar verdi,
ne zaman göndereceğine karar verdi, ve gövdenin ne şekilde olacağına karar verdi. Alıcının tek
kaldıracı entegrasyon kurulurken yazdığı doğrulamadır, ve çoğu entegrasyon bir kez kurulur,
çalışır, ve bozulana kadar kimse tekrar bakmaz. Bu asimetri, bir webhook payload değişikliğinin
bir çağıranın aktif olarak istediği bir yanıt gövdesindeki aynı değişiklikten daha fazla dikkat
hak etmesinin bütün nedenidir.&lt;/p&gt;
&lt;h2&gt;Bir webhook payload&amp;#39;unda gerçekte breaking change sayılan nedir?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Değişiklik&lt;/th&gt;
&lt;th&gt;Çoğu alıcı için breaking mi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Yeni bir alan eklemek&lt;/td&gt;
&lt;td&gt;Hayır, eğer alıcılar bilinmeyen alanları görmezden geliyorsa (bu varsayımı doğrulayın, kabul etmeyin)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir alanı kaldırmak&lt;/td&gt;
&lt;td&gt;Evet, bir şey onu okuyorsa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir alanı yeniden adlandırmak&lt;/td&gt;
&lt;td&gt;Evet, eskisini kaldırmakla işlevsel olarak aynı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir alanın tipini değiştirmek (string&amp;#39;den objeye)&lt;/td&gt;
&lt;td&gt;Evet, neredeyse her zaman&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON gövdesindeki alanları yeniden sıralamak&lt;/td&gt;
&lt;td&gt;Hayır, anahtara göre parse eden herhangi bir alıcı için, ki hepsi böyle olmalı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event adını veya tipini değiştirmek&lt;/td&gt;
&lt;td&gt;Evet, alıcılar buna göre filtreliyor veya yönlendiriyorsa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&amp;quot;Bir alan eklemek güvenlidir&amp;quot; satırı ekiplerin en çok dayandığı ve varsaymak yerine doğrulamaya
en değer olanıdır. İzin verici bir JSON parser&amp;#39;ı varsayılan olarak bilinmeyen alanları görmezden
gelir, ama katı bir şemaya deserialize eden bir alıcı, birkaç tipli dil bunu ek yapılandırma
olmadan yapar, beklenmedik bir alan belirdiği anda tüm payload&amp;#39;u reddedebilir. Bir alan eklemek
webhook&amp;#39;unuz için ancak alıcıların nasıl parse ettiğini bildiğinizde güvenlidir, JSON&amp;#39;un kendisi
izin verici olduğu için değil.&lt;/p&gt;
&lt;h2&gt;Bir webhook payload&amp;#39;u nasıl versiyonlanır?&lt;/h2&gt;
&lt;p&gt;Bir API yanıtına çok benzer, bir farkla: alıcı hiçbir zaman istek göndermez, bu yüzden bir sürüm
isteyemez, ve sürümü gönderen belirtmek zorundadır. Bu, gövdede veya teslimatın kendisindeki bir
istek başlığında olabilir; &lt;a href=&quot;https://docs.github.com/en/webhooks/webhook-events-and-payloads&quot;&gt;GitHub&amp;#39;ın teslimatları&lt;/a&gt;
&lt;code&gt;X-GitHub-Event&lt;/code&gt; ve &lt;code&gt;X-GitHub-Hook-ID&lt;/code&gt; taşır, ve
&lt;a href=&quot;https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md&quot;&gt;Standard Webhooks spesifikasyonu&lt;/a&gt;
meta verilerini &lt;code&gt;webhook-*&lt;/code&gt; başlıklarına koyar. Payload&amp;#39;da bir sürüm alanı
(&lt;code&gt;&amp;quot;payload_version&amp;quot;: 2&lt;/code&gt;) en ucuz seçenektir ve alıcılar buna göre dallanmaya istekliyse çalışır.
Versiyonlu bir event tipi (&lt;code&gt;invoice.updated&lt;/code&gt;, bir alıcının gönüllü olarak abone olduğu ayrı bir
event olarak &lt;code&gt;invoice.updated.v2&lt;/code&gt; olur) kurması daha fazla iş gerektirir ama eski şeklin hiç
migrate etmeyenlere akmaya devam etmesi anlamına gelir, ki bu bir REST endpoint&amp;#39;ine göre burada
daha önemlidir çünkü her alıcıyı arayıp güncellemesini isteyemezsiniz. Webhook endpoint&amp;#39;i
kaydedilirken seçilen abonelik başına bir ayar, kararı her teslimde dallanmak yerine önden alır, ve
zaten bir abonelik kaydınız varsa ona bağlanacak doğru seçimdir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST /alici-endpoint
{
  &amp;quot;event&amp;quot;: &amp;quot;invoice.updated&amp;quot;,
  &amp;quot;payload_version&amp;quot;: 2,
  &amp;quot;data&amp;quot;: { &amp;quot;invoice_id&amp;quot;: &amp;quot;inv_123&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;paid&amp;quot; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Kimin dinlediğini bile nasıl bilirsiniz?&lt;/h2&gt;
&lt;p&gt;Bir API changelog&amp;#39;unda bu sorunun eşdeğerinden daha kötü, çünkü bir webhook&amp;#39;un sizin tarafınızda
çağıranı adlandıran bir gelen istek günlüğü yoktur; sadece bir endpoint&amp;#39;in 200 aldığını söyleyen,
gövdeyle ne yaptığını değil, kendi giden teslim günlüğünüz vardır. En azından iki şeyi takip edin:
&lt;a href=&quot;https://changeloop.dev/blog/tr/internal-api-changelog/&quot;&gt;dahili API changelog&amp;#39;larının&lt;/a&gt; dahili tüketiciler için önerdiği
aynı disiplinle, sahibi olan her kayıtlı endpoint, ve bir payload değişikliğinden sonra endpoint
başına teslim başarısızlık oranınız. Bir değişiklikten hemen sonra bir endpoint&amp;#39;ten gelen 4xx
veya 5xx yanıtlardaki bir sıçrama, alacağınız bir stack trace&amp;#39;e en yakın şeydir, ve genellikle bir
alıcının bozulduğuna dair tek sinyaldir, çünkü onu işleten ekip bunu günlerce fark etmeyebilir.&lt;/p&gt;
&lt;h2&gt;Webhook changelog&amp;#39;u API changelog&amp;#39;undan ayrı olmalı mı?&lt;/h2&gt;
&lt;p&gt;Aynı sayfada ayrı bir bölüm, ayrı bir yayın değil. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;Bir API changelog&amp;#39;u&lt;/a&gt;
zaten kimin okuduğunu ve nasıl abone olunduğunu belirler; bir webhook payload değişikliği aynı
akışa aittir, alıcı tarafındaki bir geliştiricinin &amp;quot;bu benim entegrasyonumu etkiliyor mu&amp;quot; diye
tarayarak filtreleyebileceği kadar açık etiketlenmiş, çünkü bir webhook tüketicisinin genel bir API
changelog&amp;#39;unu kontrol etmek için genellikle başka bir nedeni yoktur ve onu ancak biri doğrudan
oraya yönlendirirse bulur.&lt;/p&gt;
&lt;h2&gt;Bir webhook payload&amp;#39;u için makul bir kullanımdan kaldırma penceresi nasıl görünmeli?&lt;/h2&gt;
&lt;p&gt;Eşdeğer REST kullanımdan kaldırmasından daha uzun, çünkü alıcı tarafındaki migrasyon genellikle
doğrudan bağlantınız olmayabilecek ikinci bir ekibin bunu fark etmesi, planlaması ve kendi
aciliyeti olmadan yayınlaması anlamına gelir. Bir ay, alıcının muhtemelen hâlâ izin verici bir
kütüphaneyle parse ettiği bir alan için makul bir alt sınırdır; katı bir şemanın tamamen
reddedeceği bir alan kaldırma için üç ay veya daha fazlası daha güvenlidir. Mümkünse pencere
boyunca eski ve yeni şekli birlikte gönderin (eski &lt;code&gt;status&lt;/code&gt; alanı ve onun sürüm 2&amp;#39;deki karşılığı
aynı payload&amp;#39;da), çünkü eski alanı okuyan bir alıcı kodunu değiştirmeden çalışmaya
devam eder, ve zaten migrate etmiş biri artık ihtiyaç duymadığı alanı sadece görmezden gelir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Webhook tüketicileri yayınlanmadan önce bir payload değişikliğini onaylamak zorunda mı?&lt;/strong&gt;
Varsayılan olarak bir onay mekanizması yoktur, ve tam da bu yüzden kullanımdan kaldırma penceresi
burada bir REST API&amp;#39;den daha önemlidir: kimse hazır olduğunu onaylamaz, bu yüzden pencere eski
şekil kaybolmadan önce çoğu alıcının kendi zamanında migrate etmesine yetecek kadar uzun olmalı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bilinmeyen alanları uyarı olmadan eklemek hiç güvenli midir?&lt;/strong&gt;
Sadece alıcılarınızın izin verici parse ettiğini varsaymak yerine doğruladıktan sonra. Bir
changelog kaydı az maliyetlidir ve tahmin unsurunu ortadan kaldırır; &amp;quot;JSON parser&amp;#39;ları extraları
görmezden gelir&amp;quot; varsayımıyla sessizce alan eklemek katı deserialize eden herhangi bir alıcıyı
bozar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir payload değişikliğinden sonra bozuk bir webhook alıcısını tespit etmenin en hızlı yolu nedir?&lt;/strong&gt;
Değişiklikten hemen sonraki saatlerde izlenen, endpoint başına teslim başarısızlık oranı. Size ne
bozulduğunu söylemez, sadece bir şeyin bozulduğunu, ama alacağınız en erken ve genellikle tek
sinyaldir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yeniden deneme mantığı alıcıların bir payload değişikliğini atlatmasına yardımcı olur mu?&lt;/strong&gt;
Hayır. Bir yeniden deneme aynı yeni payload&amp;#39;u tekrar gönderir; alıcının parse edebileceği bir
şekle dönmez. Bir payload değişikliği bir alıcıyı ilk teslimde ve sonraki her yeniden denemede
aynı şekilde bozar.&lt;/p&gt;
</content:encoded></item><item><title>API sunset header&apos;ı: ne zaman gönderilir</title><link>https://changeloop.dev/blog/tr/sunsetting-api-version/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/sunsetting-api-version/</guid><description>API sunset header&apos;ı, deprecation&apos;ın aksine, bir sürümün ne zaman yanıt vermeyi durduracağını söyler. RFC 8594 neyi kapsar, brownout ne kazandırır.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;Sunset&lt;/code&gt;, &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8594&quot;&gt;RFC 8594&lt;/a&gt;&amp;#39;te tanımlanan, bir çağırana bir
kaynağın ne zaman yanıt vermeyi durduracağını söyleyen tek bir yanıt header&amp;#39;ıdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;API
deprecation&lt;/a&gt; tam duyur-hatırlat-brownout-emekliye ayır zaman çizelgesini
ve onunla birlikte giden bildirimleri ele alır; bu yazı o zaman çizelgesindeki tek bir makine
tarafından okunabilir sinyal hakkındadır, gerçekte ne söylediği hakkındadır, ve RFC&amp;#39;nin kendisinin
onu göndermemeyi söylediği tek durum hakkındadır.&lt;/p&gt;
&lt;h2&gt;Sunset header&amp;#39;ı ne söyler, ne söylemez?&lt;/h2&gt;
&lt;p&gt;Kaynağın yanıt vermemesinin beklendiği noktayı, tek bir HTTP-date olarak taşır:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Sunset: Sat, 31 Dec 2028 23:59:59 GMT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;RFC ona bir garanti değil bir ipucu der: kaynağın tam olarak o zaman damgasına kadar çalışmaya
devam edeceğini vaat etmez, ve sonrasında başarısızlığın nasıl görüneceği hakkında hiçbir şey
söylemez. Çağıranlar bir 4xx, bir yönlendirme, veya hiç yanıt alamayabilir; header ayrım yapmaz.
Geçmişte kalan bir zaman damgası, değerdeki bir hata yerine &amp;quot;şimdi, veya herhangi bir an&amp;quot; anlamına
gelir. Bunların hiçbiri protokol tarafından zorunlu kılınmaz. Header&amp;#39;ı hiç okumayan bir client tam
olarak her zamanki gibi davranır, ve kaynağın gittiğini, zaten öğrenecek olduğu şekilde öğrenir.&lt;/p&gt;
&lt;h2&gt;Gerçekte ne zaman gönderilmeli?&lt;/h2&gt;
&lt;p&gt;Sadece kaynak gerçekten yanıt vermeyi durduracaksa, sadece artık önerilen seçim olmaktan çıktığında
değil. RFC, deprecation&amp;#39;ın iki aşamada gerçekleştiğini açıkça belirtir, ve Sunset header alanı
sadece ikincisine aittir: API, bir sürümün artık tercih edilmediğinin duyurulduğu birinci aşama
boyunca tamamen çalışır durumda kalır, ve header alanı orada geçerli değildir. Sürüm gerçekten
yanıt vermemesi planlandığında geçerli olur.&lt;/p&gt;
&lt;p&gt;Bu, deprecation zaman çizelgesine doğrudan denk gelir: &lt;code&gt;Deprecation&lt;/code&gt; header&amp;#39;ı ilk günden, duyuru
adımından itibaren gönderilir; &lt;code&gt;Sunset&lt;/code&gt;, eski davranışın gerçekten duracağı tarihi tanımlar, ki bu
&lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;dört adımlı zaman çizelgesinin&lt;/a&gt; emekliye ayırma dediği aynı tarihtir.
&lt;code&gt;Sunset&lt;/code&gt;&amp;#39;i ilk gün göndermek yanlış değildir, çünkü tarih o zamana kadar zaten sabitlenmiştir, ama
bir deprecation duyurmadan onu göndermek, veya gerçekten emekliye ayırmaya karar vermediğiniz bir
sürüm için ayarlamak, çağıranlara henüz karar vermediğiniz bir şeyi söylemektir.&lt;/p&gt;
&lt;h2&gt;Caching ile etkileşir mi?&lt;/h2&gt;
&lt;p&gt;Hayır, ve RFC bunu doğrudan söyler: &lt;code&gt;Sunset&lt;/code&gt; ve HTTP caching ilgisiz sorunları çözer ve üst üste
binen değil tamamlayıcı olarak okunmalıdır. Caching header&amp;#39;ları önbelleğe alınmış bir kopyanın ne
zaman yeniden kullanılmasının güvenli olduğunu söyler; &lt;code&gt;Sunset&lt;/code&gt; kaynağın şu anki durumu hakkında
hiçbir şey söylemez, sadece kaynağın kendisinin var olmayı bırakacağını söyler. Bir yanıt, sunset
olduğu ana kadar tamamen cache&amp;#39;lenebilir olabilir. Birini diğerinin yerine kullanmayın, ve uzun bir
&lt;code&gt;max-age&lt;/code&gt;&amp;#39;in yaklaşan bir sunset tarihini iptal ettiğini, ya da tersini, varsaymayın.&lt;/p&gt;
&lt;h2&gt;Tek bir header birden fazla endpoint&amp;#39;i sunset yapabilir mi?&lt;/h2&gt;
&lt;p&gt;Header, onu döndüren kaynağa uygulanır, ama RFC bir servisin daha geniş bir kapsamı belgelemesine
izin verir: bir API&amp;#39;nin ana kaynağındaki bir Sunset tarihi, sadece o tek URL&amp;#39;nin değil, tüm API&amp;#39;nin
gittiği anlamına gelecek şekilde tanımlanabilir. Sorun şu ki bu sadece kapsam kuralınızı zaten
bilen çağıranlar için işe yarar. Header&amp;#39;ı yüzeysel okuyan bir çağıran, istediği tek kaynakta bir
sunset görür, başka hiçbir şey görmez, bu yüzden daha geniş bir kapsam, ima edilmek yerine
çağıranın bulabileceği bir yere yazılmalıdır.&lt;/p&gt;
&lt;h2&gt;Header&amp;#39;ın yanında ne gönderilmeli?&lt;/h2&gt;
&lt;p&gt;Emekliye ayırmanın açıklandığı yere bir link. RFC 8594, tam olarak bunun için kendi &lt;code&gt;sunset&lt;/code&gt; link
ilişkisini kaydeder: header&amp;#39;ın çıplak zaman damgasından ayrı olarak, emekliye ayırma politikasını,
yaklaşan tarihi, veya nasıl göç edileceğini açıklayan bir kaynağa işaret etmek için.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Sunset: Sat, 31 Dec 2028 23:59:59 GMT
Link: &amp;lt;https://example.com/docs/sunset-policy&amp;gt;; rel=&amp;quot;sunset&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O linki kendi &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;changelog örneklerinize&lt;/a&gt; veya özel bir migrasyon sayfasına
yönlendirmek, neredeyse hiçbir client kodunun incelemediği bir header&amp;#39;ı, gerçekten bakan bir
insanın anında bulduğu bir şeye dönüştürür. Onu &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/#which-headers-should-a-deprecated-endpoint-send&quot;&gt;deprecation
header&amp;#39;larından&lt;/a&gt;
&lt;code&gt;successor-version&lt;/code&gt; ilişkisiyle birleştirin, ve bir çağıran sadece yanıttan hem nereye gideceğini
hem de bunun yerine neyin geçtiğini alır.&lt;/p&gt;
&lt;h2&gt;Bu uçtan uca nasıl görünür?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v1&lt;/code&gt;&amp;#39;in 1 Mart 2027&amp;#39;de gideceğini varsayalım. İlk gündeki deprecation duyurusu, &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;deprecation
header&amp;#39;larına&lt;/a&gt; göre her &lt;code&gt;v1&lt;/code&gt; yanıtına &lt;code&gt;Deprecation&lt;/code&gt; ve &lt;code&gt;Link: rel=&amp;quot;successor-version&amp;quot;&lt;/code&gt; ekler, ama emekliye ayırma tarihi bir yer tutucu değil gerçekten
sabitlenene kadar &lt;code&gt;Sunset&lt;/code&gt;&amp;#39;i bekletir. Sabitlendiğinde, her &lt;code&gt;v1&lt;/code&gt; yanıtı şunu taşır:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Deprecation: @1756425600
Sunset: Mon, 01 Mar 2027 00:00:00 GMT
Link: &amp;lt;https://api.example.com/v2/reports&amp;gt;; rel=&amp;quot;successor-version&amp;quot;
Link: &amp;lt;https://example.com/docs/sunset-policy&amp;gt;; rel=&amp;quot;sunset&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bir çağıranın gateway&amp;#39;i veya izlemesi her iki header üzerinde de bağımsız olarak uyarı verebilir:
&lt;code&gt;Deprecation&lt;/code&gt; daha yeni bir sürümün var olduğunu söyler, &lt;code&gt;Sunset&lt;/code&gt; bunun üzerinde bir saat olduğunu
söyler. Hiçbir header 1 Mart&amp;#39;tan önce değişmek zorunda değildir; değişen şey, o gün ve önceden
planlanmış herhangi bir brownout penceresi sırasında, yanıtın kendisidir.&lt;/p&gt;
&lt;h2&gt;Bir brownout header&amp;#39;ın söylediğini değiştirir mi?&lt;/h2&gt;
&lt;p&gt;Header değerinin kendisinin planlanmış bir brownout için değişmesine gerek yoktur: kaynak
öncesinde aralıklı olarak başarısız olsa da olmasa da sunset tarihi hâlâ sunset tarihidir. Değişen
şey header değil, yanıttır. &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;API deprecation&lt;/a&gt;&amp;#39;ın tarif ettiği gibi,
duyurulan tarihten önceki haftalarda kısa &lt;code&gt;410 Gone&lt;/code&gt; pencereleri planlamak, bir çağıranın
başarısızlıkla ilk temasını, header&amp;#39;ın tarihi geldiği gün gerçek olan yerine bir prova haline
getiren şeydir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gerçek HTTP client&amp;#39;ları veya araçları Sunset header&amp;#39;ını gerçekten okur mu?&lt;/strong&gt;
Client tarafında nadiren. Değeri çoğunlukla sizinle çağıran arasındaki altyapıyı işleten kişi
içindir: header&amp;#39;ı izlemek için yapılandırdığınız bir API gateway&amp;#39;i veya bir izleme aracı, çağıranın
kodu hiç fark etmeden çok önce kendi ekibinizi, veya bir ortağınkini, uyarabilir. Bunu, karşı
tarafın zaten sahip olduğunu varsayabileceğiniz bir şey değil, etrafında araç inşa ettiğiniz bir
sinyal olarak ele alın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Sunset&lt;/code&gt;, &lt;code&gt;Cache-Control: max-age&lt;/code&gt; ile aynı şey mi?&lt;/strong&gt;
Hayır. &lt;code&gt;max-age&lt;/code&gt;, önbelleğe alınmış bir kopyanın ne kadar süre geçerli kaldığıyla ilgilidir;
&lt;code&gt;Sunset&lt;/code&gt;, kaynağın ne zaman tamamen var olmayı bırakacağıyla ilgilidir. Bir yanıt kısa bir
&lt;code&gt;max-age&lt;/code&gt; ve yıllar sonrasına ait bir &lt;code&gt;Sunset&lt;/code&gt; tarihi taşıyabilir, ya da tersi, ve hiçbir header
diğerini kısıtlamaz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tüm endpoint için değil, giden tek bir alan için Sunset gönderebilir miyim?&lt;/strong&gt;
Hayır, header kaynağa, yani URL&amp;#39;ye kapsamlıdır, yanıt gövdesi içindeki bir alana değil. Endpoint&amp;#39;in
kendisi ayakta kalırken giden bir alan, parametre veya enum değeri için bunun yerine &lt;code&gt;Deprecation&lt;/code&gt;
header&amp;#39;ını ve bir changelog girdisini kullanın; &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;API deprecation&lt;/a&gt; tam
olarak bu tür bir değişikliği duyurmayı ele alır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sunset tarihinin değişmesi gerekirse ne olur?&lt;/strong&gt;
Header değerini güncelleyin ve bunu ilk başta duyuran changelog girdisinde belirtin; yayımlanmış
bir tarihi sessizce değiştirmek, bir çağıranın hiçbir tarihinizin gerçek olmadığına karar vermesine
yol açan şeydir. RFC değeri tam olarak tarihlerin bazen değiştiği için bir ipucu olarak çerçeveler,
ama açıklama olmadan değişen bir tarih bir sonrakine de mal olur.&lt;/p&gt;
</content:encoded></item><item><title>API changelog: neyi yayınlamalı, kim okur</title><link>https://changeloop.dev/blog/tr/api-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/api-changelog/</guid><description>Bir API changelog&apos;unu, kodunun gelecek ay hala çalışıp çalışmayacağına karar veren kişiler okur. Her kaydın onlara borcu, yeri ve abonelik yolu.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir API changelog&amp;#39;u, bir çağıranın fark edebileceği her değişikliğin tarihli kaydıdır; onu
yayınlayan ekip için değil, API&amp;#39;ye entegre olan kişiler için yazılır. Bu kitle, onu bir ürün
changelog&amp;#39;undan farklı bir belge yapar: okuyucu, kodunun gelecek ay hala çalışıp çalışmayacağına
karar veriyordur. Çoğu aynı şekilde başarısız olur, dahili bir release akışının filtrelenmiş bir
kopyası olarak; kaldırılan bir alan, bir metin düzeltmesiyle aynı ağırlıkta yan yana durur ve
ikisi de okunmaz.&lt;/p&gt;
&lt;h2&gt;API changelog nedir?&lt;/h2&gt;
&lt;p&gt;Başka insanların kod yazdığı bir arayüzdeki değişikliklerin herkese açık, tarihli günlüğüdür.
Bir şeyin oraya ait olup olmadığına dair yararlı test, değişikliğin dahili olarak ne kadar büyük
olduğuyla hiç ilgili değildir. Geçen yıl yazılmış ve o zamandan beri hiç dokunulmamış, doğru bir
çağıranın bu yüzden farklı davranıp davranmayacağını sorar. Bu test bazı çok küçük değişiklikleri
kabul eder ve bazı çok büyükleri dışlar.&lt;/p&gt;
&lt;p&gt;Aşağıdaki her şey çağıranın şirket dışında olduğunu ve bu belge dışında pratikte ulaşılamaz
olduğunu varsayar. Çağıran aynı şirketten başka bir ekip olduğunda, hesap kendi ele alışını hak
edecek kadar değişir; &lt;a href=&quot;https://changeloop.dev/blog/tr/internal-api-changelog/&quot;&gt;dahili API changelog&amp;#39;ları&lt;/a&gt; bu kitlenin
yerine neye ihtiyaç duyduğunu ele alır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Belge&lt;/th&gt;
&lt;th&gt;Kitle&lt;/th&gt;
&lt;th&gt;Yanıtladığı&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;API changelog&lt;/td&gt;
&lt;td&gt;API&amp;#39;yi çağıran geliştiriciler&lt;/td&gt;
&lt;td&gt;Entegrasyonum hala çalışıyor mu?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sürüm notları&lt;/td&gt;
&lt;td&gt;Ürünün kullanıcıları&lt;/td&gt;
&lt;td&gt;Şimdi yapamadığım neyi yapabilirim?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecation bildirimi&lt;/td&gt;
&lt;td&gt;Belirli bir şeyin çağıranları&lt;/td&gt;
&lt;td&gt;Bu ne zaman çalışmayı bırakacak?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Durum sayfası&lt;/td&gt;
&lt;td&gt;Şu an etkilenen herkes&lt;/td&gt;
&lt;td&gt;Şu anda çalışmıyor mu?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Geçiş kılavuzu&lt;/td&gt;
&lt;td&gt;Yükseltme yapan çağıranlar&lt;/td&gt;
&lt;td&gt;A&amp;#39;dan B&amp;#39;ye nasıl geçerim?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/tr/api-migration-guide/&quot;&gt;API geçiş kılavuzu nasıl yazılır&lt;/a&gt; bu son belgeyi baştan sona ele
alır; kısacası, uyumsuz değişiklik girişinin onu değiştirmeye çalışmak yerine bağlantı vermesi
gereken şey budur.&lt;/p&gt;
&lt;p&gt;Beşi ayrı ömürleri olan ayrı belgelerdir. Bir deprecation bildirimi tarihli bir sözdür ve
changelog&amp;#39;a da aittir, ama bir changelog kaydı bir kez yazılır, deprecation ise sunset&amp;#39;ine kadar
takip edilir. Bunları birleştirmek, sunset&amp;#39;lerin kaçırılmasının nedenidir.&lt;/p&gt;
&lt;h2&gt;Tek bir kayda ne girer?&lt;/h2&gt;
&lt;p&gt;Altı şey, ilk üçü genellikle eksik olanlardır. Değişikliğin kendisi, dahili bileşen yerine istek
veya yanıt cinsinden ifade edilmiş. Doğru bir çağıranı bozup bozmadığı. Çağıranın ne yapması
gerektiği, &amp;quot;hiçbir şey&amp;quot; dahil. Yürürlüğe girdiği tarih. Etkilenen sürüm veya sürümler. Varsa geçiş
kılavuzuna bir bağlantı.&lt;/p&gt;
&lt;p&gt;&amp;quot;Accounts endpoint&amp;#39;i iyileştirildi&amp;quot; diyen bir kayıt altısında da başarısız olur. &amp;quot;&lt;code&gt;accounts.type&lt;/code&gt;
alanı artık daha önce &lt;code&gt;personal&lt;/code&gt; döndürdüğü yerde &lt;code&gt;individual&lt;/code&gt; döndürüyor; 2 Eylül&amp;#39;den önce
oluşturulan hesaplar için mevcut değerler değişmedi; stringi karşılaştırmadığınız sürece işlem
gerekmiyor&amp;quot; diyen bir kayıt, altısını da tek cümlede yanıtlar.&lt;/p&gt;
&lt;p&gt;Kayıtları departmana göre değil, sonuca göre kategorize edin. Neredeyse tüm değeri üç etiket taşır:
breaking, additive ve fixed. &lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning&lt;/a&gt; ilk ikisini zaten kesin
şekilde tanımlar, ve kendi tanımlarınızı icat etmek yerine onunkileri ödünç almak, semver bilen bir
okuyucunun etiketlerinizi bilmesi anlamına gelir. &lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;
isterseniz daha uzun bir set sunar, ve merkezi kuralı burada başka her yerden daha güçlü geçerlidir:
günlük insanlar içindir, ve bir commit başlığı dökümü değildir.&lt;/p&gt;
&lt;h2&gt;Bir API changelog&amp;#39;u sürüm notlarından nasıl farklıdır?&lt;/h2&gt;
&lt;p&gt;Sürüm notları ürünün artık ne yapabildiğini anlatır. Bir API changelog&amp;#39;u sözleşmenin artık ne
olduğunu anlatır. Aynı yayınlanan iş genellikle her ikisinde de bir kayıt üretir, farklı ifade
edilmiş, çünkü kitleler farklı şeylere ihtiyaç duyar: yeni bir dışa aktarma formatı bir kullanıcı
için bir özellik, o alana göre dallanan bir çağıran için ise yeni bir enum değeridir.&lt;/p&gt;
&lt;p&gt;Pratik sonuç, ikisinin farklı stille aynı akış olamayacağıdır. Yayınladığınız her şeye abone olan
bir çağıran sonunda abonelikten çıkacak, ve sonra breaking change&amp;#39;i kaçıracaktır. Tek bir akış
yayınlıyorsanız filtreleyin; ikisini yayınlıyorsanız API olanını daraltın ve içine asla bir
pazarlama kaydı girmesine izin vermeyin. İki formu yan yana &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog vs sürüm notları&lt;/a&gt;
içinde karşılaştırıyoruz.&lt;/p&gt;
&lt;h2&gt;Bir API changelog&amp;#39;u nerede yaşamalı?&lt;/h2&gt;
&lt;p&gt;Referans dokümantasyonunun yanında, kararlı bir URL&amp;#39;de, her kayıt bir fragment veya kendi yoluyla
ayrı ayrı adreslenebilir şekilde. Çağıranlar olay incelemelerinde ve dahili biletlerde kayıtlara
bağlantı verir, ve bağlanamayan bir kayıt yerine ekran görüntüsü olarak yapıştırılır.&lt;/p&gt;
&lt;p&gt;Bir sayfa olarak da, makine tarafından okunabilir çıktı olarak da yayınlayın. Kayıtlar
yapılandırılmış veri haline geldiğinde bir &lt;a href=&quot;https://www.jsonfeed.org/version/1.1/&quot;&gt;JSON Feed spesifikasyonu&lt;/a&gt;&amp;#39;nu
izleyen bir JSON akışı ya da bir &lt;a href=&quot;https://www.rssboard.org/rss-specification&quot;&gt;RSS akışı&lt;/a&gt; hiçbir
şeye mal olmaz, ve bu, bir müşterinin değişikliklerinizi kendi release sürecine dahil etmesini
sağlayan şeydir. Bu ayrıca birinin üzerine bir şey inşa edip etmeyeceğini belirleyen kısımdır.
GitHub, &lt;a href=&quot;https://docs.github.com/en/rest/about-the-rest-api/api-versions&quot;&gt;REST API sürümlerini&lt;/a&gt;
aynı nedenle referansın hemen yanında belgeler: sürüm politikası arayüzün bir parçasıdır.&lt;/p&gt;
&lt;h2&gt;Pratikte iyi bir kayıt nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Aynı haftadan, yukarıda anlatılan şekilde üç kayıt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2026-09-02  Breaking  v2
  `POST /invoices` artık müşterinin hesap para birimiyle eşleşmeyen bir
  `currency`&amp;#39;i reddediyor, sessizce dönüştürmek yerine 422 döndürüyor.
  Dönüştürmeye güvenen çağıranlar hesap para birimini göndermeli. Sadece
  v2&amp;#39;yi etkiler; v1, 2027-01-15&amp;#39;teki sunset&amp;#39;ine kadar değişmez.

2026-09-02  Additive  v1, v2
  `Invoice`, fatura ödenene kadar null olan bir `settled_at` zaman
  damgası kazanıyor. İşlem gerekmiyor. Bilinmeyen alanları reddeden
  client&amp;#39;lar güncellenmeli.

2026-08-31  Fixed  v2
  `GET /invoices?status=`, bilinmeyen bir durum için 400 yerine boş bir
  sayfa döndürüyordu. Artık kabul edilen değerlerle 400 döndürüyor.
  Yazım hatası yapan çağıranlar daha önce sıfır sonuç görüyordu, şimdi
  bir hata görüyor.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Üçüncüsü en sık atlanan türdür, çünkü dahili olarak bir hata düzeltmesidir. O boş sayfanın etrafına
bir retry kuran bir çağıran için bu bir davranış değişikliğidir, ve kayıt destek biletini önleyen
şeydir. Etiket fixed diyor ve gövde bir çağıranın fark edebileceği şeyi söylüyor, ki bu her
düzeltmeyi bir breaking change&amp;#39;e şişirmeden günlüğü dürüst tutan ayrımdır.&lt;/p&gt;
&lt;h2&gt;Çağıranlar buna nasıl abone olur?&lt;/h2&gt;
&lt;p&gt;Onlara birden fazla kanal verin, çünkü farklı işleri var. Her şeyi isteyen geliştirici için bir
akış. Sadece breaking change isteyen kişi için e-posta. Kodun kendisi için yanıt başlıkları, hiç
kontrol etmeyi unutmayan tek abone: &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8594&quot;&gt;RFC 8594&amp;#39;te tanımlanan &lt;code&gt;Sunset&lt;/code&gt; başlığı&lt;/a&gt;,
emeklilik tarihini bir client kütüphanesinin loglayabileceği yanıta koyar.&lt;/p&gt;
&lt;p&gt;Çoğu ekibin atladığı kanal doğrudan olandır. Geçen hafta değiştirdiğiniz alanı bir çağıran
kullandıysa, kim olduğunu bilirsiniz, ve o hesaplara bir e-posta herhangi bir yayından daha
değerlidir. Bu, kimsenin talep etmediği bir değişikliğe uygulanan
&lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;müşteri geri bildirim döngüsünü kapatma&lt;/a&gt; ile aynı disiplindir:
etkilenen kişilere ayrı ayrı söylenir, geri kalan herkes akışı alır. Bir webhook,
güvenmeden önce bilinmesi gereken kendi başarısızlık moduna sahip dördüncü bir kanaldır:
&lt;a href=&quot;https://changeloop.dev/blog/tr/webhook-changelog/&quot;&gt;webhook changelog&amp;#39;ları&lt;/a&gt; orada bir payload değişikliğinin, yeni
şekli reddedecek bir çağıran olmadan neden sessizce bozulduğunu ele alır.&lt;/p&gt;
&lt;h2&gt;Bir breaking change için kayıt nasıl yazılır?&lt;/h2&gt;
&lt;p&gt;Nedenle değil, bozulmayla başlayın. On kaydı tarayan bir çağıranın, bunun ona iş çıkarıp
çıkarmayacağını ilk cümlede bilmesi gerekir. Sonra tarih, etkilenen sürümler, geçiş, ve eski
davranış değişmek yerine kayboluyorsa son tarih.&lt;/p&gt;
&lt;p&gt;Aynı içeriği deprecation bildirimine, yanıt başlığına ve doğrudan e-postaya, tutarlı ifade edilmiş
şekilde koyun, ve dördüne de aynı tarihi verin. Aralarındaki sapma, planlanmış bir değişikliği bir
olaya dönüştüren hatadır, çünkü sadece birini okuyan çağıran yanlış tarihe göre hareket eder.
&lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;Breaking change nedir&lt;/a&gt; kararın kendisini kapsar, ve
&lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;bir API nasıl deprecate edilir&lt;/a&gt; sonrasındaki takvimi kapsar.&lt;/p&gt;
&lt;p&gt;changeloop&amp;#39;ta, bir API değişikliği pull request birleştirildiğinde bir kayda dönüşür, bir kişi
taslağı düzenler ve onaylar, ve kayıt, widget geri bildirimi pull request&amp;#39;in kapattığı GitHub issue&amp;#39;suna dönüşen bir çağırana
o issue üzerinden bildirildiği anda &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;akış ve widget&lt;/a&gt;
üzerinde yayınlanır. Burada önemli olan gözden geçirme adımıdır: bir API changelog&amp;#39;u sözleşmeye
dayalı bir belgedir, ve hiçbir taslak bir kişi okumadan bir çağırana ulaşmamalıdır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her API değişikliği bir changelog kaydına ihtiyaç duyar mı?&lt;/strong&gt;
Doğru bir çağıranın fark edebileceği her değişiklik evet, dahili saydıklarınız dahil. İstek veya
yanıt üzerinde gözlemlenebilir etkisi olmayan değişiklikler hayır, ve onları eklemek okuyucuları
gözden geçirmeye alıştırır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API changelog&amp;#39;u dokümanlarda mı, pazarlama sitesinde mi yaşamalı?&lt;/strong&gt;
Dokümanlarda, referansın hemen yanında. Okuyucu genellikle zaten oradadır, ve pazarlama sitesindeki
bir changelog, onun için yazılmamış bir kitle kazanma eğilimindedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ne kadar geriye gitmeli?&lt;/strong&gt;
Süresiz. Kayıtlar yıllar sonra olay incelemelerinde alıntılanır, ve budanmış bir günlük o
bağlantıları bozar. Budamak yerine sayfalayın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Her API sürümü için ayrı bir changelog gerekir mi?&lt;/strong&gt;
Hayır, kayıt başına bir sürüm alanı olan tek bir günlük okumak ve aramak daha kolaydır. Sürüme göre
filtreleme sayfanın bir özelliğidir, belgeyi bölmek için bir sebep değil.&lt;/p&gt;
</content:encoded></item><item><title>İnsanların takip ettiği bir changelog sayfası nasıl kurulur</title><link>https://changeloop.dev/blog/tr/changelog-page/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/changelog-page/</guid><description>Bir changelog sayfası, biri ona geri döndüğünde değerlidir. Nerede yaşamalı, her kayıt neye ihtiyaç duyar, akışlar ve markup, ve widget nereye oturur.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir changelog sayfası, biri ona geri dönecekse kurmaya değer. Bu, sadece ona sahip olmaktan daha
yüksek bir çıta, ve çoğunun düştüğü çıta budur: var olan, footer&amp;#39;da bağlantısı verilen, sıçramalarla
güncellenen ve bir olay sırasında dışında kimsenin ziyaret etmediği bir sayfa. İkisini ayıran
kararlar hiçbir şey yazılmadan önce verilir, ve çoğunlukla sayfanın nerede yaşadığı ve aynı içerikten
başka ne üretildiği hakkındadır.&lt;/p&gt;
&lt;h2&gt;Changelog sayfası nedir?&lt;/h2&gt;
&lt;p&gt;Bir üründe neyin değiştiğinin, size ait bir URL&amp;#39;de herkese açık, tarihli listesidir. Aynı kayıtların
görünebileceği beş yüzeyden biridir, ve yararlı soru hangisini seçeceğiniz değil, hangisinin kanonik
olduğu ve hangilerinin ondan üretildiğidir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Yüzey&lt;/th&gt;
&lt;th&gt;En iyi olduğu&lt;/th&gt;
&lt;th&gt;Maliyet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Barındırılan sayfa&lt;/td&gt;
&lt;td&gt;Arama, bağlantı, uzun kayıt&lt;/td&gt;
&lt;td&gt;Bir URL ve bir şablon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uygulama içi widget&lt;/td&gt;
&lt;td&gt;Sayfayı hiç ziyaret etmeyen kullanıcılara ulaşmak&lt;/td&gt;
&lt;td&gt;Bir embed, ve ölçülülük&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doküman bölümü&lt;/td&gt;
&lt;td&gt;API ve geliştirici kitlesi&lt;/td&gt;
&lt;td&gt;Referansın yanında tutmak&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON akışı&lt;/td&gt;
&lt;td&gt;Değişikliklerinizin üzerine inşa eden müşteriler&lt;/td&gt;
&lt;td&gt;Zaten sahip olduğunuz yapı&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RSS akışı&lt;/td&gt;
&lt;td&gt;Bir kez abone olan geliştiriciler&lt;/td&gt;
&lt;td&gt;Neredeyse hiçbir şey&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Kanonik bir kaynak seçin, bir kez yayınlayın, ve gerisini üretin. Sayfayı ve widget&amp;#39;ı ayrı ayrı elle
sürdüren ekipler, uyuşmayan iki metinle sonuçlanır, ve uyumsuzluğu bir müşteri keşfeder.&lt;/p&gt;
&lt;h2&gt;Bir changelog sayfası nerede yaşamalı?&lt;/h2&gt;
&lt;p&gt;Kendi domaininizde, kararlı bir yolda, her kayıt bir fragment veya kendi yoluyla ayrı ayrı
adreslenebilir şekilde. Üç yaygın yerleşim bir ana site yolu, bir alt domain, ve dokümantasyonun bir
bölümüdür. Ana sitedeki bir yol, lehine değil aleyhine tartışılması gereken varsayılan seçimdir:
sitenin otoritesini devralır, ekstra sertifika veya DNS gerektirmez, ve sayfayı diğer her şeyle aynı
navigasyonda tutar.&lt;/p&gt;
&lt;p&gt;Bir alt domain, sayfa pazarlama sitesinden farklı bir sistem tarafından sunulduğunda ve aksi halde
proxy yapıyor olacağınızda doğru cevaptır. Bedeli, otoriteyi ayrı biriktirmesidir. Changelog&amp;#39;u
dokümanlara koymak, kitle geliştiricilerse doğrudur, &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&lt;/a&gt;&amp;#39;da
ele alınan nedenle: okuyucu genellikle zaten oradadır.&lt;/p&gt;
&lt;p&gt;Seçimden daha önemli olan, kayıtların ayrı ayrı bağlanabilir olmasıdır. İnsanlar olay
incelemelerinde ve dahili biletlerde kayıtlara bağlantı verir, ve sadece &amp;quot;changelog, aşağı kaydır&amp;quot;
olarak bağlanabilen bir kayıt yerine ekran görüntüsü olarak yapıştırılır.&lt;/p&gt;
&lt;h2&gt;Bir changelog sayfası neye ihtiyaç duyar?&lt;/h2&gt;
&lt;p&gt;Beş şey, ve ilk ikisinde çoğu sayfa başarısız olur. Değişiklik başına tarihli bir kayıt, en yeni
önce. İlgilenilen türü taramak için kayıt başına bir kategori veya etiket. Kayıt başına bir
permalink. Bir abonelik yolu. Elli civarı kayıttan sonra bir arama veya filtre.&lt;/p&gt;
&lt;p&gt;Gerisi opsiyoneldir. Ekran görüntüleri yardımcı olur ve bakım maliyeti çıkarır. Yazar isimleri bazı
ürünlerde güven inşa eder, bazılarında gürültü çıkarır. Sürüm numaraları bir API&amp;#39;nin çağıranları
için önemlidir, neredeyse başka hiç kimse için değil. &lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;,
kendinizinkini icat etmek için sebebiniz yoksa etiketler için makul bir varsayılan sunar, ve
merkezi kuralı, gerisini atsanız bile saklamaya değer olandır: günlük insanlar içindir.&lt;/p&gt;
&lt;p&gt;Ürününüz sürekli yayınlıyorsa sürüme göre değil tarihe göre gruplayın. &amp;quot;Bu, dokuzuncu gündeki
olayımızdan önce mi sonra mı&amp;quot; diye tarayan bir okuyucu bir tarih arar, ve sürüm numarasına göre
düzenlenmiş bir sayfa onu hesap yapmaya zorlar.&lt;/p&gt;
&lt;h2&gt;Sayfa mı, uygulama içi widget mı?&lt;/h2&gt;
&lt;p&gt;İkisi de, tek bir kaynaktan. Sayfa aramanın, bağlantıların ve uzun kaydın yaşadığı yerdir. Widget,
sayfayı hiç ziyaret etmeyecek çoğunluğa ulaşma yolunuzdur, ve çalışır çünkü zaten kullandıkları
üründe görünür.&lt;/p&gt;
&lt;p&gt;Widget&amp;#39;ın başarısızlığı kesintidir. Her kayıt için dikkat isteyen bir rozet bir hafta içinde kalıcı
olarak reddedilir, ki bu size gerçekten önemli olan kayıt için kanalı kaybettirir. Okuyucunun son
baktığından beri okunmamışları sayın, ilk ziyarette sayacı sessizce başlatın ki kimse bir yıllık
geçmişin rozetiyle karşılanmasın, ve okuyucunun onu kendisi için açmak yerine kendi açmasına izin
verin.&lt;/p&gt;
&lt;h2&gt;Bir changelog sayfası nasıl makine tarafından okunabilir hale getirilir?&lt;/h2&gt;
&lt;p&gt;Aynı kayıtları akış olarak da yayınlayın. Bir &lt;a href=&quot;https://www.jsonfeed.org/version/1.1/&quot;&gt;JSON akışı&lt;/a&gt;,
onu kodda tüketen herhangi biri için en düşük sürtünmeli seçenektir, ve bir
&lt;a href=&quot;https://www.rssboard.org/rss-specification&quot;&gt;RSS akışı&lt;/a&gt;, bir okuyucuda abone olan bir geliştiricinin
beklediği şeydir. Kayıtlar elle yazılmış HTML yerine yapılandırılmış veri olduğunda ikisi de az
maliyetlidir, ki bu kanonik kopyayı yapılandırılmış tutmanın gerçek gerekçesidir.&lt;/p&gt;
&lt;p&gt;Sayfayı işaretleyin de. Kayıtlar tarihi ve başlığı olan eserlerdir, ve &lt;a href=&quot;https://schema.org/CreativeWork&quot;&gt;schema.org&lt;/a&gt;
kelime dağarcığını sağlar. Permalink&amp;#39;lerle aynı nedenle değerlidir: sayfayı bir tarayıcı olmayan
şeyler tarafından, müşterinin kendi release süreci dahil, kullanılabilir hale getirir. Bunların
hiçbiri, altta yatan kayıtlar en başından beri hiç yapılandırılmış veri olmadıysa çalışmaz;
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-file-formats/&quot;&gt;changelog dosya formatları&lt;/a&gt;, bu akışın ve bu işaretlemenin
gerçekte üretildiği doğruluk kaynağı olarak Markdown, JSON ve YAML&amp;#39;in her birinin neye mal
olduğunu ele alır.&lt;/p&gt;
&lt;h2&gt;Bir changelog sayfası SEO&amp;#39;ya yardımcı olur mu?&lt;/h2&gt;
&lt;p&gt;Dolaylı ve yavaş şekilde. Tek tek kayıtlar nadiren sıralanır, çünkü kimsenin yazmadığı bir sorguyu
hedeflemezler. Sayfa yerini bağlantılar yoluyla kazanır: kayıtlar destek yanıtlarında, forumlarda ve
olay analizlerinde alıntılanır, ve o bağlantılar size ait bir URL&amp;#39;de birikir. İki yıl boyunca
haftalık güncellenen bir sayfa, ait olduğu ürün için de güvenilir bir tazelik sinyalidir.&lt;/p&gt;
&lt;p&gt;İşe yaramayan şey, kayıtları içerik pazarlaması gibi ele almaktır. Uzunluk için üç paragrafa
şişirilmiş bir kayıt, gerçek işinde daha kötüdür, ki bu iş bir okuyucuya kullandığı bir şeyin
değişip değişmediğini tek cümlede söylemektir. Changelog&amp;#39;un aramayı desteklemesini istiyorsanız,
çabayı permalink&amp;#39;lere, akışa ve ona giden dahili bağlantılara koyun, ve kayıtları kısa tutun. Kendi
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;changelog örnekleri&lt;/a&gt; sayfamız bu dengeyi doğru yakalayan sayfaları toplar.&lt;/p&gt;
&lt;h2&gt;İnsanlar nasıl abone olur?&lt;/h2&gt;
&lt;p&gt;Onlara zaten kullandıkları yolları verin: geliştiriciler için bir RSS veya JSON akışı, sadece
önemli olanları duymak isteyenler için e-posta, ve ikisini de asla yapmayacak herkes için uygulama
içi widget. Varsaymak yerine ne duymak istediklerini sorun, çünkü breaking change isteyen ve metin
düzeltmeleri alan bir okuyucu ikisinden de abonelikten çıkar.&lt;/p&gt;
&lt;p&gt;En son eklenecek yol döngüyü kapatan yoldur. Bir kayıt belirli bir kişinin talep ettiği şeyi
çözdüğünde, sayfayı okumasını ummak yerine bunu ona doğrudan söyleyin. changeloop&amp;#39;ta kayıt aynı anda
&lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;sayfa, akış ve widget&lt;/a&gt; üzerinde yayınlanır, ve widget geri bildirimi pull request&amp;#39;in kapattığı
GitHub issue&amp;#39;suna dönüşen kişi o issue&amp;#39;da kayda bağlantıyla bilgilendirilir ve kaydı widget&amp;#39;ta görür. Mekanik herhangi bir abonelikle aynıdır; fark, alıcının zaten sormuş olmasıdır. Bu,
&lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;geri bildirim döngüsünü changelog tarafından kapatma&lt;/a&gt;&amp;#39;da
detaylandırılan argümandır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Changelog sayfası bir alt domainde mi, bir yolda mı olmalı?&lt;/strong&gt;
Varsayılan olarak ana sitedeki bir yol, çünkü sitenin otoritesini devralır ve ekstra altyapı
gerektirmez. Farklı bir sistem sayfayı sunduğunda bir alt domain haklı çıkar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sayfa aynı anda kaç kayıt göstermeli?&lt;/strong&gt;
Bir ekranı doldurmaya yeter kadar ve daha fazlası değil, ardından sayfalama. Bir belgeye iki yıllık
geçmiş yüklemek yavaştır ve en yeni kaydı bulmayı zorlaştırır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eski kayıtlar hiç silinmeli mi?&lt;/strong&gt;
Hayır. Sitenizin dışından alıntılanırlar ve bağlantılar bozulur. Bir kaydı yerinde bir notla
düzeltin, ve URL&amp;#39;yi canlı tutun.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sayfada her değişiklik görünmeli mi?&lt;/strong&gt;
Sadece bir kullanıcının fark edebileceği olanlar. Dahili refactor&amp;#39;ları kaydeden bir sayfa
okuyucuları gözden geçirmeye alıştırır, ve gözden geçirilen bir sayfa acil bir şey taşıdığı gün
başarısız olur.&lt;/p&gt;
</content:encoded></item><item><title>Okunan ürün güncellemesi e-posta şablonu</title><link>https://changeloop.dev/blog/tr/product-update-email/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/product-update-email/</guid><description>Okunan ürün güncellemesi e-postası, onu talep eden birine gitti. Bir şablon, dört e-posta türü, işe yarayan konu satırları, segmentasyon ve onay.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Okunan ürün güncellemesi e-postası, tam olarak duyurduğu şeyi talep eden birine gönderilmiş olandır.
Gerisi, gelen kutusunun kalanıyla ilginçlik açısından rekabet eder, çoğu hafta bir release
duyurusunun kaybettiği bir rekabet. Bu tek gerçek, herhangi bir ifadeden önce e-postanın şeklini
belirlemelidir: onu kim alıyor, ve o kişi listeye girmek için ne yaptı.&lt;/p&gt;
&lt;h2&gt;Ürün güncellemesi e-postası nedir?&lt;/h2&gt;
&lt;p&gt;Mevcut kullanıcılara zaten kullandıkları bir üründe neyin değiştiğini söyleyen bir mesajdır. Dört
ayrı türü vardır, ve onları tek bir liste olarak ele almak, açılma oranlarının düşmesinin nedenidir.
Her birinin farklı bir tetikleyicisi, farklı bir kitlesi ve farklı bir kabul edilebilir sıklığı
vardır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tür&lt;/th&gt;
&lt;th&gt;Tetikleyici&lt;/th&gt;
&lt;th&gt;Kitle&lt;/th&gt;
&lt;th&gt;Sıklık&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Hedeflenmiş bildirim&lt;/td&gt;
&lt;td&gt;Birinin belirli talebi yayınlandı&lt;/td&gt;
&lt;td&gt;Bir kişi&lt;/td&gt;
&lt;td&gt;Her olduğunda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breaking change bildirimi&lt;/td&gt;
&lt;td&gt;Okuyucuya iş çıkaran bir değişiklik&lt;/td&gt;
&lt;td&gt;Sadece etkilenen hesaplar&lt;/td&gt;
&lt;td&gt;Her olduğunda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Özet&lt;/td&gt;
&lt;td&gt;Zamanın geçmesi&lt;/td&gt;
&lt;td&gt;Opt-in kullanıcılar&lt;/td&gt;
&lt;td&gt;En fazla aylık&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lansman duyurusu&lt;/td&gt;
&lt;td&gt;Kesintiye değer bir lansman&lt;/td&gt;
&lt;td&gt;Segment veya herkes&lt;/td&gt;
&lt;td&gt;Nadir, ve nadir hissettirmeli&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Çoğu ekip sadece üçüncüsünü kurar, herkese gönderir, ve ürün güncellemesi e-postalarının işe
yaramadığı sonucuna varır. İlk ikisi neredeyse tüm değeri taşır, çünkü okuyucunun önceden bir
ilgilenme nedeni vardır, ve mesaj o neden canlıyken gelir.&lt;/p&gt;
&lt;p&gt;Buradaki dört satırın hepsi müşteriler için yazılmıştır. Satış, destek ve customer success de
neyin gönderildiğini bilmeli, genelde bu dördünden farklı bir biçimde;
&lt;a href=&quot;https://changeloop.dev/blog/tr/internal-release-notes/&quot;&gt;dahili release notları&lt;/a&gt; bu belgenin ne söylemesi gerektiğini
ve müşteriye yönelik notdan önce neden çıkması gerektiğini ele alır.&lt;/p&gt;
&lt;p&gt;E-posta, bir lansman duyurusunun kullanabileceği birkaç kanaldan yalnızca biridir. &lt;a href=&quot;https://changeloop.dev/blog/tr/new-feature-announcement/&quot;&gt;Yeni bir özellik nasıl duyurulur&lt;/a&gt; diğerlerini ve özelliğin gerçek büyüklüğüne göre aralarında nasıl seçim yapılacağını ele alır.&lt;/p&gt;
&lt;h2&gt;Şablona ne girer?&lt;/h2&gt;
&lt;p&gt;Bu sırayla altı blok. İlki genellikle eksik olan ve işi yapan bloktur.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Konu:  &amp;lt;ne değişti, okuyucunun kelimeleriyle&amp;gt;

1. Bunu neden alıyorsunuz
   &amp;quot;Mart&amp;#39;ta CSV dışa aktarma istediniz.&amp;quot; veya
   &amp;quot;Entegrasyonunuz 15 Ocak&amp;#39;ta değişecek olan /v1/invoices&amp;#39;ı çağırıyor.&amp;quot;

2. Ne değişti
   Bir cümle. Artık ne mümkün, veya artık ne bozuluyor.

3. Ne yapmanız gerekiyor
   Genellikle &amp;quot;hiçbir şey&amp;quot;. Bunu üstü kapalı bırakmak yerine açıkça
   söyleyin.

4. Nerede görülür
   Ana sayfaya değil, changelog kaydına bir bağlantı.

5. Ne zaman
   Yayınlandığı tarih, veya ne zamandan beri geçerli olduğu.

6. Nasıl abonelikten çıkılır
   Bir tık, ve hemen saygı gösterilen.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Blok 1, bir mesaj ile genel bir yayın arasındaki farktır. İlk satırda, bunun kişisel olarak talep
ettiği bir şeyin çözümü olduğu söylenen bir okuyucu gerisini okur. Onsuz, 2&amp;#39;den 5&amp;#39;e kadar olan
bloklar ne kadar iyi yazılmış olursa olsun bir bültendir.&lt;/p&gt;
&lt;p&gt;Bütünü yaklaşık 150 kelimenin altında tutun. E-posta, changelog kaydına bir işaretçidir, ve detayın
ait olduğu yer kayıttır. Kaydın tamamını yeniden üreten bir e-posta, okuyucuya tıklamak için bir
sebep vermez, size de kimseyi ilgilendirip ilgilendirmediğine dair bir sinyal vermez.&lt;/p&gt;
&lt;h2&gt;Hangi konu satırları işe yarar?&lt;/h2&gt;
&lt;p&gt;Değişikliği isimlendirin, release&amp;#39;i değil. &amp;quot;CSV dışa aktarma yayında&amp;quot; &amp;quot;Eylül güncellemesi&amp;quot;ni yener,
çünkü ilki okuyucunun değerlendirebileceği bir gerçek, ikincisi ise bir kapsayıcıdır. Konu
satırındaki sürüm numaraları bir API&amp;#39;nin çağıranları için yararlıdır ve herkes için gürültüdür, bu
da kitleleri ayırmak için başka bir sebeptir.&lt;/p&gt;
&lt;p&gt;Okuyucunun onay vermediği bir fayda iddia etmekten kaçının. &amp;quot;Raporlarınız artık daha hızlı&amp;quot; onun
deneyimi hakkında bir şey iddia eder; &amp;quot;10.000 satırın üzerindeki raporlar artık bir saniyeden az
sürede yükleniyor&amp;quot; bir değişikliği bildirir ve önemli olup olmadığına karar vermesini ona bırakır.&lt;/p&gt;
&lt;h2&gt;Ne zaman ve kime gönderilmeli?&lt;/h2&gt;
&lt;p&gt;Hedeflenmiş bir bildirimi şey yayınlandığı anda, isteyen kişilere, ayrı ayrı gönderin. Bir breaking
change bildirimini tarih kesinleşir kesinleşmez ve ona yakın bir kez daha, tüm listeye değil
gerçekten etkilenen hesaplara gönderin. Bir özeti sadece bir okuyucunun aksi halde bir şeyi
kaçıracağı kadar değişikliğiniz varsa gönderin, ve insanların ayrı ayrı kaydolmasına izin verin.&lt;/p&gt;
&lt;p&gt;Neredeyse hiç kullanmamanız gereken liste &amp;quot;tüm kullanıcılar&amp;quot;dır. Belirli bir mesajı genel bir mesaja
dönüştürür, ve abonelikten çıkmayı öğretir. Zaten depoladığınız davranışa göre segmentleyin: kim
istedi, kim bu endpoint&amp;#39;i kullanıyor, kim bu planda.&lt;/p&gt;
&lt;h2&gt;Göndermek için onay gerekli mi?&lt;/h2&gt;
&lt;p&gt;Mevcut müşteriler için, kullandıkları bir hizmetle ilgili bir güncelleme genellikle bir potansiyel
müşteriye pazarlamadan farklı bir hukuki sorudur, ve cevap nerede olduklarına ve kayıt olurken
onlara ne söylediğinize bağlıdır. AB&amp;#39;de ilgili soru &lt;a href=&quot;https://gdpr-info.eu/art-6-gdpr/&quot;&gt;GDPR&amp;#39;nin 6. maddesi&lt;/a&gt;
kapsamında hangi yasal dayanağın geçerli olduğudur, ve ABD&amp;#39;de ticari mesajlar
&lt;a href=&quot;https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business&quot;&gt;FTC&amp;#39;nin CAN-SPAM uyum kılavuzunda&lt;/a&gt;
belirtilen özel gereksinimler taşır. İkisi de pratikte aynı şeyi ister: kim olduğunuzu söyleyin,
amacı netleştirin, ve insanların durdurabilmesine izin verin.&lt;/p&gt;
&lt;p&gt;Dayanak ne olursa olsun, işlemsel ve pazarlama akışlarını gönderim düzeyinde ayrı tutun. Bir
müşterinin promosyonel bir özetle aynı listeyi paylaştığı için abonelikten çıktığı bir breaking
change bildirimi, tarihini bekleyen bir destek olayıdır.&lt;/p&gt;
&lt;h2&gt;Doldurulmuş nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Hedeflenmiş bildirim, en değerli ürün güncellemesi e-postası ve çoğu ekibin hiç kurmadığı:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Konu: CSV dışa aktarma yayında

Merhaba Dana,

Mart&amp;#39;ta CSV dışa aktarma istemiştin.

Bu sabah yayına girdi. Raporların artık mevcut görünümün CSV&amp;#39;sini
üreten bir Dışa Aktar düğmesi var, filtreler dahil.

Senin tarafında yapman gereken bir şey yok. Hesabında zaten açık.

  Detaylar: example.com/changelog#csv-export
  Yayınlandı: 2 Eylül 2026

Bunu talep ettiğin için alıyorsun. Talep güncellemelerinden çık:
&amp;lt;bağlantı&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Doksan kelime, ve okuyucu ilk satırda bunun neden geldiğini biliyor. Bunu, dokuz maddeden biri
olarak göründüğü ve Dana&amp;#39;nın kendi talebinin gittiğini fark etmesi için hiçbir sebebi olmadığı
aylık bir özetteki aynı değişiklikle karşılaştırın.&lt;/p&gt;
&lt;h2&gt;Ne ölçülmeli?&lt;/h2&gt;
&lt;p&gt;Sadece açılma oranı değil. Hedeflenmiş bir bildirim için soru, talep eden kişinin geri gelip şeyi
kullanıp kullanmadığıdır, dolayısıyla izlenmesi gereken sayı, kayda tıklama ve o hesabın özelliği
bir hafta içinde kullanıp kullanmadığıdır. Bir breaking change bildirimi için bu kapsamdır:
etkilenen hesapların yüzde kaçı tarihten önce açtı, ve kiminle bireysel takip yaptınız.&lt;/p&gt;
&lt;p&gt;Bir özet, dördü arasında açılma oranının bir şey ifade ettiği tek türdür, ve orada bile bir sektör
kıyaslamasına karşı olmaktan çok kendi geçmişine karşı bir eğilim olarak daha kullanışlıdır. Farklı
ürün güncellemesi e-postası türlerinin farklı işleri vardır, dolayısıyla hepsi üzerinden ortalanmış
bir rakam, üzerinde hareket edilebilecek hiçbir şeyi tanımlamaz.&lt;/p&gt;
&lt;h2&gt;Sürüm notlarından nasıl farklı?&lt;/h2&gt;
&lt;p&gt;Sürüm notları erişilebilir kalan bir belgedir. E-posta bir kez gerçekleşen bir teslimat
mekanizmasıdır. Aynı değişiklik ikisini de üretir, ve e-posta işaret ettiği kayıttan daha kısa
olmalıdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/release-notes-best-practices/&quot;&gt;Sürüm notları en iyi uygulamalar&lt;/a&gt; belgeyi
kapsar, ve &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog vs sürüm notları&lt;/a&gt; hangisini yazdığınızı
kapsar.&lt;/p&gt;
&lt;p&gt;Doğru kurulması gereken ilişki şu: changelog kaydı kanonik metindir ve e-posta onu alıntılar. Bu
ikisi ayrıştığında, tıklayan okuyucu değişikliğin farklı bir tanımını bulur ve ikisine de güvenmeyi
bırakır. Önce kaydı yayınlamak ve e-postayı ondan üretmek sapmayı yapı gereği ortadan kaldırır. changeloop
da kendi tarafında aynı şekilde çalışır: bir kayıt bir kez gözden geçirilir ve &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;sayfa, akış ve widget&lt;/a&gt;
üzerinde yayınlanır, ve onu widget aracılığıyla isteyen kişi, geri bildiriminin dönüştüğü GitHub
issue&amp;#39;sunda ve widget&amp;#39;ın kendisinde bilgilendirilir. changeloop e-postayı göndermez; e-posta
aracınız yayınlanan kaydı alıntılar.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir ürün güncellemesi e-postası ne sıklıkla çıkmalı?&lt;/strong&gt;
Alıcının bilmek istediği belirli bir şey olduğu kadar sık, ki bu hedeflenmiş bir bildirim için
talebi yayınlandığında her seferinde, bir özet için en fazla aylık demektir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E-posta changelog kaydının tamamını içermeli mi?&lt;/strong&gt;
Hayır. Bir cümle ve bir bağlantı. Kayıt kanonik versiyondur, ve e-postadaki tam bir kopya,
uyumlu tutulması gereken iki metin anlamına gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ne açılma oranı beklemeliyim?&lt;/strong&gt;
Her türü bir kıyaslamaya karşı değil kendisine karşı karşılaştırın. Hedeflenmiş bir bildirim ve
aylık bir özet farklı ürünlerdir, ve onları ortalamak üzerinde hareket edilmeye değer tek rakamı
gizler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking change&amp;#39;ler için ayrı bir liste gerekli mi?&lt;/strong&gt;
Evet, ve insanların sonucunu anlamadan gelişigüzel abonelikten çıkamayacağı liste bu olmalı, çünkü
onlara bir kesintiye mal olan liste budur.&lt;/p&gt;
</content:encoded></item><item><title>Geliştiricileri kaybetmeden bir API nasıl deprecate edilir</title><link>https://changeloop.dev/blog/tr/api-deprecation/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/api-deprecation/</guid><description>Deprecation, üzerinde tarih olan bir sözdür. Zaman çizelgesi, bildirim şablonu, yanıt başlıkları, ve bir sunset&apos;in olaya dönüşmesini durduran adım.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir API&amp;#39;yi deprecate etmek, bir şeyin bugün hâlâ çalıştığını ve belirtilen bir tarihte çalışmayı
durduracağını duyurmak, sonra o sözün her iki yarısını da tutmaktır. Çoğu deprecation ikinci
yarıda başarısız olur: tarih sessizce kayar, veya gelir ve bildirimi hiç görmemiş çağıranlar bunu
bir hatadan öğrenir. Bir deprecation, etkilenen her çağıran ya göç ettiğinde ya da bireysel olarak
göç etmediği söylendiğinde tamamlanmıştır.&lt;/p&gt;
&lt;h2&gt;API deprecation nedir?&lt;/h2&gt;
&lt;p&gt;Deprecation, bir endpoint&amp;#39;in, alanın veya versiyonun gitmekte olduğunu duyurmakla onu gerçekten
kaldırmak arasındaki dönemdir. Bu dönem boyunca eski davranış çalışmaya devam eder, dokümantasyon
gittiğini söyler, ve her yanıt makine tarafından okunabilir bir uyarı taşır. Kaldırma, genellikle
sunset olarak adlandırılan ayrı, daha sonraki olaydır. İkisi karıştırılır, ve bu karışıklık
hasarın gerçekleştiği yerdir: &amp;quot;deprecated&amp;quot; &amp;quot;belki zaten gitmiştir&amp;quot; anlamına gelmeye başlar, ve
çağıranlar her iki kelimeye de güvenmeyi bırakır.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Terim&lt;/th&gt;
&lt;th&gt;Anlam&lt;/th&gt;
&lt;th&gt;Çağıranların güvenebileceği şey&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Deprecated&lt;/td&gt;
&lt;td&gt;Gitmek üzere olarak duyuruldu, hâlâ çalışıyor&lt;/td&gt;
&lt;td&gt;Sunset tarihine kadar tam davranış&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sunset&lt;/td&gt;
&lt;td&gt;Çalışmayı durdurduğu tarih&lt;/td&gt;
&lt;td&gt;Bu tarihten sonra hiçbir şey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retired / kaldırıldı&lt;/td&gt;
&lt;td&gt;Gitti; istekler başarısız olur&lt;/td&gt;
&lt;td&gt;İdeal olarak yerine geçeni adlandıran bir hata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legacy&lt;/td&gt;
&lt;td&gt;Tanımsız. Kelimeden kaçının&lt;/td&gt;
&lt;td&gt;Hiçbir şey, ki bu sorundur&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Bir deprecation dönemi ne kadar sürmeli?&lt;/h2&gt;
&lt;p&gt;Bir çağıranın öğrenip işi yapmasına yetecek kadar uzun, bunu yazdığınız andan değil bildirimin ona
ulaştığı andan itibaren ölçülerek. Doksan gün, genel bir web API&amp;#39;si için yaygın taban çizgisidir.
On iki ay, son kullanıcıların yüklediği yazılıma gömülü herhangi bir şey için normaldir, çünkü
düzeltme onların sürüm sürecinden de geçmelidir. Google&amp;#39;ın versiyonlama
kılavuzu &lt;a href=&quot;https://google.aip.dev/185&quot;&gt;AIP-185&lt;/a&gt;, makul bir geçiş süresi ister ve beta işlevselliğini
kaldırmadan önce bile 180 gün önerir, ve Kubernetes &lt;a href=&quot;https://kubernetes.io/docs/reference/using-api/deprecation-policy/&quot;&gt;deprecation politikasını&lt;/a&gt;
aylar yerine sürüm sayısı olarak belgeler, ki bu çağıranlarınız sürüme göre güncellediğinde doğru
birimdir.&lt;/p&gt;
&lt;p&gt;Bir dönem seçin, onu politika olarak yazın, ve değişiklik başına karar vermeyi bırakın. Yayımlanmış
bir politika, her deprecation&amp;#39;ı bir müzakereden bir kuralın uygulanmasına dönüştürür.&lt;/p&gt;
&lt;p&gt;Deprecation politikasını yazmak pencerenin başını kapsar; &lt;a href=&quot;https://changeloop.dev/blog/tr/sunsetting-api-version/&quot;&gt;bir API sürümünü kapatmak&lt;/a&gt;
dönem gerçekten bittiğinde ve sürüm çalışmayı bıraktığında sonunda gereken ayrı bildirimi kapsar.&lt;/p&gt;
&lt;h2&gt;Deprecation zaman çizelgesi&lt;/h2&gt;
&lt;p&gt;Birinci günde birlikte duyurulan dört tarih. Her biri geldiğinde ayrı bir changelog girdisidir, bu
yüzden hikaye sadece changelog&amp;#39;u okuyanlara dört kez anlatılır.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Duyurun.&lt;/strong&gt; Girdi neyin deprecate edildiğini, nedenini, neyin yerine geçtiğini, ve sunset
tarihini söyler. Eski şeyin dokümantasyonu göçe bağlanan bir banner kazanır. Yanıtlar aşağıda
açıklanan başlıkları kazanır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hatırlatın, yarı yolda.&lt;/strong&gt; İkinci bir girdi, ve eski davranışı hâlâ kullanan her çağırana
doğrudan bir mesaj. Bu, kullanım verisine ihtiyaç duyan adımdır: deprecate edilmiş endpoint&amp;#39;i
hâlâ kimin çağırdığını listeleyemiyorsanız, bunu yapamazsınız, ve bir sonraki deprecation&amp;#39;dan
önce düzeltmeye değer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tarihten kısa süre önce brownout yapın.&lt;/strong&gt; Eski davranış için kısa bir pencere boyunca, bir
saat veya bir gün, hatalar döndürün, sonra geri yükleyin. Her bildirimi kaçıran çağıranlar hâlâ
zaman varken şimdi öğrenir. GitHub, &lt;a href=&quot;https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations/&quot;&gt;API için şifre kimlik doğrulamasını emekliye ayırmadan&lt;/a&gt;
önce planlanmış brownout&amp;#39;lar kullandı, ve bu listede en etkili tek adımdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sunset.&lt;/strong&gt; Kaldırın. Yerine geçen hata, yerine geçeni adlandırır ve göç kılavuzuna bağlanır.
Hatayı uzun süre yerinde tutun; bir 404 bir çağırana hiçbir şey söylemez.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Bir deprecation bildirimi ne söylemeli?&lt;/h2&gt;
&lt;p&gt;Bir deprecation bildirimi, neyin gittiğini, ne zaman durduğunu, yerine ne kullanılacağını, ve
kimin etkilendiğini söyler. İşte şekli, doldurulmuş:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;GET /v1/reports/daily&lt;/code&gt; deprecate edildi ve 1 Mart 2027&amp;#39;de çalışmayı durduracak.&lt;/strong&gt;
Aynı verileri stabil bir şema ve sayfalama ile döndüren &lt;code&gt;GET /v2/reports?granularity=day&lt;/code&gt; ile
değiştiriliyor. Son 30 günde v1 endpoint&amp;#39;ini çağıran 214 entegrasyonu etkiler; sizinki de
bunlardan biriyse, bu bildirimi e-posta ile de alacaksınız. Göç kılavuzu: [link]. 1 Mart 2027&amp;#39;ye
kadar hiçbir şey değişmiyor. O tarihten itibaren v1 endpoint&amp;#39;i bu girdiye bir bağlantı ile
&lt;code&gt;410 Gone&lt;/code&gt; döndürüyor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Her cümle okuyucunun ihtiyaç duyduğu bir şey taşır. Etkilenen entegrasyonların sayısı her okuyucuya
okumaya devam edip etmeyeceğini söyler. &amp;quot;Kadar hiçbir şey değişmiyor&amp;quot; etkilenmeyenlerin sekmeyi
kapatmasına izin veren cümledir. &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;Changelog örnekleri&lt;/a&gt; sayfası bu şekli
tutarlı bir şekilde yazan ekiplerin girdilerini toplar, ve ilk kendinizinkini yazmadan önce üçünü
okumaya değer.&lt;/p&gt;
&lt;h2&gt;Deprecate edilmiş bir endpoint hangi başlıkları göndermeli?&lt;/h2&gt;
&lt;p&gt;Duyuru gününden itibaren deprecate edilmiş endpoint&amp;#39;ten gelen her yanıtta halefe &lt;code&gt;Deprecation&lt;/code&gt;,
&lt;code&gt;Sunset&lt;/code&gt; ve bir &lt;code&gt;Link&lt;/code&gt; gönderin. &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc9745&quot;&gt;&lt;code&gt;Deprecation&lt;/code&gt; başlığı&lt;/a&gt;
deprecation&amp;#39;ın yürürlüğe girdiği tarihi taşır; &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8594&quot;&gt;&lt;code&gt;Sunset&lt;/code&gt; başlığı&lt;/a&gt;
endpoint&amp;#39;in yanıt vermeyi durduğu tarihi taşır; &lt;code&gt;Link: &amp;lt;url&amp;gt;; rel=&amp;quot;successor-version&amp;quot;&lt;/code&gt; yerine ne
kullanılacağını gösterir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Deprecation: @1756425600
Sunset: Mon, 01 Mar 2027 00:00:00 GMT
Link: &amp;lt;https://api.example.com/v2/reports&amp;gt;; rel=&amp;quot;successor-version&amp;quot;
Link: &amp;lt;https://example.com/changelog/daily-reports&amp;gt;; rel=&amp;quot;deprecation&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Çoğu çağıran başlıkları asla kendisi okumayacaktır. Değerleri, bir
çağıranın HTTP istemcisinin, gateway&amp;#39;inin veya izlemesinin okuyabilmesidir, ki bu deprecation&amp;#39;ınızı
sizin tarafınızda bir sayfa yerine onların tarafında bir uyarıya dönüştürür. Gönderdiğiniz SDK&amp;#39;lar
birini gördüğünde bir uyarı kaydetmelidir.&lt;/p&gt;
&lt;h2&gt;Kime bildirildi, ve bunu nasıl biliyorsunuz?&lt;/h2&gt;
&lt;p&gt;Bu, sunset&amp;#39;in sakin mi yoksa bir destek olayı mı olacağına karar veren adımdır, ve sadece bir
changelog ile yapılması en zor olanıdır. Bir changelog girdisi, changelog&amp;#39;u okuyan herkesi
bilgilendirir. Bir deprecation, kodu başarısız olacak belirli insanlara ulaşmalıdır, ve onları
bulmanın olağan yolu yarı yolda hatırlatmanın ihtiyaç duyduğu aynı kullanım verisidir: deprecate
edilmiş davranışı yakın zamanda çağıran API anahtarları, uygulamalar veya hesaplar.&lt;/p&gt;
&lt;p&gt;Çalıştırdığımız döngü: girdi, deprecation&amp;#39;ı ekleyen pull request&amp;#39;ten hazırlanır, bir insan
ifadeyi ve tarihi gözden geçirir, ve yayımlandığında girdinin kendisi bildirimdir. Sorunla ilgili widget
geri bildirimi veya yerine geçen için talebi, pull request&amp;#39;in kapattığı bir GitHub issue&amp;#39;suna dönüşen
herkes, o issue&amp;#39;da gönderildiğini söyleyen ve girdiye bağlantı veren bir yorum alır. &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Feed ve widget&lt;/a&gt; aynı girdiyi diğer herkese sunar, &lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&lt;/a&gt;&amp;#39;daki
her diğer girdiyle birlikte.
Yapmadığımız şey, bir insan onu yayımlamadan önce deprecation&amp;#39;ın &amp;quot;gönderildi&amp;quot; olmasına izin
vermektir; yanlış tarihli bir bildirim, bildirim olmamasından daha kötüdür.&lt;/p&gt;
&lt;p&gt;Aracınız ne olursa olsun, sunset gününde cevaplayabilmeniz gereken soru şudur: geçen hafta bunu
hâlâ hangi çağıranlar kullanıyordu, ve hangilerine doğrudan söyledik? Cevap &amp;quot;bunun hakkında
paylaşım yaptık&amp;quot; ise, sunset hazır değildir.&lt;/p&gt;
&lt;h2&gt;Deprecate etmek ile versiyonlamak arasındaki fark nedir?&lt;/h2&gt;
&lt;p&gt;Versiyonlamak, yeni olan varken eski davranışı nasıl kullanılabilir tuttuğunuzdur; deprecation,
eskiyi nasıl emekliye ayırdığınızdır. Öncekinin deprecation politikası olmadan yeni bir API
versiyonu, ikisini de sonsuza kadar çalıştırmaya bir taahhüttür. Versiyonlama olmadan bir
deprecation, gecikmeli bir &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking change&lt;/a&gt;&amp;#39;dir. İkisine de ihtiyacınız
var, ve versiyon daha kolay olan yarıdır. GraphQL,
adlandırmaya değer istisnadır: genellikle artırılacak hiçbir versiyon numarası yoktur, ve &lt;a href=&quot;https://changeloop.dev/blog/tr/graphql-schema-deprecation/&quot;&gt;GraphQL
şema deprecation&amp;#39;ı&lt;/a&gt;, paylaşılan tek bir şemanın bunun
yerine bir direktifle bir alanı nasıl emekliye ayırdığını ele alır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Deprecate edilmiş bir endpoint tam olarak öncekiyle aynı şekilde çalışmaya devam etmeli mi?&lt;/strong&gt;
Evet, sunset tarihine kadar. İzin verilen tek değişiklikler eklenen başlıklardır ve sona doğru,
önceden duyurduğunuz planlı bir brownout&amp;#39;tur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Emekliye ayrılmış bir endpoint hangi durum kodunu döndürmeli?&lt;/strong&gt;
&lt;code&gt;410 Gone&lt;/code&gt;, yerine geçen ve changelog girdisine işaret eden bir &lt;code&gt;Link&lt;/code&gt; başlığı ve bir gövde ile.
&lt;code&gt;404&lt;/code&gt;, URL&amp;#39;nin hiç var olmadığını söyler, ki bu yanlış ve yardımcı olmayan bir şeydir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir deprecation dönemi kısaltılabilir mi?&lt;/strong&gt;
Sadece güvenlik için. Eski davranış istismar edilebilirse, bunu söyleyin, dönemi kısaltın, ve
changelog&amp;#39;a güvenmek yerine etkilenen her çağırana doğrudan söyleyin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir alanı mı yoksa sadece tüm endpoint&amp;#39;leri mi deprecate etmem gerekiyor?&lt;/strong&gt;
Alanlar, parametreler, enum değerleri, varsayılanlar ve başlıkların hepsi aynı muameleye ihtiyaç
duyar, çünkü her biri doğru bir çağıranı bozabilir. Kaldırılmış bir alan en yaygın deprecation
türüdür ve en sık atlanan olanıdır.&lt;/p&gt;
</content:encoded></item><item><title>Çağıranlar için API versiyonlama en iyi uygulamaları</title><link>https://changeloop.dev/blog/tr/api-versioning-best-practices/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/api-versioning-best-practices/</guid><description>Sadece bozan şeyi versiyonlayın, versiyonu çağıranların görebileceği yere koyun, ve eskisini bir tarihe kadar çalışır tutun. Dört şema karşılaştırıldı.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;API versiyonlama, onu değiştirdikten sonra eski bir sözleşmeyi çalışır tutma pratiğidir, böylece
çağıranlar sizin değil kendi programlarına göre ilerleyebilir. O cümle önemli olan iki kararı
içerir: sözleşmeyi değiştirmenin ne sayıldığı, ve eskisinin ne kadar süre çalışmaya devam ettiği.
Versiyon numarasının nerede yaşadığı, ki çoğu versiyonlama tartışması bununla ilgilidir, üçünün en
az önemlisidir ve doğru yapılması en kolay olanıdır.&lt;/p&gt;
&lt;h2&gt;Bir API ne zaman versiyonlanmalı?&lt;/h2&gt;
&lt;p&gt;Bir API&amp;#39;yi sadece bir değişiklik doğru bir çağıranı bozacaksa versiyonlayın. Ekleme
değişiklikleri, yeni alanlar, yeni endpoint&amp;#39;ler, yeni isteğe bağlı parametreler, bir versiyona
ihtiyaç duymaz; eski sözleşmeye yazılmış çağıranlar çalışmaya devam eder ve yeni yetenek basitçe
oradadır. Bir &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking change&lt;/a&gt; buna ihtiyaç duyar, çünkü alternatif
bir çağıranın bunu bir hatadan öğrenmesidir. Ekleme olanlar dahil her sürümü versiyonlamak,
çağıranlara versiyonların gürültü olduğunu öğretir, ve önemli bildirimleri okumayı bırakırlar.&lt;/p&gt;
&lt;p&gt;Pratik test, breaking change makalesindekiyle aynıdır: sadece dokümante edilmiş davranışa güvenen
bir çağıran çalışmaya devam etmek için bir şeyi değiştirmek zorundaysa, değişiklik bir versiyona
ihtiyaç duyar. Değilse, mevcut versiyon altında gönderin ve bir changelog girdisi yazın.&lt;/p&gt;
&lt;h2&gt;Hangi API versiyonlama şeması kullanılmalı?&lt;/h2&gt;
&lt;p&gt;Çağıranlarınızın en kolay görüp ayarlayabileceği şemayı kullanın, ki bu çoğu genel API için
URL yolunda bir versiyon veya tarihli bir versiyon başlığıdır. Dört yaygın şema, yetenekten çok
çağırandan ne istediklerinde farklılık gösterir, ve seçim için doğru temel budur.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Şema&lt;/th&gt;
&lt;th&gt;Örnek&lt;/th&gt;
&lt;th&gt;Çağıranın yapması gereken&lt;/th&gt;
&lt;th&gt;Kim kullanıyor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;URL yolu&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v2/invoices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Göç ederken URL&amp;#39;yi değiştirmek&lt;/td&gt;
&lt;td&gt;Çoğu genel REST API&amp;#39;si&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versiyon başlığı&lt;/td&gt;
&lt;td&gt;&lt;code&gt;X-GitHub-Api-Version: 2022-11-28&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bir başlık göndermek, veya varsayılanı kabul etmek&lt;/td&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tarihli hesap versiyonu&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Stripe-Version: 2026-08-26&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;İstek başına veya hesap başına bir tarih sabitlemek&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sorgu parametresi&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/invoices?version=2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bir parametre eklemek&lt;/td&gt;
&lt;td&gt;Daha eski API&amp;#39;ler; şimdi nadiren seçiliyor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medya türü&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Accept: application/vnd.example.v2+json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;İçerik türlerini müzakere etmek&lt;/td&gt;
&lt;td&gt;Purist&amp;#39;ler; az çağıran yönetebiliyor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;URL yolu&lt;/strong&gt; en görünür ve en az esnek olanıdır. Her çağıran bir log satırı okuyarak hangi
versiyonda olduğunu görebilir, ve bir versiyon sıçraması bul-değiştir&amp;#39;dir. Maliyeti: tüm yüzey
birden hareket eder, hepsi için yeni bir versiyon basmadan tek bir endpoint&amp;#39;in sözleşmesini
değiştiremezsiniz, bu yüzden yol versiyonları nadir ve büyük olma eğilimindedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versiyon başlığı&lt;/strong&gt;, URL&amp;#39;leri stabil tutar ve hiçbir şey göndermeyen çağıranlar için sunucunun bir
varsayılan seçmesine izin verir, &lt;a href=&quot;https://docs.github.com/en/rest/about-the-rest-api/api-versions&quot;&gt;GitHub&amp;#39;ın REST API versiyonlaması&lt;/a&gt;
şöyle çalışır: &lt;code&gt;X-GitHub-Api-Version&lt;/code&gt; içinde tarihle adlandırılmış bir versiyon, versiyonsuz
çağıranların bozulmaması için varsayılan olarak en eski desteklenen versiyonla. Maliyeti: versiyon
bir URL&amp;#39;de görünmezdir ve yeni bir istemcide unutulması kolaydır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tarihli hesap versiyonu&lt;/strong&gt;, bir ekleme yapılmış başlık şemasıdır: versiyon hesaba karşı saklanır,
böylece her istek hiçbir şey göndermeden onu alır. &lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Stripe&amp;#39;ın API versiyonlaması&lt;/a&gt;
her hesabı oluşturulduğu versiyona sabitler ve bir isteğin bunu &lt;code&gt;Stripe-Version&lt;/code&gt; ile
geçersiz kılmasına izin verir. Bu, çağıran için en dostça şemadır ve çalıştırması en çok iş
gerektirendir, çünkü sunucu her desteklenen versiyon ile şu anki arasında çeviri yapmak zorundadır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sorgu parametresi&lt;/strong&gt; ve &lt;strong&gt;medya türü&lt;/strong&gt;, her ikisi de çalışır ve ikisi de görünürlük testini farklı
şekillerde başarısız olur: bir sorgu parametresi bir URL oluştururken kolayca düşer, ve bir medya
türü versiyonu, bir çağıranın hata ayıklamak için kullandığı hemen hemen her araç için görünmezdir. Stripe&amp;#39;ın tarih tabanlı şeması tarih yaklaşımının en bilinen
örneğidir ve &lt;a href=&quot;https://changeloop.dev/blog/tr/stripe-api-versioning/&quot;&gt;Stripe API&amp;#39;sini nasıl versiyonluyor&lt;/a&gt; onu adım adım
anlatır.&lt;/p&gt;
&lt;h2&gt;API versiyonlama pratikte nasıl yapılır?&lt;/h2&gt;
&lt;p&gt;Pratikte bir versiyon, adlandırılmış bir davranış kümesidir, ve sunucu her isteği bunlardan birine
eşler. Adımlar, ismi hangi şema taşırsa taşısın aynıdır.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Versiyonları semantik versiyona değil, tarihe veya tam sayıya göre adlandırın.&lt;/strong&gt; Bir web
API&amp;#39;si bir paket değildir. Çağıranlar bir URL&amp;#39;nin minor versiyonunu sabitleyemez, bu yüzden
&lt;code&gt;v2&lt;/code&gt; veya &lt;code&gt;2026-08-26&lt;/code&gt; bir çağıranın ihtiyaç duyduğu her şeyi söyler, ve
&lt;a href=&quot;https://semver.org/&quot;&gt;semantik versiyonlama&lt;/a&gt; şemanın yerine getiremeyeceği bir uyumluluk sözü
ima eder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versiyonu umursamayan kod yollarının dışında tutun.&lt;/strong&gt; Bir versiyon, iş mantığını dallandırmak
yerine kenarda bir çeviri katmanı seçmelidir. Kod tabanının iki tam kopyası, bir versiyonun
nasıl bakımsız kaldığıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Her versiyona bir varsayılan ve bir doküman verin.&lt;/strong&gt; Versiyon göndermeyen çağıranlar, sabitlenmemiş bir istemcinin sürüm günü bozulmaması için en yeniyi değil en eski desteklenen olanı
alır. Her versiyonun öncekinden ne değiştiğini söyleyen bir sayfası vardır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bir destek penceresi belirleyin ve yayımlayın.&lt;/strong&gt; Google&amp;#39;ın versiyonlama
kılavuzu &lt;a href=&quot;https://google.aip.dev/185&quot;&gt;AIP-185&lt;/a&gt;, makul ve iyi duyurulmuş bir geçiş süresi ister
ve beta işlevselliği için bile 180 gün önerir. Bir pencere seçin, yazın,
ve versiyon başına yeniden müzakere etmeden uygulayın.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versiyonları endpoint&amp;#39;leri emekliye ayırdığınız gibi emekliye ayırın.&lt;/strong&gt; Penceresini geçmiş bir
versiyon, herhangi bir &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;deprecate edilmiş API&lt;/a&gt; ile aynı muameleyi
görür: bir duyuru, her yanıtta bir &lt;code&gt;Sunset&lt;/code&gt; başlığı (&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8594&quot;&gt;RFC 8594&lt;/a&gt;),
kalan çağıranlara yarı yolda bir hatırlatma, ve tutan bir kaldırma tarihi.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Bir REST API&amp;#39;sinde v1 ve v2 nedir?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v1&lt;/code&gt; ve &lt;code&gt;v2&lt;/code&gt;, aynı sunucunun aynı anda desteklediği iki sözleşme için isimlerdir. Bir &lt;code&gt;v2&lt;/code&gt;,
&lt;code&gt;v1&lt;/code&gt;&amp;#39;deki bir şey çağıranlarını bozmadan değiştirilemediği için vardır, bu yüzden değişiklik yeni
bir sözleşmeye gitti ve eskisi çalışmaya devam etti. Numaralar &lt;code&gt;v2&lt;/code&gt;nin tamamlandığını veya
&lt;code&gt;v1&lt;/code&gt;&amp;#39;in öldüğünü ima etmez; ikisi de sadece dokümantasyon öyle söylüyorsa doğrudur. Her çeyrekte
görünen bir &lt;code&gt;v3&lt;/code&gt;, ekleme değişikliklerin versiyonlandığının, veya sözleşmenin hiçbir zaman
değişikliği emmek için tasarlanmadığının bir işaretidir. gRPC
aynı sorunu farklı bir şekilde çözer: &lt;a href=&quot;https://changeloop.dev/blog/tr/grpc-protobuf-api-changes/&quot;&gt;gRPC ve Protobuf API değişiklikleri&lt;/a&gt;
versiyonlamayı bir URL yolu yerine bir &lt;code&gt;.proto&lt;/code&gt; dosyasındaki paket adı üzerinden ele alır, ve bir
alanı yeniden adlandırmanın ücretsiz ama yeniden numaralandırmanın hiçbir REST çağıranının riskli
olarak tanımayacağı bir breaking change olduğu bir wire formatını.&lt;/p&gt;
&lt;h2&gt;Bir versiyon değişikliği ne duyurmalı?&lt;/h2&gt;
&lt;p&gt;Bir versiyon değişikliği, neyin bozulduğunu, kimi etkilediğini, nasıl göç edileceğini, ve önceki
versiyonun ne kadar süre çalışmaya devam ettiğini duyurmalıdır. Girdi, herhangi bir başka breaking
change girdisiyle aynı şekle sahiptir, artı destek penceresini belirten bir satır. İşte
başlıkla versiyonlanan bir API için bir tane:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;API versiyon 2026-11-01 mevcuttur. Versiyon 2025-06-15, 1 Kasım 2027&amp;#39;ye kadar
destekleniyor.&lt;/strong&gt;
2026-11-01&amp;#39;de yeni: &lt;code&gt;GET /invoices&lt;/code&gt;, &lt;code&gt;amount&lt;/code&gt;&amp;#39;ı ondalık string yerine en küçük birimlerde tam
sayı olarak döndürüyor, ve deprecate edilmiş &lt;code&gt;customer_name&lt;/code&gt; alanı &lt;code&gt;customer&lt;/code&gt; nesnesi lehine
kaldırılıyor. 2025-06-15&amp;#39;te &lt;code&gt;amount&lt;/code&gt;&amp;#39;ı string olarak parse eden çağıranları etkiler, ki bu
Haziran 2025&amp;#39;ten önce oluşturulmuş sabitlenmemiş istemciler için varsayılandır. Göç: &lt;code&gt;amount&lt;/code&gt;&amp;#39;ı
tam sayı olarak parse edin ve ismi &lt;code&gt;customer.name&lt;/code&gt;&amp;#39;den okuyun. Hazır olduğunuzda
&lt;code&gt;X-Api-Version: 2026-11-01&lt;/code&gt;&amp;#39;i sabitleyin. Versiyon sabitlemeyen çağıranlar için hiçbir şey
değişmiyor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Son cümle, çoğu okuyucunun okumayı bırakmasına izin veren cümledir, ve her versiyon duyurusuna
aittir. &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;Changelog örnekleri&lt;/a&gt; sayfası böyle versiyonlayan API&amp;#39;lerden girdiler
içerir, ve iyi olanlar ile geri kalanı arasındaki fark çoğunlukla o son cümledir.&lt;/p&gt;
&lt;h2&gt;Bir versiyon değiştiğinde kime bildirilir?&lt;/h2&gt;
&lt;p&gt;Eski versiyondaki herkese, bireysel olarak, ve diğer herkes için changelog&amp;#39;a. Bir versiyon
değişikliği, &amp;quot;bunun hakkında paylaşım yaptık&amp;quot;ın kesinlikle önemli olan çağıranları kaçırdığı tek
durumdur: iki yıl önce bir versiyon sabitleyip o zamandan beri bir sürüm notu okumamış olanlar.
Kullanım verisi kim olduklarına cevap verir; bildirim onlara kodlarının olduğu yerde, yanıt
başlıklarında ve hesap sahibine bir mesajda ulaşmalıdır.&lt;/p&gt;
&lt;p&gt;Çalıştırdığımız döngüde, bir versiyonu duyuran girdi, onu gönderen pull request&amp;#39;ten hazırlanır,
bir insan tarafından incelenir, ve versiyonlu bir istemcinin JSON olarak okuyabileceği
&lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;feed ve widget&lt;/a&gt;&amp;#39;e yayımlanır. Widget geri bildirimi değişikliği isteyen veya
çözdüğü hatayı bildiren ve pull request&amp;#39;in kapattığı bir GitHub issue&amp;#39;suna dönüşen herkes, girdi
yayına girdiğinde o issue&amp;#39;da bilgilendirilir. Mekanizma herhangi bir
girdiyle aynıdır; bir versiyon sıçraması sadece en yüksek riski olan girdidir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Her API değişikliği yeni bir versiyon almalı mı?&lt;/strong&gt;
Hayır. Sadece breaking change&amp;#39;ler. Ekleme değişiklikleri, bir changelog girdisiyle mevcut
versiyon altında gönderilir. Ekleme değişikliklerini versiyonlamak, çağıranları versiyonları
görmezden gelmeye eğitir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;URL versiyonlama mı yoksa başlık versiyonlaması mı daha iyi?&lt;/strong&gt;
URL versiyonlaması, çağıranlar için görmesi daha kolaydır ve sizin için parça parça geliştirmesi
daha zordur; başlık versiyonlaması bunun tersidir. Çok sayıda küçük istemcisi olan genel bir API
için, URL versiyonlaması daha az başarısız olur. Çeviri katmanı olan büyük bir API için, tarihli
başlık versiyonu daha iyi ölçeklenir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aynı anda kaç versiyon desteklenmeli?&lt;/strong&gt;
Destek pencerenizin izin verdiği kadar az, ve asla sınırsız bir sayı değil. İki veya üç eşzamanlı
versiyon normaldir; bundan fazlası genellikle versiyonların emekliye ayrılmadığı anlamına gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versiyonsuz istekler ne almalı?&lt;/strong&gt;
En eski desteklenen versiyon, böylece mevcut sabitlenmemiş istemciler çalışmaya devam eder, hangi
versiyonu aldıklarını onlara söyleyen bir yanıt başlığıyla.&lt;/p&gt;
</content:encoded></item><item><title>Breaking change: ne sayılır ve nasıl gönderilir</title><link>https://changeloop.dev/blog/tr/breaking-changes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/breaking-changes/</guid><description>Breaking change, doğru bir çağıranın hayatta kalamayacağı değişikliktir. Ne sayılır, ne sayılmaz, CI&apos;da nasıl yakalanır ve güvenle nasıl gönderilir.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir breaking change, doğru yazılmış bir çağıranın hayatta kalamayacağı bir değişikliktir. Tanım
önemlidir çünkü bir şeyin &amp;quot;sayılıp sayılmadığı&amp;quot; hakkındaki çoğu tartışma gerçekte kimin onu yanlış
tuttuğu hakkındadır. Bir çağıran dokümanınızı takip ettiyse ve değişikliğiniz kodunun çalışmasını
durdurduysa, değişiklik breaking&amp;#39;ti. Ne amaçladığınızın bununla hiçbir ilgisi yoktur.&lt;/p&gt;
&lt;p&gt;Tüm test budur. Bu makalenin geri kalanı ondan çıkan şeydir: neyin testi geçemediği, neyin geçtiği,
bir başarısızlığı merge edilmeden önce nasıl yakalayacağınız, ve bir tane gönderdiğinizi bildiğinizde
ne yapmanız gerektiği.&lt;/p&gt;
&lt;h2&gt;Ne bir breaking change sayılır?&lt;/h2&gt;
&lt;p&gt;Testi çağırana uygulayın, diff&amp;#39;e değil. Sadece dokümante edilmiş davranışa güvenen bir çağıranın
çalışmaya devam etmek için kodunu, yapılandırmasını veya verisini değiştirmesi gerektiğinde bir
değişiklik breaking&amp;#39;tir. Bir alanı kaldırmak, bir endpoint&amp;#39;i yeniden adlandırmak, doğrulamayı
sıkılaştırmak, bir varsayılanı değiştirmek ve bir değerin türünü değiştirmek hepsi buna uyar.
İsteğe bağlı bir alan eklemek uymaz. Bir hatayı düzeltmek genellikle uymaz, aşağıda önemli bir
istisna ile.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Değişiklik&lt;/th&gt;
&lt;th&gt;Breaking mi?&lt;/th&gt;
&lt;th&gt;Neden&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Bir alanı, endpoint&amp;#39;i, flag&amp;#39;i veya seçeneği kaldırmak veya yeniden adlandırmak&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Doğru çağıranlar ona referans verir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İsteğe bağlı bir alan veya yeni bir endpoint eklemek&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Mevcut çağrılar değişmez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İsteğe bağlı bir girdiyi zorunlu yapmak&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Onu atlayan çağrılar artık başarısız olur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daha önce kabul edilen doğrulamayı sıkılaştırmak&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Çalışan girdiler artık reddedilir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir varsayılan değeri değiştirmek&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Onu ayarlamayan çağıranlar yeni davranış alır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir türü değiştirmek (string&amp;#39;den sayıya, tek değerden dizeye)&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;Dokümante edilen türe yazılmış parser&amp;#39;lar başarısız olur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir nesnenin anahtarlarını yeniden sıralamak&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Sırayı dokümante etmediyseniz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Çağıranların dayandığı bir hatayı düzeltmek&lt;/td&gt;
&lt;td&gt;Pratikte evet&lt;/td&gt;
&lt;td&gt;Kazara sözleşmeler bölümüne bakın&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir hız sınırını veya boyut üst sınırını yükseltmek&lt;/td&gt;
&lt;td&gt;Hayır&lt;/td&gt;
&lt;td&gt;Çalışan hiçbir şey çalışmayı durdurmaz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir hız sınırını veya boyut üst sınırını düşürmek&lt;/td&gt;
&lt;td&gt;Evet&lt;/td&gt;
&lt;td&gt;İyi olan trafik artık kısıtlanır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir hata mesajının ifadesini değiştirmek&lt;/td&gt;
&lt;td&gt;Değişir&lt;/td&gt;
&lt;td&gt;Dokümante ettiyseniz veya çağıranlar buna göre eşleştiriyorsa breaking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Ne breaking change sayılmaz?&lt;/h2&gt;
&lt;p&gt;Bir değişiklik, daha önce çalışan her çağrı değişmeden çalışmaya devam ediyor ve aynı anlama geliyorsa
breaking değildir. Yeni bir endpoint eklemek, isteğe bağlı bir istek parametresi eklemek, yanıta bir
alan eklemek, zorunlu bir girdiyi isteğe bağlı yapmak, bir sınırı yükseltmek ve kimsenin eşleştirmediği
bir hata mesajını iyileştirmek testi geçer. Bu eklemeli değişiklikler sıradan bir changelog girdisiyle
bir minor sürümde gönderilebilir.&lt;/p&gt;
&lt;p&gt;Eklemeli değişiklikler yine de üç durumda çağıranları bozar. Deserializer&amp;#39;ı bilinmeyen alanları
reddeden bir istemci ilk yeni yanıt alanında başarısız olur, bu yüzden çağıranların tanımadıkları
alanları yok saymaları gerektiğini erkenden dokümante edin. Yeni bir enum değeri, kapsamlı bir switch&amp;#39;e
sahip her çağıranı bozar (aşağıda daha fazlası var). Ve büyüyen bir yanıt, bir çağıranı hiç düşünmek
zorunda kalmadığı bir boyut sınırının, zaman aşımının veya sütun genişliğinin ötesine itebilir.&lt;/p&gt;
&lt;p&gt;Tablodaki dört satır daha yakından bakmayı hak ediyor, çünkü anlaşmazlıklar orada olur.&lt;/p&gt;
&lt;h2&gt;Ekiplerin kaçırdığı dört breaking change&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Kazara sözleşmeler.&lt;/strong&gt; API&amp;#39;niz üç yıl boyunca aynı dokümante edilmemiş alanı döndürdüyse, bir
çağıran onun üzerine inşa etmiştir. &lt;a href=&quot;https://www.hyrumslaw.com/&quot;&gt;Hyrum&amp;#39;un Kanunu&lt;/a&gt; kısa versiyondur:
yeterince kullanıcıyla, sisteminizin gözlemlenebilir her davranışına biri bağımlı olacaktır. Bu
yüzden &amp;quot;bu bir hata düzeltmesiydi&amp;quot; bir savunma değildir. Düzeltme doğru olabilir ve yine de
breaking olabilir. Onu öyle gönderin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Şema değişikliği olmayan davranış değişiklikleri.&lt;/strong&gt; Alan hâlâ orada, tür aynı, ve değer artık
farklı bir şey ifade ediyor. Eskiden &lt;code&gt;active&lt;/code&gt; veya &lt;code&gt;inactive&lt;/code&gt; olan ve şimdi &lt;code&gt;suspended&lt;/code&gt; de döndüren
bir &lt;code&gt;status&lt;/code&gt;, kapsamlı bir switch&amp;#39;e sahip her çağıranı bozar. Yerel saatten UTC&amp;#39;ye geçen bir
timestamp, dokümanları iki kez okumayan herkesi bozar. OpenAPI dosyasının bir diff&amp;#39;inde bunların
hiçbiri görünmez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sıkılaştırılmış doğrulama.&lt;/strong&gt; TLD&amp;#39;siz e-postaları, veya sondaki boşlukları, veya 80 karakterden
uzun isimleri reddetmeye başlarsınız. Tam olarak bunu gönderen her çağıran şimdi geçen hafta
çalışan bir istek için 400 alır. Doğrulama değişiklikleri en yaygın olarak &amp;quot;sıkılaştırma&amp;quot; düzeltmesi
olarak gönderilendir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Değişen varsayılanlar.&lt;/strong&gt; Değeri açıkça ayarlayan kimse hiçbir şey fark etmez. Ayarlamayan
herkes, ki bu çoğu çağırandır, bir satır değiştirmeden yeni davranış alır. Değişen bir varsayılan,
kullanıcılarınızın çoğunluğunu tam olarak ayarı hiç görmedikleri için bozar.&lt;/p&gt;
&lt;h2&gt;Bir breaking change gönderilmeden önce nasıl tespit edilir?&lt;/h2&gt;
&lt;p&gt;Pull request&amp;#39;teki sözleşmeyi ana daldaki sözleşmeyle CI&amp;#39;da karşılaştırın ve breaking bir farkta build&amp;#39;i
başarısız yapın. Çoğu arayüz formatı için şema diff araçları vardır ve her biri kendi formatının
breaking kurallarını bilir:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Arayüz&lt;/th&gt;
&lt;th&gt;Araç&lt;/th&gt;
&lt;th&gt;Neyi karşılaştırır&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;REST (OpenAPI)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/oasdiff/oasdiff&quot;&gt;oasdiff&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;İki OpenAPI spec&amp;#39;i, breaking-changes raporuyla&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gRPC (Protobuf)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://buf.build/docs/breaking/&quot;&gt;buf breaking&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.proto&lt;/code&gt; dosyaları, wire veya kaynak düzeyinde&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GraphQL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/kamilkisiela/graphql-inspector&quot;&gt;GraphQL Inspector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;İki şema, breaking ve tehlikeli değişiklikleri işaretler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust crate&amp;#39;leri&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/obi1kenobi/cargo-semver-checks&quot;&gt;cargo-semver-checks&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Public API&amp;#39;yi son yayımlanan versiyonla&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TypeScript paketleri&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://api-extractor.com/&quot;&gt;API Extractor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Paketin public API&amp;#39;sinin commit edilmiş bir raporu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Bu araçlar kaldırılmış alanları, yeniden adlandırılmış operasyonları ve değişen türleri güvenilir
şekilde yakalar. Yukarıdaki dört türün ilk ikisini, yani kazara bir sözleşmeyi veya bir davranış
değişikliğini göremezler, çünkü ikisi de bir şemada görünmez. Aracı bariz olanları durdurmak için, geri
kalanı için ise &amp;quot;doğru bir çağıran bunu fark eder miydi?&amp;quot; inceleme sorusunu kullanın. Aynı CI işi, bir
changelog girdisini zorunlu kılmak için de doğal bir yerdir; bunu
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-ci-enforcement/&quot;&gt;CI&amp;#39;da changelog girdilerini zorunlu kılma&lt;/a&gt; anlatır ve
&lt;a href=&quot;https://changeloop.dev/blog/tr/grpc-protobuf-api-changes/&quot;&gt;gRPC ve Protobuf API değişiklikleri&lt;/a&gt; wire düzeyindeki durumları
ele alır.&lt;/p&gt;
&lt;h2&gt;Bir breaking change commit&amp;#39;te nasıl işaretlenir?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.conventionalcommits.org/en/v1.0.0/&quot;&gt;Conventional Commits&lt;/a&gt; ile bir breaking change, iki
noktadan önce bir &lt;code&gt;!&lt;/code&gt; ile (&lt;code&gt;feat(api)!: remove the legacy export endpoint&lt;/code&gt;) veya &lt;code&gt;BREAKING CHANGE:&lt;/code&gt; ile
başlayan ve bir açıklamanın izlediği bir footer ile işaretlenir. İkisi de bir major versiyona karşılık
gelir. Footer&amp;#39;ı changelog girdisinin ilk taslağı olarak yazın: kimin etkilendiğini ve ne yapması
gerektiğini söyleyin. &lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;Conventional commit&amp;#39;ler ve changelog&lt;/a&gt;,
bu kuralın sizi ne kadar ileri götürdüğünü anlatır.&lt;/p&gt;
&lt;p&gt;Aynı kural kütüphaneler için de geçerlidir. Kaldırılmış bir public fonksiyon, daraltılmış bir parametre
türü veya değişen bir dönüş değeri, semantik versiyonlama altında bir major versiyondur. Kütüphaneler
bunu her zaman izlemez: &lt;a href=&quot;https://arxiv.org/abs/2110.07889&quot;&gt;119.879 Maven Central yükseltmesi üzerine bir çalışma&lt;/a&gt;,
bunların %16,6&amp;#39;sının semantik versiyonlamayı bozduğunu, ama istemci projelerin yalnızca %7,9&amp;#39;unun
etkilendiğini buldu, çünkü bu değişikliklerin çoğu hiçbir istemcinin çağırmadığı koda dokunuyordu.
Bozulma, çağıranda ölçülür.&lt;/p&gt;
&lt;h2&gt;Bir breaking change nasıl gönderilir?&lt;/h2&gt;
&lt;p&gt;Onu açıkça, bir tarihle, bir yolla gönderirsiniz. Aşağıdaki adımlar sırayla, ve sonuncusu çoğu
ekibin atladığıdır: etkilenen insanlara bekledikleri şeyin şimdi olduğunu söylemek.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Öyle olup olmadığına karar verin.&lt;/strong&gt; Diff&amp;#39;i değil yukarıdaki testi kullanın. İki mühendis
anlaşamıyorsa, breaking&amp;#39;tir; anlaşmazlık bir çağıranın makul bir şekilde eski davranışa
dayanabileceğinin kanıtıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versiyonlayın.&lt;/strong&gt; &lt;a href=&quot;https://semver.org/&quot;&gt;Semantik versiyonlama&lt;/a&gt; altında bir breaking change bir
major versiyondur. Tarihli veya versiyonlu bir API çalıştırıyorsanız, yeni bir versiyona
girer ve eski, belirtilen bir tarihe kadar çalışmaya devam eder. Versiyonlayamıyorsanız, bir
breaking change göndermiyorsunuz, bir changelog girdisiyle bir kesinti gönderiyorsunuz. Hangi
şemanın versiyonu taşıdığı &lt;a href=&quot;https://changeloop.dev/blog/tr/api-versioning-best-practices/&quot;&gt;API versiyonlama en iyi uygulamaları&lt;/a&gt;&amp;#39;nın
konusudur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kod merge edilmeden önce girdiyi yazın.&lt;/strong&gt; Girdinin sabit bir şekli vardır: ne değişiyor, kimi
etkiliyor, ne yapmaları gerekiyor, ve ne zamana kadar. Dördünü de dolduramıyorsanız,
değişiklik hazır değildir. &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;Release notes şablonu&lt;/a&gt;, tam olarak bu
yüzden bu girdileri bir sürüm numarası yerine bir tarihle önce koyar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bir sürüm numarası değil bir son tarih verin.&lt;/strong&gt; &amp;quot;v5&amp;#39;te kaldırıldı&amp;quot; sürümlerinizi takip
etmeyen biri için hiçbir şey ifade etmez. &amp;quot;1 Kasım 2026&amp;#39;da çalışmayı durduruyor&amp;quot; herkes için
aynı şeyi ifade eder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Göçü sağlayın.&lt;/strong&gt; Eski çağrının yeni olanın yanında bir kod örneği. Değişiklik bir yeniden
adlandırmaysa, her iki adı da aynı cümlede söyleyin. Kaldırılmış bir alansa, verinin nereye
gittiğini söyleyin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eski davranışın dokümante edildiği her yerde duyurun.&lt;/strong&gt; Changelog, endpoint&amp;#39;i tarif eden
doküman sayfası, SDK&amp;#39;nın release notes&amp;#39;u, ve varsa yanıttaki deprecation header&amp;#39;ı. Tek bir
yerde duyurulmuş, orayı görmüş olan insanlara duyurulmuştur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Döngüyü kapatın.&lt;/strong&gt; Bir müşteri değişikliği istediyse, veya ona yol açan hatayı bildirdiyse,
gönderildiğinde ona söyleyin. Bu adım onu kullanıcılarınıza yapılan bir şeyden onlarla yapılan
bir şeye dönüştürür.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;İyi bir breaking-change girdisi nasıl görünür?&lt;/h2&gt;
&lt;p&gt;İyi bir girdi ilk satırda etkilenen çağıranı belirtir, tarihi belirtir, ve düzeltmeyi içerir. İşte
sıkılaştırılmış doğrulama durumu için kullandığımız şekilde bir tane:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Alan adı olmayan e-posta adresleri 1 Kasım 2026&amp;#39;dan itibaren reddediliyor.&lt;/strong&gt;
&lt;code&gt;POST /users&lt;/code&gt; ve &lt;code&gt;PATCH /users/:id&lt;/code&gt; şu anda &lt;code&gt;alice@localhost&lt;/code&gt; gibi &lt;code&gt;email&lt;/code&gt; değerlerini kabul
ediyor. 1 Kasım&amp;#39;dan itibaren bunlar &lt;code&gt;400 invalid_email&lt;/code&gt; döndürecek. Dahili dizinlerden kullanıcı
oluşturan herhangi bir entegrasyonu etkiler. Göç: tam olarak nitelikli bir adres gönderin, veya
alanı atlayıp sonra ayarlayın. Adresleriniz zaten bir alana sahipse hiçbir değişiklik gerekmez,
ki bu yıl oluşturulan hesapların %99,4&amp;#39;ü için doğrudur.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bu bildirimin nerede yaşadığı, ve yanında başka nelerin olması gerektiği,
&lt;a href=&quot;https://changeloop.dev/blog/tr/api-changelog/&quot;&gt;API changelog&lt;/a&gt;&amp;#39;un konusudur.&lt;/p&gt;
&lt;p&gt;Sondaki yüzde bir dekorasyon değildir. Okuyucuya endişelenip endişelenmeyeceğini söyler, ki bu
girdiyi açtığı sorudur.&lt;/p&gt;
&lt;h2&gt;Neden onları basitçe önlemiyoruz?&lt;/h2&gt;
&lt;p&gt;Çünkü alternatif daha kötü. Hiçbir zaman bir şeyi bozmayan bir API, yaptığı her hatayı biriktirir:
yanlış adlandırılmış alan, yanlış varsayılan, yerel saatteki timestamp. Her biri, bir öğleden
sonrada göç edebilecek çağıranları korumak için her yeni çağıran için sonsuza kadar bir vergidir.
En iyi kararlılık itibarına sahip ekipler, nadiren, bir programa göre, bir göç yolu ve hedeflendiği
insanlara ulaşan bir uyarıyla bir şeyleri bozar.&lt;/p&gt;
&lt;p&gt;Bu uyarının mekaniği &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;bir API&amp;#39;yi deprecate etmek&lt;/a&gt; üzerine olan yoldaş
makalenin konusudur. Onu duyuran girdi, &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;changelog akışındaki&lt;/a&gt; başka herhangi bir girdi gibi
hazırlanır: merge edilmiş pull request&amp;#39;ten, bir insan için tutulur, sonra etkilenen çağıranların
zaten okuduğu yerde yayımlanır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Breaking ile breaking olmayan bir değişiklik arasındaki fark nedir?&lt;/strong&gt;
Breaking bir değişiklik, doğru bir çağıranı çalışmaya devam etmek için kodunu, yapılandırmasını veya
verisini değiştirmeye zorlar. Breaking olmayan bir değişiklik, mevcut her çağrıyı aynı anlamla çalışır
bırakır; bu yüzden eklemeler genellikle güvenlidir, kaldırmalar, yeniden adlandırmalar ve sıkılaştırılmış
kurallar ise genellikle değildir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zorunlu bir alan eklemek sayılır mı?&lt;/strong&gt;
Evet. Mevcut her çağrı onu atlar, bu yüzden mevcut her çağrı şimdi başarısız olur. Onu makul bir
varsayılanla isteğe bağlı olarak ekleyin, veya endpoint&amp;#39;i versiyonlayın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir hata düzeltmesi sayılır mı?&lt;/strong&gt;
Olabilir. Çağıranlar hatalı davranışa dayanıyorsa, düzeltmek dokümantasyon ne derse desin onları
bozar. Gözlemlenebilir çıktıyı değiştiren herhangi bir düzeltmeyi, kimsenin dayanmadığını
gösteremiyorsanız breaking olarak ele alın.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Semantik versiyonlama bir web API&amp;#39;sine uygulanır mı?&lt;/strong&gt;
Kural evet: breaking change&amp;#39;ler yeni bir major versiyon alır ve eski, belirtilen bir süre boyunca
çalışmaya devam eder. Numara genellikle bir paket versiyonu yerine URL&amp;#39;de veya bir tarih
header&amp;#39;ında yaşar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ne kadar bildirim yeterli?&lt;/strong&gt;
Bir çağıranın bildirimi bulup işi yapmasına yetecek kadar. Doksan gün, genel API&amp;#39;ler için yaygın
bir taban çizgidir; uzaktan güncellenemeyen ve son kullanıcılara gönderilen kodda kullanılan
herhangi bir şey için daha uzun.&lt;/p&gt;
</content:encoded></item><item><title>Geri bildirim döngüsünü changelog tarafından kapatmak</title><link>https://changeloop.dev/blog/tr/customer-feedback-loop/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/customer-feedback-loop/</guid><description>Bir geri bildirim döngüsü, isteyen kişi gönderildiğini bildiğinde kapanır. Dört adımda döngü, nerede bozulduğu, ve changelog&apos;un neden doğru yer olduğu.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir müşteri geri bildirim döngüsü, geri bildirimi veren kişiye ona ne olduğu söylendiğinde
kapanır. Dosyalandığında değil. Önceliklendirildiğinde değil. Gönderildiğinde bile değil. Ona
söylendiğinde. Çoğu ekip ilk üç adımı iyi yapar ve sonuncusunu hiç yapmaz, sonra geri bildirim
gönderen insanların neden göndermeyi bıraktığını merak eder.&lt;/p&gt;
&lt;p&gt;Bu makale o son adım hakkındadır, ve somut bir iddia hakkındadır: changelog, döngüyü kapatmak için
doğru yerdir, çünkü döngünün kapatılabileceği anda zaten var olan tek artefakt odur.&lt;/p&gt;
&lt;h2&gt;Bir müşteri geri bildirim döngüsü nedir?&lt;/h2&gt;
&lt;p&gt;Bir müşteri geri bildirim döngüsü, bir kullanıcının size bir şey söylemesinden o kullanıcının ne
yaptığınızı öğrenmesine giden yoldur. Dört adımı vardır: geri bildirimi toplamak, onunla ne
yapılacağına karar vermek, sonucu göndermek, ve isteyen kişiye söylemek. Dördüncü adım
gerçekleşene kadar döngü açıktır. Geri bildirim toplayan ve düzeltmeleri gönderen ama hiç kimseye
söylemeyen bir ekibin bir gelen kutusu vardır, döngüsü yoktur.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Adım&lt;/th&gt;
&lt;th&gt;Ne oluyor&lt;/th&gt;
&lt;th&gt;Genellikle nerede bozuluyor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Toplamak&lt;/td&gt;
&lt;td&gt;Geri bildirim gelir: widget, destek, satış, görüşmeler&lt;/td&gt;
&lt;td&gt;Hiçbir şey; her ekip bunu yapar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Karar vermek&lt;/td&gt;
&lt;td&gt;Triyaj edilir, kopyalarla birleştirilir, kabul veya reddedilir&lt;/td&gt;
&lt;td&gt;Reddedilenler asla iletilmez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Göndermek&lt;/td&gt;
&lt;td&gt;Biri onu inşa eder ve canlıya çıkar&lt;/td&gt;
&lt;td&gt;İsteğe bağlantı merge&amp;#39;de kaybolur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Söylemek&lt;/td&gt;
&lt;td&gt;İsteyen kişi gönderildiğini öğrenir&lt;/td&gt;
&lt;td&gt;Atlanır, veya sadece en sesli isteyen için yapılır&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Dördüncü satır bu makalenin konusudur. Kültürel değil yapısal bir nedenle bozulur: bir özellik
gönderilene kadar, ona neden olan istek, gönderilen şeyden farklı bir sistemde yaşar, ve onları
bağlamak kimsenin işi değildir. Döngü daha önce, isteğin en başta nasıl istendiğiyle başlar;
&lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-ask-for-customer-feedback/&quot;&gt;müşteriden geri bildirim nasıl istenir&lt;/a&gt; ifadeyi ve
zamanlamayı ele alır.&lt;/p&gt;
&lt;h2&gt;Geri bildirim döngüleri neden açık kalır?&lt;/h2&gt;
&lt;p&gt;Geri bildirim döngüleri açık kalır çünkü istek ve gönderilen değişiklik farklı yerlerde yaşar ve
aralarındaki bağlantı, varsa, elle yapılır. İstek bir geri bildirim aracında, bir destek gelen
kutusunda veya bir e-tablodadır. Değişiklik bir pull request&amp;#39;tedir. Duyuru bir changelog&amp;#39;da veya
bir e-postadadır. Üç sistem, üç sahip, ve üçüncüden birinciye geri bağlantı, aylar sonra kimin
sorduğunu hatırlayan bir kişidir.&lt;/p&gt;
&lt;p&gt;İkinci bir neden var. Söyleme adımı genellikle bir destek görevi (&amp;quot;kişiye cevap vermek&amp;quot;) yerine bir
pazarlama görevi (&amp;quot;özelliği duyurmak&amp;quot;) olarak çerçevelenir. Duyurular herkese gider ve özellikle
kimseye ulaşmaz. Mart ayında özelliği isteyen kişi, Haziran duyurusunu, okursa, bir cevap olarak
değil bir haber olarak okur. Döngü ancak mesaj ona yönlendirilmişse kapanır.&lt;/p&gt;
&lt;h2&gt;Döngü neden changelog&amp;#39;dan kapatılmalı?&lt;/h2&gt;
&lt;p&gt;Çünkü changelog girdisi, tam olarak doğru anda var olan, tam olarak doğru kelimeleri içeren, ve
tam olarak doğru kişi tarafından yazılan tek artefakttır. Değişiklik canlı olduğunda var olur,
öncesinde değil. Neyin değiştiğini okuyucunun terimleriyle söyler, ki bu isteyen kişinin ihtiyaç
duyduğu mesajdır. Ve tam olarak pull request&amp;#39;i okumuş biri tarafından yazılır, ki bu orijinal
isteğe olan bağlantının hâlâ görünür olduğu tek andır.&lt;/p&gt;
&lt;p&gt;Alternatifleri karşılaştırın. Döngüyü geri bildirim aracından kapatmak, geri bildirim aracının
özelliğin ne zaman gönderildiğini bilmesi gerektiği anlamına gelir, ki bu birinin elle bir durumu
güncellediği anlamına gelir. Onu pull request&amp;#39;ten kapatmak, değişiklik canlı olmadan önce merge&amp;#39;de
müşteriye söylemek anlamına gelir, dağıtım geciktiğinde zaman damgalı kırık bir söz. Onu pazarlama
duyurusundan kapatmak, biri için beklemek anlamına gelir, ve gönderilen değişikliklerin çoğu asla
bir tane almaz.&lt;/p&gt;
&lt;p&gt;Changelog ortadadır: merge&amp;#39;den sonra, yayın anında, ifade hazır.&lt;/p&gt;
&lt;h2&gt;Döngü adım adım nasıl kapanır&lt;/h2&gt;
&lt;p&gt;İşte çalıştırdığımız mekanizma. Burada bir ürün turu yerine bir spesifikasyon olarak
tanımlanmıştır, çünkü her adım elle veya başka araçlarla yapılabilir; önemli olan sıradır.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Geri bildirim, onu düzeltecek repository&amp;#39;de bir issue olur.&lt;/strong&gt; Bir widget gönderimi,
gönderenin e-posta adresi issue gövdesine girmeden etiketli bir GitHub issue&amp;#39;su
(&lt;code&gt;feature-request&lt;/code&gt; veya &lt;code&gt;bug&lt;/code&gt;, bir öncelik, ve &lt;code&gt;from-widget&lt;/code&gt;) olarak dosyalanır. Issue kodun
yanında yaşar, böylece üçüncü adım onu bulabilir. Elle açılan bir issue, örneğin bir
&lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-template/&quot;&gt;feature-request-şablonu&lt;/a&gt; ile, bu yolun dışındadır: beşinci
adım ona yorum yapmaz, bu yüzden o döngüyü kendiniz kapatın.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Düzeltme issue&amp;#39;ya referans verir.&lt;/strong&gt; Pull request &lt;code&gt;Fixes #142&lt;/code&gt; der, GitHub&amp;#39;ın kendi kapatma
anahtar kelimesi. Öğrenilecek yeni bir şey yok, ve geliştiricilerin zaten yazdığı aynı cümle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changelog girdisi, merge edilen pull request&amp;#39;ten hazırlanır ve bağlantıyı taşır.&lt;/strong&gt; Merge&amp;#39;de,
taslak oluşturulur ve &lt;code&gt;#142&lt;/code&gt;, PR gövdesinden okunup taslağa eklenir. Bağlantı, hâlâ ucuzken, bir
makine tarafından, zaten orada olan verilerden yapılır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bir insan girdiyi gözden geçirir.&lt;/strong&gt; İfade, hedef kitle, hiç yayımlanıp yayımlanmayacağı.
Atılmış bir taslak hiçbir şeyi kapatmaz, ki bu doğrudur: bir issue&amp;#39;ya rastgele referans veren
dahili bir refactor haber değildir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onaylandığında, isteyen kişiye söylenir.&lt;/strong&gt; Geri bildiriminin dönüştüğü issue&amp;#39;da bir yorum
yayımlanır, &amp;quot;Shipped —&amp;quot; ardından girdinin başlığı ve yayımlanan girdiye bir bağlantı, ve widget
gönderene aynı gönderilen girdiyi gösterir. Bir kez, asla iki kez
değil, ve sadece bir insan girdiyi yayımladıktan sonra. Aynı girdi &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;feed ve widget&lt;/a&gt;
aracılığıyla sormamış olan herkese gider.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Beşinci adımdaki sıra tüm tasarımdır. İsteyen kişiye merge&amp;#39;de söylemek daha erken ve daha kolay
olurdu, ve dağıtımların geciktiği kadar sık yanlış olurdu. Bir feature flag bu sırayı bile bozar,
çünkü onaylanmak ve yayınlanmak, özellik isteyen kişinin hesabı için hâlâ görünmezken
gerçekleşebilir; &lt;a href=&quot;https://changeloop.dev/blog/tr/feature-flags-feature-requests/&quot;&gt;feature flag&amp;#39;ler ve özellik talepleri&lt;/a&gt;
bir flag işin içine girdiğinde bu adımın ihtiyaç duyduğu ek kontrolü ele alır.&lt;/p&gt;
&lt;h2&gt;Kapalı bir döngü müşteriye nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Bir cevap gibi görünür. Müşteri bir widget aracılığıyla bir istek gönderdi, ve bir gün widget onu,
kendi terimleriyle tanımlayan bir girdiye bağlantıyla birlikte gönderildi olarak gösterir; GitHub&amp;#39;da
issue aynı haberi bir yorum olarak alır. Bir bültene abone olmadı, bir roadmap kontrol etmedi, changelog&amp;#39;da
aramadı. Ona söylendi.&lt;/p&gt;
&lt;p&gt;Bu, bir sonraki geri bildirim parçasının gerçekleşmesini sağlayan deneyimdir. İnsanlar cevap veren
ürünlere geri bildirim gönderir. &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;Changelog örnekleri&lt;/a&gt; sayfası, kullanıcıları
görünür şekilde isteklerle geri gelmeye devam eden ekiplerin girdilerini içerir, ve ortak nokta araç
değildir; girdilerin cevap gibi okunmasıdır.&lt;/p&gt;
&lt;h2&gt;Bir geri bildirim döngüsü nasıl ölçülür?&lt;/h2&gt;
&lt;p&gt;En az bir isteyen kişiyi bilgilendiren gönderilen değişikliklerin oranını, ve gönderme ile
bilgilendirme arasındaki zamanı ölçün. Bağlantı var olduğunda kolay, öncesinde imkansız olan iki
sayı.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kapatma oranı&lt;/strong&gt;: bu ay yayımlanan changelog girdilerinden kaçı en az bir isteğe bağlantı
verdi, ve bunlardan kaçı isteyen kişiyi bilgilendirdi. İkinci sayı birinciden çok daha düşükse,
bildirimler başarısız oluyor demektir; birincisi düşükse, istekler pull request&amp;#39;lerden referans
alınmıyor demektir, ve düzeltme PR şablonundaki bir cümledir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gönderme-bilgilendirme süresi&lt;/strong&gt;: girdinin canlıya çıkması ile isteyen kişinin
bilgilendirilmesi arasında ne kadar geçiyor. Yukarıdaki mekanizma ile saniyeler. Elle
tipik olarak haftalar, veya hiç, ve &amp;quot;hiç&amp;quot; önemli olan sayıdır.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Döngüyü toplanan geri bildirim hacmine göre ölçmeyin. Toplamak kolay adımdır, ve onu ölçen bir ekip
onu optimize edecektir, ki bu daha fazla açık döngü üretir.&lt;/p&gt;
&lt;h2&gt;Roadmap nereye uyuyor?&lt;/h2&gt;
&lt;p&gt;Genel bir roadmap, döngüyü erken kapatmanın bir yoludur: isteyen kişilere, gönderilmeden önce
isteklerinin duyulduğunu söyler. Faydalıdır, ve son adımın yerine geçmez. &amp;quot;Planlandı&amp;quot; gelecek
hakkında bir sözdür; &amp;quot;Gönderildi&amp;quot; şimdiki zaman hakkında bir gerçektir.
&lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;Genel roadmap&amp;#39;i&lt;/a&gt; aynı issue&amp;#39;lardan, sütun başına bir etiketle çalıştırın,
böylece aynı istek herhangi bir yerde yeniden girilmeden planlanandan gönderilene taşınır.
Gönderilene taşıma bir etiket değişikliğidir (&lt;code&gt;roadmap:shipped&lt;/code&gt;) ve girdi onaylandığında bunu sizin
yerinize hiçbir şey yapmaz, bu yüzden aynı incelemede yapın.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir müşteri geri bildirim döngüsünün dört adımı nedir?&lt;/strong&gt;
Toplamak, karar vermek, göndermek, söylemek. Döngü, dördüncü adım gerçekleşene kadar açıktır.
Çoğu çerçeve ortaya analiz ve önceliklendirme adımları ekler; bunlar &amp;quot;karar vermek&amp;quot;in
inceltmeleridir, ve hiçbiri hiçbir şeyi kapatmaz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir istek reddedildiğinde müşterilere söylenmeli mi?&lt;/strong&gt;
Evet, ve bu döngünün en ihmal edilen mesajıdır. Net bir &amp;quot;bunu yapmayacağız, ve işte nedeni&amp;quot;
bekleyişi bitirir. Sessizlik, döngüyü sonsuza kadar açık ve müşteriyi kontrol ediyor bırakır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Döngüyü kapatmak bir özelliği duyurmaktan nasıl farklıdır?&lt;/strong&gt;
Bir duyuru herkese gider. Döngüyü kapatmak, isteyen insanlara, istedikleri kanaldan bir cevaptır.
İkisini de yapın; farklı okuyucular için farklı mesajlardır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ya isteyen kişi GitHub&amp;#39;da değilse?&lt;/strong&gt;
Çoğu değildir, ve bu sorun değil. Widget, gönderdikleri şeyin durumunu, gönderilen girdi ve
bağlantısı dahil, onlara göstermeye devam eder, bu yüzden yazdıkları sayfanın ötesinde hiçbir şeye
ihtiyaçları yoktur. Issue üzerindeki yorum, repository&amp;#39;yi görebilen kişiler içindir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bu döngü GitHub yerine GitLab veya Bitbucket&amp;#39;ta çalışır mı?&lt;/strong&gt;
Widget ve changelog çalışır; beşinci adımdaki otomatik yorum bugün için çalışmaz. GitLab veya
Bitbucket&amp;#39;taki bir ekip yine de her gönderimi alır, yine de bunu bir issue olarak kaydeder ve yine
de talep edene widget&amp;#39;ta bir durum gösterir, ama bu döngüyü tam olarak issue&amp;#39;nun kendisine
kapatmak, o entegrasyon var olana kadar elle yaptığınız bir adımdır.&lt;/p&gt;
</content:encoded></item><item><title>Changelog&apos;a dönüşen feature-request-şablonu</title><link>https://changeloop.dev/blog/tr/feature-request-template/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/feature-request-template/</guid><description>Bir özellik isteği, ancak gönderildiğinde bulunabilirse işe yarar. Şablon, onu yönlendiren etiketler, ve changelog&apos;un sonra okuduğu alanlar burada.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir feature-request-şablonu, dört sorusu olan bir formdur: kişi ne yapmaya çalışıyor, ne onu
durduruyor, bunun yerine ne denedi, ve bittiğinde nasıl bilgilendirilmek istiyor. Genellikle bir
tanede görünen diğer her şey, öncelik seçiciler, çaba tahminleri, iş değeri puanları, isteği alan
ekip içindir, ve onu gönderen kişi tarafından yanlış doldurulur.&lt;/p&gt;
&lt;p&gt;Düzenli istekler bir şablon için yanlış testtir. Doğru olanı: altı ay sonra, özellik
gönderildiğinde, biri isteği bulabilir mi, anlayabilir mi, ve onu yazan kişiye söyleyebilir mi?
Çoğu şablon giriş için tasarlanmıştır. Bu, döngünün kapandığı gün için tasarlanmıştır.&lt;/p&gt;
&lt;h2&gt;Bir feature-request-şablonu neyi içermeli?&lt;/h2&gt;
&lt;p&gt;Amacı, engeli, geçici çözümü, ve isteyen kişiye geri dönüş yolunu içermelidir. Dört alan, bu
sırayla, her biri ekibin daha sonra soracağı bir soruyu cevaplar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alan&lt;/th&gt;
&lt;th&gt;Sonra cevapladığı soru&lt;/th&gt;
&lt;th&gt;Formda olma nedeni&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Ne yapmaya çalışıyorsun?&lt;/td&gt;
&lt;td&gt;İnşa edilen özellik ihtiyaç duyulan mıydı?&lt;/td&gt;
&lt;td&gt;Amaç herhangi bir somut öneriden daha uzun yaşar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bugün seni ne durduruyor?&lt;/td&gt;
&lt;td&gt;&amp;quot;Bitti&amp;quot; nasıl görünüyor?&lt;/td&gt;
&lt;td&gt;Düzeltmeyi öngörmeden boşluğu adlandırır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bunun yerine ne yapıyorsun?&lt;/td&gt;
&lt;td&gt;Bu gerçekten ne kadar acil?&lt;/td&gt;
&lt;td&gt;Acı verici bir geçici çözüm, bir öncelik seçiciden daha güçlü bir sinyaldir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sana nasıl bildirelim?&lt;/td&gt;
&lt;td&gt;&amp;quot;Gönderildi&amp;quot; mesajını kim alır?&lt;/td&gt;
&lt;td&gt;Çoğu şablonun atladığı alan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Kasıtlı olarak eksik olan: zorunlu bir alan olarak önerilen bir çözüm (yorum olarak hoş geldin,
çerçeve olarak yanlış), bir öncelik seçici (her gönderen yüksek seçer), ve herhangi bir çaba veya
değer tahmini (triyajdan sonra ekibin işi). Bir çözüm isteyen bir şablon düğmeler için istekler
alır; bir amaç isteyen bir şablon sonuçlar için istekler alır, ve sonuçlar hakkında bir changelog
girdisi yazılır.&lt;/p&gt;
&lt;h2&gt;Şablon&lt;/h2&gt;
&lt;p&gt;Bu, kullandığımız GitHub issue şablonu, form olarak. Bunu &lt;code&gt;.github/ISSUE_TEMPLATE/feature_request.yml&lt;/code&gt;
içine yapıştırın ve Yeni Issue sayfasında yapılandırılmış bir form olarak görüntülenir. Onun
aracılığıyla dosyalanan istekler, bir geri bildirim widget&amp;#39;ından dosyalananlarla aynı alanlara
sahip issue&amp;#39;lar olarak iner, ki bu bir sonraki bölüm için önemlidir.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;name: Feature request
description: What you are trying to do, and what stops you.
labels: [&amp;quot;feature-request&amp;quot;]
body:
  - type: textarea
    id: goal
    attributes:
      label: What are you trying to do?
      description: &amp;gt;-
        The outcome, not the button. &amp;quot;Export a month of invoices as one
        PDF&amp;quot; beats &amp;quot;add a PDF export&amp;quot;.
    validations:
      required: true
  - type: textarea
    id: blocker
    attributes:
      label: What stops you today?
      description: &amp;gt;-
        Where the product runs out. An error, a missing option, a limit.
    validations:
      required: true
  - type: textarea
    id: workaround
    attributes:
      label: What do you do instead?
      description: &amp;gt;-
        The spreadsheet, the script, the manual step. &amp;quot;Nothing, I gave
        up&amp;quot; is a valid answer.
  - type: input
    id: contact
    attributes:
      label: How should we tell you when it ships?
      description: &amp;gt;-
        An email address, or leave blank to be notified only on this
        issue.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;İki detay işi yapıyor. &lt;code&gt;labels: [&amp;quot;feature-request&amp;quot;]&lt;/code&gt;, isteğin biri triyaj edene kadar beklemek
yerine oluşturulduğunda sınıflandırıldığı anlamına gelir. Ve son alan, &amp;quot;sana haber vereceğiz&amp;quot;in bir
söz olduğu ve bir sözün bir adrese ihtiyacı olduğu için var.&lt;/p&gt;
&lt;h2&gt;Bir özellik isteği hangi etiketleri taşımalı?&lt;/h2&gt;
&lt;p&gt;Bir özellik isteği, ne olduğu için bir etiket, ne kadar acil olduğu için bir etiket, ve nereden
geldiği için bir etiket taşımalıdır. Üç etiket, üç eksen, ve her biri farklı bir okuyucu
tarafından okunur.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Etiket&lt;/th&gt;
&lt;th&gt;Değerler&lt;/th&gt;
&lt;th&gt;Kim okuyor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Tür&lt;/td&gt;
&lt;td&gt;&lt;code&gt;feature-request&lt;/code&gt;, &lt;code&gt;bug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hangi kuyruğa gireceğine karar veren&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Öncelik&lt;/td&gt;
&lt;td&gt;&lt;code&gt;priority:low&lt;/code&gt;, &lt;code&gt;priority:medium&lt;/code&gt;, &lt;code&gt;priority:high&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sonraki döngüyü planlayan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kaynak&lt;/td&gt;
&lt;td&gt;&lt;code&gt;from-widget&lt;/code&gt;, &lt;code&gt;from-form&lt;/code&gt;, &lt;code&gt;from-support&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;İsteklerin nereden geldiğini ölçen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Widget, bir gönderimi issue olarak dosyalarken ilk iki ekseni ve &lt;code&gt;from-widget&lt;/code&gt;&amp;#39;ı uygular;
&lt;code&gt;from-form&lt;/code&gt; ve &lt;code&gt;from-support&lt;/code&gt;, başka yollardan gelen istekler için önerilerdir. Widget&amp;#39;ın
etiketleri şunlardır: bir tür (&lt;code&gt;bug&lt;/code&gt; veya &lt;code&gt;feature-request&lt;/code&gt;, sadece mesajdan bir sınıflandırıcı
tarafından karar verilir), bir öncelik (sakin, spesifik bir çökme raporu yüksek; zaten sorulmuş bir
şeyin kopyası düşük; bir güvenlik sorununu ima eden herhangi bir şey ifade ne olursa olsun &lt;code&gt;bug&lt;/code&gt;
ve yüksek), ve &lt;code&gt;from-widget&lt;/code&gt;. Yukarıdaki şablon aracılığıyla elle gelen istekler için de aynı üç
eksen çalışır, ve bu noktadır: bir istek, nereden girmiş olursa olsun bir istektir.&lt;/p&gt;
&lt;p&gt;Bir konvansiyon daha: widget, issue&amp;#39;yu dosyalamadan önce gönderenin e-posta adresini issue
gövdesinden kaldırır, çünkü issue genel olabilecek bir repository&amp;#39;de yaşar, ve onu bir gönderim
referansı ile değiştirir. Adres issue&amp;#39;nun dışında kalır; gönderen sonucu widget&amp;#39;ın kendisinde takip eder. Tracker&amp;#39;ınız ekip dışındaki insanlar
için görünürse iletişim alanıyla aynısını yapın.&lt;/p&gt;
&lt;h2&gt;Bir özellik isteği nasıl bir changelog girdisi olur?&lt;/h2&gt;
&lt;p&gt;Bir özellik isteği, bir pull request issue&amp;#39;yu kapattığında ve o pull request&amp;#39;ten hazırlanan girdi
geri bağlandığında bir changelog girdisi olur. Mekanizma, GitHub&amp;#39;ın kendi kapatma anahtar
kelimeleridir: açıklaması &lt;code&gt;Fixes #142&lt;/code&gt; diyen bir PR, merge&amp;#39;de issue 142&amp;#39;yi kapatır. Changelog
girdileriniz merge edilmiş pull request&amp;#39;lerden hazırlanıyorsa, taslak issue numarasını yanında
taşıyabilir, ve girdi kimin sorduğunu bilir.&lt;/p&gt;
&lt;p&gt;Şablonun çözüm yerine amacı sormasının nedeni budur. Girdi yazıldığında, amaç yazarın ihtiyaç
duyduğu cümledir: &amp;quot;Artık bir aylık faturaları tek bir PDF olarak dışa aktarabilirsiniz&amp;quot; bir
changelog girdisidir. &amp;quot;PDF export eklendi&amp;quot; bir commit mesajıdır. Pull request&amp;#39;lerden hazırlanan
&lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;changelog araçları&lt;/a&gt;, toplama ve bağlantıyı yapabilir; ifade hâlâ bir insana
ihtiyaç duyar, ve o insanın amaca ihtiyacı vardır.&lt;/p&gt;
&lt;h2&gt;Gönderildiğinde ne olur?&lt;/h2&gt;
&lt;p&gt;İsteyen kişiye girdiye bir bağlantıyla söylenir. Bizim kurulumumuzda bu, widget aracılığıyla gelen
istekler için otomatiktir: bir insan girdiyi onayladığında issue&amp;#39;da yayımlanan, gönderilen girdiye
bir bağlantıyla &amp;quot;Shipped — &amp;lt;girdinin başlığı&amp;gt;&amp;quot; diyen bir yorum, bu sırada widget da gönderene aynı
girdiyi gösterir. Bu şablondan elle açılan bir issue otomatik yorum almaz; o döngüyü aynı kuralla
kendiniz kapatın. Yorum kasıtlı olarak merge&amp;#39;de değil onayda
yayımlanır: bir şeyin canlı olduğunu, olmadan önce söyleyen bir yorum, zaman damgalı kırık bir
sözdür. Her istek en fazla bir kez bildirilir; aynı girdinin ikinci bir onayı ikinci bir yorum
üretmez.&lt;/p&gt;
&lt;p&gt;Bunu elle yapıyorsanız, aynı kural geçerlidir. Döngüyü pull request&amp;#39;ten kapatmayın. Onu
yayımlanan girdiden kapatın, ve bir kez kapatın. &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Feed ve widget&lt;/a&gt;, aynı girdiyi sormamış
olan herkese taşır, ki bu çoğu insandır; yorum sormuş olanlar içindir.&lt;/p&gt;
&lt;h2&gt;Çoğu feature-request-şablonu neden başarısız oluyor&lt;/h2&gt;
&lt;p&gt;Triyajı kolaylaştırmak için tasarlanmışlardır ve başarılı olurlar, isteyen kişi için önemli olan
tek an pahasına. On iki alanlı bir şablon daha az istek alır, ve aldıkları on iki alanı doldurmak
için sabra sahip insanlardan gelir, ki bu özelliğe ihtiyaç duyanlarla aynı popülasyon değildir.
Biri &amp;quot;seninle nasıl iletişime geçelim&amp;quot; olan dört alanlı bir şablon daha fazla istek alır ve
hepsine değer verebilir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir feature-request-şablonu öncelik sormalı mı?&lt;/strong&gt;
Hayır. Bunun yerine geçici çözümü sorun. &amp;quot;Bir e-tabloya export ediyorum ve her cuma yeniden
giriyorum&amp;quot;, gönderen kişinin yüksek koyduğu bir açılır menüden daha fazlasını öncelik hakkında
söyler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;İsteyenler bir çözüm önermeli mi?&lt;/strong&gt;
Serbest metinde önerebilirler. Bunu çerçeve yapmayın. Çözüm olarak yazılan istekler birbiriyle
birleştirilmesi ve bir changelog girdisine dönüştürülmesi daha zordur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Özellik istekleri genel bir roadmap&amp;#39;te görünmeli mi?&lt;/strong&gt;
Planlandıktan sonra, evet: aynı issue&amp;#39;daki bir etiket onu planlanan sütuna koyar, ve isteyen kişi
nasıl hareket ettiğini görebilir. &lt;a href=&quot;https://changeloop.dev/blog/tr/public-roadmap/&quot;&gt;Genel roadmap&lt;/a&gt; makalesi mekanizmadır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kopyalarla nasıl başa çıkarım?&lt;/strong&gt;
Yeni isteği mevcut issue&amp;#39;ya bağlayın ve düşük öncelik etiketleyin; kapatmayın. Her kopya,
gönderildiğinde bilgilendirilecek bir kişi daha demektir. Changeloop&amp;#39;un otomatik yorumuyla o kişi,
ancak pull request onun issue&amp;#39;sunu da adlandırırsa bilgilendirilir (&lt;code&gt;Fixes #142, fixes #187&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Şablon nerede yaşamalı?&lt;/strong&gt;
Pull request&amp;#39;i alacak repository&amp;#39;de, böylece kapatma anahtar kelimesi çalışır. Ayrı bir tracker&amp;#39;daki
bir istek, merge&amp;#39;de elle bağlanmak zorundadır, ve atlanan adım budur.&lt;/p&gt;
</content:encoded></item><item><title>Issue tracker&apos;ınızdan genel roadmap, üç sütun</title><link>https://changeloop.dev/blog/tr/public-roadmap/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/public-roadmap/</guid><description>Genel bir roadmap gelecek hakkında bir sözdür. Küçük tutun, zaten takip ettiğiniz issue&apos;lardan besleyin ve her öğeyi issue&apos;sundaki bir etiketle taşıyın.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Genel bir roadmap, inşa etmeyi planladığınız şeylerin, müşterilerin görebileceği bir yerde
yayımlanmış bir listesidir. İşi yapan kelime &lt;em&gt;planlıyorsunuz&lt;/em&gt;: bir roadmap, gelecek hakkında bir
dizi sözdür, ve üzerindeki her öğe ya tutacağınız ya da tutmadığınızın görüleceği bir öğedir. Bir
tane yayımlamanın nedeni budur, ve aynı zamanda çoğu genel roadmap&amp;#39;in bir çeyrek içinde
eskimesinin de nedenidir. Hayatta kalan versiyon küçüktür, zaten sahip olduğunuz veriden
türetilmiştir, ve diğer uçta changelog&amp;#39;a bağlıdır, böylece bir söz kimse onu yeniden girmeden bir
gerçeğe dönüşür.&lt;/p&gt;
&lt;h2&gt;Genel bir roadmap ne için var?&lt;/h2&gt;
&lt;p&gt;Genel bir roadmap, isteği olan bir müşteriye, gönderilmeden önce isteğinin duyulduğunu söyler.
Döngüyü kapatmanın erken yarısıdır: &amp;quot;Planlandı&amp;quot; &amp;quot;biri bunu okudu mu&amp;quot; sorusunu cevaplar, ve
&amp;quot;İnşa ediliyor&amp;quot; &amp;quot;bu gerçekten oluyor mu&amp;quot; sorusunu cevaplar. Hiçbiri son adımın, gönderildiğinde
isteyen kişiye söylemenin yerine geçmez, ama ikisi de bu arada soran insanların sayısını azaltır.&lt;/p&gt;
&lt;p&gt;Aynı zamanda ekip için bir şey yapar: genel bir taahhüdü zorlar, ki bu kimsenin inşa etmeyeceği
dört yüz öğeyi sessizce tutan bir backlog&amp;#39;a karşı bilinen en ucuz çaredir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sütun&lt;/th&gt;
&lt;th&gt;Yaptığı söz&lt;/th&gt;
&lt;th&gt;Bir öğeyi içine taşıyan şey&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Planlandı&lt;/td&gt;
&lt;td&gt;Bunu inşa etmeyi planlıyoruz&lt;/td&gt;
&lt;td&gt;Issue üzerinde etiket olarak kaydedilen bir karar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İnşa ediliyor&lt;/td&gt;
&lt;td&gt;Biri şu anda üzerinde çalışıyor&lt;/td&gt;
&lt;td&gt;Issue üzerinde bir &lt;code&gt;roadmap:building&lt;/code&gt; etiketi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gönderildi&lt;/td&gt;
&lt;td&gt;Canlıda&lt;/td&gt;
&lt;td&gt;Bir &lt;code&gt;roadmap:shipped&lt;/code&gt; etiketi, veya bu etiket dururken issue&amp;#39;yu kapatmak&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Sabit sırayla üç sütun yeterlidir. Dördüncü bir sütun (&amp;quot;değerlendiriliyor&amp;quot;, &amp;quot;inceleniyor&amp;quot;,
&amp;quot;backlog&amp;quot;) iyi niyetlerin bir müzeye dönüştüğü yerdir, ve müşterilerin görmezden gelmeyi öğrendiği
ilk sütundur.&lt;/p&gt;
&lt;h2&gt;Roadmap&amp;#39;iniz genel olmalı mı?&lt;/h2&gt;
&lt;p&gt;Küçük ve dürüst tutabiliyorsanız genel yapın; alternatif uzun bir belki listesiyse özel tutun.
Genel bir roadmap&amp;#39;in maliyetinin onu yayımlamakla hiçbir ilgisi yoktur: üzerindeki her öğe artık
birinin destekte, satış görüşmelerinde ve yenileme konuşmalarında soracağı bir sorudur. İnşa
edeceğiniz on öğe bir varlıktır. İnşa edebileceğiniz altmış öğe, neden yapmadığınıza dair altmış
gelecek konuşmasıdır.&lt;/p&gt;
&lt;p&gt;Yayımlamamak için iki dürüst neden: planlarınız bir çeyrekten daha hızlı değişiyor, veya
rekabetiniz roadmap&amp;#39;inizi müşterilerinizden daha dikkatli okuyor. İkisi de gerçek, ve ikisi de
hiçbir şey yerine daha azını yayımlayarak cevaplanır: sadece &amp;quot;inşa ediliyor&amp;quot;, &amp;quot;planlandı&amp;quot; dahili
tutularak, yine de isteyen bir kişiye issue&amp;#39;sunun hareket ettiğini söyler.&lt;/p&gt;
&lt;h2&gt;GitHub issue&amp;#39;larından genel bir roadmap nasıl inşa edilir?&lt;/h2&gt;
&lt;p&gt;Zaten takip ettiğiniz issue&amp;#39;lara sütun başına bir etiket koyun, ve etiketli issue&amp;#39;ları roadmap
olarak görselleştirin. Hiçbir şey yeniden girilmez, roadmap işten uzaklaşamaz, ve bir müşteri
isteği olarak başlayan aynı issue kimliğini değiştirmeden sütunlar arasında hareket eder.&lt;/p&gt;
&lt;p&gt;Mekanizma, çalıştırdığımız şekliyle:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Sabit önek ile sütun başına bir etiket&lt;/strong&gt;: &lt;code&gt;roadmap:planned&lt;/code&gt;, &lt;code&gt;roadmap:building&lt;/code&gt;,
&lt;code&gt;roadmap:shipped&lt;/code&gt;. Bağlı bir repository&amp;#39;de bunlardan birini taşıyan herhangi bir issue o
sütunda görünür. Bunlardan hiçbirine sahip olmayan bir issue roadmap&amp;#39;te değildir, ki bu çoğu
issue&amp;#39;dur, ki bu doğrudur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sütunlar sıralı bir dizidir, her zaman aynı sırada.&lt;/strong&gt; Planlandı, inşa ediliyor, gönderildi.
İsme göre indekslenmiş bir harita değil, böylece bir okuyucu (veya bir widget) sırayı asla
tahmin etmek zorunda kalmaz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bir issue iki etiket taşıyorsa, en ileride olan kazanır.&lt;/strong&gt; Biri &lt;code&gt;roadmap:planned&lt;/code&gt;&amp;#39;ı
kaldırmadan önce &lt;code&gt;roadmap:shipped&lt;/code&gt;&amp;#39;ı ekleyecektir; &amp;quot;hangi webhook son geldi&amp;quot; tarafından
yönlendirilen bir durum makinesi, teslimat sırasına bağlı olarak öğeyi farklı sütunlara
koyardı. Sadece etiket kümesinden karar vermek, olayların nasıl geldiğinden bağımsız olarak
cevabı aynı yapar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gönderildi, diğerleri gibi bir etiket durumudur.&lt;/strong&gt; Kart, issue &lt;code&gt;roadmap:shipped&lt;/code&gt; aldığında
veya bu etiketi taşırken kapatıldığında taşınır. Kartın kendisi changelog girdisine bağlanmaz;
ayrıntılar, issue&amp;#39;yu kapatan pull request&amp;#39;ten hazırlanan girdidedir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onu veri olarak sunun.&lt;/strong&gt; Roadmap, aynı önbellek başlıklarıyla changelog akışının yanında
yayımlanan bu üç sütunlu bir JSON belgesidir, böylece bir doküman sitesi, bir widget veya bir
durum sayfası ikinci bir entegrasyon olmadan onu görselleştirebilir. &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Feed dokümantasyonu&lt;/a&gt;
tam şeklini içerir.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bir etiket, bir maintainer&amp;#39;dan istenecek küçük bir şeydir, ve tüm entegrasyon budur. Senkronize
tutulacak bir pano yok, giriş yapılacak ayrı bir araç yok, ve müşterinin dosyaladığı istek
roadmap&amp;#39;teki öğedir; gönderildiğinde, aynı öğedir.&lt;/p&gt;
&lt;h2&gt;Genel bir roadmap neyi içermemeli?&lt;/h2&gt;
&lt;p&gt;Dokuz ay sonra sorulmasından utanacağınız tarihleri, tahminleri, veya herhangi bir şeyi
içermemelidir. Tarihler klasik hatadır: bir roadmap&amp;#39;teki bir çeyrek bir satış sunumunda bir
taahhüde dönüşür, &amp;quot;Q3 dediniz&amp;quot; adında bir bilete dönüşür. Sütunlar yeterince söyler. &amp;quot;İnşa
ediliyor&amp;quot; zaten &amp;quot;biri üzerinde olacak kadar yakında&amp;quot; anlamına gelir.&lt;/p&gt;
&lt;p&gt;Ayrıca dahili backlog&amp;#39;u içermemelidir. Üç yüz öğesi olan bir roadmap bir söz değil bir arama
sorunudur, ve isteğini 212. pozisyonda bulan müşteri ona söylemek istemediğiniz bir şey öğrenmiştir.&lt;/p&gt;
&lt;h2&gt;Roadmap changelog&amp;#39;a nasıl bağlanır?&lt;/h2&gt;
&lt;p&gt;Roadmap ve changelog aynı issue&amp;#39;ları iki taraftan anlatır, biri gelecek için biri geçmiş için.
Kimse ayrı bir panoda kart taşımaz. Bir maintainer zaten üzerinde çalıştığı issue&amp;#39;nun etiketini
değiştirir, girdi pull request&amp;#39;ten hazırlanır, ve bir insan o girdiyi onayladığında widget geri bildirimi o
issue&amp;#39;ya dönüşen isteyen kişi orada bilgilendirilir. Kartı gönderildi&amp;#39;ye taşımak yine ayrı bir adımdır, &lt;code&gt;roadmap:shipped&lt;/code&gt;
etiketi, bu yüzden onu aynı incelemenin parçası yapın; girdiyi onaylamak bunu sizin yerinize
yapmaz.&lt;/p&gt;
&lt;p&gt;Bu, &lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;geri bildirim döngüsü makalesinin&lt;/a&gt; changelog tarafından
tarif ettiği aynı döngüdür; roadmap müşterinin ortasında gördüğü şeydir.
&lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;Changelog araçları&lt;/a&gt; özeti, hangi ürünlerin bir roadmap görünümü sunduğunu ve
hangilerinin onu ayrı bir pano olarak ele aldığını kapsar, ki bu doğru kalıp kalmadığına karar
veren farktır.&lt;/p&gt;
&lt;h2&gt;İyi bir genel roadmap nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Kısa görünür, ve üzerindeki her öğe herkesin açabileceği bir issue&amp;#39;dur. Test, bir müşterinin bir
öğeden arkasındaki tartışmaya, ve gönderilen bir öğeden gerçekte neyin değiştiğini tarif eden
girdiye gidip gidemeyeceğidir. Girişi olmayan özellik isimlerinin bir listesi olan bir roadmap bir
broşürdür.&lt;/p&gt;
&lt;p&gt;Bir widget&amp;#39;ın getireceği JSON olarak işlenmiş bir örnek:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &amp;quot;columns&amp;quot;: [
    { &amp;quot;column&amp;quot;: &amp;quot;planned&amp;quot;, &amp;quot;hasMore&amp;quot;: false, &amp;quot;items&amp;quot;: [
      { &amp;quot;id&amp;quot;: &amp;quot;6b0c1f...&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;planned&amp;quot;,
        &amp;quot;publicTitle&amp;quot;: &amp;quot;Saved views on the inbox&amp;quot;,
        &amp;quot;publicDescription&amp;quot;: &amp;quot;Keep a filter you use often and come back to it.&amp;quot;,
        &amp;quot;publishedAt&amp;quot;: &amp;quot;2026-09-16T10:04:11.000Z&amp;quot; }
    ]},
    { &amp;quot;column&amp;quot;: &amp;quot;building&amp;quot;, &amp;quot;hasMore&amp;quot;: false, &amp;quot;items&amp;quot;: [
      { &amp;quot;id&amp;quot;: &amp;quot;71a4e2...&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;building&amp;quot;,
        &amp;quot;publicTitle&amp;quot;: &amp;quot;Roadmap column in the widget&amp;quot;,
        &amp;quot;publicDescription&amp;quot;: &amp;quot;See what is coming without leaving the page.&amp;quot;,
        &amp;quot;publishedAt&amp;quot;: &amp;quot;2026-09-12T08:20:02.000Z&amp;quot; }
    ]},
    { &amp;quot;column&amp;quot;: &amp;quot;shipped&amp;quot;, &amp;quot;hasMore&amp;quot;: false, &amp;quot;items&amp;quot;: [
      { &amp;quot;id&amp;quot;: &amp;quot;5c9d70...&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;shipped&amp;quot;,
        &amp;quot;publicTitle&amp;quot;: &amp;quot;Feedback filed as labelled issues&amp;quot;,
        &amp;quot;publicDescription&amp;quot;: &amp;quot;Widget submissions arrive as issues your triage already handles.&amp;quot;,
        &amp;quot;publishedAt&amp;quot;: &amp;quot;2026-09-02T15:41:37.000Z&amp;quot; }
    ]}
  ],
  &amp;quot;enabled&amp;quot;: true,
  &amp;quot;language&amp;quot;: &amp;quot;en&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Üç sütunda üç öğe, mükemmel iyi bir genel roadmap&amp;#39;tir. Neyin geldiğini, neyin olduğunu, ve neyin
olmuş olduğunu söyler, ve her satırı kontrol edilebilir. Now/Next/Later&amp;#39;dan sonuç bazlıya kadar
beş başka düzen, örnek maddelerle &lt;a href=&quot;https://changeloop.dev/blog/tr/product-roadmap-examples/&quot;&gt;ürün roadmap örnekleri&lt;/a&gt;
yazısında gösteriliyor.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Genel bir roadmap&amp;#39;te kaç öğe olmalı?&lt;/strong&gt;
Savunabileceğiniz kadar az. Tüm sütunlarda on&amp;#39;un altı küçük bir ürün için normaldir; &amp;quot;planlandı&amp;quot;da
otuzdan fazlası genellikle bir roadmap kılığındaki bir backlog&amp;#39;dur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Genel bir roadmap&amp;#39;te tarihler olmalı mı?&lt;/strong&gt;
Hayır. Sütunlar, bir son tarih yaratmadan sıra iletir. Bir müşterinin bir tarihe ihtiyacı varsa, bu
bir konuşmadır, bir roadmap öğesi değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Müşteriler roadmap öğeleri için oy vermeli mi?&lt;/strong&gt;
Oylar kimin geldiğini ölçer, neyin önemli olduğunu değil. Bugün kullandıkları geçici çözümü
açıklayan issue üzerindeki bir yorum, elli oydan daha değerlidir, ve oy verene bir şeye mal olur,
ki bu önemli olan noktadır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;İptal edilen bir roadmap öğesine ne olur?&lt;/strong&gt;
Etiketi kaldırın ve issue üzerinde nedenini söyleyin. Genel bir &amp;quot;bunu yapmayacağız&amp;quot; döngünün bir
parçasıdır, ve çoğu ekibin hiç göndermediği mesajdır.&lt;/p&gt;
</content:encoded></item><item><title>Changelog otomasyonu, ve sınırları</title><link>https://changeloop.dev/blog/tr/changelog-automation/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/changelog-automation/</guid><description>Toplama, biçimlendirme ve yayımlamayı otomatikleştirin. Seçimi ya da ifadeyi otomatikleştirmeyin. Çizginin nerede olduğu ve kaydığında ne olduğu.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Changelog otomasyonu, toplama, sınıflandırma ve yayımlamayı otomatikleştirdiğinde işe yarar, ve
seçim ile ifadede durur. Her şeyi otomatikleştirin ve biçimlendirilmiş bir git log gönderirsiniz;
hiçbirini otomatikleştirmeyin ve changelog sürümlerden önce, hafızadan, ani atılımlarla yazılır.
Faydalı soru hangi kısımları otomatikleştireceğinizdir, ne kadarını değil.&lt;/p&gt;
&lt;p&gt;Changelog otomasyon projeleri iki yönden birinde başarısız olur, ve her ikisi de ilk tasarım
toplantısından tahmin edilebilir. Çok az otomatikleştirin ve changelog birinin güncellemesi
gereken bir belge haline gelir, ki bu kısa çöp çekeni kim aldıysa onun tarafından ani atılımlarla
güncellendiği anlamına gelir. Çok fazla otomatikleştirin ve biçimlendirilmiş bir git log haline
gelir: eksiksiz, doğru, ve kimsenin okumadığı.&lt;/p&gt;
&lt;h2&gt;Bir changelog&amp;#39;un hangi kısımları otomatikleştirilmeli?&lt;/h2&gt;
&lt;p&gt;Dört adımdan üçü. Toplama ve yayımlama tamamen; sınıflandırma insan müdahalesiyle ilk geçiş
olarak; seçim ve ifade asla.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Adım&lt;/th&gt;
&lt;th&gt;Otomatikleştir mi?&lt;/th&gt;
&lt;th&gt;Neden&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Toplama: commit&amp;#39;lerden, PR&amp;#39;lardan, ticket&amp;#39;lardan bir listeye değişiklikler&lt;/td&gt;
&lt;td&gt;Tamamen&lt;/td&gt;
&lt;td&gt;Sıkıcı, son tarih altında atlanır, makineler mükemmel yapar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sınıflandırma: Added, Fixed, Changed, Deprecated, Removed, Security&lt;/td&gt;
&lt;td&gt;İlk geçiş, insan müdahalesi&lt;/td&gt;
&lt;td&gt;Sadece metadata&amp;#39;dan yaklaşık %80 doğru; yanlış %20 önemli olan girdilerdir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seçim ve ifade: okuyucuya ne söylenmeli, ve nasıl&lt;/td&gt;
&lt;td&gt;Asla&lt;/td&gt;
&lt;td&gt;Artefaktın tüm değeri budur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yayımlama: sayfa, akış, e-posta, widget, Slack&lt;/td&gt;
&lt;td&gt;Tamamen, tek kaynaktan&lt;/td&gt;
&lt;td&gt;Çoğu manuel çabanın gerçekte gittiği yer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Toplama.&lt;/strong&gt; Değişiklikleri gerçekleştikleri yerden (commit&amp;#39;ler, PR&amp;#39;lar, ticket&amp;#39;lar) alıp bir
listeye koymak. Bunu tamamen otomatikleştirin. İnsanlar bunda kötüdür, sıkıcıdır, ve son tarih
altında atlanan adımdır. &lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;Conventional commits&lt;/a&gt; veya
PR etiketleri genellikle ham malzemedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sınıflandırma.&lt;/strong&gt; Bir şeyin Added, Fixed, Changed, Deprecated, Removed veya Security olup
olmadığına karar vermek. Commit türünden veya PR etiketinden ilk geçişi otomatikleştirin, ve bir
insanın geçersiz kılmasına izin verin. Buradaki doğruluk sadece metadata&amp;#39;dan yaklaşık yüzde
seksendir, ve yanlış yüzde yirmi tam olarak önemli olan girdilerde yoğunlaşır, çünkü belirsizlik
önemle korelasyon gösterir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Seçim ve ifade.&lt;/strong&gt; Bir okuyucuya ne söylenmesi gerektiğine ve nasıl söyleneceğine karar vermek.
&lt;strong&gt;Bunu otomatikleştirmeyin.&lt;/strong&gt; Artefaktın tüm değeri budur. Geri kalan her şey lojistiktir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yayımlama.&lt;/strong&gt; Tamamlanmış girdileri bir sayfaya, bir akışa, bir e-postaya, uygulama içi bir
widget&amp;#39;a, bir Slack kanalına götürmek. Tamamen, ve tek bir kaynaktan otomatikleştirin. Çoğu manuel
çabanın gerçekte gittiği yer burasıdır, ve neredeyse kimse bunu saymaz. Aynı zamanda değişikliği
isteyen kişiye gönderildiğini söyleyebilen adımdır, ki bu
&lt;a href=&quot;https://changeloop.dev/blog/tr/customer-feedback-loop/&quot;&gt;geri bildirim döngüsünü changelog tarafından kapatmak&lt;/a&gt;&amp;#39;ın
tamamıdır. E-posta yarısının, &lt;a href=&quot;https://changeloop.dev/blog/tr/product-update-email/&quot;&gt;ürün güncellemesi e-posta şablonu&lt;/a&gt;&amp;#39;nda
kendi biçimi var.&lt;/p&gt;
&lt;p&gt;Son nokta üzerinde durmaya değer. Ekipler changelog&amp;#39;u bir yazma sorunu olarak görme eğilimindedir,
ve sonra çoğu zamanı dağıtıma harcarlar: girdileri bir e-posta aracına kopyalamak, uygulama içi için
yeniden biçimlendirmek, Slack&amp;#39;e yapıştırmak, bir doküman sayfasını güncellemek. Yazmak bir saat
sürer. Kopyalamak her sürüm için bir saat sürer, sonsuza dek, ve bu bir makinenin sahip olması
gereken kısımdır.&lt;/p&gt;
&lt;h2&gt;Çizgi kaydığında ne olur?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Yukarı kaydırın ve bir git dump&amp;#39;ı alırsınız.&lt;/strong&gt; Commit&amp;#39;lerden tam otomasyon, müşterilerin
önünde &lt;code&gt;bump deps&lt;/code&gt;, &lt;code&gt;fix flaky test&lt;/code&gt;, &lt;code&gt;wip&lt;/code&gt; ve &lt;code&gt;address review comments&lt;/code&gt; üretir. Bunu yapan her
ekip sonrasında bir filtre eklemiştir, ve filtre başka bir isim altında yeniden tanıtılmış, daha
kötü ergonomiye sahip bir seçim adımıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aşağı kaydırın ve ani atılımlar alırsınız.&lt;/strong&gt; Tamamen manuel toplama, girdilerin sürüm zamanında
hafızadan yazıldığı anlamına gelir. Bu, &lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt;&amp;#39;un
en başta uyardığı moddur, ve sessizce bozulur: changelog, kimsenin vakti olmadığı haftaya kadar
bakımlı görünür.&lt;/p&gt;
&lt;h2&gt;Bir changelog otomasyon pipeline&amp;#39;ı nasıl görünür?&lt;/h2&gt;
&lt;p&gt;Bir taslağın halka açık hale geldiği yere yerleştirilmiş tam olarak bir insan kapısı ile dört adım.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Merge&amp;#39;de, PR&amp;#39;dan bir taslak girdi türetin: etiketten veya commit önekinden tür, ilk taslak
olarak başlık, PR&amp;#39;a geri bağlantı, kaydedilen yazar. Yayımlanmamış bir kovaya yerleştirin.&lt;/li&gt;
&lt;li&gt;Herkes herhangi bir zamanda herhangi bir taslağı düzenleyebilir, ve düzenlemek ucuzdur. Çoğu bir
satırlık yeniden yazım alır.&lt;/li&gt;
&lt;li&gt;Bir sürüm kesmek, kovadaki her girdinin ya düzenlenmiş ya da açıkça dahili olarak
işaretlenmiş olmasını gerektirir. Bu kapı tüm tasarımdır. Onsuz, taslaklar meşgul haftada
düzenlenmemiş olarak gönderilir.&lt;/li&gt;
&lt;li&gt;Yayımlamak, yayımlanmış setten bir fan-out&amp;#39;tur: genel sayfa, akış, e-posta, widget, Slack
gönderisi. Tek kaynak, birden çok görselleştirme, kopyalama yok.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Adım 3, bir insanın gerekli olduğu tek yerdir, ve taslaklar makul olduğunda sürüm başına yaklaşık
on dakika sürer. Bir müşteri talebinin dahil olduğu yerde, taslak ayrıca kapattığı issue&amp;#39;yu taşır,
ki bu adım 4&amp;#39;ün talep edeni bilgilendirmesini sağlayan şeydir;
&lt;a href=&quot;https://changeloop.dev/blog/tr/feature-request-template/&quot;&gt;feature-request-şablonu&lt;/a&gt; bu bağlantının hayatta kalması için
tasarlanmıştır. Bu adımın daha geniş release akışında nerede durduğu &lt;a href=&quot;https://changeloop.dev/blog/tr/release-management-process/&quot;&gt;release yönetimi süreci&lt;/a&gt;
yazısının konusudur.&lt;/p&gt;
&lt;h2&gt;Otomasyon verilerinizden ne gerektirir?&lt;/h2&gt;
&lt;p&gt;Yukarıdakilerin hiçbiri, changelog bir Markdown dosyasıysa çalışmaz, çünkü bir dosya yeniden
parse edilmeden beş yüzeye görselleştirilemez, ve düz yazıyı parse etmek yarım bir başlık
gösteren bir widget&amp;#39;la sonuçlanmanızın yoludur.&lt;/p&gt;
&lt;p&gt;Girdilerin yapılandırılmış olması gerekir: bir tür, bir tarih, bir sürüm veya sürüm tanımlayıcısı,
bir hedef kitle, bir gövde ve bir bağlantı. O zaman dosya, sayfa, akış ve e-posta hepsi
görünümlerdir. Bu yapısal nokta, bir araç seçmeden önce doğru yapmaya değer olan tek şeydir, çünkü
bu ucuza sonradan ekleyemeyeceğiniz şeydir. Bunların
hiçbiri, ihtiyaç duyan her değişiklik için gerçekten bir kayıt oluşturulmadıkça çalışmaz;
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-ci-enforcement/&quot;&gt;CI&amp;#39;da bir changelog kaydını zorunlu kılmak&lt;/a&gt; bu adımı hafızaya
bırakmak yerine pipeline&amp;#39;ın kayıtsız merge&amp;#39;ü nasıl reddedeceğini ele alır.&lt;/p&gt;
&lt;p&gt;Changelog&amp;#39;un önce bir akış sonra bir sayfa olduğu &lt;a href=&quot;https://changeloop.dev/&quot;&gt;changeloop&lt;/a&gt;&amp;#39;u inşa ediyoruz, bu yüzden bunu
tarafsız bir öneri yerine bir çıkar olarak okuyun; &lt;a href=&quot;https://changeloop.dev/pricing&quot;&gt;fiyatlandırma&lt;/a&gt; kartsız bir ücretsiz
repository&amp;#39;dir, şekli görmeye yeterlidir. &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;Changelog araçları&lt;/a&gt; rakip olduğumuz
ürünler dahil, başka ne olduğunun özetimizdir, ve &lt;a href=&quot;https://changeloop.dev/changelog-generator&quot;&gt;changelog üreticisi&lt;/a&gt; bir
pipeline&amp;#39;a bağlanmadan önce türetmeyi görmek isterseniz toplama ve sınıflandırma adımlarını
tarayıcıda yapar.&lt;/p&gt;
&lt;h2&gt;Test&lt;/h2&gt;
&lt;p&gt;Bir değişikliğin merge edilmesi ile o değişikliğin repo&amp;#39;nuzu okumayan bir müşteri için görünür
olması arasındaki dakikaları sayın. Bu dakikaların çoğu birinin araçlar arasında metin
kopyalamasıysa, ihtiyacınız olan otomasyon yazmada değil yayımlamadadır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Yapay zeka changelog&amp;#39;u yazabilir mi?&lt;/strong&gt;
Bir taslak hazırlayabilir. Merge edilmiş pull request&amp;#39;i verilen bir model çoğunlukla başlık ve
gövdenin kullanılabilir bir ilk taslağını üretir, ki bu toplama ve sınıflandırma adımlarının daha
iyi yapılmasıdır. Seçim, bir okuyucuya bir şey söylenip söylenmemesi gerektiği, ve son ifade hâlâ
hedef kitleyi bilen kişiye ihtiyaç duyar, ve o kapı olmadan taslak yayımlayan bir pipeline yanlış
adımı otomatikleştirmiştir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog üreticisi ile changelog otomasyonu arasındaki fark nedir?&lt;/strong&gt;
Bir üretici commit&amp;#39;leri talep üzerine bir kez biçimlendirilmiş bir listeye dönüştürür. Otomasyon
her merge&amp;#39;de çalışır, yayımlanmamış bir kova tutar, sürümü insan incelemesine bağlar, ve tek bir
kaynaktan her yüzeye yayımlar. Üretici, elle çalıştırılan pipeline&amp;#39;ın ilk adımıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changelog commit&amp;#39;lerden mi yoksa pull request&amp;#39;lerden mi otomatikleştirilmeli?&lt;/strong&gt;
Değişim biriminin PR olduğu pull request&amp;#39;lerden: başlık ve açıklama tüm değişiklik için bir kez
yazılır, ve PR kapattığı issue&amp;#39;yu bağlar. Commit tabanlı türetim, commit birim olduğunda ve bir
konvansiyonu takip ettiğinde işe yarar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Otomasyonun dahili değişiklikleri yayımlaması nasıl önlenir?&lt;/strong&gt;
&lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt; ve bağımlılık güncellemelerini varsayılan olarak dahili
sınıflandırın, ve genele terfiyi bilinçli bir eylem yapın. Kimse gizlemedikçe genel olan ters
varsayılan, &lt;code&gt;bump deps&lt;/code&gt;in müşterilere nasıl ulaştığıdır.&lt;/p&gt;
</content:encoded></item><item><title>Changelog vs release notes: fark nedir?</title><link>https://changeloop.dev/blog/tr/changelog-vs-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/changelog-vs-release-notes/</guid><description>Bir changelog bir şey arayanlar için sürekli bir kayıttır. Release notes ilgilenip ilgilenmeyeceğine karar verenler için özenle seçilmiş bir mesajdır.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bir changelog, bir şey arayan biri için yazılmış, değişen her şeyin sürekli, birikimli bir
kaydıdır. Release notes ise, onu ilgilendirip ilgilendirmediğine karar veren biri için yazılmış,
tek bir sürüm hakkında özenle seçilmiş bir mesajdır. Fark biçimlendirmede değil hedef kitlededir,
ve çoğu ekibin ikisine de ihtiyacı vardır: biri referans olarak, biri duyuru olarak, aynı
girdilerden türetilmiş.&lt;/p&gt;
&lt;p&gt;Çoğu ekip birine kazara diğerine talep üzerine sahip olur. Bir geliştirici neyin yayımlandığının
bir kaydını istediği için bir changelog&amp;#39;la başlarsınız. Aylar sonra destekten biri müşterilerin
Nisan&amp;#39;dan beri canlı olan bir özelliği neden bilmediğini sorar, ve artık release notes&amp;#39;a ihtiyacınız
var.&lt;/p&gt;
&lt;h2&gt;Changelog vs release notes, yan yana&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Changelog&lt;/th&gt;
&lt;th&gt;Release notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Okuyucu&lt;/td&gt;
&lt;td&gt;Bir şey arayan biri&lt;/td&gt;
&lt;td&gt;İlgilenip ilgilenmeyeceğine karar veren biri&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kapsam&lt;/td&gt;
&lt;td&gt;Değişen her şey&lt;/td&gt;
&lt;td&gt;Bu sürüm hakkında söylenmeye değer olan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sıklık&lt;/td&gt;
&lt;td&gt;Sürekli, merge veya sürüm başına&lt;/td&gt;
&lt;td&gt;Sürüm başına, ve sadece duyurulmaya değer olanlar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ton&lt;/td&gt;
&lt;td&gt;Kısa, gerçekçi, sık sık emir kipi&lt;/td&gt;
&lt;td&gt;Açıklayıcı, bazen ikna edici&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ömür&lt;/td&gt;
&lt;td&gt;Kalıcı, yıllar sonra da okunur&lt;/td&gt;
&lt;td&gt;İlk hafta okunur, sonra arşivlenir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yaşadığı yer&lt;/td&gt;
&lt;td&gt;Repo, bir doküman sitesi, bir &lt;code&gt;/changelog&lt;/code&gt; sayfası&lt;/td&gt;
&lt;td&gt;E-posta, uygulama içi, bir blog yazısı, bir sürüm sayfası&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Başarısız olduğu şey&lt;/td&gt;
&lt;td&gt;Eksik olmak&lt;/td&gt;
&lt;td&gt;Sıkıcı olmak, veya olaydan sonra gelmek&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Bir changelog nedir?&lt;/h2&gt;
&lt;p&gt;Bir changelog, en yeniden başlayarak, her girdi türlendirilmiş (added, changed, deprecated,
removed, fixed, security) ve tarihli, kronolojik, neredeyse eksiksiz bir değişim kaydıdır.
Okuyucusu zaten ilgilendiğine karar vermiştir. Bir şey arıyor: bir davranış ne zaman değişti, bir
hata düzeltildi mi, hangi sürüm bir flag getirdi. Eksiksizlik tüm değerdir, bu yüzden
&lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; konvansiyonu tek sayfasının çoğunu
yapıya harcar ve neredeyse hiçbirini düz yazıya.&lt;/p&gt;
&lt;h2&gt;Release notes nedir?&lt;/h2&gt;
&lt;p&gt;Release notes, düz yazı olarak yazılmış, seçici bir mesajdır, tek bir sürüm hakkında. Okuyucusu
henüz hiçbir şeye karar vermemiştir. Bu sürümün onu ilgilendirip ilgilendirmediğine, ve bir şey
yapması gerekip gerekmediğine karar veriyor. Seçim tüm değerdir: her şeyi listeleyen bir release
note, paragraflı bir changelog&amp;#39;dur, ve bir şeyleri atlayan bir changelog okuyucusunu nasıl
başarısız kılıyorsa aynı şekilde okuyucusunu başarısız kılar.
&lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;Release notes nasıl yazılır&lt;/a&gt; seçim ve ifadelendirme
hakkındadır.&lt;/p&gt;
&lt;h2&gt;Hem bir changelog&amp;#39;a hem release notes&amp;#39;a ihtiyacınız var mı?&lt;/h2&gt;
&lt;p&gt;İki hedef kitleniz farklı şeyler istediğinde ikisine de ihtiyacınız var; o zamana kadar iki işi
yapan tek bir artefakt doğrudur. Küçük ekipler, her girdinin başında kısa bir paragraf içeren tek
bir &lt;code&gt;/changelog&lt;/code&gt; sayfası yayımlar, ve bir süre bu bir düzeltme arayan geliştiriciye ve haberleri
tarayan bir müşteriye eşit derecede hizmet eder. Çok erken bölmek size sürdürülecek iki şey verir
ve ikisinden biri çürür.&lt;/p&gt;
&lt;p&gt;Bölünme şu olmaya başladığında değerli hale gelir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changelog girdileriniz geliştiricilerin kaydırıp geçtiği açıklayıcı paragraflara büyümüştür.&lt;/li&gt;
&lt;li&gt;Ya da tam tersi: sürüm duyurularınız bağımlılık güncellemelerini listelemeye başlamıştır.&lt;/li&gt;
&lt;li&gt;Destek girdileri e-postalara kopyalıyor ve yolda yeniden yazıyor.&lt;/li&gt;
&lt;li&gt;Biri &amp;quot;sadece breaking change&amp;#39;ler&amp;quot; istiyor ve onları filtreleyemiyorsunuz.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sonuncusu gerçek işarettir. Kimse her şeyi okumadan &amp;quot;beni etkileyen ne değişti&amp;quot; diye cevap
veremiyorsa, iki işi kötü yapan tek bir artefaktınız var demektir.&lt;/p&gt;
&lt;h2&gt;Tek bir kaynak, iki görünüm&lt;/h2&gt;
&lt;p&gt;Hata onları iki belge olarak ele almaktır. Aynı değişiklik kümesinin iki görünümüdür.&lt;/p&gt;
&lt;p&gt;Changelog&amp;#39;u ilerledikçe yazın, anlamlı her değişiklik için bir girdi, her biri ne olduğuyla
etiketlenmiş: fixed, added, changed, removed, deprecated, security. Girdileri birini yazmanın bir
karar olmayacağı kadar kısa tutun. Sonra, sürüm zamanında, release notes bir seçim ve yeniden
yazımdır: bir insanı ilgilendiren girdileri alın, birine ne yapmasını sağladıklarına göre
gruplandırın, ve nedeni en üste koyun.&lt;/p&gt;
&lt;p&gt;Bunun pratik bir sonucu var. Changelog kaynaksa, yapılandırılmış veri olması gerekir, elle
tutulan bir sayfa değil. Bir girdinin bir türe, bir tarihe, bir sürüme, ve kim için olduğunu
söyleyen bir yola ihtiyacı vardır. Bunu sahip olduğunda, genel sayfa, uygulama içi
widget ve RSS veya JSON feed&amp;#39;i tek bir şeyin üç görselleştirmesi olur, ve kimse bir müşteriye giden yolda
hiçbir şeyi yeniden yazmaz. Bir release notes e-postası, e-postanızı hangi araç gönderiyorsa oradan
aynı girişi alıntılayabilir. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog otomasyonu&lt;/a&gt; bu adımlardan
hangisinin bir makineye ait olması gerektiğiyle ilgilidir. Bu, bir changelog&amp;#39;u sayfa yerine bir
akış olarak ele almanın tüm argümanıdır. Aynı zamanda, tam şeffaflıkla, bizim inşa ettiğimiz
şeydir, bu yüzden bunu tarafsız bir araştırma yerine bir çıkar olarak okuyun.&lt;/p&gt;
&lt;h2&gt;Sadece birine vaktiniz varsa&lt;/h2&gt;
&lt;p&gt;Changelog&amp;#39;u yazın. Girdi başına daha ucuzdur, yazdığınız gün faydalıdır, ve release notes daha
sonra ondan türetilebilir. Tersi doğru değildir: on iki duyuru e-postasından bir yıllık
değişikliği yeniden oluşturamazsınız, ve insanlar sizden bunu isteyecektir.&lt;/p&gt;
&lt;p&gt;Türetmenin mümkün kalması için sabit bir formatta tutun. &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;Changelog örnekleri&lt;/a&gt;
sayfamız bunu iyi yapan ekiplerin girdilerini toplar, ve &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes şablonu&lt;/a&gt;
bir girdi setini göndermeye değer bir şeye dönüştürürken kullandığımız formdur.&lt;/p&gt;
&lt;h2&gt;Adlandırma üzerine bir not&lt;/h2&gt;
&lt;p&gt;Bunların hiçbiri standardize değildir, ve &amp;quot;release notes&amp;quot;un sürekli bir liste için, &amp;quot;changelog&amp;quot;un
üç aylık bir duyuru için kullanıldığını göreceksiniz. Kelimeler hakkında tartışmak buna değmez. İki
işten hangisini her artefaktınızın yaptığına karar verin, onu ekibinizin zaten çağırdığı gibi
adlandırın, ve ikisinin de sessizce ikisini birden yapmadığından emin olun.&lt;/p&gt;
&lt;p&gt;Sonucun hangi yüzeyde bittiği ayrı bir karardır, &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-page/&quot;&gt;bir changelog sayfası nasıl kurulur&lt;/a&gt;&amp;#39;da
ele alınır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog release notes ile aynı şey midir?&lt;/strong&gt;
Hayır. Bir changelog, bir şey arayanların okuduğu eksiksiz kayıttır; release notes,
ilgilenip ilgilenmeyeceğine karar verenlerin okuduğu seçilmiş duyurudur. Aynı değişiklik ikisinde
de görünür, her okuyucu için farklı ifade edilmiş olarak.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes bir changelog&amp;#39;dan oluşturulabilir mi?&lt;/strong&gt;
Evet, ve bu doğru yöndür. Bir insanı ilgilendirecek girdileri seçin, sonuca göre gruplayın,
başlığı yeniden yazın. Tersi, bir changelog&amp;#39;u duyurulardan yeniden oluşturmak, duyuruların dışarıda
bıraktığı her şeyi kaybeder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog nerede yaşamalı?&lt;/strong&gt;
Okuyucunun bir depoya ihtiyaç duymadan ulaşabileceği kalıcı ve bağlanabilir bir yerde: bir
&lt;code&gt;/changelog&lt;/code&gt; sayfası, bir doküman sitesi, veya birden çok yerde görselleştirilen bir akış. Tek
başına bir &lt;code&gt;CHANGELOG.md&lt;/code&gt; katkıda bulunanlara ulaşır, müşterilere değil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog dahili değişiklikleri içermeli mi?&lt;/strong&gt;
Evet, en altta, her biri bir satır. Changelog eksiksiz kayıttır. Release notes da
onları kısa bir son bölümde tutabilir, yeter ki okuyucunun fark edeceği değişiklikler önce gelsin.&lt;/p&gt;
</content:encoded></item><item><title>Conventional commits&apos;ten bir changelog&apos;a</title><link>https://changeloop.dev/blog/tr/conventional-commits-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/conventional-commits-changelog/</guid><description>Conventional commits bir changelog&apos;u türetilebilir yapar. Okunabilir yapmaz. Konvansiyonun sağladığı, durduğu yer, ve boşluğu nasıl kapatacağınız.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Conventional commits bir changelog&amp;#39;a ücretsiz üç şey verir: her değişikliğin türü, dokunduğu
sistem parçası, ve bir şeyi bozup bozmadığı. Başka bir şey vermezler. Changelog olan ifade,
gruplandırma ve seçim tamamen açık kalır, ve aksini iddia eden bir pipeline biçimlendirilmiş bir
git log gönderir.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;feat(exports): add CSV column selection
fix(auth): reject expired refresh tokens
chore(deps): bump node-pg to 8.11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; formatında üç commit. Bunlardan, bir
makine size birinin özellik, birinin düzeltme, birinin ev işi olduğunu, ve her birinin sistemin
hangi parçasına dokunduğunu söyleyebilir. Bu gerçekten faydalıdır, ve konvansiyonun tüm sözü
budur: bir insandan başka bir şey tarafından okunabilen bir commit geçmişi. Hata, bunun size bir
changelog verdiğini düşünmektir. Size ham malzemeyi verir.&lt;/p&gt;
&lt;h2&gt;Konvansiyon neyi belirtir?&lt;/h2&gt;
&lt;p&gt;Bir tür, isteğe bağlı bir scope, ve bir açıklama: &lt;code&gt;type(scope): description&lt;/code&gt;. Türler geleneksel
olarak &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;perf&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt;&amp;#39;dir. İki şey bir
breaking change&amp;#39;i işaretler: iki nokta üst üsteden önce bir &lt;code&gt;!&lt;/code&gt;, veya bir &lt;code&gt;BREAKING CHANGE:&lt;/code&gt;
footer&amp;#39;ı. Araçlar minor ve patch sürüm artışları için &lt;code&gt;feat&lt;/code&gt; ve &lt;code&gt;fix&lt;/code&gt;&amp;#39;e, major için breaking
belirtecine göre hareket eder.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Commit size verir&lt;/th&gt;
&lt;th&gt;Changelog&amp;#39;un ihtiyacı olan&lt;/th&gt;
&lt;th&gt;Boşluğu kim doldurur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;feat&lt;/code&gt; / &lt;code&gt;fix&lt;/code&gt; / &lt;code&gt;chore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Added / Fixed / dahili&lt;/td&gt;
&lt;td&gt;Bir eşleme, otomatik&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;(scope)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Okuyucunun tanıdığı bir gruplandırma&lt;/td&gt;
&lt;td&gt;Bir kişi, scope başına bir kez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!&lt;/code&gt; veya &lt;code&gt;BREAKING CHANGE:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kimin ne zamana kadar bozulacağı ve ne yapılacağı&lt;/td&gt;
&lt;td&gt;Bir kişi, her seferinde&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir gözden geçiren için yazılmış açıklama&lt;/td&gt;
&lt;td&gt;Bir müşteri için yazılmış sonuç&lt;/td&gt;
&lt;td&gt;Bir kişi, her girdi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bir commit&lt;/td&gt;
&lt;td&gt;Birden çok commit olabilecek bir değişiklik&lt;/td&gt;
&lt;td&gt;Squash kuralları, veya bir kişi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Belirteç bunu araca söyler; çağırana söylemez, ki bu
&lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;bir API nasıl deprecate edilir&lt;/a&gt; ve
&lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking change nedir&lt;/a&gt;&amp;#39;in konusudur. Bu küçük bir spesifikasyondur ve
ondan hiçbir şey üretmeseniz bile takip etmeye değer, çünkü commit başına bir karar zorlar: bu
kullanıcıların gördüğü bir değişiklik mi, değil mi.&lt;/p&gt;
&lt;h2&gt;Conventional commits nerede durur?&lt;/h2&gt;
&lt;p&gt;Cümlede dururlar. Konvansiyonun yakaladığı her şey bir değişiklik hakkında metadata&amp;#39;dır; değişimin
kendisi hâlâ bir gözden geçirenin kelime dağarcığında tarif edilir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Commit mesajları gözden geçirenler için yazılır.&lt;/strong&gt; &lt;code&gt;fix(auth): reject expired refresh tokens&lt;/code&gt;
doğrudur ve bir müşteriye hiçbir şey söylemez. Bir changelog&amp;#39;un okuyucusu &amp;quot;bir oturum gerçekten
süresi dolduğunda çıkış yapacaksınız, ara sıra 401 görmek yerine&amp;quot; ister.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scope&amp;#39;lar dahilidir.&lt;/strong&gt; &lt;code&gt;exports&lt;/code&gt;, &lt;code&gt;auth&lt;/code&gt;, &lt;code&gt;ingest&lt;/code&gt; modül isimleridir. Kararlıdırlar, ki bu onları
gruplamak için iyi yapar, ve kod tabanının dışındaki herkes için anlamsızdırlar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir değişiklik genellikle birden çok commit&amp;#39;tir.&lt;/strong&gt; On bir commit&amp;#39;te merge edilen bir özellik on
bir girdi üretir, onu gürültü olan, ve bunu gizlemek için squash yapmak inceleme geçmişini
kaybettirir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;chore&lt;/code&gt; bir kategori değil bir çöp kutusudur.&lt;/strong&gt; Bağımlılık güncellemeleri, CI değişiklikleri ve
yeniden adlandırmaların hepsi oraya iner, ve bazıları kullanıcılar için önemliyken çoğu değildir.&lt;/p&gt;
&lt;p&gt;Yani: konvansiyon size tür, scope ve breaking durumunu ücretsiz verir, ve ifadeyi, gruplandırmayı
ve seçimi tamamen açık bırakır. Bu üçü changelog&amp;#39;dur. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-entry-ownership/&quot;&gt;Bir
changelog kaydının sahibi gerçekte kimdir&lt;/a&gt; o ifadeyi,
gruplandırmayı ve seçimi kimin üstlenmesi gerektiğini ele alır, çünkü konvansiyonun kendisinin bu
konuda hiçbir görüşü yoktur.&lt;/p&gt;
&lt;h2&gt;Conventional commits&amp;#39;ten bir changelog nasıl üretilir?&lt;/h2&gt;
&lt;p&gt;İki katmanda, ve ikincisi zorunlu olmalı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Katman bir, otomatik.&lt;/strong&gt; Merge&amp;#39;de, commit&amp;#39;ten bir taslak girdi türetin: bir changelog türüne
eşlenmiş tür (&lt;code&gt;feat&lt;/code&gt; Added&amp;#39;a, &lt;code&gt;fix&lt;/code&gt; Fixed&amp;#39;e, bir flag ile Changed&amp;#39;e bir breaking belirteci), metin
yerine metadata olarak tutulan scope, PR&amp;#39;a bağlantı. &lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt;&amp;#39;un
istediği Unreleased bölümüne yerleştirin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Katman iki, insan, ve gerekli.&lt;/strong&gt; Bir sürüm çıkmadan önce, her taslak girdi ya kullanıcının kelime
dağarcığında bir satırlık yeniden yazım alır, ya da dahili olarak işaretlenir ve genel görünümden
çıkarılır. Bu, insanların atlamaya çalıştığı adımdır, ve atlamak diff gibi okunan changelog&amp;#39;lar
üretir.&lt;/p&gt;
&lt;p&gt;Önemli tasarım detayı, katman ikinin pipeline&amp;#39;da isteğe bağlı olmamasıdır. Bir sürüm düzenlenmemiş
taslaklarla kesilebiliyorsa, herkesin meşgul olduğu haftada kesilecektir. Hangi adımların makineye,
hangilerinin kişiye ait olduğu &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;changelog otomasyonu&lt;/a&gt;&amp;#39;nun tamamıdır.&lt;/p&gt;
&lt;p&gt;Sürümü kesmek aynı zamanda bir git etiketi, bir sürüm ve bu changelog girişinin ya uyuştuğu ya da
senkronizasyondan çıkmaya başladığı andır; &lt;a href=&quot;https://changeloop.dev/blog/tr/git-tags-releases-changelog/&quot;&gt;git etiketleri, sürümler ve changelog&amp;#39;unuz&lt;/a&gt;
üçünü senkronize tutmayı ele alır.&lt;/p&gt;
&lt;h2&gt;Üç tuzak&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Squash merge&amp;#39;ler footer&amp;#39;ları yer.&lt;/strong&gt; Platformunuz PR başlığını mesaj olarak sıkıştırıyorsa, o
branch içindeki bir commit&amp;#39;in &lt;code&gt;BREAKING CHANGE:&lt;/code&gt; footer&amp;#39;ı kaybolur, ve araçlarınız sessizce
breaking change&amp;#39;i görmeyi bırakır. Squash şablonunuzun gerçekte neyi koruduğunu kontrol edin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Revert commit&amp;#39;leri hayalet girdiler üretir.&lt;/strong&gt; Ertesi gün geri alınan bir &lt;code&gt;fix&lt;/code&gt;, türetim revert&amp;#39;leri
uzlaştırmadıkça hiç gönderilmemiş bir şey için bir girdi üretir. Çoğu araç bunu yapmaz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sürüm artışı ve changelog düzensizleşir.&lt;/strong&gt; Sürüm commit&amp;#39;lerden hesaplanıyorsa ve changelog
sonradan elle yazılıyorsa, yaklaşık iki sürümde birbirinden ayrılırlar. İkisini de aynı geçişte
hesaplayın veya birinin yanlış olduğunu kabul edin.&lt;/p&gt;
&lt;h2&gt;Pipeline olmadan mekanik kısmı istiyorsanız&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/changelog-generator&quot;&gt;Changelog üreticimiz&lt;/a&gt; türetim adımını tarayıcıda yapar: commit&amp;#39;leri
yapıştırın, gruplandırılmış, türlendirilmiş girdiler alın. Kasıtlı olarak deterministik ve
tamamen client-side&amp;#39;dır, bu yüzden yapıştırdığınız commit&amp;#39;ler makinenizi hiç terk etmez, ki bu
mesajlar özel bir repodan geldiğinde önemlidir. Toplama yarısını dürüstçe yapar ve katman ikiyi
denemez, çünkü katman iki bir yargıdır ve onu taklit eden bir araç tam olarak bu makalenin karşı
çıktığı changelog&amp;#39;u üretir.&lt;/p&gt;
&lt;p&gt;Pipeline versiyonu için &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;changelog araçları&lt;/a&gt; var olanı kapsar.&lt;/p&gt;
&lt;h2&gt;Özet&lt;/h2&gt;
&lt;p&gt;Conventional commits &amp;quot;bu ne tür bir değişiklik&amp;quot; sorusunu güvenilir ve ucuz bir şekilde
cevaplar. &amp;quot;İnsanlara ne söylemeliyiz&amp;quot; sorusunu cevaplamazlar, ve commit mesajının üzerine ne kadar
araç eklerseniz ekleyin bu yapmayacaktır, çünkü bilgi hiçbir zaman commit mesajında değildi.
Yeniden yazım için bütçe ayırın.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Conventional commits otomatik olarak bir changelog üretir mi?&lt;/strong&gt;
Otomatik olarak bir taslak üretirler: türlendirilmiş, scope&amp;#39;lu, bağlantılı girdiler. Bir müşteri
için ifade, gruplandırma ve neyin dışarıda bırakılacağı kararı hâlâ bir insana ihtiyaç duyar, ve o
adımı atlayan bir pipeline commit mesajları yayımlar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hangi conventional commit türleri bir changelog&amp;#39;da görünür?&lt;/strong&gt;
&lt;code&gt;feat&lt;/code&gt; ve &lt;code&gt;fix&lt;/code&gt; her zaman, Added ve Fixed olarak. &lt;code&gt;perf&lt;/code&gt; genellikle, Changed olarak. &lt;code&gt;chore&lt;/code&gt;,
&lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt; ve &lt;code&gt;ci&lt;/code&gt; varsayılan olarak dahilidir ve sadece bir kişi birini
terfi ettirirse görünürler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conventional commits bir breaking change&amp;#39;i nasıl işaretler?&lt;/strong&gt;
Türden veya scope&amp;#39;tan sonra bir &lt;code&gt;!&lt;/code&gt; (&lt;code&gt;feat(api)!: ...&lt;/code&gt;), veya commit gövdesinde bir
&lt;code&gt;BREAKING CHANGE:&lt;/code&gt; footer&amp;#39;ı. Bir squash merge sadece PR başlığını tutarsa ikisi de kaybolur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog&amp;#39;u otomatikleştirmek için conventional commits gerekli mi?&lt;/strong&gt;
Hayır. PR etiketleri, PR şablonları ve issue bağlantıları, pull request ile merge eden ekipler
için aynı metadata&amp;#39;yı taşır. Conventional commits, değişim birimi commit olduğunda en ucuz
seçenektir.&lt;/p&gt;
</content:encoded></item><item><title>İnsanların gerçekten okuduğu release notes nasıl yazılır</title><link>https://changeloop.dev/blog/tr/how-to-write-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/how-to-write-release-notes/</guid><description>«Hata düzeltmeleri ve performans iyileştirmeleri» bir release note değildir. Her girdinin cevaplaması gereken soru ve gerçek birinin yeniden yazımı.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;İnsanların okuduğu release notes yazmak için, her girdide tek bir soruyu cevaplayın: okuyucu şimdi
neyi daha önce yapamadığı bir şeyi yapabiliyor, ve bunun için ne yapması gerekiyor. Bir son
tarihi olan her şeyi en başa koyun, kimin etkilendiğini belirtin, doğruysa &amp;quot;hiçbir işlem gerekmiyor&amp;quot;
deyin, ve söyleyecek bir şeyi olmayan sürümleri atlayın. Bu sayfadaki diğer her şey bu kuralın
uygulanmasıdır.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hata düzeltmeleri ve performans iyileştirmeleri.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Her ürün bunu bir kere yayımlamıştır. Sebep nadiren tembelliktir: bu, release notes içeriden,
diff&amp;#39;te iki hafta geçirmiş ve artık hangi kısımların bir yabancının umurunda olacağını göremeyen
biri tarafından yazıldığında ortaya çıkan şeydir. Daha iyi bir üslup bunu düzeltmez; soruyu
cevaplamak düzeltir.&lt;/p&gt;
&lt;h2&gt;Release notes neleri içermeli?&lt;/h2&gt;
&lt;p&gt;Release notes, bahsedilmeye değer her değişiklik için şunları içermeli: okuyucunun şimdi ne
yapabildiği, kimi etkilediği, ne yapması gerektiği (bu &amp;quot;hiçbir şey&amp;quot; olsa bile) ve son tarihi olan
her şeyin ne zaman yürürlüğe girdiği. İç ticket numaralarını, sadece ekibin kullandığı bileşen
adlarını, veya tek başlık olarak bir sürüm numarasını içermemeli.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dahil edin&lt;/th&gt;
&lt;th&gt;Dışarıda bırakın&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Sonuç, okuyucunun terimleriyle&lt;/td&gt;
&lt;td&gt;Uygulama detayı, ekibin terimleriyle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi etkilediği, plana, role veya API sürümüne göre&lt;/td&gt;
&lt;td&gt;&amp;quot;Bazı kullanıcılar&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gerekli eylem, veya &amp;quot;hiçbir işlem gerekmiyor&amp;quot;&lt;/td&gt;
&lt;td&gt;Okuyucunun en kötü senaryoyla doldurduğu sessizlik&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Son tarihi olan her şey için bir tarih&lt;/td&gt;
&lt;td&gt;Tarih yerine geçen bir sürüm numarası&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Açıklayan dokümana bir link&lt;/td&gt;
&lt;td&gt;Pull request&amp;#39;e bir link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;İnsanların bildirdiği hatalar ve yükseltilen sınır&lt;/td&gt;
&lt;td&gt;Dahili ticket id&amp;#39;leri&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sıkıcı bölüm, her biri bir satır, en altta&lt;/td&gt;
&lt;td&gt;Haberlerle karışmış sıkıcı bölüm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Bir release note ile bir &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog girdisi&lt;/a&gt; arasındaki
ayrım bu listeyi mümkün kılar: changelog her şeyi tutar, böylece notlar bir şeyleri dışarıda
bırakabilir. Her girdi türünün açıklamalı örnekleri &lt;a href=&quot;https://changeloop.dev/blog/tr/release-notes-examples/&quot;&gt;release notes örnekleri&lt;/a&gt;
yazısında toplanmıştır.&lt;/p&gt;
&lt;h2&gt;Her girdinin cevapladığı soru&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Okuyucu şimdi daha önce yapamadığı neyi yapabiliyor, ve bunun için ne yapması gerekiyor?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bir girdi bunu cevaplayamıyorsa, changelog&amp;#39;a aittir, release notes&amp;#39;a değil. İki yarı da önemlidir.
İlk yarı değerdir. İkinci yarı ekiplerin unuttuğu, ve eksik olduğunda destek ticket&amp;#39;ları üreten
kısımdır.&lt;/p&gt;
&lt;p&gt;Gerçek iş yapan ikinci yarıdan iki örnek:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;Mevcut webhook&amp;#39;lar 1 Kasım&amp;#39;a kadar çalışmaya devam edecek. Bu tarihten sonra imzasız payload&amp;#39;lar
reddedilecek.&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Hiçbir işlem gerekmiyor. Mevcut exportlar bir sonraki açışınızda otomatik olarak yeniden
kodlanacak.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;İkincisi açıkça &amp;quot;hiçbir işlem gerekmiyor&amp;quot; diyor. Bu cümle her seferinde yazılmaya değer, çünkü onu
bulamayan bir okuyucu en kötüsünü varsayar.&lt;/p&gt;
&lt;h2&gt;Release notes nasıl sıralanmalı?&lt;/h2&gt;
&lt;p&gt;Onları okuyucu için sonuca göre sıralayın, asla değişen sistem parçasına göre değil. API, panel,
mobil ve altyapıya göre gruplamak sizin organizasyon şemanızdır, okuyucunun sorunu değil.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Breaking change&amp;#39;ler ve son tarihi olan her şey.&lt;/strong&gt; Küçük olsa bile her zaman ilk sırada. Bir
okuyucu bir satırdan sonra okumayı bırakırsa, bu okumuş olması gereken satırdır. Son tarih bir
sunset ise, girdi bir &lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;deprecation bildirimi&lt;/a&gt; gibi okunmalıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;İsteyecekleri yeni şeyler.&lt;/strong&gt; Her paragrafa bir tane, sonuç ilk cümlede.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;İyileşen şeyler.&lt;/strong&gt; Bildirilen hatalar, yükseltilen sınırlar, yavaş olan şeyler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diğer her şey, liste olarak.&lt;/strong&gt; Bağımlılık güncellemeleri, dahili refactor&amp;#39;lar, küçük metin
değişiklikleri. Her biri bir satır. Bu bölümü kimse okumaz, ve yine de orada olmalı, çünkü onu
arayan kişi gerçekten ihtiyaç duyar.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Yeniden yazım&lt;/h2&gt;
&lt;p&gt;Önce:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;v4.2.0&lt;/strong&gt; &lt;code&gt;POST /exports&lt;/code&gt; endpoint&amp;#39;inin yük altında ara sıra 500 döndürdüğü sorun düzeltildi.
Export worker&amp;#39;ı refactor edildi. &lt;code&gt;node-pg&lt;/code&gt; 8.11&amp;#39;e güncellendi. CSV serializer&amp;#39;daki hata yönetimi
iyileştirildi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sonra:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Exportlar artık büyük hesaplarda başarısız olmuyor.&lt;/strong&gt;
Yaklaşık 50.000 satırdan fazla olan hesaplar, ay sonuna doğru daha sık olmak üzere, bir export
başlatırken 500 alabiliyordu. Bu düzeltildi, ve artık her boyuttaki export başarısız olmak yerine
kendini yeniden dener. Hiçbir işlem gerekmiyor, ve geçen hafta başarısız olan herhangi bir export
basitçe yeniden çalıştırılabilir.&lt;/p&gt;
&lt;p&gt;4.2.0&amp;#39;da ayrıca: &lt;code&gt;node-pg&lt;/code&gt; 8.11, CSV serializer&amp;#39;da daha net hatalar.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aynı sürüm. İkincisi etkilenen hesabı, en kötü olduğu zamanı, neyin değiştiğini ve ne yapılacağını
belirtiyor. Bağımlılık güncellemesi kaybolmadı, sadece başlık olmaktan çıktı.
&lt;a href=&quot;https://changeloop.dev/blog/tr/release-notes-best-practices/&quot;&gt;Release notes en iyi uygulamaları&lt;/a&gt; makalesi bu yeniden
yazımın izlediği kuralların geri kalanına sahip, her birinin atlanma maliyetiyle birlikte.&lt;/p&gt;
&lt;h2&gt;Silinmeye değer şeyler&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Duyurmaktan heyecan duyuyoruz.&amp;quot;&lt;/strong&gt; Okuyucu henüz heyecanlı değil. Bunu bir sonraki cümlede
kazanın.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dahili ticket numaraları.&lt;/strong&gt; &lt;code&gt;PROJ-4471&lt;/code&gt; sizin tracker&amp;#39;ınızın dışında hiçbir anlam ifade etmez.
Girdinin bir referansa ihtiyacı varsa, doküman sayfasına link verin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sadece ekibinizin kullandığı bileşen adları.&lt;/strong&gt; &amp;quot;Ingest pipeline&amp;quot;ı yeniden adlandırdıysanız,
&amp;quot;import&amp;#39;lar&amp;quot; deyin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tek başlık olarak bir sürüm numarası.&lt;/strong&gt; &lt;code&gt;v4.2.0&lt;/code&gt; bir arşivleme etiketidir, özet değil.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kimsenin ziyaret etmediği bir ayarlar sayfasının ekran görüntüleri.&lt;/strong&gt; Değişen şeyi kullanımda
gösterin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Release notes ne sıklıkla yayımlanmalı?&lt;/h2&gt;
&lt;p&gt;Bir şeyler olduğunda yayımlayın, bir programa göre değil. Her sürümde gelen notlar herkese onları
görmezden gelmeyi öğretir. Bir şeyler olduğunda gelen notlar açılır. Hiç notu olmayan bir sürüm
yayımlamak ve girdilerini okunmaya değer bir başlığa sahip bir sonraki sete devretmek uygun, ve
genellikle doğrudur.&lt;/p&gt;
&lt;p&gt;Changelog her şeyi kaydetmeye devam eder. İş bölümü budur: changelog eksiksizdir, notlar
seçicidir. Changelog&amp;#39;u ilerledikçe yapılandırılmış tutarsanız, notları yazmak arkeoloji yerine
seçim ve yeniden yazım olur.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;Release notes şablonu&lt;/a&gt; seçim adımı için kullandığımız formdur, ve
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;changelog örnekleri&lt;/a&gt; changelog&amp;#39;u notlar türetmek için yeterince iyi olan
ekiplerin girdilerini toplar.&lt;/p&gt;
&lt;p&gt;Bunların hepsi tamamen kontrol ettiğin, uzunluk sınırı olmayan ve çalışan linklere sahip bir
sayfayı varsayar. &lt;a href=&quot;https://changeloop.dev/blog/tr/mobile-app-release-notes/&quot;&gt;Mobil uygulamalar için release notes&lt;/a&gt; yüzey
bir App Store ya da Play Store girdisi olduğunda neyin değiştiğini ele alır.
&lt;a href=&quot;https://changeloop.dev/blog/tr/emergency-release-notes/&quot;&gt;Acil durum release notes&lt;/a&gt; diğer istisnayı ele alır: normal
yazım sürecini takip etmek için hiç zaman kalmadığında neyin değiştiğini.&lt;/p&gt;
&lt;h2&gt;Yayımlamadan önce bir test&lt;/h2&gt;
&lt;p&gt;Notları iki hafta tatilde olmuş ve 40 saniyesi olan biri gibi okuyun. O sürede kendisinden bir şey
istenip istenmediğini anlayamıyorsa, notlar ne kadar doğru olursa olsun bitmemiş demektir.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Release notes ne kadar uzun olmalı?&lt;/strong&gt;
Sonuç doğuran değişikliklerin gerektirdiği kadar, bir satır fazlası değil. Bir breaking change ve
iki iyileştirme içeren bir sürüm üç paragraftır. Sessiz bir sürümü önemli göstermek için doldurmak,
okuyucuların notları atlamayı öğrenmesinin yoludur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes&amp;#39;u kim yazmalı?&lt;/strong&gt;
Değişikliği anlayan kişi, onu anlamayan biri tarafından düzenlensin. Mühendis neyin değiştiğini
bilir; editör bir yabancının neyi yanlış anlayacağını bilir. Girdiyi merge anında, mühendis henüz
hatırlıyorken yazmak, bunu ucuza getiren pratiktir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes hata düzeltmelerini içermeli mi?&lt;/strong&gt;
Evet, birinin bildirdiği veya karşılaştığı olanları. Sebep değil, okuyucunun gördüğü belirtiyi
belirtin. &amp;quot;50.000 satırdan fazla exportlar başarısız oluyordu&amp;quot; bir okuyucunun tanıdığı bir
düzeltmedir; &amp;quot;export worker&amp;#39;daki race condition düzeltildi&amp;quot; bir commit mesajıdır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes ile changelog arasındaki fark nedir?&lt;/strong&gt;
Changelog eksiksiz, sürekli kayıttır; release notes bir sürüm hakkındaki, henüz ilgilenip
ilgilenmeyeceğine karar vermemiş insanlar için yazılmış özenle seçilmiş mesajdır. Daha uzun cevap
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt; içindedir.&lt;/p&gt;
</content:encoded></item><item><title>Keep a Changelog, gerçekten uygulandı</title><link>https://changeloop.dev/blog/tr/keep-a-changelog-implemented/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/keep-a-changelog-implemented/</guid><description>Spesifikasyon bir sayfadır ve okunması on dakika sürer. Ekiplerin saptığı yer uygulama aşamasıdır. Ne dediği, ne bıraktığı, ve nerede yanlış gittiği.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Keep a Changelog, bir &lt;code&gt;CHANGELOG.md&lt;/code&gt; için tek sayfalık bir konvansiyondur: en yeni sürüm önce, bir
numara ve ISO tarihi olan sürüm başına bir bölüm, altı tür (Added, Changed, Deprecated, Removed,
Fixed, Security) altında gruplanmış girdiler, ve sürümler arasındaki girdiler için en üstte bir
Unreleased bölümü. Ondan bahseden çoğu ekip yaklaşık üçte ikisini uygular, ve bıraktıkları üçte
biri kullanıcılarını koruyan üçte birdir.&lt;/p&gt;
&lt;p&gt;Olivier Lacan, &lt;a href=&quot;https://keepachangelog.com/&quot;&gt;Keep a Changelog&lt;/a&gt;&amp;#39;u 2014&amp;#39;te çoğu yazılım yazısından
daha iyi yaşlanmış bir cümleyle yayımladı: &lt;em&gt;don&amp;#39;t let your friends dump git logs into changelogs&lt;/em&gt;.
On yıl sonra, yazılımın bu köşesinin bir standarda en yakın olduğu şeydir. Bir özet yerine kaynağı
okumak değerlidir; bu makale bırakılan kısımlarla ilgilidir.&lt;/p&gt;
&lt;h2&gt;Keep a Changelog ne ister?&lt;/h2&gt;
&lt;p&gt;Repo kökünde bir &lt;code&gt;CHANGELOG.md&lt;/code&gt;, en yeniden başlayarak, sürüm başına bir bölüm ile. Her sürüm bir
numara ve ISO tarihi taşır, ve girdilerini altı tür altında gruplandırır:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tür&lt;/th&gt;
&lt;th&gt;Ne için&lt;/th&gt;
&lt;th&gt;Bırakmanın maliyeti&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Added&lt;/td&gt;
&lt;td&gt;Yeni özellikler&lt;/td&gt;
&lt;td&gt;Hiçbir şey; kimse bunu bırakmaz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed&lt;/td&gt;
&lt;td&gt;Mevcut davranıştaki değişiklikler&lt;/td&gt;
&lt;td&gt;Okuyucular davranış değişikliğini bir hatadan öğrenir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecated&lt;/td&gt;
&lt;td&gt;Kaldırılmak üzere olan özellikler&lt;/td&gt;
&lt;td&gt;Bir kaldırma, planlı bir olay yerine bir olay haline gelir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Removed&lt;/td&gt;
&lt;td&gt;Bu sürümde kaldırılan özellikler&lt;/td&gt;
&lt;td&gt;Kimse bir kaldırmayı bir hatadan ayıramaz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed&lt;/td&gt;
&lt;td&gt;Hata düzeltmeleri&lt;/td&gt;
&lt;td&gt;Hiçbir şey; kimse bunu da bırakmaz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Güvenlik açıkları&lt;/td&gt;
&lt;td&gt;Onu arayan tek okuyucu bulamaz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Artı en üstte bir &lt;code&gt;Unreleased&lt;/code&gt; bölümü, böylece bir girdi merge edildiği anda konulacak bir yer
olur, ve herkes neyin geldiğini görebilir.&lt;/p&gt;
&lt;p&gt;Bu neredeyse hepsi. Geri kalanı gerekçedir: girdiler insanlar içindir, değişiklik başına bir girdi,
ve dosya bir günlük yerine bir belgedir.&lt;/p&gt;
&lt;h2&gt;Keep a Changelog&amp;#39;un hangi bölümleri bırakılır?&lt;/h2&gt;
&lt;p&gt;Unreleased bölümü, ardından altı türün dördü, Security de aralarında, bu sırayla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Unreleased&lt;/code&gt; önce ortadan kalkar.&lt;/strong&gt; Son tarihi olmayan bölümdür, bu yüzden bakımı ilk duran
bölümdür, ve gittiğinde girdiler sürüm zamanında commit geçmişinden yazılır. Bu, spesifikasyonun
en başta uyardığı git-log-dump&amp;#39;ın tam olarak kendisidir, kademeli olarak ulaşılmış.
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-automation/&quot;&gt;Changelog otomasyonu&lt;/a&gt; çoğunlukla bu bölümü kimsenin hatırlamasına
gerek kalmadan canlı tutmakla ilgilidir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Altı tür ikiye çöker.&lt;/strong&gt; Çoğu gerçek changelog Added ve Fixed ile sonuçlanır, çünkü Changed ve
Deprecated birinin neye güvendiği hakkında bir yargı gerektirir. Bu yargı değerli olan kısımdır.
Deprecated özellikle gelecek hakkında bir söz olan tek türdür, ve onu bırakmak bir kaldırmanın
nasıl bir olaya dönüştüğüdür; o sözü tutmanın mekanizması
&lt;a href=&quot;https://changeloop.dev/blog/tr/api-deprecation/&quot;&gt;bir API nasıl deprecate edilir&lt;/a&gt; içindedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security ayrı olmaktan çıkar.&lt;/strong&gt; Fixed altında dosyalanmış bir güvenlik düzeltmesi, onu arayan tek
okuyucu için görünmezdir. Düzeltme önemsiz olsa bile onu ayrı tutun, ve özellikle ona dikkat
çekmeyi tercih etmediğinizde.&lt;/p&gt;
&lt;h2&gt;Spesifikasyon neyi cevaplamaz?&lt;/h2&gt;
&lt;p&gt;Bu bir dosya formatıdır. Onu benimsedikten hemen sonra karşılaşacağınız sorular hakkında hiçbir
şey söylemez:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bunu kim nasıl öğrenir?&lt;/strong&gt; Bir repo&amp;#39;daki bir dosya katkıda bulunanlara ulaşır. Hiç GitHub
açmamış bir müşteriye ulaşmaz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sürümü olmayan ürünler ne olacak?&lt;/strong&gt; Sürekli dağıtılan bir hizmetin gruplayacak bir v4.2.0&amp;#39;ı
yoktur. Çoğu ekip bunun yerine tarihleri kullanır, ki bu işe yarar, ve spesifikasyon bunu ne
onaylar ne de yasaklar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Girdiyi kim yazar?&lt;/strong&gt; Spesifikasyon bir insanın yaptığını varsayar. Ne zaman yapacağını söylemez.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Birden çok hedef kitle ne olacak?&lt;/strong&gt; Bir dosya geliştiricilere hizmet eder. Aynı içeriği
teknik olmayan bir yöneticiye hizmet etmez, ve onun için elle yeniden biçimlendirmek
çoğaltmanın başladığı yerdir. &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;Changelog vs release notes&lt;/a&gt;
spesifikasyonun size kendinize bıraktığı bölünmedir.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fikrin daha katı bir çatalı olan &lt;a href=&quot;https://common-changelog.org/&quot;&gt;Common Changelog&lt;/a&gt;, bunun bir
kısmını sıkılaştırır: belirli girdi ifadelerini yasaklar, değişikliğe bir bağlantı gerektirir, ve
okuyucunun kim olduğu konusunda net bir görüşe sahiptir. Keep a Changelog&amp;#39;un gevşek kısımları
ekibinizin sürekli tartıştığı şeyse okumaya değer.&lt;/p&gt;
&lt;h2&gt;Keep a Changelog git loglarını dökmeden otomatikleştirilebilir mi?&lt;/h2&gt;
&lt;p&gt;Evet: taslağı yapılandırılmış commit&amp;#39;lerden türetin, türü önceden doldurulmuş olarak Unreleased&amp;#39;e
koyun, ve bir sürüm kesilmeden önce bir insanın ifadeyi düzenlemesini zorunlu kılın.
Spesifikasyonun uyarısı çıktı hakkındadır, araç hakkında değil. Commit&amp;#39;lerden bir taslak türetmek
sorun değil. O taslağı düzenlenmemiş olarak yayımlamak karşı çıktığı şeydir.&lt;/p&gt;
&lt;p&gt;Makine, iyi olduğu toplama ve biçimlendirmeyi halleder. İnsan, iyi olmadığı seçim ve ifadeyi
halleder. &lt;a href=&quot;https://changeloop.dev/blog/tr/conventional-commits-changelog/&quot;&gt;Conventional commits&lt;/a&gt;, bunun dayandığı iki
katmanlı ayrımı ve hangi commit türlerinin yukarıdaki altı kategoriden hangisine karşılık geldiğini
anlatır. &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;Changelog araçları&lt;/a&gt; özetimiz toplama yarısı için var olanı kapsar.&lt;/p&gt;
&lt;h2&gt;Keep a Changelog nerede yetersiz kalmaya başlar?&lt;/h2&gt;
&lt;p&gt;Dağıtımda durur. Keep a Changelog, &amp;quot;bu dosya nasıl görünmeli&amp;quot; sorusuna iyi bir cevaptır. &amp;quot;Kullanıcılarımız neyin değiştiğini nasıl öğrenir&amp;quot; sorusuna bir cevap değildir, çünkü bir repo&amp;#39;daki bir Markdown dosyası, sadece kullanıcılarınız katkıda bulunanlarsa işe yarayan bir dağıtım
stratejisidir.&lt;/p&gt;
&lt;p&gt;Bu, çoğu ekibin ikinci karşılaştığı engeldir: dosya iyi durumda, ve ekip dışında kimse onu
okumuyor. Bunu çözmek, girdilerin başka bir yerde görselleştirilebilecek verilere dönüşmesi
anlamına gelir, ki bu bir dosyayı biçimlendirmekten farklı bir sorundur, ve
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;changelog örnekleri&lt;/a&gt;&amp;#39;nin repo dosyaları yerine genel changelog sayfaları
toplamasının sebebidir. O girdileri insanların geri döndüğü bir şeye dönüştürmek,
&lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-page/&quot;&gt;bir changelog sayfası nasıl kurulur&lt;/a&gt;&amp;#39;da ele alınır.&lt;/p&gt;
&lt;p&gt;Yine de spesifikasyonu benimseyin. Bir öğleden sonra sürer, ikinci sorunu ele alınabilir hale
getirir, ve bu konuda yazılmış hâlâ en iyi tek sayfadır.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Keep a Changelog bir standart mı?&lt;/strong&gt;
Geniş bir kabul gören bir konvansiyondur, bir standardizasyon kuruluşunun spesifikasyonu değildir.
Araçlar (sürüm scriptleri, linter&amp;#39;lar, parser&amp;#39;lar) şeklini o kadar sık varsayar ki onu takip etmek
uyumluluk satın alır.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unreleased bölümüne ne girer?&lt;/strong&gt;
Merge edilmiş ancak numaralı bir sürümde henüz gönderilmemiş bir değişiklik için her girdi. Bir
sürüm kesildiğinde, bölüm sürüm ve tarih olarak yeniden adlandırılır, ve üstüne yeni, boş bir
Unreleased bölümü gelir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir changelog semantik versiyonlama kullanmalı mı?&lt;/strong&gt;
Keep a Changelog bunu önerir ve zorunlu kılmaz. Kütüphaneler ve API&amp;#39;ler bundan faydalanır; sürekli
dağıtılan bir hizmet genellikle tarihleri kullanır, ki format buna izin verir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Güvenlik düzeltmeleri kamuya açılmadan önce changelog&amp;#39;da olmalı mı?&lt;/strong&gt;
Girdiyi düzeltme gönderildiğinde ekleyin, bir operatörün harekete geçmesine yetecek kadar detayla,
daha fazlasıyla değil. Girdiyi koordine bir açıklama tarihine kadar ertelemek normaldir; onu
atlamak değildir.&lt;/p&gt;
</content:encoded></item><item><title>Değer verilen release notes en iyi uygulamaları</title><link>https://changeloop.dev/blog/tr/release-notes-best-practices/</link><guid isPermaLink="true">https://changeloop.dev/blog/tr/release-notes-best-practices/</guid><description>Çoğu en iyi uygulama listesi stil tavsiyesidir. Bunlar okuyucunun ne yaptığını gerçekten değiştirir, ayrıca kargo kültü olan üç popüler öneri de var.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Önemli olan release notes en iyi uygulamaları, bir sonucu olanlardır: girdiyi merge anında yazın,
kimin etkilendiğini belirtin, gerekli eylemi hiç olmasa bile belirtin, breaking change&amp;#39;lere tarih
verin, değişiklik başına bir kalıcı girdi tutun, sonuca göre gruplayın, ve sıkıcı bölümü koruyun.
Her biri okuyucunun ne yaptığını değiştirir. Bu konudaki diğer tavsiyelerin çoğu notların nasıl
göründüğünü değiştirir.&lt;/p&gt;
&lt;p&gt;Release notes en iyi uygulamaları arayın ve stil tavsiyesi bulun: net olun, öz olun, sade dil
kullanın, ekran görüntüleri ekleyin. Bunların hiçbiri yanlış değil ve hiçbiri hiçbir şeyi
değiştirmiyor, çünkü hiçbir ekip belirsiz olma niyetiyle oturmamıştır. Aşağıdaki uygulamalar
atlamanın maliyetiyle birlikte gelir, çünkü ekli bir başarısızlık modu olmayan bir uygulama sadece
bir tercihtir.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Uygulama&lt;/th&gt;
&lt;th&gt;Atlamanın maliyeti&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Girdiyi release&amp;#39;te değil merge&amp;#39;de yazmak&lt;/td&gt;
&lt;td&gt;Sonradan yeniden oluşturulan girdiler &amp;quot;çeşitli iyileştirmeler&amp;quot; der&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimin etkilendiğini belirtmek&lt;/td&gt;
&lt;td&gt;Her okuyucu bunun kendisini ilgilendirmediğine karar verir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gerekli eylemi belirtmek, &amp;quot;hiçbiri&amp;quot; dahil&lt;/td&gt;
&lt;td&gt;Kırk aynı destek ticket&amp;#39;ı, ve en kötüsünü varsayan okuyucular&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breaking change&amp;#39;lere tarih vermek, versiyonlamak değil&lt;/td&gt;
&lt;td&gt;Son tarih geçtikten sonra keşfedilir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Değişiklik başına kalıcı, bağlanabilir bir girdi&lt;/td&gt;
&lt;td&gt;Kimse &amp;quot;bu ne zaman değişti&amp;quot; diye cevap veremez&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sisteme göre değil sonuca göre gruplamak&lt;/td&gt;
&lt;td&gt;Okuyucular kendi bölümlerini bulmak için mimarinizi bilmek zorunda kalır&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sıkıcı bölümü korumak&lt;/td&gt;
&lt;td&gt;Güvenlik, uyumluluk ve sürüm uyuşmazlığı hata ayıklayan kişi kaynaklarını kaybeder&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Release notes için en iyi uygulamalar nelerdir?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Girdiyi merge ettiğinizde yazın, yayımladığınızda değil.&lt;/strong&gt;
Atlamanın maliyeti: sürümü commit geçmişinden yeniden oluşturan kişi değişikliği yapan kişi
değildir, ve niyeti tahmin edecektir. İki hafta sonra yazılan girdiler &amp;quot;çeşitli iyileştirmeler&amp;quot;
diyenlerdir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kimin etkilendiğini isimle belirtin.&lt;/strong&gt;
&amp;quot;Business plandaki ekipler&amp;quot;, &amp;quot;v1 export API&amp;#39;sini kullanan herkes&amp;quot;, &amp;quot;Postgres 14&amp;#39;te self-hosted
kurulumlar&amp;quot;. Atlamanın maliyeti: her okuyucu kendisini ilgilendirip ilgilendirmediğini anlamak
zorunda kalır, ve çoğu ilgilendirmediğine karar verir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gerekli eylemi, hiç olmasa bile belirtin.&lt;/strong&gt;
Atlamanın maliyeti: destek aynı soruyu kırk kez cevaplar, ve sormayan okuyucular bir şey
gerektiğini varsayıp erteler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking change&amp;#39;lere sürüm numarası değil tarih verin.&lt;/strong&gt;
&amp;quot;v5&amp;#39;te kaldırıldı&amp;quot; v5&amp;#39;in ne zaman geleceğini bilmeyen biri için hiçbir şey ifade etmez. &amp;quot;1 Kasım&amp;#39;da
çalışmayı bırakır&amp;quot; herkes için aynı şeyi ifade eder. Atlamanın maliyeti: son tarih geçtikten sonra
keşfedilir. Neyin buna dahil olduğu ve onu yayımlamak için kontrol listesi
&lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking change nedir&lt;/a&gt; içindedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Değişiklik başına kalıcı, bağlanabilir bir girdi tutun.&lt;/strong&gt;
Bir e-posta arşiv değildir ve bir Slack mesajı referans değildir. Atlamanın maliyeti: altı ay sonra
kimse &amp;quot;bu ne zaman değişti&amp;quot; diye cevap veremez, siz de dahil. E-postanın yine de bir işi var,
&lt;a href=&quot;https://changeloop.dev/blog/tr/product-update-email/&quot;&gt;ürün güncellemesi e-posta şablonu&lt;/a&gt;&amp;#39;nda ele alınan; kaydı
değiştirmek yerine ona işaret eder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sisteme göre değil sonuca göre gruplayın.&lt;/strong&gt;
Atlamanın maliyeti: okuyucu hangi bölümün onu ilgilendirdiğini anlamak için mimarinizi kafasında
tutmak zorunda kalır. Bundan çıkan sıralama &lt;a href=&quot;https://changeloop.dev/blog/tr/how-to-write-release-notes/&quot;&gt;release notes nasıl yazılır&lt;/a&gt;
içindedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sıkıcı bölümü koruyun.&lt;/strong&gt;
Bağımlılık güncellemeleri ve dahili değişiklikler en altta kalır, her biri bir satır. Atlamanın
maliyeti: güvenlik ekibi, uyumluluk incelemecisi ve sürüm uyuşmazlığı hata ayıklayan kişi tek
kaynaklarını kaybeder. Bunu en sık yanlış yapan girdiler düzeltmelerdir; &lt;a href=&quot;https://changeloop.dev/blog/tr/bug-fix-release-notes/&quot;&gt;hata düzeltmesi release notes&lt;/a&gt;
onları, okuyucu harekete geçip geçmeyeceğini bilecek şekilde nasıl yazacağınızı gösterir.&lt;/p&gt;
&lt;h2&gt;Changelog en iyi uygulamaları nelerdir, ve nasıl farklıdır?&lt;/h2&gt;
&lt;p&gt;Bir changelog bir referanstır, bu yüzden uygulamaları ikna etmek yerine eksiksizlik ve yapı ile
ilgilidir. Önemli olan dört tanesi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Satır başına sabit bir girdi türü.&lt;/strong&gt; Added, Changed, Deprecated, Removed, Fixed, Security. Bir
ev stili değil, bir filtre: &amp;quot;sadece breaking change&amp;#39;leri&amp;quot; istemeyi mümkün kılan şeydir.
&lt;a href=&quot;https://changeloop.dev/blog/tr/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; konvansiyonu genellikle bunun
kaynağıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yayımlanmamış bölüm.&lt;/strong&gt; Girdilerin merge ile release arasında yaşadığı yer. Yokluğu ekiplerin
girdileri geç yazmasının sebebidir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ISO tarihleri.&lt;/strong&gt; &lt;code&gt;2026-08-28&lt;/code&gt;, &lt;code&gt;28/08/26&lt;/code&gt; değil, çünkü ikincisi okuyucuya göre iki farklı gün
anlamına gelir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit başına değil değişiklik başına bir girdi.&lt;/strong&gt; Bir hatayı düzelten üç commit bir girdidir.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;İki artefakt &lt;a href=&quot;https://changeloop.dev/blog/tr/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt; içinde detaylıca
karşılaştırılır; kısa versiyon changelog&amp;#39;un uygulamalarının eksiksizliği, release notes&amp;#39;un
uygulamalarının ise dikkati koruduğudur.
&lt;a href=&quot;https://changeloop.dev/blog/tr/private-release-notes-enterprise/&quot;&gt;Kurumsal müşteriler için özel release notes&lt;/a&gt; bunun
sadece müşterileriniz artık hepsi aynı build üzerinde olmadığında ortaya çıkan bir versiyonunu ele
alır: aynı eksiksizlik ve dikkat hedefleri, ama hepsine aynı anda yayınlanmak yerine hesap başına
ayarlanmış.&lt;/p&gt;
&lt;h2&gt;Kargo kültü olan üç şey&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Girdi türü olarak emoji.&lt;/strong&gt; Bir roket ve bir İngiliz anahtarı bir taksonomi değildir. Düzenli
görünürler ve faydalı bir şekilde filtrelenemezler, sıralanamazlar, veya bir ekran okuyucu
tarafından okunamazlar. Kelimeler kullanın, ve emoji istiyorsanız, kelimeden sonra koyun.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Barındırılan bir ürün için başlık olarak semantik sürüm numaraları.&lt;/strong&gt; Semver, API uyumluluğu
hakkında bir sözdür. Kimsenin sürümünü seçmediği bir SaaS ürünü için, başlıktaki bir sürüm numarası
haber gibi giydirilmiş dahili arşivlemedir. Semver&amp;#39;i changelog&amp;#39;da tutun ve duyurunun dışında.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;İçeriğe bakılmaksızın bir programa göre yayımlamak.&lt;/strong&gt; İçinde bir şey olmayan aylık notlar
insanlara notlarınızın gürültü olduğunu öğretir. Söyleyecek bir şey olduğunda yayımlayın. Changelog
geri kalanını kapsar.&lt;/p&gt;
&lt;h2&gt;Gerçekten zor olan tek şey&lt;/h2&gt;
&lt;p&gt;Changelog ve duyuruyu her şeyi iki kez yazmadan senkronize tutmak.&lt;/p&gt;
&lt;p&gt;Çoğu ekip tek bir sayfayla başlar, hedef kitleler farklılaştığında onu böler, ve sonra sessizce
ikisinden birinin çürümesine izin verir, genellikle changelog&amp;#39;un, çünkü ona bağlı bir son tarih
yoktur. Çıkış disiplin değil yapıdır: girdileri bir tür, tarih ve hedef kitle ile veri olarak
tutun, ve her iki yüzeyi de bunun görselleştirmeleri olarak ele alın.
&lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;Changelog araçları&lt;/a&gt; özetimiz bunun için ne olduğunu, rekabet ettiğimiz araçlar
dahil, kapsar, ve &lt;a href=&quot;https://changeloop.dev/beamer-alternative&quot;&gt;Beamer alternatifi&lt;/a&gt; sayfası çoğu ekibin başladığı widget&amp;#39;a
karşı dürüst karşılaştırmadır.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;Release notes şablonu&lt;/a&gt; girdiler var olduğunda seçim adımının yaşadığı
yerdir.&lt;/p&gt;
&lt;h2&gt;Yalnızca birini benimseyecekseniz&lt;/h2&gt;
&lt;p&gt;Girdiyi merge anında, sabit bir formatta, bir türle yazın. Bu sayfadaki diğer her uygulama bu
yerine oturduğunda kolaylaşır, ve hiçbiri onsuz hayatta kalmaz.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Release notes ekran görüntüleri içermeli mi?&lt;/strong&gt;
Sadece değişen şeyin kullanımda olduğu ekran görüntüleri. Kimsenin ziyaret etmediği bir ayarlar
sayfasının ekran görüntüsü kaydırma ekler, bilgi eklemez. Sonucu ve etkilenen okuyucuyu belirten
metin, ikisini de göstermeyen bir görüntüyü yener.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bir breaking change için release notes nasıl yazılır?&lt;/strong&gt;
Önce tarih, sonra etkilenen çağıranlar, sonra gerekli eylem, sonra göç. Asla sürüm numarasıyla
başlamayın. Örnek bir girdiyle tam form &lt;a href=&quot;https://changeloop.dev/blog/tr/breaking-changes/&quot;&gt;breaking change nedir&lt;/a&gt;
içindedir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release notes mühendislik mi pazarlama tarafından mı yazılmalı?&lt;/strong&gt;
Değişikliği yapan mühendis tarafından, merge anında hazırlanır, ve onu yabancı gibi okuyan biri
tarafından düzenlenir. İkisinden hiçbiri tek başına bir müşterinin harekete geçebileceği notlar
üretmez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;İdeal release notes formatı nedir?&lt;/strong&gt;
Önce son tarihi olan öğeler, sonra yeni yetenekler, sonra iyileştirmeler, sonra geri kalanı için
her biri bir satır olan bir liste. &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;Release notes şablonu&lt;/a&gt; bu formatın
doldurulacak bir sayfa halidir.&lt;/p&gt;
</content:encoded></item></channel></rss>