{"id":44333,"date":"2026-08-25T21:11:43","date_gmt":"2026-08-25T18:11:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/"},"modified":"2026-08-25T21:12:14","modified_gmt":"2026-08-25T18:12:14","slug":"git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/","title":{"rendered":"Git-Flow&#8217;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?"},"content":{"rendered":"<h2>Git-Flow&#8217;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?<\/h2>\n<p>Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131 h\u0131zla de\u011fi\u015fiyor ve ekipler, kullan\u0131c\u0131lar\u0131na daha h\u0131zl\u0131, daha g\u00fcvenilir g\u00fcncellemeler sunmak i\u00e7in s\u00fcrekli yeni yollar ar\u0131yor. Peki ya mevcut s\u00fcr\u00fcm y\u00f6netim stratejiniz bu h\u0131za ayak uyduram\u0131yorsa? Bir zamanlar\u0131n pop\u00fcler tercihi Git-Flow&#8217;un, modern mobil geli\u015ftirmenin gerektirdi\u011fi \u00e7evikli\u011fi nas\u0131l engelledi\u011fini ve Trunk-Based Development (TBD) yakla\u015f\u0131m\u0131n\u0131n bu sorunlara nas\u0131l \u00e7\u00f6z\u00fcm getirdi\u011fini ke\u015ffedin.<\/p>\n<h2>Mobil Geli\u015ftirmede S\u00fcr\u00fcm Y\u00f6netimi Kabusunuz mu?<\/h2>\n<p>Mobil uygulamalar\u0131n rekabet\u00e7i d\u00fcnyas\u0131nda, h\u0131z ve g\u00fcvenilirlik kritik \u00f6neme sahiptir. Kullan\u0131c\u0131lar, s\u00fcrekli yeni \u00f6zellikler, performans iyile\u015ftirmeleri ve hata d\u00fczeltmeleri beklerken, geli\u015ftirici ekipleri de bu beklentileri kar\u015f\u0131lamak i\u00e7in yo\u011fun bir bask\u0131 alt\u0131ndad\u0131r. Ancak, bir\u00e7ok ekip i\u00e7in s\u00fcr\u00fcm y\u00f6netim s\u00fcre\u00e7leri, bu beklentilere ula\u015fmada ciddi bir engel te\u015fkil edebilir. \u00d6zellikle b\u00fcy\u00fck, karma\u015f\u0131k mobil projelerde, geleneksel s\u00fcr\u00fcm y\u00f6netim modelleri, s\u00fcrekli birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131 (merge conflicts), uzun s\u00fcren s\u00fcr\u00fcm d\u00f6ng\u00fcleri ve &#8220;hotfix&#8221; cehennemi gibi sorunlara yol a\u00e7arak geli\u015ftirici verimlili\u011fini d\u00fc\u015f\u00fcrebilir ve uygulama kalitesini olumsuz etkileyebilir.<\/p>\n<p>Uygulamalar b\u00fcy\u00fcd\u00fck\u00e7e ve ekipler geni\u015fledik\u00e7e, kod taban\u0131n\u0131 y\u00f6netmek daha da karma\u015f\u0131k hale gelir. \u00d6zellikle mobil platformlar i\u00e7in, her yeni s\u00fcr\u00fcm\u00fcn uygulama ma\u011fazalar\u0131ndan ge\u00e7mesi gerekti\u011fi ger\u00e7e\u011fi, s\u00fcreci daha da hassas hale getirir. Herhangi bir gecikme veya hata, kullan\u0131c\u0131 memnuniyetsizli\u011fine ve hatta pazar pay\u0131 kayb\u0131na neden olabilir. Bu nedenle, ekiplerin daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha esnek bir s\u00fcr\u00fcm y\u00f6netim stratejisine ihtiyac\u0131 vard\u0131r. Bu makalede, bir zamanlar end\u00fcstri standard\u0131 kabul edilen Git-Flow&#8217;un modern mobil geli\u015ftirme ihtiya\u00e7lar\u0131na neden yetersiz kald\u0131\u011f\u0131n\u0131 ve bu sorunlara \u00e7\u00f6z\u00fcm olarak Trunk-Based Development (TBD) yakla\u015f\u0131m\u0131na ge\u00e7i\u015fin neden bu kadar etkili oldu\u011funu detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Kendi deneyimlerimizden ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndan yola \u00e7\u0131karak, bu ge\u00e7i\u015fin hem teknik hem de k\u00fclt\u00fcrel boyutlar\u0131n\u0131 ele alacak, TBD&#8217;nin mobil s\u00fcr\u00fcm s\u00fcre\u00e7lerinizi nas\u0131l d\u00f6n\u00fc\u015ft\u00fcrebilece\u011fini ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<h2>Git-Flow Nedir ve Mobil D\u00fcnyada Neden Sorunlu?<\/h2>\n<p>Git-Flow, 2010 y\u0131l\u0131nda Vincent Driessen taraf\u0131ndan \u00f6nerilen, Git versiyon kontrol sistemi i\u00e7in pop\u00fcler bir dallanma (branching) modelidir. Temelde, <code>master<\/code> (ana) ve <code>develop<\/code> (geli\u015ftirme) olmak \u00fczere iki ana uzun \u00f6m\u00fcrl\u00fc dal \u00fczerine kuruludur. Bunlara ek olarak, <code>feature<\/code> (\u00f6zellik), <code>release<\/code> (s\u00fcr\u00fcm) ve <code>hotfix<\/code> (acil d\u00fczeltme) dallar\u0131 gibi k\u0131sa \u00f6m\u00fcrl\u00fc dallar da bulunur. Bu modelin temel amac\u0131, farkl\u0131 geli\u015ftirme a\u015famalar\u0131n\u0131 ve s\u00fcr\u00fcm y\u00f6netimini d\u00fczenli bir \u015fekilde ay\u0131rmakt\u0131r. \u00d6rne\u011fin, yeni \u00f6zellikler <code>feature<\/code> dallar\u0131nda geli\u015ftirilir, s\u00fcr\u00fcm haz\u0131rl\u0131klar\u0131 <code>release<\/code> dallar\u0131nda yap\u0131l\u0131r ve acil hatalar <code>hotfix<\/code> dallar\u0131nda d\u00fczeltilir.<\/p>\n<p>Bir zamanlar, \u00f6zellikle yava\u015f tempolu, b\u00fcy\u00fck s\u00fcr\u00fcm d\u00f6ng\u00fclerine sahip projeler i\u00e7in olduk\u00e7a etkili bir model olarak kabul edilen Git-Flow, kod taban\u0131n\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 korumada ve farkl\u0131 geli\u015ftirme a\u015famalar\u0131n\u0131 net bir \u015fekilde ay\u0131rmada ba\u015far\u0131l\u0131yd\u0131. Ancak, modern mobil geli\u015ftirmenin do\u011fas\u0131, Git-Flow&#8217;un sundu\u011fu bu yap\u0131n\u0131n baz\u0131 \u00f6nemli dezavantajlar\u0131n\u0131 ortaya \u00e7\u0131kard\u0131. Mobil uygulamalar, genellikle \u00e7ok daha h\u0131zl\u0131 bir yay\u0131n temposuna sahiptir; haftal\u0131k, hatta bazen g\u00fcnl\u00fck g\u00fcncellemeler yay\u0131nlamak gerekebilir. Bu h\u0131zl\u0131 d\u00f6ng\u00fclerde, Git-Flow&#8217;un karma\u015f\u0131k dallanma yap\u0131s\u0131 ciddi sorunlara yol a\u00e7ar:<\/p>\n<ul>\n<li><strong>Uzun \u00d6m\u00fcrl\u00fc Dallar ve Birle\u015ftirme \u00c7ak\u0131\u015fmalar\u0131:<\/strong> Git-Flow&#8217;da <code>develop<\/code> ve <code>release<\/code> gibi dallar uzun s\u00fcre ya\u015fayabilir. Bu durum, \u00f6zellikle birden fazla geli\u015ftiricinin ayn\u0131 kod b\u00f6lgeleri \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 durumlarda s\u0131k s\u0131k birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131na (merge conflicts) neden olur. Bu \u00e7ak\u0131\u015fmalar\u0131 \u00e7\u00f6zmek, zaman al\u0131c\u0131 ve hata yapmaya a\u00e7\u0131k bir s\u00fcre\u00e7tir, geli\u015ftirici verimlili\u011fini d\u00fc\u015f\u00fcr\u00fcr ve s\u00fcr\u00fcm gecikmelerine yol a\u00e7ar. Mobil uygulamalarda her bir saniyenin \u00f6nemli oldu\u011fu d\u00fc\u015f\u00fcn\u00fcld\u00fc\u011f\u00fcnde, bu t\u00fcr gecikmeler kabul edilemez olabilir.<\/li>\n<li><strong>Yava\u015f S\u00fcr\u00fcm D\u00f6ng\u00fcleri:<\/strong> Git-Flow&#8217;un yap\u0131s\u0131, bir s\u00fcr\u00fcm\u00fcn haz\u0131rlanmas\u0131 i\u00e7in ayr\u0131 bir <code>release<\/code> dal\u0131 olu\u015fturulmas\u0131n\u0131 ve bu dalda testlerin yap\u0131lmas\u0131n\u0131 gerektirir. Bu s\u00fcre\u00e7, genellikle uzun s\u00fcrer ve s\u00fcr\u00fcm \u00f6ncesi son dakika de\u011fi\u015fiklikleri veya hata d\u00fczeltmeleri, <code>develop<\/code> dal\u0131na geri birle\u015ftirilmesi gereken ek i\u015f y\u00fck\u00fc yarat\u0131r. Bu da s\u00fcr\u00fcm d\u00f6ng\u00fclerini uzat\u0131r ve mobil kullan\u0131c\u0131lar\u0131n h\u0131zl\u0131 beklentilerini kar\u015f\u0131lamay\u0131 zorla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>CI\/CD Entegrasyonu Zorluklar\u0131:<\/strong> S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Teslimat (CD) pratikleri, modern geli\u015ftirmenin temel ta\u015flar\u0131d\u0131r. Git-Flow&#8217;un karma\u015f\u0131k dallanma modeli, CI\/CD boru hatlar\u0131n\u0131n (pipelines) etkin bir \u015fekilde kurulmas\u0131n\u0131 ve y\u00f6netilmesini zorla\u015ft\u0131rabilir. Hangi dal\u0131n ne zaman test edilece\u011fi, hangi dal\u0131n ne zaman da\u011f\u0131t\u0131ma haz\u0131r oldu\u011fu gibi konular, boru hatt\u0131 mant\u0131\u011f\u0131n\u0131 karma\u015f\u0131kla\u015ft\u0131r\u0131r ve otomasyon potansiyelini s\u0131n\u0131rlar.<\/li>\n<li><strong>&#8220;Hotfix&#8221; Cehennemi:<\/strong> Mobil uygulamalarda acil bir hata \u00e7\u0131kt\u0131\u011f\u0131nda, h\u0131zl\u0131ca bir <code>hotfix<\/code> yay\u0131nlamak gerekir. Git-Flow&#8217;da bu, <code>master<\/code>&#8216;dan bir <code>hotfix<\/code> dal\u0131 olu\u015fturmay\u0131, d\u00fczeltmeyi yapmay\u0131, hem <code>master<\/code> hem de <code>develop<\/code> dallar\u0131na birle\u015ftirmeyi gerektirir. Bu s\u00fcre\u00e7, \u00f6zellikle ayn\u0131 anda birden fazla <code>hotfix<\/code> veya devam eden bir <code>release<\/code> dal\u0131 varsa, daha da karma\u015f\u0131kla\u015f\u0131r ve hatalara a\u00e7\u0131k hale gelir.<\/li>\n<li><strong>Geli\u015ftirici Y\u00fck\u00fc ve Kafa Kar\u0131\u015f\u0131kl\u0131\u011f\u0131:<\/strong> Git-Flow&#8217;un dallanma kurallar\u0131, \u00f6zellikle yeni ba\u015flayan geli\u015ftiriciler i\u00e7in kafa kar\u0131\u015ft\u0131r\u0131c\u0131 olabilir. Hangi dalda \u00e7al\u0131\u015f\u0131lmal\u0131, ne zaman hangi dala birle\u015ftirme yap\u0131lmal\u0131 gibi sorular, geli\u015ftiricilerin as\u0131l i\u015flerine odaklanmas\u0131n\u0131 engelleyebilir ve \u00f6\u011frenme e\u011frisini uzatabilir.<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin, b\u00fcy\u00fck bir e-ticaret mobil uygulamas\u0131n\u0131 d\u00fc\u015f\u00fcnelim. Black Friday gibi yo\u011fun bir d\u00f6nemde, ekip haftada birden fazla k\u00fc\u00e7\u00fck \u00f6zellik ve hata d\u00fczeltmesi yay\u0131nlamak zorundad\u0131r. Git-Flow kullan\u0131rken, her \u00f6zellik i\u00e7in ayr\u0131 bir dal, her s\u00fcr\u00fcm i\u00e7in ayr\u0131 bir dal ve acil durumlar i\u00e7in hotfix dallar\u0131, s\u00fcrekli birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131, testlerin tekrar tekrar yap\u0131lmas\u0131 ve geciken s\u00fcr\u00fcm tarihleri anlam\u0131na gelir. Bu durum, geli\u015ftiricilerin moralini bozar ve i\u015fin kalitesini d\u00fc\u015f\u00fcr\u00fcr. Bu y\u00fczden, daha basit, daha h\u0131zl\u0131 ve daha \u00e7evik bir yakla\u015f\u0131ma ihtiya\u00e7 duyulur.<\/p>\n<h2>Trunk-Based Development (TBD) Nedir ve Temel Prensipleri Nelerdir?<\/h2>\n<p>Trunk-Based Development (TBD), modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda h\u0131zla pop\u00fclerlik kazanan, basitle\u015ftirilmi\u015f bir dallanma (branching) stratejisidir. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, bu yakla\u015f\u0131m\u0131n kalbinde &#8220;trunk&#8221; veya &#8220;main&#8221; olarak adland\u0131r\u0131lan tek bir ana geli\u015ftirme dal\u0131 bulunur. Temel fikir, t\u00fcm geli\u015ftiricilerin kodlar\u0131n\u0131 m\u00fcmk\u00fcn oldu\u011funca s\u0131k ve k\u00fc\u00e7\u00fck par\u00e7alar halinde do\u011frudan bu ana dala birle\u015ftirmesidir. Git-Flow&#8217;un aksine, TBD&#8217;de uzun \u00f6m\u00fcrl\u00fc geli\u015ftirme veya s\u00fcr\u00fcm dallar\u0131 bulunmaz; bunun yerine, her \u015fey ana dal \u00fczerinde d\u00f6ner.<\/p>\n<p>Trunk-Based Development&#8217;\u0131n temel prensipleri, y\u00fcksek h\u0131zl\u0131 ve s\u00fcrekli teslimat (Continuous Delivery) k\u00fclt\u00fcr\u00fcn\u00fc desteklemek \u00fczere tasarlanm\u0131\u015ft\u0131r:<\/p>\n<ul>\n<li><strong>Tek Ana Dal (Trunk\/Main):<\/strong> T\u00fcm ekip \u00fcyeleri, kodlar\u0131n\u0131 tek bir ana dala (<code>main<\/code> veya <code>trunk<\/code>) entegre eder. Bu, uzun \u00f6m\u00fcrl\u00fc <code>develop<\/code> veya <code>release<\/code> dallar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>K\u0131sa \u00d6m\u00fcrl\u00fc \u00d6zellik Dallar\u0131:<\/strong> Yeni \u00f6zellikler veya hata d\u00fczeltmeleri i\u00e7in olu\u015fturulan dallar (feature branches), m\u00fcmk\u00fcn oldu\u011funca k\u0131sa \u00f6m\u00fcrl\u00fc olmal\u0131d\u0131r. \u0130deal olarak, bir geli\u015ftirici bir \u00f6zellik \u00fczerinde \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131nda, bu dal\u0131 birka\u00e7 saat veya en fazla bir g\u00fcn i\u00e7inde tamamlay\u0131p ana dala geri birle\u015ftirmelidir. Bu, birle\u015ftirme \u00e7ak\u0131\u015fmas\u0131 riskini minimize eder.<\/li>\n<li><strong>S\u0131k ve K\u00fc\u00e7\u00fck Commitler:<\/strong> Geli\u015ftiriciler, yapt\u0131klar\u0131 de\u011fi\u015fiklikleri k\u00fc\u00e7\u00fck, anlaml\u0131 ve atomik par\u00e7alar halinde s\u0131k s\u0131k ana dala commit etmelidir. Bu, kod incelemelerini kolayla\u015ft\u0131r\u0131r ve herhangi bir sorunun erken tespit edilmesine olanak tan\u0131r. Her commit, ana dal\u0131n her zaman &#8220;da\u011f\u0131t\u0131ma haz\u0131r&#8221; (always releasable) durumda kalmas\u0131n\u0131 sa\u011flamal\u0131d\u0131r.<\/li>\n<li><strong>S\u00fcrekli Entegrasyon (Continuous Integration &#8211; CI):<\/strong> Her birle\u015ftirme (merge) i\u015fleminden sonra, otomatik testler ve derleme (build) s\u00fcre\u00e7leri hemen \u00e7al\u0131\u015ft\u0131r\u0131lmal\u0131d\u0131r. Bu, entegrasyon hatalar\u0131n\u0131n erken yakalanmas\u0131n\u0131 ve kod taban\u0131n\u0131n s\u00fcrekli olarak kararl\u0131 kalmas\u0131n\u0131 sa\u011flar. CI, TBD&#8217;nin olmazsa olmaz\u0131d\u0131r.<\/li>\n<li><strong>Feature Flag (\u00d6zellik Bayraklar\u0131) Kullan\u0131m\u0131:<\/strong> Hen\u00fcz tamamlanmam\u0131\u015f veya test edilmemi\u015f b\u00fcy\u00fck \u00f6zellikler, ana dala birle\u015ftirilmeden \u00f6nce &#8220;feature flag&#8221; ad\u0131 verilen mekanizmalarla kapat\u0131l\u0131r. Bu, ana dal\u0131n her zaman kararl\u0131 kalmas\u0131n\u0131 sa\u011flarken, geli\u015ftiricilerin tamamlanmam\u0131\u015f \u00f6zellikleri ana dala g\u00fcvenle birle\u015ftirmelerine olanak tan\u0131r. Kullan\u0131c\u0131lar i\u00e7in g\u00f6r\u00fcn\u00fcr olmayacak \u015fekilde kod taban\u0131nda bekleyen \u00f6zellikler, gerekti\u011finde uzaktan a\u00e7\u0131l\u0131p kapat\u0131labilir. \u00d6rne\u011fin, <code>if (featureFlagEnabled(\"yeni_kullanici_arayuzu\")) { \/\/ Yeni UI kodlar\u0131 } else { \/\/ Mevcut UI kodlar\u0131 }<\/code> gibi basit bir yap\u0131 ile \u00f6zellikler kontrol edilebilir.<\/li>\n<li><strong>H\u0131zl\u0131 Geri Bildirim ve \u0130ncelemeler:<\/strong> K\u00fc\u00e7\u00fck de\u011fi\u015fiklikler ve s\u0131k birle\u015ftirmeler, kod inceleme s\u00fcre\u00e7lerinin h\u0131zlanmas\u0131n\u0131 sa\u011flar. Geli\u015ftiriciler, daha k\u00fc\u00e7\u00fck kod par\u00e7alar\u0131n\u0131 daha h\u0131zl\u0131 inceleyebilir ve geri bildirim sa\u011flayabilir, bu da genel kod kalitesini art\u0131r\u0131r.<\/li>\n<\/ul>\n<p>TBD, \u00f6zellikle mobil uygulamalar gibi h\u0131zl\u0131 teslimat gerektiren projelerde, geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r, birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131n\u0131 azalt\u0131r ve ekiplerin daha \u00e7evik olmas\u0131na olanak tan\u0131r. Bu yakla\u015f\u0131m, yaz\u0131l\u0131m\u0131n s\u00fcrekli olarak &#8220;da\u011f\u0131t\u0131ma haz\u0131r&#8221; bir durumda olmas\u0131n\u0131 sa\u011flayarak, s\u00fcr\u00fcm d\u00f6ng\u00fclerini k\u0131salt\u0131r ve pazar taleplerine daha h\u0131zl\u0131 yan\u0131t verme yetene\u011fini art\u0131r\u0131r. Bu sayede, &#8220;release train&#8221; (s\u00fcr\u00fcm treni) mant\u0131\u011f\u0131yla d\u00fczenli aral\u0131klarla ana daldan s\u00fcr\u00fcm kesilebilir ve uygulama ma\u011fazalar\u0131na g\u00f6nderilebilir.<\/p>\n<h2>Neden Trunk-Based Yakla\u015f\u0131m\u0131 Mobil Projeler \u0130\u00e7in \u0130deal?<\/h2>\n<p>Mobil uygulama geli\u015ftirme, kendine \u00f6zg\u00fc dinamiklere ve beklentilere sahiptir. Kullan\u0131c\u0131lar s\u00fcrekli yeni \u00f6zellikler, performans iyile\u015ftirmeleri ve hatas\u0131z bir deneyim beklerken, uygulama ma\u011fazalar\u0131n\u0131n onay s\u00fcre\u00e7leri ve cihaz \u00e7e\u015fitlili\u011fi gibi fakt\u00f6rler, s\u00fcr\u00fcm y\u00f6netimini daha da karma\u015f\u0131k hale getirir. Git-Flow&#8217;un mobil d\u00fcnyada yaratt\u0131\u011f\u0131 sorunlar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurdu\u011fumuzda, Trunk-Based Development (TBD) yakla\u015f\u0131m\u0131n\u0131n mobil projeler i\u00e7in neden ideal bir \u00e7\u00f6z\u00fcm oldu\u011funu daha net g\u00f6rebiliriz.<\/p>\n<p><strong>1. Daha H\u0131zl\u0131 S\u00fcr\u00fcm D\u00f6ng\u00fcleri:<\/strong> Mobil pazarda rekabet\u00e7i kalabilmek i\u00e7in h\u0131zl\u0131 ve d\u00fczenli g\u00fcncellemeler yay\u0131nlamak \u015fartt\u0131r. TBD, ana dal\u0131n her zaman da\u011f\u0131t\u0131ma haz\u0131r olmas\u0131n\u0131 sa\u011flayarak s\u00fcr\u00fcm d\u00f6ng\u00fclerini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r. Geleneksel Git-Flow&#8217;da haftalar s\u00fcren s\u00fcr\u00fcm haz\u0131rl\u0131\u011f\u0131 ve test s\u00fcre\u00e7leri yerine, TBD ile her g\u00fcn veya haftada birka\u00e7 kez s\u00fcr\u00fcm kesmek m\u00fcmk\u00fcn hale gelir. Bu, ekiplerin pazar taleplerine ve kullan\u0131c\u0131 geri bildirimlerine \u00e7ok daha h\u0131zl\u0131 yan\u0131t vermesini sa\u011flar.<\/p>\n<p><strong>2. Azalt\u0131lm\u0131\u015f Birle\u015ftirme \u00c7ak\u0131\u015fmalar\u0131:<\/strong> Git-Flow&#8217;un uzun \u00f6m\u00fcrl\u00fc dallar\u0131, \u00f6zellikle b\u00fcy\u00fck ekiplerde s\u0131k s\u0131k birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131na yol a\u00e7ar. TBD&#8217;de ise k\u0131sa \u00f6m\u00fcrl\u00fc \u00f6zellik dallar\u0131 ve s\u0131k commitler sayesinde, kod taban\u0131ndaki de\u011fi\u015fiklikler daha h\u0131zl\u0131 entegre edilir. Bu, \u00e7ak\u0131\u015fma olas\u0131l\u0131\u011f\u0131n\u0131 minimize eder ve geli\u015ftiricilerin birle\u015ftirme sorunlar\u0131yla u\u011fra\u015fmak yerine as\u0131l i\u015flerine odaklanmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, 10 ki\u015filik bir mobil ekip, Git-Flow kullan\u0131rken haftada ortalama 5-10 saatini birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00e7\u00f6zmeye ay\u0131r\u0131rken, TBD&#8217;ye ge\u00e7i\u015fle bu s\u00fcreyi %80 oran\u0131nda azaltabilir.<\/p>\n<p><strong>3. Geli\u015ftirilmi\u015f Kod Kalitesi ve G\u00fcvenilirlik:<\/strong> K\u00fc\u00e7\u00fck, s\u0131k commitler ve h\u0131zl\u0131 kod incelemeleri, kod kalitesini art\u0131r\u0131r. Her de\u011fi\u015fiklik, k\u00fc\u00e7\u00fck oldu\u011fu i\u00e7in daha kolay g\u00f6zden ge\u00e7irilir ve potansiyel hatalar daha erken tespit edilir. S\u00fcrekli entegrasyon (CI) boru hatlar\u0131, her birle\u015ftirme sonras\u0131 otomatik testleri \u00e7al\u0131\u015ft\u0131rarak ana dal\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 garantiler. Bu, mobil uygulamalar\u0131n daha az hata ile yay\u0131nlanmas\u0131na ve daha g\u00fcvenilir bir kullan\u0131c\u0131 deneyimi sunmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<p><strong>4. Daha \u0130yi CI\/CD Entegrasyonu:<\/strong> TBD, S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Teslimat (CD) pratikleriyle do\u011fal bir uyum i\u00e7indedir. Tek bir ana dal \u00fczerinde yo\u011funla\u015fmak, CI\/CD boru hatlar\u0131n\u0131n kurulumunu ve y\u00f6netimini basitle\u015ftirir. Her commit veya birle\u015ftirme sonras\u0131 otomatik derleme, test ve hatta da\u011f\u0131t\u0131m s\u00fcre\u00e7leri tetiklenebilir. Bu otomasyon, mobil uygulamalar\u0131n daha h\u0131zl\u0131 ve hatas\u0131z bir \u015fekilde son kullan\u0131c\u0131lara ula\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>5. Kolayla\u015ft\u0131r\u0131lm\u0131\u015f Hotfix ve Geri Alma (Rollback) S\u00fcre\u00e7leri:<\/strong> Mobil uygulamalarda acil bir hata ortaya \u00e7\u0131kt\u0131\u011f\u0131nda, h\u0131zl\u0131ca bir d\u00fczeltme yay\u0131nlamak hayati \u00f6nem ta\u015f\u0131r. TBD&#8217;de hotfix&#8217;ler, ana daldan k\u0131sa \u00f6m\u00fcrl\u00fc bir dal olu\u015fturularak yap\u0131l\u0131r ve d\u00fczeltme do\u011frudan ana dala birle\u015ftirilir. Bu s\u00fcre\u00e7, Git-Flow&#8217;a g\u00f6re \u00e7ok daha basit ve h\u0131zl\u0131d\u0131r. Ayr\u0131ca, bir s\u00fcr\u00fcmde ciddi bir sorun tespit edildi\u011finde, TBD&#8217;nin &#8220;her zaman da\u011f\u0131t\u0131ma haz\u0131r&#8221; felsefesi sayesinde, \u00f6nceki kararl\u0131 bir commit&#8217;e geri d\u00f6nmek veya yeni bir s\u00fcr\u00fcm kesmek \u00e7ok daha kolayd\u0131r.<\/p>\n<p><strong>6. Geli\u015fmi\u015f Ekip \u0130\u015fbirli\u011fi ve \u015eeffafl\u0131k:<\/strong> T\u00fcm ekip \u00fcyelerinin tek bir ana dal \u00fczerinde \u00e7al\u0131\u015fmas\u0131, daha fazla \u015feffafl\u0131k ve i\u015fbirli\u011fi sa\u011flar. Herkes, kod taban\u0131n\u0131n mevcut durumu hakk\u0131nda net bir g\u00f6r\u00fc\u015fe sahip olur. Bu, ekip \u00fcyeleri aras\u0131nda daha iyi ileti\u015fimi te\u015fvik eder ve ortak hedeflere ula\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><strong>Vaka Analizi: B\u00fcy\u00fck Bir Mobil Uygulama Ekibinin D\u00f6n\u00fc\u015f\u00fcm\u00fc<\/strong><br \/>\nAnadolu&#8217;nun \u00f6nde gelen bir bankas\u0131n\u0131n mobil uygulama ekibi, y\u0131llarca Git-Flow ile \u00e7al\u0131\u015ft\u0131. Haftal\u0131k veya iki haftal\u0131k s\u00fcr\u00fcm d\u00f6ng\u00fcleri hedeflense de, birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131, <code>release<\/code> dallar\u0131ndaki son dakika hatalar\u0131 ve <code>develop<\/code> dal\u0131na geri birle\u015ftirme zorluklar\u0131 nedeniyle s\u00fcr\u00fcm tarihleri s\u00fcrekli aks\u0131yordu. \u00d6zellikle kritik bir g\u00fcvenlik g\u00fcncellemesi gerekti\u011finde, t\u00fcm s\u00fcr\u00fcm s\u00fcrecinin ba\u015ftan a\u015fa\u011f\u0131ya fel\u00e7 olmas\u0131, ekibi TBD&#8217;ye ge\u00e7i\u015f karar\u0131 almaya itti. \u0130lk ba\u015fta diren\u00e7le kar\u015f\u0131la\u015f\u0131lsa da, &#8220;feature flag&#8221; kullan\u0131m\u0131 ve s\u0131k\u0131 CI\/CD otomasyonu ile ge\u00e7i\u015f s\u00fcreci ba\u015flad\u0131. Ge\u00e7i\u015fin ard\u0131ndan, ekip s\u00fcr\u00fcm d\u00f6ng\u00fclerini haftal\u0131ktan g\u00fcnl\u00fck hale getirmeyi ba\u015fard\u0131. Birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131 %90 oran\u0131nda azald\u0131 ve geli\u015ftiricilerin &#8220;release hell&#8221; (s\u00fcr\u00fcm cehennemi) olarak adland\u0131rd\u0131\u011f\u0131 durum ortadan kalkt\u0131. Bu d\u00f6n\u00fc\u015f\u00fcm, sadece teknik bir iyile\u015fme de\u011fil, ayn\u0131 zamanda ekip moralini ve \u00fcretkenli\u011fini de art\u0131ran k\u00fclt\u00fcrel bir de\u011fi\u015fim oldu.<\/p>\n<p>Bu nedenlerden dolay\u0131, Trunk-Based Development, modern mobil uygulama geli\u015ftirme ekipleri i\u00e7in sadece bir alternatif de\u011fil, ayn\u0131 zamanda rekabet\u00e7i kalmak ve kullan\u0131c\u0131 beklentilerini kar\u015f\u0131lamak i\u00e7in stratejik bir gereklilik haline gelmi\u015ftir.<\/p>\n<h2>Trunk-Based Mobil S\u00fcr\u00fcm S\u00fcrecine Ad\u0131m Ad\u0131m Ge\u00e7i\u015f<\/h2>\n<p>Git-Flow&#8217;dan Trunk-Based Development (TBD) yakla\u015f\u0131m\u0131na ge\u00e7i\u015f, sadece teknik bir de\u011fi\u015fiklik de\u011fil, ayn\u0131 zamanda bir k\u00fclt\u00fcrel d\u00f6n\u00fc\u015f\u00fcmd\u00fcr. Bu s\u00fcre\u00e7, dikkatli planlama ve ad\u0131m ad\u0131m uygulama gerektirir. \u0130\u015fte bu ge\u00e7i\u015fi ba\u015far\u0131l\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirmek i\u00e7in izlenebilecek ad\u0131mlar:<\/p>\n<h3>\u00d6n Haz\u0131rl\u0131k ve K\u00fclt\u00fcrel De\u011fi\u015fim<\/h3>\n<p>Herhangi bir b\u00fcy\u00fck metodoloji de\u011fi\u015fikli\u011finde oldu\u011fu gibi, TBD&#8217;ye ge\u00e7i\u015fin ilk ad\u0131m\u0131, t\u00fcm ekibi bu de\u011fi\u015fime haz\u0131rlamakt\u0131r. Geli\u015ftiriciler, test uzmanlar\u0131, \u00fcr\u00fcn y\u00f6neticileri ve hatta operasyon ekipleri, yeni yakla\u015f\u0131m\u0131n faydalar\u0131n\u0131 ve \u00e7al\u0131\u015fma prensiplerini anlamal\u0131d\u0131r. Bu a\u015famada \u015funlar yap\u0131lmal\u0131d\u0131r:<\/p>\n<ul>\n<li><strong>E\u011fitim ve Bilin\u00e7lendirme:<\/strong> TBD&#8217;nin ne oldu\u011fu, neden ge\u00e7ildi\u011fi ve ekibe ne gibi faydalar sa\u011flayaca\u011f\u0131 konusunda kapsaml\u0131 e\u011fitimler d\u00fczenlenmelidir. Git-Flow&#8217;dan kaynaklanan mevcut sorunlar vurgulanarak, TBD&#8217;nin bu sorunlara nas\u0131l \u00e7\u00f6z\u00fcm getirece\u011fi a\u00e7\u0131klanmal\u0131d\u0131r.<\/li>\n<li><strong>Ekip Anla\u015fmas\u0131 ve Ortak Karar:<\/strong> De\u011fi\u015fikli\u011fin ba\u015far\u0131l\u0131 olmas\u0131 i\u00e7in t\u00fcm ekibin ortak bir anlay\u0131\u015fa ve taahh\u00fcde sahip olmas\u0131 \u00f6nemlidir. Kararlar\u0131n birlikte al\u0131nmas\u0131, sahiplenmeyi art\u0131r\u0131r.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck Ba\u015flang\u0131\u00e7:<\/strong> B\u00fcy\u00fck bir proje yerine, daha k\u00fc\u00e7\u00fck veya daha az kritik bir projede pilot uygulama yaparak TBD&#8217;yi denemek, ekibin yeni yakla\u015f\u0131ma al\u0131\u015fmas\u0131na yard\u0131mc\u0131 olabilir.<\/li>\n<\/ul>\n<h3>Feature Flag Kullan\u0131m\u0131: G\u00fcvenli Geli\u015ftirmenin Anahtar\u0131<\/h3>\n<p>Feature flag&#8217;ler (\u00f6zellik bayraklar\u0131), TBD&#8217;nin en kritik bile\u015fenlerinden biridir ve ana dal\u0131n her zaman kararl\u0131 kalmas\u0131n\u0131 sa\u011flarken, geli\u015ftiricilerin tamamlanmam\u0131\u015f veya riskli \u00f6zellikleri ana dala g\u00fcvenle birle\u015ftirmelerine olanak tan\u0131r. Feature flag&#8217;ler sayesinde, bir \u00f6zellik geli\u015ftirilip ana dala birle\u015ftirilse bile, kullan\u0131c\u0131lar i\u00e7in varsay\u0131lan olarak kapal\u0131 kal\u0131r. Bu sayede, \u00f6zellikler tamamland\u0131\u011f\u0131nda ve test edildi\u011finde uzaktan a\u00e7\u0131labilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\n\/\/ \u00d6rnek bir mobil uygulama kodu par\u00e7as\u0131 (Kotlin\/Java benzeri)\nfun applyNewDesign(user: User) {\n    if (FeatureFlagManager.isFeatureEnabled(\"yeni_kullanici_arayuzu_v2\", user)) {\n        \/\/ Yeni kullan\u0131c\u0131 aray\u00fcz\u00fc bile\u015fenlerini y\u00fckle\n        println(\"Yeni kullan\u0131c\u0131 aray\u00fcz\u00fc aktif.\")\n        \/\/ \u00d6rne\u011fin, yeni bir Fragment veya Activity ba\u015flat\n    } else {\n        \/\/ Mevcut kullan\u0131c\u0131 aray\u00fcz\u00fc bile\u015fenlerini y\u00fckle\n        println(\"Mevcut kullan\u0131c\u0131 aray\u00fcz\u00fc aktif.\")\n        \/\/ \u00d6rne\u011fin, eski bir Fragment veya Activity ba\u015flat\n    }\n}\n\n\/\/ FeatureFlagManager s\u0131n\u0131f\u0131 (\u00f6rnek)\nobject FeatureFlagManager {\n    fun isFeatureEnabled(featureName: String, user: User): Boolean {\n        \/\/ Buras\u0131 bir uzaktan yap\u0131land\u0131rma servisinden (\u00f6rne\u011fin Firebase Remote Config, LaunchDarkly)\n        \/\/ veya yerel bir ayardan feature flag durumunu kontrol eder.\n        \/\/ \u00d6rne\u011fin, belirli bir kullan\u0131c\u0131 grubuna veya belirli bir cihaz tipine g\u00f6re farkl\u0131l\u0131k g\u00f6sterebilir.\n        return when (featureName) {\n            \"yeni_kullanici_arayuzu_v2\" -> user.id % 2 == 0 \/\/ \u00d6rnek: Kullan\u0131c\u0131 ID'si \u00e7ift olanlara g\u00f6ster\n            \"kampanya_modulu\" -> true \/\/ Herkese a\u00e7\u0131k\n            else -> false\n        }\n    }\n}\n  <\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, <code>yeni_kullanici_arayuzu_v2<\/code> \u00f6zelli\u011fi, kullan\u0131c\u0131 ID&#8217;si \u00e7ift olanlara g\u00f6sterilirken, di\u011fer kullan\u0131c\u0131lara eski aray\u00fcz sunulur. Bu, A\/B testleri yapmak veya \u00f6zellikleri a\u015famal\u0131 olarak (rollout) kullan\u0131c\u0131lara sunmak i\u00e7in de harika bir y\u00f6ntemdir.<\/p>\n<h3>K\u00fc\u00e7\u00fck, S\u0131k Commitler ve H\u0131zl\u0131 Kod \u0130ncelemeleri<\/h3>\n<p>TBD&#8217;nin temel prensiplerinden biri, de\u011fi\u015fiklikleri m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck tutmakt\u0131r. B\u00fcy\u00fck, monolitik commit&#8217;ler yerine, her bir commit&#8217;in tek bir amac\u0131 olmal\u0131 ve kolayca anla\u015f\u0131labilir olmal\u0131d\u0131r. Bu, kod inceleme (code review) s\u00fcrecini h\u0131zland\u0131r\u0131r ve hatalar\u0131n erken tespit edilmesini sa\u011flar. Geli\u015ftiriciler, her k\u00fc\u00e7\u00fck de\u011fi\u015fikli\u011fi ana dala birle\u015ftirmeden \u00f6nce h\u0131zla bir Pull Request (\u00c7ekme \u0130ste\u011fi) olu\u015fturmal\u0131 ve ekip arkada\u015flar\u0131 taraf\u0131ndan incelenmesini sa\u011flamal\u0131d\u0131r.<\/p>\n<h3>S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Teslimat (CD) Entegrasyonu<\/h3>\n<p>TBD, g\u00fc\u00e7l\u00fc bir CI\/CD boru hatt\u0131 olmadan etkili bir \u015fekilde uygulanamaz. Her birle\u015ftirme sonras\u0131, otomatik testlerin (birim testleri, entegrasyon testleri, UI testleri) \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131, kodun kararl\u0131l\u0131\u011f\u0131n\u0131 garanti eder. CI boru hatt\u0131 \u015funlar\u0131 i\u00e7ermelidir:<\/p>\n<ul>\n<li><strong>Otomatik Derleme:<\/strong> Her commit sonras\u0131 kodun derlenmesi.<\/li>\n<li><strong>Otomatik Testler:<\/strong> T\u00fcm test s\u00fcitlerinin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131.<\/li>\n<li><strong>Statik Kod Analizi:<\/strong> Kod kalitesi ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n tespiti.<\/li>\n<li><strong>Otomatik Da\u011f\u0131t\u0131m:<\/strong> Ba\u015far\u0131l\u0131 testler sonras\u0131, uygulaman\u0131n otomatik olarak bir test ortam\u0131na veya dahili test kullan\u0131c\u0131lar\u0131na da\u011f\u0131t\u0131lmas\u0131.<\/li>\n<\/ul>\n<p>CD k\u0131sm\u0131 ise, uygulaman\u0131n otomatik olarak uygulama ma\u011fazalar\u0131na g\u00f6nderilmesini veya a\u015famal\u0131 olarak kullan\u0131c\u0131lara sunulmas\u0131n\u0131 (\u00f6rne\u011fin, ilk %1&#8217;lik kullan\u0131c\u0131 grubuna) i\u00e7erir. Mobil d\u00fcnyada, ma\u011faza onay s\u00fcre\u00e7leri nedeniyle tam otomatik CD biraz daha farkl\u0131 i\u015fleyebilir, ancak otomatik test ve derleme sonras\u0131 ma\u011fazaya g\u00f6nderme s\u00fcrecinin m\u00fcmk\u00fcn oldu\u011funca otomatize edilmesi hedeflenmelidir.<\/p>\n<h3>S\u00fcr\u00fcm Y\u00f6netimi ve Hotfix Stratejileri<\/h3>\n<p>TBD&#8217;de s\u00fcr\u00fcm y\u00f6netimi olduk\u00e7a basittir. Ana dal her zaman da\u011f\u0131t\u0131ma haz\u0131r oldu\u011fu i\u00e7in, bir s\u00fcr\u00fcm yay\u0131nlamak gerekti\u011finde, ana daldan bir s\u00fcr\u00fcm etiketi (tag) olu\u015fturulur ve bu etiketli kod uygulama ma\u011fazalar\u0131na g\u00f6nderilir. \u00d6zel bir <code>release<\/code> dal\u0131 olu\u015fturmaya gerek kalmaz.<\/p>\n<p>Hotfix&#8217;ler i\u00e7in de benzer bir yakla\u015f\u0131m izlenir: Acil bir hata tespit edildi\u011finde, ana daldan k\u0131sa \u00f6m\u00fcrl\u00fc bir <code>hotfix<\/code> dal\u0131 olu\u015fturulur. D\u00fczeltme bu dalda yap\u0131l\u0131r ve hemen ana dala geri birle\u015ftirilir. Ard\u0131ndan, ana daldan yeni bir s\u00fcr\u00fcm etiketi olu\u015fturularak h\u0131zl\u0131ca bir d\u00fczeltme s\u00fcr\u00fcm\u00fc yay\u0131nlan\u0131r. Bu s\u00fcre\u00e7, Git-Flow&#8217;a g\u00f6re \u00e7ok daha h\u0131zl\u0131 ve basittir, \u00e7\u00fcnk\u00fc karma\u015f\u0131k birle\u015ftirme senaryolar\u0131ndan ka\u00e7\u0131n\u0131l\u0131r.<\/p>\n<p>Bu ad\u0131mlar, bir mobil geli\u015ftirme ekibinin Git-Flow&#8217;dan Trunk-Based Development&#8217;a sorunsuz bir ge\u00e7i\u015f yapmas\u0131n\u0131 sa\u011flayarak, daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha verimli bir s\u00fcr\u00fcm y\u00f6netimi s\u00fcrecine ula\u015fmas\u0131na yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>Trunk-Based Geli\u015ftirmede Kar\u015f\u0131la\u015f\u0131labilecek Zorluklar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p>Trunk-Based Development (TBD) her ne kadar bir\u00e7ok avantaj sunsa da, her metodolojide oldu\u011fu gibi kendine \u00f6zg\u00fc zorluklar\u0131 da beraberinde getirir. Bu zorluklar\u0131 \u00f6nceden bilmek ve proaktif \u00e7\u00f6z\u00fcmler geli\u015ftirmek, ge\u00e7i\u015f s\u00fcrecini ve TBD&#8217;nin uzun vadeli ba\u015far\u0131s\u0131n\u0131 sa\u011flamak i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<p><strong>1. Kod Kalitesini Korumak:<\/strong> Ana dala s\u0131k ve k\u00fc\u00e7\u00fck commitler yap\u0131lmas\u0131, kod kalitesinin d\u00fc\u015fme riskini beraberinde getirebilir. \u00d6zellikle h\u0131zl\u0131 teslimat bask\u0131s\u0131 alt\u0131nda, geli\u015ftiriciler bazen yeterince test edilmemi\u015f veya iyi yaz\u0131lmam\u0131\u015f kodlar\u0131 birle\u015ftirmeye meyilli olabilirler.<\/p>\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong>\n<ul>\n<li><strong>S\u0131k\u0131 Kod \u0130ncelemeleri:<\/strong> Her Pull Request (PR) i\u00e7in zorunlu ve h\u0131zl\u0131 kod incelemeleri (code reviews) yap\u0131lmal\u0131d\u0131r. K\u00fc\u00e7\u00fck PR&#8217;lar, incelemelerin daha h\u0131zl\u0131 ve etkili olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Otomatik Test Kapsam\u0131:<\/strong> Y\u00fcksek birim test, entegrasyon test ve UI test kapsam\u0131 zorunlu tutulmal\u0131d\u0131r. Her commit&#8217;in otomatik testlerden ge\u00e7mesi, ana dal\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 garanti eder.<\/li>\n<li><strong>Statik Kod Analizi ve Linting:<\/strong> Otomatik statik kod analizi ara\u00e7lar\u0131 (\u00f6rne\u011fin, SonarQube, Detekt, ESLint) CI boru hatt\u0131na entegre edilmeli ve belirli kalite e\u015fiklerinin alt\u0131nda kalan kodlar\u0131n birle\u015ftirilmesine izin verilmemelidir.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>2. Feature Flag Y\u00f6netimi:<\/strong> Feature flag&#8217;ler TBD&#8217;nin g\u00fcc\u00fcn\u00fc art\u0131rsa da, zamanla \u00e7ok say\u0131da feature flag birikmesi ve bunlar\u0131n y\u00f6netimi karma\u015f\u0131k hale gelebilir. Hangi flag&#8217;in ne zaman a\u00e7\u0131l\u0131p kapanaca\u011f\u0131, test s\u00fcre\u00e7leri ve kullan\u0131lmayan flag&#8217;lerin temizlenmesi (flag debt) sorun yaratabilir.<\/p>\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong>\n<ul>\n<li><strong>Merkezi Y\u00f6netim Sistemi:<\/strong> Feature flag&#8217;leri y\u00f6netmek i\u00e7in LaunchDarkly, Firebase Remote Config veya kendi geli\u015ftirdi\u011finiz bir sistem gibi merkezi bir ara\u00e7 kullan\u0131lmal\u0131d\u0131r. Bu ara\u00e7lar, flag&#8217;lerin uzaktan a\u00e7\u0131l\u0131p kapat\u0131lmas\u0131n\u0131, hedeflemeyi ve A\/B testlerini kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Ya\u015fam D\u00f6ng\u00fcs\u00fc Y\u00f6netimi:<\/strong> Her feature flag&#8217;in bir sahibi, bir amac\u0131 ve bir ya\u015fam d\u00f6ng\u00fcs\u00fc olmal\u0131d\u0131r. Kullan\u0131lmayan veya amac\u0131 sona eren flag&#8217;ler d\u00fczenli olarak kod taban\u0131ndan temizlenmelidir. Bu, &#8220;flag debt&#8221; birikmesini \u00f6nler.<\/li>\n<li><strong>Belgeleme:<\/strong> Her feature flag&#8217;in ne i\u015fe yarad\u0131\u011f\u0131, ne zaman kald\u0131r\u0131laca\u011f\u0131 gibi bilgiler iyi belgelenmelidir.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>3. Ekip Disiplini ve K\u00fclt\u00fcrel Diren\u00e7:<\/strong> Git-Flow&#8217;dan TBD&#8217;ye ge\u00e7i\u015f, geli\u015ftiricilerin \u00e7al\u0131\u015fma al\u0131\u015fkanl\u0131klar\u0131n\u0131 de\u011fi\u015ftirmesini gerektirir. Uzun s\u00fcreli dallarda \u00e7al\u0131\u015fmaya al\u0131\u015fm\u0131\u015f ekipler, s\u0131k commit yapma, k\u00fc\u00e7\u00fck PR&#8217;lar olu\u015fturma ve s\u00fcrekli entegrasyon prensiplerine uyum sa\u011flamakta zorlanabilir.<\/p>\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong>\n<ul>\n<li><strong>S\u00fcrekli E\u011fitim ve Ko\u00e7luk:<\/strong> Ekip \u00fcyelerine TBD prensipleri ve en iyi uygulamalar\u0131 hakk\u0131nda s\u00fcrekli e\u011fitim ve ko\u00e7luk sa\u011flanmal\u0131d\u0131r.<\/li>\n<li><strong>\u015eeffafl\u0131k ve Geri Bildirim:<\/strong> De\u011fi\u015fikli\u011fin faydalar\u0131 ve kar\u015f\u0131la\u015f\u0131lan zorluklar hakk\u0131nda a\u00e7\u0131k ileti\u015fim kurulmal\u0131, ekipten d\u00fczenli geri bildirim al\u0131narak s\u00fcre\u00e7 iyile\u015ftirilmelidir.<\/li>\n<li><strong>Otomasyon ile Destekleme:<\/strong> CI\/CD boru hatlar\u0131 ve otomatik testler gibi ara\u00e7lar, disiplini do\u011fal olarak te\u015fvik eder. Yanl\u0131\u015f birle\u015ftirme veya hatal\u0131 kod durumunda otomatik geri bildirimler, ekibin do\u011fru al\u0131\u015fkanl\u0131klar\u0131 geli\u015ftirmesine yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>4. B\u00fcy\u00fck veya Karma\u015f\u0131k \u00d6zelliklerin Y\u00f6netimi:<\/strong> \u00c7ok b\u00fcy\u00fck veya uzun s\u00fcreli geli\u015ftirme gerektiren \u00f6zellikler, TBD&#8217;nin k\u0131sa \u00f6m\u00fcrl\u00fc dal prensibiyle \u00e7eli\u015febilir. Bu t\u00fcr \u00f6zellikler, ana dal\u0131n kararl\u0131l\u0131\u011f\u0131n\u0131 bozma riski ta\u015f\u0131yabilir.<\/p>\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong>\n<ul>\n<li><strong>\u00d6zellikleri Par\u00e7alara Ay\u0131rmak:<\/strong> B\u00fcy\u00fck \u00f6zellikler, daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z ve entegre edilebilir par\u00e7alara b\u00f6l\u00fcnmelidir. Her par\u00e7a, kendi feature flag&#8217;i ile korunabilir ve ana dala ayr\u0131 ayr\u0131 birle\u015ftirilebilir.<\/li>\n<li><strong>Spike ve Ara\u015ft\u0131rma Dallar:<\/strong> \u00c7ok belirsiz veya deneysel \u00f6zellikler i\u00e7in, k\u0131sa s\u00fcreli &#8220;spike&#8221; (ara\u015ft\u0131rma) dallar\u0131 kullan\u0131labilir. Bu dallar, prototipleme ve ara\u015ft\u0131rma bittikten sonra silinir ve ana dala sadece sonu\u00e7lar\u0131 (kod de\u011fil) yans\u0131t\u0131l\u0131r.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Bu zorluklar\u0131n \u00fcstesinden gelmek, TBD&#8217;nin potansiyelini tam olarak ortaya \u00e7\u0131karmak i\u00e7in kritik \u00f6neme sahiptir. Do\u011fru ara\u00e7lar, g\u00fc\u00e7l\u00fc bir otomasyon altyap\u0131s\u0131 ve kararl\u0131 bir ekip k\u00fclt\u00fcr\u00fc ile TBD, mobil uygulama geli\u015ftirme s\u00fcre\u00e7lerinizi \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131rabilir ve iyile\u015ftirebilir.<\/p>\n<h2>Vaka Analizi: B\u00fcy\u00fck Bir Mobil Uygulaman\u0131n D\u00f6n\u00fc\u015f\u00fcm\u00fc<\/h2>\n<p>T\u00fcrkiye&#8217;nin \u00f6nde gelen bir fintech (finansal teknoloji) \u015firketi, milyonlarca kullan\u0131c\u0131s\u0131 olan mobil uygulamas\u0131n\u0131 y\u0131llard\u0131r Git-Flow metodolojisiyle y\u00f6netiyordu. Uygulama, hem bireysel hem de kurumsal m\u00fc\u015fterilere hizmet veren, s\u00fcrekli yeni \u00f6zellikler eklenen ve API entegrasyonlar\u0131 ile zenginle\u015ftirilmi\u015f olduk\u00e7a karma\u015f\u0131k bir yap\u0131ya sahipti. Ba\u015flang\u0131\u00e7ta Git-Flow, d\u00fczenli s\u00fcr\u00fcm d\u00f6ng\u00fcleri ve kararl\u0131 bir kod taban\u0131 sa\u011flam\u0131\u015f olsa da, zamanla ekibin b\u00fcy\u00fcmesi ve pazar\u0131n h\u0131zlanmas\u0131yla ciddi sorunlar ortaya \u00e7\u0131kmaya ba\u015flad\u0131.<\/p>\n<h3>Git-Flow ile Ya\u015fanan Sorunlar:<\/h3>\n<ul>\n<li><strong>S\u00fcr\u00fcm Gecikmeleri:<\/strong> Her ay\u0131n sonunda hedeflenen s\u00fcr\u00fcm tarihleri, s\u00fcrekli olarak aks\u0131yordu. Bir <code>release<\/code> dal\u0131 olu\u015fturuldu\u011funda, bu dalda bulunan hatalar ve <code>develop<\/code> dal\u0131ndaki yeni \u00f6zelliklerin birle\u015ftirilmesi (cherry-pick) s\u00fcreci, haftalar s\u00fcren test ve d\u00fczeltme d\u00f6ng\u00fclerine yol a\u00e7\u0131yordu. Bu, bazen 2 haftal\u0131k s\u00fcr\u00fcm d\u00f6ng\u00fcs\u00fcn\u00fc 4-5 haftaya \u00e7\u0131karabiliyordu.<\/li>\n<li><strong>Birle\u015ftirme \u00c7ak\u0131\u015fmalar\u0131 Cehennemi:<\/strong> Yakla\u015f\u0131k 30 geli\u015ftiriciden olu\u015fan mobil ekip, ayn\u0131 kod taban\u0131 \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, \u00f6zellikle <code>develop<\/code> dal\u0131na birle\u015ftirme yap\u0131l\u0131rken s\u0131k s\u0131k ve b\u00fcy\u00fck birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131 ya\u015f\u0131yordu. Bu \u00e7ak\u0131\u015fmalar\u0131 \u00e7\u00f6zmek, geli\u015ftiricilerin de\u011ferli zaman\u0131n\u0131n %15-20&#8217;sini al\u0131yordu ve moral bozuklu\u011funa neden oluyordu.<\/li>\n<li><strong>Hotfix Y\u00f6netimi Karma\u015fas\u0131:<\/strong> Kritik bir hata \u00e7\u0131kt\u0131\u011f\u0131nda, <code>master<\/code>&#8216;dan bir <code>hotfix<\/code> dal\u0131 a\u00e7mak, d\u00fczeltmeyi yapmak, hem <code>master<\/code> hem de <code>develop<\/code> dallar\u0131na birle\u015ftirmek zorunda kalmak, s\u00fcr\u00fcm haz\u0131rl\u0131\u011f\u0131 devam ederken b\u00fcy\u00fck bir kaos yarat\u0131yordu. Bazen bir <code>hotfix<\/code>, devam eden <code>release<\/code> dal\u0131ndaki ba\u015fka bir \u00f6zelli\u011fi bozabiliyordu.<\/li>\n<li><strong>Yava\u015f \u0130novasyon:<\/strong> Uzun s\u00fcr\u00fcm d\u00f6ng\u00fcleri ve karma\u015f\u0131k s\u00fcre\u00e7ler, yeni \u00f6zelliklerin pazara sunulma h\u0131z\u0131n\u0131 yava\u015flat\u0131yordu. Rakipler daha h\u0131zl\u0131 hareket ederken, \u015firket yeni fikirlerini hayata ge\u00e7irmekte zorlan\u0131yordu.<\/li>\n<\/ul>\n<h3>Trunk-Based Development&#8217;a Ge\u00e7i\u015f Karar\u0131 ve S\u00fcre\u00e7:<\/h3>\n<p>Bu sorunlar kar\u015f\u0131s\u0131nda, teknik liderlik ekibi kapsaml\u0131 bir de\u011ferlendirme yaparak Trunk-Based Development&#8217;a ge\u00e7i\u015f karar\u0131 ald\u0131. Ge\u00e7i\u015f s\u00fcreci \u015fu ad\u0131mlarla ilerledi:<\/p>\n<ol>\n<li><strong>Pilot Proje ve E\u011fitim:<\/strong> \u0130lk olarak, daha k\u00fc\u00e7\u00fck bir dahili ara\u00e7 projesi TBD&#8217;ye ge\u00e7irildi. Bu, ekibin yeni s\u00fcrece al\u0131\u015fmas\u0131n\u0131 ve pratik deneyim kazanmas\u0131n\u0131 sa\u011flad\u0131. Ard\u0131ndan t\u00fcm mobil ekibe TBD prensipleri, feature flag kullan\u0131m\u0131 ve CI\/CD otomasyonu hakk\u0131nda yo\u011fun e\u011fitimler verildi.<\/li>\n<li><strong>G\u00fc\u00e7l\u00fc CI\/CD Altyap\u0131s\u0131:<\/strong> Mevcut CI\/CD boru hatlar\u0131 (Jenkins \u00fczerinde), her birle\u015ftirme sonras\u0131 otomatik derleme, t\u00fcm birim ve entegrasyon testlerini \u00e7al\u0131\u015ft\u0131rma, statik kod analizi yapma ve ba\u015far\u0131l\u0131 durumlarda test ortam\u0131na otomatik da\u011f\u0131t\u0131m yapma yetene\u011fiyle g\u00fc\u00e7lendirildi. Her commit&#8217;in h\u0131zl\u0131 geri bildirim almas\u0131 sa\u011fland\u0131.<\/li>\n<li><strong>Feature Flag Entegrasyonu:<\/strong> Uygulamaya kapsaml\u0131 bir feature flag sistemi entegre edildi. Yeni geli\u015ftirilen t\u00fcm \u00f6zellikler, varsay\u0131lan olarak kapal\u0131 olan feature flag&#8217;lerle korundu. Bu, tamamlanmam\u0131\u015f kodlar\u0131n bile ana dala g\u00fcvenle birle\u015ftirilmesine olanak tan\u0131d\u0131. \u015eirket, flag&#8217;leri uzaktan y\u00f6netmek i\u00e7in ticari bir \u00e7\u00f6z\u00fcm (\u00f6rne\u011fin, LaunchDarkly benzeri bir servis) kullanmaya ba\u015flad\u0131.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ve S\u0131k PR&#8217;lar:<\/strong> Geli\u015ftiricilere, de\u011fi\u015fikliklerini m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131rmalar\u0131 ve s\u0131k s\u0131k ana dala Pull Request (PR) g\u00f6ndermeleri te\u015fvik edildi. Kod inceleme s\u00fcre\u00e7leri h\u0131zland\u0131r\u0131ld\u0131 ve her PR&#8217;\u0131n en ge\u00e7 birka\u00e7 saat i\u00e7inde incelenip onaylanmas\u0131 hedeflendi.<\/li>\n<\/ol>\n<h3>D\u00f6n\u00fc\u015f\u00fcm Sonras\u0131 Elde Edilen \u0130yile\u015fmeler:<\/h3>\n<p>Ge\u00e7i\u015fin tamamlanmas\u0131n\u0131n ard\u0131ndan, fintech \u015firketinin mobil uygulama ekibi \u00f6nemli iyile\u015fmeler kaydetti:<\/p>\n<ul>\n<li><strong>H\u0131zlanan S\u00fcr\u00fcm D\u00f6ng\u00fcleri:<\/strong> Haftal\u0131k s\u00fcr\u00fcm d\u00f6ng\u00fcleri, haftada birka\u00e7 kez veya g\u00fcnl\u00fck mini-s\u00fcr\u00fcmlere d\u00f6n\u00fc\u015ft\u00fc. Uygulama ma\u011fazas\u0131na g\u00f6nderme s\u00fcre\u00e7leri otomatize edildi ve onay sonras\u0131 da\u011f\u0131t\u0131m h\u0131zland\u0131.<\/li>\n<li><strong>Azalan Birle\u015ftirme \u00c7ak\u0131\u015fmalar\u0131:<\/strong> Birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131n\u0131n say\u0131s\u0131 %95 oran\u0131nda azald\u0131. Geli\u015ftiriciler, zamanlar\u0131n\u0131 birle\u015ftirme sorunlar\u0131 yerine yeni \u00f6zellikler geli\u015ftirmeye harcayabildiler.<\/li>\n<li><strong>Geli\u015fmi\u015f Kod Kalitesi:<\/strong> S\u0131k\u0131 kod incelemeleri ve otomatik testler sayesinde, ana dal\u0131n kararl\u0131l\u0131\u011f\u0131 artt\u0131 ve \u00fcretim ortam\u0131na giden hata say\u0131s\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azald\u0131.<\/li>\n<li><strong>H\u0131zl\u0131 \u0130novasyon ve A\/B Testleri:<\/strong> Feature flag&#8217;ler sayesinde, yeni \u00f6zellikler kademeli olarak kullan\u0131c\u0131lara sunulabildi ve A\/B testleri \u00e7ok daha kolay hale geldi. Bu, \u00fcr\u00fcn ekibinin pazar tepkilerini daha h\u0131zl\u0131 \u00f6l\u00e7mesini ve kararlar\u0131n\u0131 verilere dayand\u0131rmas\u0131n\u0131 sa\u011flad\u0131.<\/li>\n<li><strong>Artan Geli\u015ftirici Memnuniyeti:<\/strong> Geli\u015ftiriciler, daha az stresli bir s\u00fcr\u00fcm s\u00fcreci ve daha verimli bir \u00e7al\u0131\u015fma ortam\u0131na sahip olduklar\u0131 i\u00e7in daha motive oldular.<\/li>\n<\/ul>\n<p>Bu vaka analizi, Trunk-Based Development&#8217;\u0131n mobil uygulama geli\u015ftirme ekipleri i\u00e7in sadece bir teorik yakla\u015f\u0131m olmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda ger\u00e7ek d\u00fcnyada somut faydalar sa\u011flayabilen, d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc bir strateji oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Do\u011fru ara\u00e7lar, s\u00fcre\u00e7ler ve k\u00fclt\u00fcrel destekle, Git-Flow&#8217;dan TBD&#8217;ye ge\u00e7i\u015f, mobil uygulaman\u0131z\u0131n gelece\u011fi i\u00e7in at\u0131lm\u0131\u015f stratejik bir ad\u0131m olabilir.<\/p>\n<h2>Sonu\u00e7 ve Gelecek Perspektifi<\/h2>\n<p>Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131nda rekabetin ve kullan\u0131c\u0131 beklentilerinin s\u00fcrekli artt\u0131\u011f\u0131 bir d\u00f6nemde, geleneksel s\u00fcr\u00fcm y\u00f6netim yakla\u015f\u0131mlar\u0131 yetersiz kalmaya ba\u015flam\u0131\u015ft\u0131r. Bir zamanlar\u0131n end\u00fcstri standard\u0131 olan Git-Flow, mobil projelerin ihtiya\u00e7 duydu\u011fu h\u0131za, esnekli\u011fe ve s\u00fcrekli teslimat yetene\u011fine ayak uydurmakta zorlanmaktad\u0131r. Uzun \u00f6m\u00fcrl\u00fc dallar, karma\u015f\u0131k birle\u015ftirme s\u00fcre\u00e7leri ve yava\u015f s\u00fcr\u00fcm d\u00f6ng\u00fcleri, geli\u015ftirici verimlili\u011fini d\u00fc\u015f\u00fcr\u00fcrken, inovasyon h\u0131z\u0131n\u0131 da k\u0131s\u0131tlamaktad\u0131r.<\/p>\n<p>Trunk-Based Development (TBD) ise, tek bir ana dal, k\u0131sa \u00f6m\u00fcrl\u00fc \u00f6zellik dallar\u0131, s\u0131k ve k\u00fc\u00e7\u00fck commitler, g\u00fc\u00e7l\u00fc bir CI\/CD altyap\u0131s\u0131 ve feature flag kullan\u0131m\u0131 gibi temel prensipleriyle bu sorunlara g\u00fc\u00e7l\u00fc bir alternatif sunmaktad\u0131r. TBD&#8217;ye ge\u00e7i\u015f, mobil uygulama ekiplerine daha h\u0131zl\u0131 s\u00fcr\u00fcm d\u00f6ng\u00fcleri, azalt\u0131lm\u0131\u015f birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131, art\u0131r\u0131lm\u0131\u015f kod kalitesi ve geli\u015ftirilmi\u015f ekip i\u015fbirli\u011fi gibi somut faydalar sa\u011flamaktad\u0131r. Bu d\u00f6n\u00fc\u015f\u00fcm, sadece teknik bir de\u011fi\u015fiklik de\u011fil, ayn\u0131 zamanda daha \u00e7evik, \u015feffaf ve verimli bir \u00e7al\u0131\u015fma k\u00fclt\u00fcr\u00fc benimsemek anlam\u0131na gelir.<\/p>\n<p>Elbette, TBD&#8217;ye ge\u00e7i\u015fin kendine \u00f6zg\u00fc zorluklar\u0131 vard\u0131r: kod kalitesini koruma, feature flag y\u00f6netimi ve ekip disiplinini sa\u011flama gibi. Ancak bu zorluklar, do\u011fru ara\u00e7lar, s\u00fcre\u00e7ler ve k\u00fclt\u00fcrel destekle a\u015f\u0131labilir. Merkezi feature flag y\u00f6netim sistemleri, kapsaml\u0131 otomatik testler ve s\u00fcrekli e\u011fitim, TBD&#8217;nin potansiyelini tam olarak ortaya \u00e7\u0131karmak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>Gelecekte mobil uygulama geli\u015ftirme, daha da h\u0131zl\u0131 ve dinamik hale gelecektir. Kullan\u0131c\u0131lar, an\u0131nda g\u00fcncellemeler ve ki\u015fiselle\u015ftirilmi\u015f deneyimler beklerken, geli\u015ftirici ekipleri de bu beklentilere yan\u0131t verebilmek i\u00e7in s\u00fcrekli olarak s\u00fcre\u00e7lerini optimize etmek zorunda kalacaklard\u0131r. Trunk-Based Development, bu gelece\u011fe haz\u0131rlanmak ve mobil uygulama projelerinizin ba\u015far\u0131s\u0131n\u0131 g\u00fcvence alt\u0131na almak i\u00e7in g\u00fc\u00e7l\u00fc bir temel sunmaktad\u0131r. E\u011fer siz de s\u00fcr\u00fcm y\u00f6netim s\u00fcre\u00e7lerinizin yava\u015fl\u0131\u011f\u0131ndan, birle\u015ftirme \u00e7ak\u0131\u015fmalar\u0131ndan veya inovasyon h\u0131z\u0131n\u0131z\u0131n d\u00fc\u015f\u00fckl\u00fc\u011f\u00fcnden \u015fikayet\u00e7iyseniz, TBD&#8217;ye ge\u00e7i\u015fi ciddi olarak de\u011ferlendirmenizin zaman\u0131 gelmi\u015f demektir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p><strong>1. Trunk-Based Development (TBD) her proje i\u00e7in uygun mu?<\/strong><br \/>\nTBD, \u00f6zellikle h\u0131zl\u0131 teslimat (Continuous Delivery) hedefleyen, s\u0131k g\u00fcncellemeler yay\u0131nlayan ve birden fazla geli\u015ftiricinin ayn\u0131 kod taban\u0131 \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 projeler i\u00e7in idealdir. Mobil uygulamalar, SaaS \u00fcr\u00fcnleri ve web tabanl\u0131 servisler bu kategoriye girer. \u00c7ok k\u00fc\u00e7\u00fck, tek ki\u015filik veya y\u0131lda birka\u00e7 kez s\u00fcr\u00fcm yay\u0131nlayan projeler i\u00e7in Git-Flow gibi daha geleneksel modeller de yeterli olabilir, ancak TBD&#8217;nin sa\u011flad\u0131\u011f\u0131 \u00e7eviklik ve h\u0131z, \u00e7o\u011fu modern proje i\u00e7in \u00f6nemli bir avantajd\u0131r.<\/p>\n<p><strong>2. Feature flag y\u00f6netimi zor de\u011fil mi?<\/strong><br \/>\nBa\u015flang\u0131\u00e7ta feature flag&#8217;lerin entegrasyonu ve y\u00f6netimi ek bir i\u015f y\u00fck\u00fc gibi g\u00f6r\u00fcnebilir. Ancak do\u011fru bir y\u00f6netim sistemi (\u00f6rne\u011fin, LaunchDarkly, Firebase Remote Config veya benzeri bir servis) kullan\u0131ld\u0131\u011f\u0131nda ve flag&#8217;lerin ya\u015fam d\u00f6ng\u00fcs\u00fc (olu\u015fturma, kullanma, kald\u0131rma) iyi tan\u0131mland\u0131\u011f\u0131nda, bu s\u00fcre\u00e7 olduk\u00e7a kolayla\u015f\u0131r. Feature flag&#8217;ler, riskleri azalt\u0131r, A\/B testlerini kolayla\u015ft\u0131r\u0131r ve \u00f6zelliklerin a\u015famal\u0131 olarak sunulmas\u0131na olanak tan\u0131yarak uzun vadede b\u00fcy\u00fck faydalar sa\u011flar.<\/p>\n<p><strong>3. TBD&#8217;de hotfix&#8217;ler nas\u0131l yap\u0131l\u0131r?<\/strong><br \/>\nTBD&#8217;de hotfix&#8217;ler \u00e7ok daha basittir. Acil bir hata tespit edildi\u011finde, ana (<code>main<\/code>) daldan k\u0131sa \u00f6m\u00fcrl\u00fc bir dal (\u00f6rne\u011fin, <code>hotfix\/bug-fix-id<\/code>) olu\u015fturulur. D\u00fczeltme bu dalda yap\u0131l\u0131r ve hemen ana dala geri birle\u015ftirilir. Ard\u0131ndan, ana daldan yeni bir s\u00fcr\u00fcm etiketi (tag) olu\u015fturularak h\u0131zl\u0131ca bir d\u00fczeltme s\u00fcr\u00fcm\u00fc yay\u0131nlan\u0131r. Bu s\u00fcre\u00e7, Git-Flow&#8217;a g\u00f6re daha az karma\u015f\u0131k ve daha h\u0131zl\u0131d\u0131r \u00e7\u00fcnk\u00fc uzun \u00f6m\u00fcrl\u00fc dallar aras\u0131nda birle\u015ftirme veya <code>cherry-pick<\/code> i\u015flemleri gerektirmez.<\/p>\n<p><strong>4. B\u00fcy\u00fck bir ekiple TBD nas\u0131l y\u00f6netilir?<\/strong><br \/>\nB\u00fcy\u00fck ekiplerde TBD&#8217;nin ba\u015far\u0131s\u0131 i\u00e7in g\u00fc\u00e7l\u00fc bir otomasyon altyap\u0131s\u0131 (CI\/CD), s\u0131k\u0131 kod incelemeleri ve ekip disiplini kritik \u00f6neme sahiptir. K\u00fc\u00e7\u00fck, atomik commitler ve h\u0131zl\u0131 PR&#8217;lar, kod inceleme y\u00fck\u00fcn\u00fc azalt\u0131r. Otomatik testler ve statik kod analizi, kod kalitesinin d\u00fc\u015fmesini engeller. Ayr\u0131ca, feature flag&#8217;ler b\u00fcy\u00fck \u00f6zelliklerin par\u00e7alar halinde entegre edilmesini ve riskin da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar. \u015eeffaf ileti\u015fim ve ortak bir k\u00fclt\u00fcrel anlay\u0131\u015f, b\u00fcy\u00fck ekiplerde TBD&#8217;nin sorunsuz i\u015flemesini destekler.<\/p>\n<p><strong>5. Git-Flow&#8217;dan TBD&#8217;ye ge\u00e7i\u015f ne kadar s\u00fcrer?<\/strong><br \/>\nGe\u00e7i\u015f s\u00fcresi, ekibin b\u00fcy\u00fckl\u00fc\u011f\u00fcne, projenin karma\u015f\u0131kl\u0131\u011f\u0131na, mevcut CI\/CD olgunlu\u011funa ve ekibin yeni yakla\u015f\u0131ma adaptasyon h\u0131z\u0131na ba\u011fl\u0131 olarak de\u011fi\u015fir. K\u00fc\u00e7\u00fck bir ekip i\u00e7in birka\u00e7 hafta s\u00fcrebilirken, b\u00fcy\u00fck ve karma\u015f\u0131k projelerde bu s\u00fcre\u00e7 birka\u00e7 ay\u0131 bulabilir. \u00d6nemli olan, ad\u0131mlar\u0131 a\u015famal\u0131 olarak atmak, pilot projelerle ba\u015flamak, s\u00fcrekli e\u011fitim vermek ve ekibin geri bildirimlerini dinleyerek s\u00fcreci optimize etmektir. Feature flag&#8217;lerin entegrasyonu ve CI\/CD boru hatlar\u0131n\u0131n g\u00fc\u00e7lendirilmesi, genellikle en \u00e7ok zaman alan k\u0131s\u0131mlard\u0131r.<\/p>\n<p>#TrunkBasedDevelopment #MobilUygulama #GitFlow #S\u00fcr\u00fcmY\u00f6netimi #CI\/CD #FeatureFlag #Yaz\u0131l\u0131mGeli\u015ftirme #DevOps<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/trunk-based-development-simulation\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/trunk-based-development-simulation<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131 h\u0131zla de\u011fi\u015fiyor ve ekipler, kullan\u0131c\u0131lar\u0131na daha h\u0131zl\u0131, daha g\u00fcvenilir g\u00fcncellemeler sunmak i\u00e7in s\u00fcrekli yeni yollar ar\u0131yor.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-44333","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git-Flow&#039;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git-Flow&#039;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?\" \/>\n<meta property=\"og:description\" content=\"Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131 h\u0131zla de\u011fi\u015fiyor ve ekipler, kullan\u0131c\u0131lar\u0131na daha h\u0131zl\u0131, daha g\u00fcvenilir g\u00fcncellemeler sunmak i\u00e7in s\u00fcrekli yeni yollar ar\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-25T18:11:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T18:12:14+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Git-Flow&#8217;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?\",\"datePublished\":\"2026-08-25T18:11:43+00:00\",\"dateModified\":\"2026-08-25T18:12:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\"},\"wordCount\":6007,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\",\"name\":\"Git-Flow'dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-08-25T18:11:43+00:00\",\"dateModified\":\"2026-08-25T18:12:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git-Flow&#8217;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git-Flow'dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/","og_locale":"tr_TR","og_type":"article","og_title":"Git-Flow'dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?","og_description":"Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131 h\u0131zla de\u011fi\u015fiyor ve ekipler, kullan\u0131c\u0131lar\u0131na daha h\u0131zl\u0131, daha g\u00fcvenilir g\u00fcncellemeler sunmak i\u00e7in s\u00fcrekli yeni yollar ar\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-08-25T18:11:43+00:00","article_modified_time":"2026-08-25T18:12:14+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Git-Flow&#8217;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?","datePublished":"2026-08-25T18:11:43+00:00","dateModified":"2026-08-25T18:12:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/"},"wordCount":6007,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/","url":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/","name":"Git-Flow'dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-08-25T18:11:43+00:00","dateModified":"2026-08-25T18:12:14+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/git-flowdan-trunk-based-mobil-surumlere-gecisimiz-neden-ve-nasil\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Git-Flow&#8217;dan Trunk-Based Mobil S\u00fcr\u00fcmlere Ge\u00e7i\u015fimiz: Neden ve Nas\u0131l?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=44333"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44333\/revisions"}],"predecessor-version":[{"id":44334,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44333\/revisions\/44334"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}