<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://fmarslan.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://fmarslan.com/" rel="alternate" type="text/html" /><updated>2026-04-09T15:16:32+00:00</updated><id>https://fmarslan.com/feed.xml</id><title type="html">F.M. Arslan</title><subtitle>I&apos;m a solution architect &amp; software engineer.
</subtitle><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><entry xml:lang="tr-TR"><title type="html">Cloud-Native ve Monolit</title><link href="https://fmarslan.com/2026/04/08/monolith-vs-cloud-native-gercek-dunya-karsilastirma.html" rel="alternate" type="text/html" title="Cloud-Native ve Monolit" /><published>2026-04-08T00:00:00+00:00</published><updated>2026-04-08T00:00:00+00:00</updated><id>https://fmarslan.com/2026/04/08/monolith-vs-cloud-native-gercek-dunya-karsilastirma</id><content type="html" xml:base="https://fmarslan.com/2026/04/08/monolith-vs-cloud-native-gercek-dunya-karsilastirma.html"><![CDATA[<p>Hayatımızdaki kavramlardan bir diğeri cloud-native yaklaşım. Kubernetes, microservices ve containerization artık birçok sistemin temelini oluşturuyor. Ancak bu kavramla birlikte basit bir soru daha karmaşık hale geliyor:</p>

<p><img src="/assets/img/31579b3a-c863-48da-937e-ba17cce39009.png" alt="Cloud-Native ve Monolit? Deneyim Üzerinden Gerçekler?" /></p>

<p><strong>Monolit mi, dağıtık mimari mi?</strong></p>

<p>Bu sorunun tek bir doğru cevabı yok. Çünkü mesele teknoloji değil, <strong>hangi tür karmaşıklığı nerede yönetmek istediğiniz</strong>.</p>

<h2 id="monolit-basit-başlangıç-artan-i̇ç-karmaşa">Monolit: Basit Başlangıç, Artan İç Karmaşa</h2>

<p>Monolit bir uygulama ile başladığınızda her şey nettir. Tek bir codebase, tek bir runtime ve merkezi bir iş mantığı vardır. Kod okunabilir, debug etmek kolaydır ve sistem tek parça olarak anlaşılabilir.</p>

<p>Ancak sistem büyüdükçe bu basitlik yerini farklı bir maliyete bırakır. Aynı kod tabanı üzerinde çalışan ekipler zamanla birbirinin alanına girmeye başlar. Merge conflict’ler artar, feature’lar çakışır, code review süreçleri ağırlaşır ve bazı alanlarda derinleşmiş geliştiricilere bağımlılık oluşur.</p>

<p>Monolit bu noktada şunu üretir:</p>

<p><strong>Operasyonel olarak basit ama ekip koordinasyonu açısından pahalı bir sistem.</strong></p>

<h2 id="cloud-native-esneklik-ama-dağıtılmış-karmaşa">Cloud-Native: Esneklik, Ama Dağıtılmış Karmaşa</h2>

<p>Cloud-native yaklaşım bu problemi çözmek için ortaya çıkar. Sistem küçük parçalara bölünür, Kubernetes üzerinde çalışır, servisler bağımsız deploy edilir ve ihtiyaç halinde farklı teknolojiler kullanılabilir.</p>

<p>Bu yaklaşım ciddi avantajlar sağlar. Yeni bir capability eklemek için mevcut sistemi zorlamak yerine yeni bir servis yazabilirsiniz. Open-source veya SaaS bileşenleri sisteme hızlıca dahil edebilirsiniz. Kaynakları daha verimli kullanabilir ve servisleri bağımsız ölçekleyebilirsiniz.</p>

<p>Ancak burada kritik bir gerçek vardır:</p>

<p><strong>Karmaşa yok olmaz, sadece yer değiştirir.</strong></p>

<p>Kod içinden çıkar ve platform katmanına taşınır.</p>

<h2 id="asıl-ayrım-karmaşıklığın-yeri">Asıl Ayrım: Karmaşıklığın Yeri</h2>

<p>Bu noktada tartışma “monolit mi, microservice mi” değildir.</p>

<p>Gerçek soru şudur:</p>

<p><strong>Karmaşıklığı nerede yönetmek istiyorum?</strong></p>

<p>Monolitte karmaşıklık codebase içinde birikir. Dağıtık sistemde ise bu karmaşıklık infrastructure, servisler arası iletişim ve operasyon katmanına yayılır.</p>

<p>Bu yüzden iki yaklaşım da aslında bir şeyi optimize ederken başka bir şeyi pahalı hale getirir.</p>

<h2 id="infra-artık-uygulamanın-kendisi">Infra Artık Uygulamanın Kendisi</h2>

<p>Dağıtık bir sistem kurduğunuzda artık uygulama sadece yazdığınız kod değildir.</p>

<p>Kubernetes manifestleri, deployment pipeline’ları, gateway kuralları, messaging altyapısı, observability sistemi, config ve secret yönetimi… bunların hepsi uygulamanın ayrılmaz bir parçası haline gelir.</p>

<p>Bu noktada önemli bir zihinsel kırılma yaşanır:</p>

<p><strong>Infrastructure artık operasyon katmanı değil, uygulamanın runtime mimarisidir.</strong></p>

<h2 id="neden-dağıtık-yaklaşım-tercih-edilir">Neden Dağıtık Yaklaşım Tercih Edilir?</h2>

<p>Dağıtık mimarinin en güçlü motivasyonlarından biri hata izolasyonudur. Doğru sınırlar çizildiğinde bir servis problemi tüm sistemi etkilemez. Sistem tamamen down olmak yerine kısmi olarak çalışmaya devam eder.</p>

<p>Bu yaklaşım, kullanıcıya yansıyan etkiyi azaltır ve krizleri daha kontrollü yönetilebilir hale getirir. Ancak bu fayda sadece servisleri bölmekle elde edilmez. Timeout, retry, circuit breaker, queue ile ayrıştırma ve idempotency gibi davranışların da doğru kurgulanması gerekir.</p>

<p>Aksi halde sistem dağıtık görünür ama davranış olarak yine tek parça gibi çöker.</p>

<h2 id="tech-stack-neden-büyür">Tech Stack Neden Büyür?</h2>

<p>Cloud-native yaklaşımda tech stack’in büyümesi bir hata değil, doğal bir sonuçtur. Çünkü artık tek bir framework her problemi çözmez. Logging, tracing, messaging, config ve deployment gibi konular ayrı ayrı ele alınır.</p>

<p>Bu da sistemi güçlü kılar, ancak aynı zamanda öğrenilmesi ve yönetilmesi gereken yüzeyi büyütür.</p>

<h2 id="eksik-parça-platform-governance">Eksik Parça: Platform Governance</h2>

<p>Cloud-native yaklaşım tek başına yeterli değildir. Eğer kontrol mekanizması eklenmezse sistem kısa sürede parçalanır. Her ekip kendi teknolojisini seçer, servis sınırları ihlal edilir, veri sahipliği bulanıklaşır ve debug süreci zorlaşır.</p>

<p>Bu noktada ortaya çıkan şey modern bir mimari değil, sadece daha karmaşık bir sistemdir.</p>

<p>Çözüm ise şudur:</p>

<p><strong>Platform + Governance</strong></p>

<p>Standartlar merkezi belirlenir, servis sınırları korunur, contract’lar kontrol edilir ve sistem belirli kurallar çerçevesinde çalışır. Ancak burada denge kritiktir. Aşırı kontrol sistemi yavaşlatır, kontrolsüzlük ise kaos üretir.</p>

<h2 id="ai-faktörü">AI Faktörü</h2>

<p>Yeni denklemde önemli bir değişken daha var: AI.</p>

<p>Büyük monolitik codebase’lerde AI bağlamı anlamakta zorlanır ve hatalı ya da tekrarlı kod üretme eğilimi artar. Dağıtık yapılarda ise küçük ve sınırları net servisler AI’nın daha doğru üretim yapmasını sağlar.</p>

<p>Bu önemli bir avantajdır. Ancak burada kritik bir yanlış anlaşılma vardır:</p>

<p><strong>AI kod yazmayı ucuzlatır, sistem yönetimini değil.</strong></p>

<p>Servis yazmak kolaylaşır, ancak o servisin işletilmesi, izlenmesi, güvenliği ve sürdürülebilirliği hâlâ maliyetlidir.</p>

<h2 id="hangisini-ne-zaman-seçmeliyiz">Hangisini Ne Zaman Seçmeliyiz?</h2>

<p>Bu noktada tercih teknolojiye göre değil, sistemin doğasına göre yapılmalıdır.</p>

<p>Eğer sisteminiz sürekli değişim içindeyse, her hafta yeni release’ler çıkıyorsa ve bu süreç uzun süre devam edecekse monolit zamanla ciddi bir karmaşa üretir. Aynı codebase sürekli değişir, bağımlılıklar artar ve sistemin evrimi zorlaşır.</p>

<p>Bu senaryoda dağıtık yaklaşım önemli bir avantaj sağlar. Servisler ayrıldıkça değişim etkisi lokal kalır. Hatta birçok servis bir süre sonra hiç dokunulmadan çalışmaya devam eder. Sistem büyür ama her parça aynı hızda değişmek zorunda kalmaz. Bu da <strong>karmaşıklığı sabitleyebilir</strong>.</p>

<p>Buna karşılık, eğer geliştirdiğiniz uygulama belirli bir noktada stabil hale gelecekse, sürekli değişim gerektirmiyorsa ve planlı bir geliştirme süreci sonrası büyük ölçüde tamamlanacaksa monolit daha mantıklı bir seçenek olabilir. Çünkü operasyonel maliyeti daha düşüktür ve gereksiz dağıtım karmaşası oluşturmaz.</p>

<p>Özetle:</p>

<ul>
  <li>Sürekli değişim ve evrim → dağıtık yaklaşım</li>
  <li>Stabil, sınırlı geliştirme → monolit</li>
</ul>

<h2 id="sonuç">Sonuç</h2>

<p>Bu yazının ana fikri basit:</p>

<p>Monolit ve cloud-native birbirinin alternatifi değil, farklı türde karmaşıklıkları yöneten iki yaklaşımdır.</p>

<p>Başarılı sistemler, sadece dağıtık olduğu için değil, <strong>doğru sınırlar ve güçlü platform governance ile kurulduğu için</strong> başarılı olur.</p>

<p>Ve belki de en kritik gerçek şudur:</p>

<p><strong>Infra artık sadece sistemin çalıştığı yer değil, sistemin kendisidir.</strong></p>

<p>Bugün sektördeki büyük oyuncuların yönü de bu doğrultuda ilerliyor. Kubernetes ve onun etrafında gelişen ekosistem, aslında cloud-native dünyadaki karmaşıklığı basitleştirmek için ortaya çıktı. Monolit dünyasında da benzer problemleri çözmeye çalışan araçlar vardı; metrikler üretilebiliyor, belirli seviyede trace yapılabiliyordu. Ancak scale, failover ve kısmi kesinti gibi durumları kontrol altında tutmak sınırlı kalıyordu.</p>

<p>Bu yüzden dağıtık mimari ve microservice yaklaşımı ortaya çıktı. Fakat ilk aşamada eksik olan şey governance’tı. Bugün geldiğimiz noktada ise organizasyonel olarak tanımlanmış governance ile birlikte, Kubernetes ve çevresindeki araçlar sayesinde karmaşıklık daha görünür, daha izlenebilir ve daha yönetilebilir hale geliyor.</p>

<p>Tabii ki bu yaklaşımın bir maliyeti var. Geniş bir tech stack bilgisi, güçlü bir platform yaklaşımı ve sürekli öğrenme gerektiriyor.</p>

<p>Kendi deneyimlerimde çok fazla kriz yönetmiş biri olarak, sürekli değişen ve potansiyel olarak problem üretebilecek sistemlerde bu maliyeti ödemeyi tercih ediyorum. Daha fazla öğrenmek, başta daha yavaş ilerlemek pahasına; kriz anlarında sistemi ayakta tutabilmek ve kullanıcı etkisini minimize etmek benim için daha değerli.</p>

<p>Buna karşılık, riskin düşük olduğu ve sistemin stabil kalacağı senaryolarda monolit yaklaşımı tercih etmekten çekinmiyorum. Çünkü her problem için en kompleks çözümü seçmek zorunda değiliz.</p>

<p><strong>Eğer risk yoksa, en kolay çözüm çoğu zaman en doğru çözümdür.</strong></p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="cloud-native" /><category term="platform-engineering" /><category term="microservices" /><category term="monolith" /><category term="architecture" /><summary type="html"><![CDATA[Cloud-native yaklaşım, platform governance ve monolit mimariler arasındaki gerçek trade-off'lar]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/31579b3a-c863-48da-937e-ba17cce39009.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/31579b3a-c863-48da-937e-ba17cce39009.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">AI Nasıl Kullanılmamalı? Deneyim Üzerinden Gerçekler</title><link href="https://fmarslan.com/2026/04/07/ai-nasil-kullanilmamali-deneyim-uzerinden-gercekler.html" rel="alternate" type="text/html" title="AI Nasıl Kullanılmamalı? Deneyim Üzerinden Gerçekler" /><published>2026-04-07T11:00:00+00:00</published><updated>2026-04-07T11:00:00+00:00</updated><id>https://fmarslan.com/2026/04/07/ai-nasil-kullanilmamali-deneyim-uzerinden-gercekler</id><content type="html" xml:base="https://fmarslan.com/2026/04/07/ai-nasil-kullanilmamali-deneyim-uzerinden-gercekler.html"><![CDATA[<p>AI kullanımı herkes için farklıdır. Bu yazı bir “doğru” anlatmaz; sadece benim gözlemlerimi ve yaşadıklarımı içerir.</p>

<p>Bugün AI genelde 3 amaçla kullanılıyor:</p>
<ol>
  <li>Kod yazma</li>
  <li>Research</li>
  <li>Eğlence</li>
</ol>

<p><img src="/assets/img/403d882b-7907-47f5-9d06-098b3c873539.png" alt="AI Nasıl Kullanılmamalı? Deneyim Üzerinden Gerçekler?" /></p>

<h2 id="1-kod-yazma">1. Kod Yazma</h2>

<p>AI ile proje başlatmak çok kolaylaştı.<br />
Scaffold, yapı kurma, ilk deployment → ciddi hız kazandırıyor.</p>

<p>Ama asıl problem <strong>revizyon sonrası başlıyor.</strong></p>

<h3 id="problem">Problem</h3>

<p>İki kritik senaryo var:</p>

<h3 id="a-projeyi-sıfırdan-ai-ile-başlatmak">a) Projeyi sıfırdan AI ile başlatmak</h3>

<p>İlk versiyon:</p>
<ul>
  <li>Güzel çalışır</li>
  <li>Döküman düzgündür</li>
  <li>Deploy edilir</li>
</ul>

<p>Ama sonra:</p>
<ul>
  <li>Yeni ihtiyaçlar gelir</li>
  <li>Revizyonlar başlar</li>
  <li>Context kaybolur</li>
</ul>

<p>Sonuç:</p>
<ul>
  <li>Kod dağılır</li>
  <li>Tekrarlar oluşur</li>
  <li>Kodun sahibi kalmaz</li>
  <li>Yönetilemez hale gelir</li>
</ul>

<h3 id="çözüm-yaklaşımı">Çözüm yaklaşımı</h3>

<ul>
  <li>Büyük projeyi parçala</li>
  <li>Küçük servisler yap</li>
  <li>Her servisi ayrı AI context ile yönet</li>
</ul>

<p>Bu sayede:</p>
<ul>
  <li>Context küçük kalır</li>
  <li>Müdahale edilebilir olur</li>
  <li>Kod bozulmaz</li>
</ul>

<blockquote>
  <p>Omurga sağlam değilse bu yaklaşım da çalışmaz.</p>
</blockquote>

<h3 id="b-mevcut-temiz-projeyi-ai-ile-bozmak">b) Mevcut temiz projeyi AI ile bozmak</h3>

<p>En tehlikeli senaryo.</p>

<p>Özellikle:</p>
<ul>
  <li>Custom framework varsa</li>
  <li>Internal library varsa</li>
</ul>

<p>AI:</p>
<ul>
  <li>Senin yapını bilmez</li>
  <li>Eski versiyon bilgisi kullanır</li>
  <li>Deprecated config üretir</li>
  <li>Kod tekrarları ekler</li>
</ul>

<p>Bir süre sonra:</p>
<blockquote>
  <p>Kendi kodunu tanıyamaz hale gelirsin.</p>
</blockquote>

<h3 id="kritik-risk">Kritik risk</h3>

<p>Eğer koda hakim değilsen:</p>

<p>AI sana “yaptım” der ama:</p>
<ul>
  <li>ORM yerine raw query yazmış olabilir</li>
  <li>Güvenlik açığı bırakmış olabilir</li>
  <li>Performansı bozmuş olabilir</li>
</ul>

<p>Ve sen farkında olmazsın.</p>

<p>Bu noktada:</p>
<blockquote>
  <p>AI değil, sen risk haline gelirsin.</p>
</blockquote>

<h2 id="2-research">2. Research</h2>

<p>Burada risk daha büyük.</p>

<p>AI:</p>
<ul>
  <li>Eski bilgi verebilir</li>
  <li>Yanlış bilgi verebilir</li>
  <li>Uydurabilir</li>
</ul>

<p>Sen doğrulamazsan:</p>

<p>Gerçek hayatta:</p>
<ul>
  <li>Yanlış savunma yaparsın</li>
  <li>Tecrübeli insanlarla çatışırsın</li>
  <li>Güven kaybedersin</li>
</ul>

<h3 id="kritik-hata">Kritik hata</h3>

<p>AI’yi:</p>
<blockquote>
  <p>“Cevap veren sistem” gibi kullanmak</p>
</blockquote>

<p>Doğrusu:</p>
<blockquote>
  <p>“Arama motoru gibi kullanmak”</p>
</blockquote>

<p>Yani:</p>
<ul>
  <li>Sorgula</li>
  <li>Karşılaştır</li>
  <li>Kaynak ara</li>
  <li>Kanıt iste</li>
</ul>

<h3 id="gerçek-dünya-problemi">Gerçek dünya problemi</h3>

<p>AI sana der ki:</p>
<ul>
  <li>“Bunu böyle yapabilirsin”</li>
</ul>

<p>Ama:</p>
<ul>
  <li>Servis çalışmaz</li>
  <li>Veri doğru değildir</li>
  <li>Sistem POC seviyesindedir</li>
</ul>

<p>Sen bunun üstüne ürün kurarsın → patlarsın.</p>

<h2 id="3-eğlence">3. Eğlence</h2>

<p>Burada sorun yok 🙂<br />
Hatta en sağlıklı kullanım alanı.</p>

<h2 id="sonuç">Sonuç</h2>

<p>AI, sınır koymazsan:</p>

<ul>
  <li>Kendi kararlarını verir</li>
  <li>Senin yerine mimari kurar</li>
  <li>Senin bilmediğin şeyleri üretir</li>
</ul>

<p>Ve çoğu zaman:</p>
<blockquote>
  <p>Senin ihtiyacınla uyuşmaz</p>
</blockquote>

<h3 id="en-net-çıkarım">En net çıkarım</h3>

<p>Eğer:</p>
<ul>
  <li>Ne yaptığını bilmiyorsan</li>
  <li>Kontrol sende değilse</li>
</ul>

<blockquote>
  <p>AI ile çalışmıyorsun, AI seni kullanıyor.</p>
</blockquote>

<h3 id="son-söz">Son söz</h3>

<p>Masada değilsen:</p>

<blockquote>
  <p>Oyunun parçası değilsin, kumarın içindesin.</p>
</blockquote>

<h2 id="referans">Referans</h2>

<p>Bu yazıyı tamamlayan önceki düşünce yazım:  <a href="https://fmarslan.com/2026/01/30/ai-gercegiyle-yuzlesmek-musteri-mi-operator-mu.html">Müşteri mi Operatör mü</a></p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="ai" /><category term="software" /><category term="engineering" /><category term="architecture" /><category term="productivity" /><summary type="html"><![CDATA[AI kullanımı üzerine gerçek deneyimler: kod yazma, research ve riskler. Kontrol sende değilse AI seni yönetir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/images/posts/ai-kullanimi.jpg" /><media:content medium="image" url="https://fmarslan.com/assets/images/posts/ai-kullanimi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">Separating Public and Internal API Documentation in .NET</title><link href="https://fmarslan.com/software/dotnet/api/2026/03/10/separating-public-and-internal-swagger-docs-dotnet.html" rel="alternate" type="text/html" title="Separating Public and Internal API Documentation in .NET" /><published>2026-03-10T00:00:00+00:00</published><updated>2026-03-10T00:00:00+00:00</updated><id>https://fmarslan.com/software/dotnet/api/2026/03/10/separating-public-and-internal-swagger-docs-dotnet</id><content type="html" xml:base="https://fmarslan.com/software/dotnet/api/2026/03/10/separating-public-and-internal-swagger-docs-dotnet.html"><![CDATA[<h1 id="separating-public-and-internal-api-documentation-in-net">Separating Public and Internal API Documentation in .NET</h1>

<p>In many services there are two types of endpoints:</p>

<ul>
  <li><strong>Public APIs</strong> used by customers or external systems</li>
  <li><strong>Internal APIs</strong> used for operations, debugging, maintenance, or service-to-service communication</li>
</ul>

<p>When all endpoints appear in a single Swagger document, the API surface becomes harder to understand and internal endpoints may accidentally be exposed to consumers.</p>

<p>A simple solution is to <strong>publish multiple Swagger documents from the same service.</strong></p>

<h2 id="api-documentation-structure">API Documentation Structure</h2>

<p>Instead of a single Swagger definition, we define two:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
/swagger/public/swagger.json
/swagger/internal/swagger.json

</code></pre></div></div>

<ul>
  <li><strong>Public</strong> → Customer-facing APIs</li>
  <li><strong>Internal</strong> → Operational or system endpoints</li>
</ul>

<p>Swagger UI can display both documents separately.</p>

<h2 id="controller-grouping">Controller Grouping</h2>

<p>Controllers can be assigned to a documentation group using <code class="language-plaintext highlighter-rouge">ApiExplorerSettings</code>.</p>

<p>Example:</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="n">ApiController</span><span class="p">]</span>
<span class="p">[</span><span class="nf">Route</span><span class="p">(</span><span class="s">"api/internal/[controller]"</span><span class="p">)]</span>
<span class="p">[</span><span class="nf">ApiExplorerSettings</span><span class="p">(</span><span class="n">GroupName</span> <span class="p">=</span> <span class="s">"internal"</span><span class="p">)]</span>
<span class="k">public</span> <span class="k">class</span> <span class="nc">AdminController</span> <span class="p">:</span> <span class="n">ControllerBase</span>
<span class="p">{</span>
    <span class="p">[</span><span class="nf">HttpGet</span><span class="p">(</span><span class="s">"health-detail"</span><span class="p">)]</span>
    <span class="k">public</span> <span class="n">IActionResult</span> <span class="nf">Get</span><span class="p">()</span>
    <span class="p">{</span>
        <span class="k">return</span> <span class="nf">Ok</span><span class="p">(</span><span class="s">"internal data"</span><span class="p">);</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Public endpoints can use a different group:</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="n">ApiController</span><span class="p">]</span>
<span class="p">[</span><span class="nf">Route</span><span class="p">(</span><span class="s">"api/[controller]"</span><span class="p">)]</span>
<span class="p">[</span><span class="nf">ApiExplorerSettings</span><span class="p">(</span><span class="n">GroupName</span> <span class="p">=</span> <span class="s">"public"</span><span class="p">)]</span>
<span class="k">public</span> <span class="k">class</span> <span class="nc">ProductsController</span> <span class="p">:</span> <span class="n">ControllerBase</span>
<span class="p">{</span>
    <span class="p">[</span><span class="n">HttpGet</span><span class="p">]</span>
    <span class="k">public</span> <span class="n">IActionResult</span> <span class="nf">Get</span><span class="p">()</span>
    <span class="p">{</span>
        <span class="k">return</span> <span class="nf">Ok</span><span class="p">();</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="swagger-configuration">Swagger Configuration</h2>

<p>Multiple documents are registered in <code class="language-plaintext highlighter-rouge">SwaggerGen</code>.</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">builder</span><span class="p">.</span><span class="n">Services</span><span class="p">.</span><span class="nf">AddSwaggerGen</span><span class="p">(</span><span class="n">options</span> <span class="p">=&gt;</span>
<span class="p">{</span>
    <span class="n">options</span><span class="p">.</span><span class="nf">SwaggerDoc</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span> <span class="k">new</span> <span class="n">OpenApiInfo</span>
    <span class="p">{</span>
        <span class="n">Title</span> <span class="p">=</span> <span class="s">"Public API"</span><span class="p">,</span>
        <span class="n">Version</span> <span class="p">=</span> <span class="s">"v1"</span>
    <span class="p">});</span>

    <span class="n">options</span><span class="p">.</span><span class="nf">SwaggerDoc</span><span class="p">(</span><span class="s">"internal"</span><span class="p">,</span> <span class="k">new</span> <span class="n">OpenApiInfo</span>
    <span class="p">{</span>
        <span class="n">Title</span> <span class="p">=</span> <span class="s">"Internal API"</span><span class="p">,</span>
        <span class="n">Version</span> <span class="p">=</span> <span class="s">"v1"</span>
    <span class="p">});</span>

    <span class="n">options</span><span class="p">.</span><span class="nf">DocInclusionPredicate</span><span class="p">((</span><span class="n">docName</span><span class="p">,</span> <span class="n">apiDesc</span><span class="p">)</span> <span class="p">=&gt;</span>
    <span class="p">{</span>
        <span class="kt">var</span> <span class="n">groupName</span> <span class="p">=</span> <span class="n">apiDesc</span><span class="p">.</span><span class="n">GroupName</span><span class="p">;</span>
        <span class="k">return</span> <span class="kt">string</span><span class="p">.</span><span class="nf">Equals</span><span class="p">(</span><span class="n">groupName</span><span class="p">,</span> <span class="n">docName</span><span class="p">,</span> <span class="n">StringComparison</span><span class="p">.</span><span class="n">OrdinalIgnoreCase</span><span class="p">);</span>
    <span class="p">});</span>
<span class="p">});</span>
</code></pre></div></div>

<p>And both endpoints are exposed in Swagger UI:</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">app</span><span class="p">.</span><span class="nf">UseSwagger</span><span class="p">();</span>

<span class="n">app</span><span class="p">.</span><span class="nf">UseSwaggerUI</span><span class="p">(</span><span class="n">options</span> <span class="p">=&gt;</span>
<span class="p">{</span>
    <span class="n">options</span><span class="p">.</span><span class="nf">SwaggerEndpoint</span><span class="p">(</span><span class="s">"/swagger/public/swagger.json"</span><span class="p">,</span> <span class="s">"Public API"</span><span class="p">);</span>
    <span class="n">options</span><span class="p">.</span><span class="nf">SwaggerEndpoint</span><span class="p">(</span><span class="s">"/swagger/internal/swagger.json"</span><span class="p">,</span> <span class="s">"Internal API"</span><span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>

<hr />

<h2 id="important-note">Important Note</h2>

<p>This approach <strong>only separates the documentation</strong>, not the access.</p>

<p>Internal endpoints should still be protected using:</p>

<ul>
  <li>Authentication / Authorization policies</li>
  <li>API gateway rules</li>
  <li>Network restrictions</li>
  <li>Internal service routing</li>
</ul>

<h2 id="why-this-helps">Why This Helps</h2>

<p>Separating internal and external APIs improves:</p>

<ul>
  <li><strong>API clarity</strong> for external consumers</li>
  <li><strong>Operational visibility</strong> for internal teams</li>
  <li><strong>Safer documentation exposure</strong></li>
</ul>

<p>In larger platforms, this pattern helps keep operational endpoints from being mixed with the public API surface.</p>]]></content><author><name>FMArslan</name></author><category term="software" /><category term="dotnet" /><category term="api" /><category term="dotnet" /><category term="swagger" /><category term="api" /><category term="architecture" /><summary type="html"><![CDATA[How to publish separate Swagger documentation for public and internal APIs in a single .NET service.]]></summary></entry><entry xml:lang="tr-TR"><title type="html">Senin Olanı Sahiplen, Senin Olmayanı Yüklenme</title><link href="https://fmarslan.com/2026/01/31/senin-olani-sahiplen-senin-olmayani-yuklenme.html" rel="alternate" type="text/html" title="Senin Olanı Sahiplen, Senin Olmayanı Yüklenme" /><published>2026-01-31T06:00:00+00:00</published><updated>2026-01-31T06:00:00+00:00</updated><id>https://fmarslan.com/2026/01/31/senin-olani-sahiplen-senin-olmayani-yuklenme</id><content type="html" xml:base="https://fmarslan.com/2026/01/31/senin-olani-sahiplen-senin-olmayani-yuklenme.html"><![CDATA[<p>Çevremde insanlarla konuştuğumda son dönemde dikkatimi çeken ortak bir nokta var.
Daha önce yeni mezun arkadaşlara yönelik farklı yazılar yazmıştım; orada daha çok CV, teknik yeterlilik, sektör gerçekleri gibi konulara girmiştim. Bu yazıda ise biraz daha geriye çekilip, daha temel bir yerden bakmak istiyorum.</p>

<p>Özellikle yeni mezun ya da kariyerinin başında olan arkadaşlarla sohbet ettiğimde konu çok hızlı bir şekilde aynı yerlere geliyor.
Sohbetin başlığı değişiyor ama alt metni hep aynı kalıyor.</p>

<p><img src="/assets/img/8404d81f-465b-449a-a9a3-c4ab95e41276.png" alt="Senin Olanı Sahiplen, Senin Olmayanı Yüklenme." /></p>

<p>Son zamanlarda konuşulan başlıklar genelde şunlar:</p>

<ul>
  <li>Dünya savaşı çıkar mı?</li>
  <li>Ekonomik kriz daha da derinleşir mi?</li>
  <li>İşsizlik nereye gidiyor?</li>
  <li>Büyük şirketler neden bu kadar insan çıkarıyor?</li>
  <li>Yapay zekâ bizim işleri elimizden alacak mı?</li>
</ul>

<p>Başlıklar farklı gibi görünse de hepsinin çıktığı yer aynı: <strong>gelecek kaygısı</strong>.</p>

<p>Ve bu kaygı haksız değil.
Aksine, tamamen mantıklı.</p>

<p>Bugün dünyaya biraz olsun bakan, haberleri takip eden, yaşadığı ülkenin ekonomik gerçeklerini bilen birinin kaygısız olması zaten garip olurdu.
Hatta şunu net söyleyeyim: Gelecek kaygısı olmayan insan genelde ya gerçekten hiçbir şeyle ilgilenmiyordur ya da kendini kandırıyordur.</p>

<p>Ama burada kritik bir ayrım var.</p>

<p>Mesele gelecek kaygısını yok etmek değil.
Mesele <strong>bu kaygıyı nereye bağladığımız</strong>.</p>

<h2 id="senin-olanı-sahiplen-senin-olmayanı-sahiplenme">Senin Olanı Sahiplen, Senin Olmayanı Sahiplenme</h2>

<p>Antik Yunan’da Epiktetos’un çok temel bir ayrımı vardır:
<em>Kontrolümüzde olanlar ve olmayanlar.</em></p>

<p>Bu ayrım kulağa basit gelir ama uygulaması zor, etkisi derindir.</p>

<p>Bugün benim ağzımdan çıkan hâliyle bu ayrım şuna denk düşüyor:</p>

<p><strong>“Senin olanı sahiplen, senin olmayanı sahiplenme.”</strong></p>

<p>Bu cümle pasiflik değildir.
Bu cümle “bana ne” demek değildir.
Bu cümle dünyadan kopmak değildir.</p>

<p>Bu cümle, enerjiyi doğru yere bağlama cümlesidir.</p>

<p>Dünya savaşı olabilir mi? Evet.
Ekonomik kriz derinleşir mi? Evet.
AI bazı işleri bitirir mi? Büyük ihtimalle.</p>

<p>Bunları inkâr etmek safdillik olur.</p>

<p>Ama şu soruyu sormak zorundayız:</p>

<p>Bu yazıyı okuyan herhangi biri, tek başına bunları durdurabilir mi?
Hayır.</p>

<p>Bu noktada bu başlıklar <strong>bizim değildir</strong>.</p>

<p>Yanlış anlaşılmasın:
Bunlar yok sayılacak şeyler de değildir.</p>

<p>Bunlar <strong>veridir</strong>.
Risk analizidir.
Arka plan bilgisidir.</p>

<p>Ama merkeze alınacak şeyler değildir.</p>

<p>Bu meseleleri merkeze aldığınız anda kaçınılmaz olarak şu duygular gelir:</p>

<ul>
  <li>Sürekli tetikte olma hâli</li>
  <li>Umutsuzluk</li>
  <li>“Zaten bir şey değişmeyecek” hissi</li>
  <li>Ve sonunda donakalma</li>
</ul>

<p>Bu psikoloji üretmez.
Bu psikoloji hareket ettirmez.
Bu psikoloji insanı korumaz.</p>

<p>Yağmuru durduramazsın.
Ama şemsiye alabilirsin.</p>

<p>Islanmamayı seçebilirsin.
Ya da yağmur altında yürümeyi öğrenebilirsin.</p>

<p>Bu bir teslimiyet değildir.
Bu bir <strong>stratejidir</strong>.</p>

<h2 id="ama-bunları-düşünmezsek-saf-olmaz-mıyız">“Ama Bunları Düşünmezsek Saf Olmaz mıyız?”</h2>

<p>Bu soru genelde şu korkudan gelir:
“Gerçeklerden kopmak istemiyorum.”</p>

<p>Zaten kop demiyoruz.</p>

<p>Ama şunu kabul etmek zorundayız:
Sürekli kontrol edemediğin şeyleri düşünmek, seni gerçekçi yapmaz; <strong>tüketir</strong>.</p>

<p>Gerçekçilik, her riski sırtlanmak değildir.
Gerçekçilik, hangi riskin sana ait olduğunu bilmektir.</p>

<h2 id="gelelim-yeni-mezun-gerçeğine">Gelelim Yeni Mezun Gerçeğine</h2>

<p>Bugün AI dalgası gerçekten çok güçlü.
Bu seferki teknolojik dönüşüm, önceki “otomasyon” hikâyelerinden farklı.</p>

<p>Eğer yaptığınız iş:</p>

<ul>
  <li>Standart üretime dayanıyorsa</li>
  <li>Tekrar ediyorsa</li>
  <li>Yorumdan çok çıktı üretiyorsa</li>
</ul>

<p>ister kod olsun, ister tasarım, ister metin…</p>

<p>Artık bunu sizden daha hızlı, daha ucuz ve daha risksiz yapan sistemler var.</p>

<p>Bu kötü bir haber değil.
Bu bir <strong>gerçek</strong>.</p>

<p>Kendinizi bir işveren yerine koyun ve dürüstçe sorun:</p>

<blockquote>
  <p><strong>Sizi neden işe almalıyım?</strong></p>
</blockquote>

<p>Bu soruya net bir cevabınız yoksa,
“Biz nerede tecrübe kazanacağız?”
ya da
“Siz de bir zamanlar yeni mezundunuz”
gibi cümleler kimseyi ikna etmez.</p>

<p>Çünkü gerçek şu:
Kimse amme hizmeti olarak maaş ödemez.</p>

<p>Aynı şekilde bir firma size “gel beleş çalış” dese siz de kabul etmezsiniz.</p>

<p>İş hayatı romantik değil.
Bu yüzden çözüm de romantik olamaz.</p>

<p>Burada mesele çok net: <strong>karşılıklı kazan–kazan</strong>.</p>

<h2 id="sahiplenilmesi-gereken-ve-gerekmeyen-şeyler">Sahiplenilmesi Gereken ve Gerekmeyen Şeyler</h2>

<p>Şimdi biraz can yakan kısım.</p>

<p>Zengin değiliz.
Tecrübeli değiliz.
Banka hesabımız kabarık değil.
Network’ümüz sınırlı.</p>

<p>Bunlar <strong>veri</strong>.</p>

<p>Bunlar utanç değildir.
Bunlar bahane de değildir.</p>

<p>Ama bunlar <strong>sahiplenilecek şeyler değildir</strong>.</p>

<p>Sahiplenildiği anda insanın omzuna gereksiz bir yük biner.
Ve bu yük ilerletmez.</p>

<p>Sahiplenilmesi gereken tek şey şu sorumluluktur:</p>

<blockquote>
  <p>Kimse bana bağış yapmak zorunda değil.</p>
</blockquote>

<p>Bu kabul edildiği anda zihinsel olarak rahatlama başlar.
Çünkü beklenti yer değiştirir.</p>

<p>Bu noktadan sonra sorulması gereken sorular nettir:</p>

<ul>
  <li>Ben neyim?</li>
  <li>Ne katıyorum?</li>
  <li>Kimin benim sunduğum şeye ihtiyacı var?</li>
</ul>

<p>Bu CV yazmak değildir.
Bu LinkedIn profili parlatmak da değildir.</p>

<p>Bu <strong>kendini pazarlamak</strong>tır.
Ve bu kelimeden rahatsız olanlar genelde gerçeği kaçırır.</p>

<h2 id="meslek-romantizmine-aldanmayın">Meslek Romantizmine Aldanmayın</h2>

<p>LinkedIn’de sürekli şu hikâyeleri görüyoruz:</p>

<p>“Bu işi bıraktım.”
“Kurumsalı terk ettim.”
“Hayalimin peşinden gittim.”
“Şimdi çok mutluyum.”</p>

<p>Davulun sesi uzaktan hoş gelir.</p>

<p>Kimse işin:</p>

<ul>
  <li>Stresini</li>
  <li>Uykusuzluğunu</li>
  <li>Sorumluluğunu</li>
  <li>Bedelini</li>
</ul>

<p>paylaşmaz.</p>

<p>Her işin getirisi kadar <strong>götürüsü</strong> vardır.
Önemli olan hangi işi yaptığınız değil;
<strong>o bedelin sizin karakterinize uygun olup olmadığıdır</strong>.</p>

<h2 id="somut-ama-romantik-olmayan-çıkış-yolu">Somut Ama Romantik Olmayan Çıkış Yolu</h2>

<p>“Peki ne yapacağız?” kısmına gelince…</p>

<p>Open-source projelere katkı verin.
Issue kapatın.
Review alın.
Hata yapın.
Eleştiri görün.
Sürtünme yaşayın.</p>

<p>Evet, para kazandırmaz.
Ama sizi <strong>boşlukta çürütmez</strong>.</p>

<p>Beklemek çözüm değildir.
“Bir şeyler düzelince” başlamak hiç çözüm değildir.</p>

<p>Boş geçen zamanı <strong>sermayeye</strong> çevirmek zorundasınız.</p>

<p>Bu bazen bilgi olur.
Bazen dayanıklılık olur.
Bazen de sadece “ben bunu yaptım” diyebilme gücü olur.</p>

<h2 id="son-söz">Son Söz</h2>

<p>Gelecek kaygısı düşman değil.
Yanlış yere bağlanan gelecek kaygısı düşman.</p>

<p>Kontrol edemediklerini düşünce malzemesi yap.
Kontrol edebildiklerini ise sahiplen.</p>

<p>Gelecek, dış dünyayı yenerek değil;
<strong>kendine ne kattığını netleştirerek</strong> kurulur.</p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="kariyer" /><category term="yeni-mezun" /><category term="gelecek-kaygisi" /><category term="stoacilik" /><category term="epiktetos" /><category term="yapay-zeka" /><category term="is-hayati" /><summary type="html"><![CDATA[Gelecek kaygısı, kontrol yanılgısı ve yeni mezun gerçeği üzerinden; stoacı bir bakışla kariyer, yapay zeka ve meslek romantizmini sorgulayan bir yazı.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/8404d81f-465b-449a-a9a3-c4ab95e41276.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/8404d81f-465b-449a-a9a3-c4ab95e41276.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">AI Gerçeğiyle Yüzleşmek: Müşteri mi, Operatör mü?</title><link href="https://fmarslan.com/2026/01/30/ai-gercegiyle-yuzlesmek-musteri-mi-operator-mu.html" rel="alternate" type="text/html" title="AI Gerçeğiyle Yüzleşmek: Müşteri mi, Operatör mü?" /><published>2026-01-30T06:00:00+00:00</published><updated>2026-01-30T06:00:00+00:00</updated><id>https://fmarslan.com/2026/01/30/ai-gercegiyle-yuzlesmek-musteri-mi-operator-mu</id><content type="html" xml:base="https://fmarslan.com/2026/01/30/ai-gercegiyle-yuzlesmek-musteri-mi-operator-mu.html"><![CDATA[<p>AI günümüzün gerçeği.
İnkâr etmek de, karalar bağlamak da yersiz. Bu bir dönüşüm; hatta belki de bir çağ atlayışı. Bir şeyler oluyor ve buna ayak uyduramazsak, bilgisayar varken hâlâ daktiloyla iş yapan eski bir matbaa gibi kalırız. Tarih, uyum sağlayamayanları sessizce siler; tozlu raflara kaldırır.</p>

<p>Bu gerçeği kabul edip planlarımızı ve işlerimizi buna göre şekillendirmek zorundayız.</p>

<p>Peki AI nedir, nasıl çalışır, ne yapar, ne işe yarar?
Biraz buradan başlayalım.</p>

<p><img src="/assets/img/02bb2a47-c4ed-4c80-8ff0-d1e460a468ff.png" alt="AI Gerçeğiyle Yüzleşmek: Müşteri mi, Operatör mü?" /></p>

<h2 id="ai-nedir-basit-ama-doğru">AI Nedir? (Basit Ama Doğru)</h2>

<p>AI bir “akıl” değildir.
Temelde matematiğe dayanan bir <strong>tahmin motorudur</strong>. Elindeki büyük veri setlerinden yola çıkarak şu soruya cevap arar:</p>

<blockquote>
  <p>“Bu durumda genelde ne olur?”</p>
</blockquote>

<p>Girdi alır, olasılıkları hesaplar ve <strong>en makul sonucu</strong> üretir. Ürettiği çıktılar kesin doğrular değil, istatistiksel sonuçlardır. Halüsinasyon dediğimiz şey de tam olarak budur: istatistiksel olarak mantıklı ama gerçekte yanlış bir sonucun seçilmesi.</p>

<p>Bu durum AI’yi küçük yapmaz.
Tam tersine, <strong>henüz olgunlaşmamış ama yönü çok net bir güce</strong> işaret eder.</p>

<h2 id="henüz-hazır-değil-yanılgısı">“Henüz Hazır Değil” Yanılgısı</h2>

<p>AI için sıkça şu yorum yapılır:
“Henüz hazır değil, doğrulanamıyor, başarısız bir ürün.”</p>

<p>Buradaki eleştiri çoğu zaman teknolojiye değil, ürün olgunluğuna yöneliktir. Ama kritik nokta şudur:</p>

<blockquote>
  <p>Bugün yaptıkları kusurlu olabilir ama yaptıkları şey, yarın yapabileceklerinin doğrudan bir simülasyonudur.</p>
</blockquote>

<p>Tarihte hangi büyük dönüşüm ilk gününde kusursuzdu?
Telefon ilk çıktığında “herkesin telefonu yokken ne işe yarayacak?” denmeseydi, bugün buraya gelir miydik?</p>

<p>AI bugün zaten bu soruların çok ötesinde bir noktada.</p>

<h2 id="ai-tehlikeli-mi">AI Tehlikeli mi?</h2>

<p>Evet, tehlikeli olabilir.
Ama bu tehlike AI’nin kendisinden değil, <strong>nasıl kullanıldığından</strong> kaynaklanır.</p>

<p>AI bir araçtır. Bıçak gibi.
Yemek yapmak için kullanırsan fayda üretir, zarar vermek için kullanırsan tehlikelidir. Ama kimse bıçak üretimini yasaklamaz.</p>

<p>AI için de durum aynıdır. Aynı araçla:</p>

<ul>
  <li>sistemleri tarayıp güvenlik açıklarını kapatabilirsin</li>
  <li>ya da aynı taramayı saldırı için kullanabilirsin</li>
</ul>

<p>Asıl risk şudur:</p>

<ul>
  <li>AI kötü niyetli değildir</li>
  <li><strong>kötü niyetli kullanım çok hızlı ve ölçeklenebilirdir</strong></li>
</ul>

<p>Bu yüzden çözüm yasaklamak değil;
<strong>tanımak, sınırlandırmak, denetlemek ve hazırlıklı olmaktır.</strong></p>

<h2 id="asıl-soru-sen-kimsin">Asıl Soru: Sen Kimsin?</h2>

<p>Burada kendimize dürüstçe şu soruyu sormalıyız:</p>

<blockquote>
  <p><strong>Sen AI için bir müşteri misin, yoksa AI ile üreten bir operatör mü?</strong></p>
</blockquote>

<p>Borsadaki “av–avcı” benzetmesi burada birebir geçerlidir.
Herkes borsaya girer, hızlı zengin olma hayali kurar. Ama sabır, analiz ve takip gerektiren bu işi gerçekten bilenler kazanır. Diğerleri ise av olur; eğitimler, rehberlikler, analizler satın alır.</p>

<p>AI dünyasında da durum farklı değil.</p>

<p><strong>Tüketici:</strong></p>

<ul>
  <li>Sunulanı alır</li>
  <li>Kullanır</li>
  <li>Parasını öder</li>
  <li>Sonra “AI hepimizin işini alacak” diye şikâyet eder</li>
</ul>

<p><strong>Operatör:</strong></p>

<ul>
  <li>Problemi tanımlar</li>
  <li>Süreci parçalar</li>
  <li>Çıktıyı denetler</li>
  <li>AI’yi kaldıraç olarak kullanır</li>
</ul>

<h2 id="neden-hep-resim-ve-video-görüyoruz">Neden Hep Resim ve Video Görüyoruz?</h2>

<p>İnternette AI denince genelde:</p>

<ul>
  <li>kaliteli görseller</li>
  <li>videolar</li>
  <li>eğlenceli cevaplar</li>
</ul>

<p>görürüz. Bunun sebebi basit:</p>

<ul>
  <li>Görsel üretim <strong>gösteriştir</strong></li>
  <li>Operatörlük <strong>süreçtir</strong></li>
</ul>

<p>Gösteriş paylaşılır.
Süreç para kazandırır.</p>

<p>Bu yüzden “AI ile nasıl sistem kurulur, nasıl iş yapılır” çok az anlatılır. Ama asıl odaklanmamız gereken yer tam olarak burasıdır.</p>

<h2 id="ai-ile-ne-yapabiliriz">AI ile Ne Yapabiliriz?</h2>

<p>AI ile bugün şunları yapabiliyoruz:</p>

<ul>
  <li>dil partneri olarak kullanmak</li>
  <li>asistan gibi çalıştırmak</li>
  <li>mülakat pratiği yapmak</li>
  <li>kod yazdırmak</li>
  <li>blog ve içerik üretmek</li>
  <li>analiz ve araştırma yapmak</li>
  <li>L1 müşteri destek süreçleri kurmak</li>
  <li>büyük metinleri özetlemek</li>
  <li>simülasyonlar çalıştırmak</li>
  <li>planlama ve proje tasarımı yapmak</li>
  <li>servislerle entegre edip iş yaptırmak</li>
</ul>

<p>Ama asıl fark şurada ortaya çıkar:</p>

<blockquote>
  <p><strong>Bunları ne kadar bilinçli ve derin kullanıyorsun?</strong></p>
</blockquote>

<p>Agent nedir?
Ne zaman standart model yetmez?
Özel veriyle çalışan model neden fark yaratır?</p>

<p>Bu soruları sormuyorsan, hâlâ tüketici tarafındasın.</p>

<h2 id="ai-yazdı-küçümsemesi">“AI Yazdı” Küçümsemesi</h2>

<p>AI kullananlar sık sık küçümsenir.
Çünkü emekle değeri karıştırıyoruz. Zor olanı değerli sanıyoruz. AI hızlandırınca “kolay oldu, değersiz” diyoruz.</p>

<p>Oysa:</p>

<ul>
  <li>editöryel işi AI yapsın, içeriği ben kurgulayayım</li>
  <li>kodun çerçevesini ben çizeyim, uygulamayı AI yapsın, review’u ben yapayım</li>
</ul>

<p>Bu tembellik değil.
<strong>Rol ayrımı.</strong></p>

<p>Zaman çok kıymetli.</p>

<h2 id="eğitim-üzerine-kısa-bir-not">Eğitim Üzerine Kısa Bir Not</h2>

<p>Belki de artık herkesin algoritma ezberi yapmasına gerek yoktur.
Çoğu insan için daha kritik olan şunlardır:</p>

<ul>
  <li>mantık</li>
  <li>problem parçalama</li>
  <li>sistem düşüncesi</li>
</ul>

<p>Derin matematik ve model geliştirme elbette alan uzmanlarının işi olmaya devam edecektir. Ama mühendisliğin özü hâlâ aynıdır: <strong>doğru problemi tanımlamak</strong>.</p>

<h2 id="sonuç">Sonuç</h2>

<p>AI’yi yasaklamak çözüm değil.
AI’ye tapmak da çözüm değil.</p>

<p>Çözüm;
<strong>AI ile müşteri olmaktan operatörlüğe geçmektir.</strong></p>

<p>Bu sadece AI için değil, hayattaki her araç için geçerlidir.
Müşteri olmak kolaydır.
Operatör olmak emek ister.</p>

<p>Ama gerçek katma değer her zaman oradadır.</p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="kariyer" /><category term="gelecek-kaygisi" /><category term="yapay-zeka" /><category term="is-hayati" /><category term="teknoloji" /><category term="muhendislik" /><category term="yeni-donem" /><summary type="html"><![CDATA[Yapay zekâyı yüceltmeden ya da küçümsemeden; AI’nin ne olduğu, neden ciddiye alınması gerektiği ve tüketici olmaktan operatörlüğe geçmenin önemi üzerine bir değerlendirme.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/02bb2a47-c4ed-4c80-8ff0-d1e460a468ff.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/02bb2a47-c4ed-4c80-8ff0-d1e460a468ff.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">Docker Öldü mü? Hayır. Sadece “Sana Yağı” Oldu.</title><link href="https://fmarslan.com/2026/01/23/docker-oldu-mu-hayir-sana-yagi-oldu.html" rel="alternate" type="text/html" title="Docker Öldü mü? Hayır. Sadece “Sana Yağı” Oldu." /><published>2026-01-23T06:00:00+00:00</published><updated>2026-01-23T06:00:00+00:00</updated><id>https://fmarslan.com/2026/01/23/docker-oldu-mu-hayir-sana-yagi-oldu</id><content type="html" xml:base="https://fmarslan.com/2026/01/23/docker-oldu-mu-hayir-sana-yagi-oldu.html"><![CDATA[<p>Son birkaç yıldır teknik sohbetlerde sık duyulan bir cümle var:<br />
<strong>“Docker artık ölü.”</strong></p>

<p>Bu cümle teknik olarak yanlış, zihinsel olarak ise çok şey anlatıyor.<br />
Docker ölmedi; <strong>Docker kelimesi, container kavramının yerine geçti.</strong><br />
Tıpkı bir dönem her margarinin “Sana yağı” diye anılması gibi.</p>

<p><img src="/assets/img/242c6430-9d74-463e-993d-6fb7d47266e9.png" alt="Docker Öldü mü? Hayır. Sadece “Sana Yağı” Oldu." /></p>

<h2 id="docker-neydi-ne-oldu">Docker Neydi, Ne Oldu?</h2>

<p>Docker, container teknolojisini icat etmedi.<br />
Ama şunu çok iyi yaptı:</p>

<ul>
  <li>Karmaşık Linux yeteneklerini tek komutla kullanılabilir hale getirdi</li>
  <li>Image, registry, build, run kavramlarını tek bir modele oturttu</li>
  <li>Developer deneyimini ciddi şekilde sadeleştirdi</li>
</ul>

<p>Sonuç şu oldu:</p>

<blockquote>
  <p><strong>Container = Docker</strong></p>
</blockquote>

<p>Bu noktadan sonra Docker, bir teknolojiden çok <strong>bir marka</strong> haline geldi.</p>

<h2 id="asıl-teknoloji-ne">Asıl Teknoloji Ne?</h2>

<p>Docker konuşurken genelde kaçırılan nokta şu:</p>

<p>Container dediğimiz şey aslında şunların birleşimi:</p>

<ul>
  <li>Linux namespaces</li>
  <li>cgroups</li>
  <li>Immutable image katmanları</li>
  <li>OCI (Open Container Initiative) standartları</li>
</ul>

<p>Yani container:</p>

<ul>
  <li>Bir ürün değil</li>
  <li>Bir firma değil</li>
  <li>Bir binary değil</li>
</ul>

<p><strong>Bir mimari yaklaşım.</strong></p>

<p>Docker ise bu yaklaşımı paketleyen ilk büyük ekosistemdi.</p>

<h2 id="docker-öldü-algısı-nereden-çıktı">“Docker Öldü” Algısı Nereden Çıktı?</h2>

<p>Bu algının birkaç net sebebi var.</p>

<h3 id="1-kubernetes-dockerı-bıraktı-sanıldı">1. Kubernetes Docker’ı “bıraktı” sanıldı</h3>

<p>Kubernetes, Docker Engine’i runtime olarak kullanmayı bıraktı.<br />
Ama şunları bırakmadı:</p>

<ul>
  <li>Docker image formatını</li>
  <li>Container çalışma modelini</li>
</ul>

<p>Kubernetes bugün ağırlıklı olarak:</p>

<ul>
  <li>containerd</li>
  <li>CRI-O</li>
</ul>

<p>kullanıyor.</p>

<p><strong>Docker Engine gitti, container kaldı.</strong></p>

<h3 id="2-docker-desktop-ve-lisans-gerçeği">2. Docker Desktop ve lisans gerçeği</h3>

<p>Kurumsal dünyada şu başlıklar daha görünür hale geldi:</p>

<ul>
  <li>Lisans maliyetleri</li>
  <li>Root yetkisi</li>
  <li>Merkezi daemon mimarisi</li>
  <li>Güvenlik ve izolasyon beklentileri</li>
</ul>

<p>Bu da alternatif araçların önünü açtı.</p>

<h3 id="3-ekosistem-olgunlaştı">3. Ekosistem olgunlaştı</h3>

<p>Başta her şey Docker’dı:</p>

<ul>
  <li>Build</li>
  <li>Run</li>
  <li>Push</li>
  <li>Orchestration</li>
</ul>

<p>Bugün ise her parça kendi alanında uzmanlaştı.</p>

<h2 id="yeni-düzen-nasıl-çalışıyor">Yeni Düzen Nasıl Çalışıyor?</h2>

<p>Bugünkü tablo net:</p>

<h3 id="image-üretimi">Image üretimi</h3>
<ul>
  <li>Dockerfile hâlâ standart</li>
  <li>Ama build şu araçlarla yapılabiliyor:
    <ul>
      <li>BuildKit</li>
      <li>Podman</li>
      <li>Buildah</li>
      <li>Kaniko</li>
    </ul>
  </li>
</ul>

<h3 id="container-çalıştırma">Container çalıştırma</h3>
<ul>
  <li>Local ortamda:
    <ul>
      <li>Docker</li>
      <li>Podman</li>
    </ul>
  </li>
  <li>Kubernetes içinde:
    <ul>
      <li>containerd</li>
      <li>CRI-O</li>
    </ul>
  </li>
</ul>

<h3 id="orkestrasyon">Orkestrasyon</h3>
<ul>
  <li>Kubernetes artık merkezde</li>
  <li>Docker burada zorunlu bir bileşen değil</li>
</ul>

<p>Bugün daha doğru ifade şu:</p>

<blockquote>
  <p>“Docker kullanıyoruz” değil<br />
<strong>“OCI uyumlu container image üretiyoruz.”</strong></p>
</blockquote>

<h2 id="podman-bu-hikâyede-nereye-oturuyor">Podman Bu Hikâyede Nereye Oturuyor?</h2>

<p>Podman devrim yapmadı, <strong>boşluğu doldurdu</strong>:</p>

<ul>
  <li>Docker CLI’ye çok benzer</li>
  <li>Daemon yok</li>
  <li>Rootless çalışabiliyor</li>
  <li>Kubernetes pod modeline zihinsel olarak daha yakın</li>
</ul>

<p>Bu yüzden Podman:</p>

<ul>
  <li>Docker’ın rakibi değil</li>
  <li>Docker sonrası dönemin doğal aracı</li>
</ul>

<h2 id="zihinsel-modeli-değiştirme-zamanı">Zihinsel Modeli Değiştirme Zamanı</h2>

<p>Sorun Docker kullanmak değil.<br />
Sorun <strong>Docker’ı merkez sanmak</strong>.</p>

<p>Doğru zihinsel model:</p>

<ul>
  <li>Docker bir marka</li>
  <li>Container bir mimari</li>
  <li>OCI bir standart</li>
  <li>Kubernetes bir gerçeklik</li>
</ul>

<p>Docker ölmedi.<br />
Ama artık <strong>tek doğru cevap</strong> da değil.</p>

<p>Tıpkı:</p>

<ul>
  <li>“Sana yağı”nın margarin olması</li>
  <li>“Selpak”ın kağıt mendil olması</li>
</ul>

<p>gibi.</p>

<p>Bugün bir sistem tasarlarken sormamız gereken soru şu:</p>

<blockquote>
  <p>“Docker var mı?” değil<br />
<strong>“Bu sistem container standartlarına ne kadar bağımlı?”</strong></p>
</blockquote>

<p>Markalar değişir.<br />
Ama iyi oturmuş mimari fikirler kolay kolay ölmez.</p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="docker" /><category term="containers" /><category term="kubernetes" /><category term="devops" /><category term="cloud-native" /><summary type="html"><![CDATA[Docker gerçekten öldü mü, yoksa sadece container kavramının marka adı mı oldu? Değişen container ekosistemini ve bugünkü doğru zihinsel modeli ele alıyorum.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/242c6430-9d74-463e-993d-6fb7d47266e9.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/242c6430-9d74-463e-993d-6fb7d47266e9.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">Dijitalleşme Bir Proje Değil, Bir Depremdir</title><link href="https://fmarslan.com/2026/01/12/dijitallesme-sistemi-degil-kulturu-degistirir.html" rel="alternate" type="text/html" title="Dijitalleşme Bir Proje Değil, Bir Depremdir" /><published>2026-01-12T06:30:00+00:00</published><updated>2026-01-12T06:30:00+00:00</updated><id>https://fmarslan.com/2026/01/12/dijitallesme-sistemi-degil-kulturu-degistirir</id><content type="html" xml:base="https://fmarslan.com/2026/01/12/dijitallesme-sistemi-degil-kulturu-degistirir.html"><![CDATA[<p><strong>Hazır değilseniz, sistem değil siz çöker­siniz.</strong></p>

<p>Kurumsallık, esneklik, izlenebilirlik, sürdürülebilirlik…
Bunlar danışman sunumlarını doldurmak için ortaya çıkmadı.
Hepsi tek bir gerçeğin sonucu:
<strong>İş, insanlara bağımlı kaldığı sürece ölçeklenemez.</strong></p>

<p><img src="/assets/img/1c8df5c1-0eba-48ae-8bea-a0c895ae5407.png" alt="Dijitalleşme Bir Proje Değil, Bir Depremdir" /></p>

<p>Bu gerçek anlaşılmadan yapılan her dijitalleşme hamlesi; ister yazılım alımı olsun, ister ürünleşme, ister CRM/ERP geçişi…
işleri kolaylaştırmaz.
<strong>Mevcut dağınıklığı kalıcılaştırır.</strong></p>

<p>En tehlikeli yanılgı şudur:</p>

<blockquote>
  <p><em>“Sisteme geçersek işler düzelir.”</em></p>
</blockquote>

<p>Hayır.
Sistem işleri düzeltmez.
<strong>Sistem, neyseniz onu hızlandırır.</strong></p>

<p>Süreçler net değilse kaosu,
sorumluluk belirsizse belirsizliği,
kontrol yoksa kontrolsüzlüğü.</p>

<p>Bu yüzden süreçler gerçekten anlaşılmadan, “neden var?” sorusu sorulmadan başlanan her dijitalleşme girişimi aynı yere varır:
<code class="language-plaintext highlighter-rouge">if = X müşteri</code>
<code class="language-plaintext highlighter-rouge">if = X ürün</code>
<code class="language-plaintext highlighter-rouge">buraya özel akış</code></p>

<p>Başta “esneklik” gibi görünen bu refleks, kısa sürede şuna dönüşür:</p>

<ul>
  <li>Kimse bütünü yönetemez</li>
  <li>Sistem kimseye ait değildir</li>
  <li>Maliyet görünmez ama artar</li>
</ul>

<p>Ve kritik bir eşikten sonra geri dönüş ya yoktur ya da şirketin kaldıramayacağı kadar pahalıdır.</p>

<p>Bu noktada kaybedilen teknoloji değildir.
<strong>Kaybedilen şey kontrol, hız ve güvenilirliktir.</strong></p>

<p>Bu yüzden bu mesele teknoloji meselesi değildir.
Bu bir <strong>proje yönetimi ve kültür</strong> meselesidir.</p>

<p>Dijitalleşme, yazılım seçimi, ürün geliştirme, kurumsallaşma…
Bunların tamamı organizasyonun taşıyıcı kolonlarına dokunur.
Bu bir depremdir.
Hazırlık yoksa, enkaz kaçınılmazdır.</p>

<p>Bunu iki gerçek deneyim çok net anlatır.</p>

<p>İlkinde, tüm işlerini basit araçlarla yürüten bir firma “kurumsallaşmak” için bir sisteme geçer. Teknik olarak her şey doğrudur: veriler taşınır, eğitim verilir.
Ama süreçler sorgulanmaz.
Kim neyin sahibi belli değildir.
Karar noktaları tanımlı değildir.</p>

<p>Bir süre sonra ekip şunu söyler:
<em>“Eskiden en azından hareket edebiliyorduk.”</em></p>

<p>Bugün tablo nettir:</p>

<ul>
  <li>Ekip yorgundur</li>
  <li>Devir yüksektir</li>
  <li>Bilgi kişilerdedir</li>
  <li>Kimse resmin tamamını görmez</li>
</ul>

<p>Sistem vardır ama düzen yoktur.
Kaos vardır ama sorumluluk yoktur.</p>

<p>İkinci örnekte ise en küçük iş bile yazılır, analiz edilir, planlanır, denenir ve revize edilir.
Her işin sahibi bellidir.
Her kararın kaydı vardır.
Bazı işler çalışmaz, evet.
Ama neden çalışmadığı bilinmektedir.</p>

<p>Sonuç:
Az kişiyle daha çok iş.
Daha az mesaiyle daha yüksek çıktı.
Birden fazla ülkede ölçeklenebilen bir yapı.</p>

<p>Aradaki fark yazılım değildir.
<strong>Disiplindir.</strong></p>

<hr />

<p>Yanıt aslında şaşırtıcı değildir.
Dijitalleşme projelerinde yapılan hataların büyük bölümü <strong>tekrar eder</strong> ve <strong>öngörülebilirdir</strong>.</p>

<p><strong>Net iş amacı tanımlanmadan başlanır.</strong>
Sonuç: Proje sürüklenir, başarı tartışmaya açık kalır.
Çözüm: Ölçülebilir hedef yoksa proje yok.</p>

<p><strong>Dijitalleşme IT işi sanılır.</strong>
Sonuç: Sistem kurulur, iş aynı kalır.
Çözüm: Süreç sahipliği iş birimlerinde kalır.</p>

<p><strong>Mevcut süreçler sorgulanmadan taşınır.</strong>
Sonuç: Eski hatalar dijitalleşir.
Çözüm: “Bu adım neden var?” sorusuna cevap yoksa adım yoktur.</p>

<p><strong>“Bize özel” bahanesiyle kontrolsüz özelleştirme yapılır.</strong>
Sonuç: Sistem kilitlenir, maliyet patlar.
Çözüm: Özelleştirme sadece rekabet avantajıysa kabul edilir.</p>

<p><strong>Proje yönetimi tali görülür.</strong>
Sonuç: Kararlar gecikir, proje sürünür.
Çözüm: Tek yetkili, net karar mekanizması.</p>

<p><strong>Zaman ve insan kaynağı hafife alınır.</strong>
Sonuç: Ekip yanar, kalite düşer.
Çözüm: Kritik roller gerçekten projeye ayrılır.</p>

<p><strong>Veri kalitesi sona bırakılır.</strong>
Sonuç: Yanlış rapor, yanlış karar.
Çözüm: Veri işi ayrı, ciddi ve erken başlar.</p>

<p><strong>Eğitim göstermelik yapılır.</strong>
Sonuç: Sistem kullanılmaz, Excel geri gelir.
Çözüm: Rol bazlı, gerçek senaryolu eğitim.</p>

<p><strong>Değişim direnci yok sayılır.</strong>
Sonuç: Paralel sistemler, gizli kaos.
Çözüm: “Neden değişiyoruz?” sorusu netleşmeden geçiş olmaz.</p>

<p><strong>Go-live bitiş sanılır.</strong>
Sonuç: Değer sessizce erir.
Çözüm: Go-live sonrası iyileştirme planı şarttır.</p>

<hr />

<p>Kalite, süreç yönetimi ve kurumsallık bu yüzden vardır.
ISO gibi kavramlar da bu yüzden yanlış anlaşılır.
Kağıt üzerinde olan kimseyi büyütmez.
Ama gerçek süreç; işi <strong>izlenebilir, tekrarlanabilir ve sürdürülebilir</strong> kılar.</p>

<p>Kuralsız ve kurallı bir yapı arasındaki fark tam olarak budur.
Sistem varsa, az kaynakla büyük etki yaratırsınız.
Sistem yoksa, büyüme anı çöküş anıdır.</p>

<p>Dijitalleşme projeleri genelde bir günde batmaz.
Sessizce kontrolden çıkar.
Maliyet artar, ekip dağılır, sistem kimsenin sahiplenmediği bir yük haline gelir.</p>

<p>Bu yazı “hangi yazılım?” sorusundan önce sorulması gereken asıl soruyu hatırlatmak için yazıldı:</p>

<p><strong>“Biz bu işi nasıl yapıyoruz?”</strong>
<em>(ve bunu herkes aynı şekilde mi biliyor?)</em></p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="dijitallesme" /><category term="proje-yonetimi" /><category term="surec-yonetimi" /><category term="kurumsallasma" /><category term="degisim-yonetimi" /><summary type="html"><![CDATA[Dijitalleşme projeleri neden çoğu zaman işleri kolaylaştırmak yerine daha karmaşık ve kontrolsüz hale getirir? Süreç ve kalite yoksa dijital dönüşüm nasıl bir enkaza dönüşür.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/1c8df5c1-0eba-48ae-8bea-a0c895ae5407.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/1c8df5c1-0eba-48ae-8bea-a0c895ae5407.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">jsDelivr ile GitHub Dosyalarını CDN Üzerinden Sunmak (Kısa ve Net Rehber)</title><link href="https://fmarslan.com/2026/01/09/jsdelivr-ile-github-dosyalarini-cdn-uzerinden-sunmak.html" rel="alternate" type="text/html" title="jsDelivr ile GitHub Dosyalarını CDN Üzerinden Sunmak (Kısa ve Net Rehber)" /><published>2026-01-09T07:00:00+00:00</published><updated>2026-01-09T07:00:00+00:00</updated><id>https://fmarslan.com/2026/01/09/jsdelivr-ile-github-dosyalarini-cdn-uzerinden-sunmak</id><content type="html" xml:base="https://fmarslan.com/2026/01/09/jsdelivr-ile-github-dosyalarini-cdn-uzerinden-sunmak.html"><![CDATA[<p>Public bir GitHub reposundaki tek bir dosyayı hızlı, güvenli ve cache problemi yaşamadan servis etmek istiyorsanız, çoğu senaryo için ekstra altyapıya gerek yok.
<strong>jsDelivr</strong>, GitHub’ı doğrudan CDN kaynağı gibi kullanmanıza izin verir.</p>

<p>Bu yazı “neden”den çok <strong>“nasıl doğru kullanılır”</strong> kısmına odaklanıyor.</p>

<h2 id="temel-url-formatı">Temel URL formatı</h2>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://cdn.jsdelivr.net/gh/&lt;user&gt;/&lt;repo&gt;@&lt;version&gt;/&lt;path&gt;
</code></pre></div></div>

<ul>
  <li><code class="language-plaintext highlighter-rouge">&lt;user&gt;</code>: GitHub kullanıcı adı</li>
  <li><code class="language-plaintext highlighter-rouge">&lt;repo&gt;</code>: repository adı</li>
  <li><code class="language-plaintext highlighter-rouge">&lt;version&gt;</code>: <strong>commit SHA</strong>, tag veya branch</li>
  <li><code class="language-plaintext highlighter-rouge">&lt;path&gt;</code>: repo içindeki dosya yolu</li>
</ul>

<blockquote>
  <p>Kritik nokta: <strong>version olarak commit SHA kullanın.</strong>
Branch veya <code class="language-plaintext highlighter-rouge">main</code> kullanmak cache sürprizi üretir.</p>
</blockquote>

<h2 id="gerçek-örnek-bu-blogtaki-dosya">Gerçek örnek (bu blogtaki dosya)</h2>

<p>Kaynak dosya (GitHub):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://github.com/fmarslan/fmarslan.github.io/blob/a3d76ec02081dfc283f20980ef41797978141d7b/assets/js/post-enhancements.js
</code></pre></div></div>

<p>jsDelivr CDN URL:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://cdn.jsdelivr.net/gh/fmarslan/fmarslan.github.io@a3d76ec02081dfc283f20980ef41797978141d7b/assets/js/post-enhancements.js
</code></pre></div></div>

<p>HTML içinde kullanım:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"https://cdn.jsdelivr.net/gh/fmarslan/fmarslan.github.io@a3d76ec02081dfc283f20980ef41797978141d7b/assets/js/post-enhancements.js"</span><span class="nt">&gt;&lt;/script&gt;</span>
</code></pre></div></div>

<p>Bu URL:</p>

<ul>
  <li>Immutable’dır</li>
  <li>CDN cache’i güvenle çalışır</li>
  <li>Dosya değiştiğinde <strong>yeni commit = yeni URL</strong> demektir</li>
</ul>

<h2 id="cli-ve-runtime-örnekleri">CLI ve runtime örnekleri</h2>

<h3 id="curl">curl</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-L</span> <span class="se">\</span>
<span class="s2">"https://cdn.jsdelivr.net/gh/fmarslan/fmarslan.github.io@a3d76ec02081dfc283f20980ef41797978141d7b/assets/js/post-enhancements.js"</span>
</code></pre></div></div>

<h3 id="nodejs">Node.js</h3>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nx">fetch</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">node-fetch</span><span class="dl">'</span><span class="p">;</span>

<span class="kd">const</span> <span class="nx">url</span> <span class="o">=</span>
  <span class="dl">'</span><span class="s1">https://cdn.jsdelivr.net/gh/fmarslan/fmarslan.github.io@a3d76ec02081dfc283f20980ef41797978141d7b/assets/js/post-enhancements.js</span><span class="dl">'</span><span class="p">;</span>

<span class="kd">const</span> <span class="nx">res</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="nx">url</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">res</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="nx">res</span><span class="p">.</span><span class="nx">statusText</span><span class="p">);</span>

<span class="kd">const</span> <span class="nx">content</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">res</span><span class="p">.</span><span class="nx">text</span><span class="p">();</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">content</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="i̇yi-uygulamalar-prod-için-önemli">İyi uygulamalar (prod için önemli)</h2>

<ul>
  <li><strong>Commit SHA kullan</strong>
→ cache invalidation derdi yok.</li>
  <li>Dosya güncellendiyse
→ <strong>yeni commit, yeni URL</strong>.</li>
  <li>jsDelivr <strong>sadece public repo</strong> sunar.</li>
  <li>Kimlik doğrulama, gizli veri, PII varsa
→ bu yöntem <strong>yanlış</strong>.</li>
  <li>Kritik prod yükleri için
→ S3 + CloudFront / Cloudflare gibi kendi edge çözümünü düşün.</li>
</ul>

<h2 id="sık-görülen-sorunlar">Sık görülen sorunlar</h2>

<p><strong>404 alıyorum</strong></p>

<ul>
  <li>Repo adı, path veya commit SHA yanlış.</li>
  <li>Dosya o commit’te gerçekten var mı kontrol et.</li>
</ul>

<p><strong>Dosya eski geliyor</strong></p>

<ul>
  <li>Branch kullanıyorsun.</li>
  <li>Commit SHA’ya geç.</li>
</ul>

<p><strong>Kurumsal ağda erişim yavaş</strong></p>

<ul>
  <li>jsDelivr rate-limit veya network politikası.</li>
  <li>Alternatif CDN gerekebilir.</li>
</ul>

<h2 id="ne-zaman-mantıklı-ne-zaman-değil">Ne zaman mantıklı, ne zaman değil?</h2>

<p><strong>Mantıklı</strong></p>

<ul>
  <li>Blog, dokümantasyon, statik JS/CSS</li>
  <li>Küçük helper script’ler</li>
  <li>Immutable asset’ler</li>
</ul>

<p><strong>Mantıksız</strong></p>

<ul>
  <li>Gizli kod</li>
  <li>Sık değişen runtime bağımlılıkları</li>
  <li>SLA gerektiren kritik prod bileşenleri</li>
</ul>

<p>Özetle:
Eğer <strong>public</strong>, <strong>küçük</strong> ve <strong>değiştiğinde URL’si de değişsin</strong> diyorsan, jsDelivr yeterli.
Burada sorun teknik değil; <strong>yanlış yerde branch URL kullanmak</strong>.</p>

<p>İstersen bir sonraki adımda aynı dosyanın <strong>S3 + CloudFront</strong> veya <strong>Cloudflare Workers</strong> karşılığını yan yana koyup farklarını netleştirebiliriz.</p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="cdn" /><category term="jsdelivr" /><category term="github" /><category term="performance" /><category term="frontend" /><summary type="html"><![CDATA[Public GitHub repo dosyalarını jsDelivr ile commit-bazlı, immutable ve cache-friendly şekilde CDN üzerinden sunmanın pratik yolu.]]></summary></entry><entry xml:lang="tr-TR"><title type="html">Regüle Ağlarda Neden Eventual Consistency Kaçınılmazdır?</title><link href="https://fmarslan.com/2026/01/08/regule-aglarda-neden-eventual-consistency-kacinilmazdir.html" rel="alternate" type="text/html" title="Regüle Ağlarda Neden Eventual Consistency Kaçınılmazdır?" /><published>2026-01-08T06:00:00+00:00</published><updated>2026-01-08T06:00:00+00:00</updated><id>https://fmarslan.com/2026/01/08/regule-aglarda-neden-eventual-consistency-kacinilmazdir</id><content type="html" xml:base="https://fmarslan.com/2026/01/08/regule-aglarda-neden-eventual-consistency-kacinilmazdir.html"><![CDATA[<p>Regüle ağlarla çalışan ekiplerin en sık yaşadığı hayal kırıklıklarından biri şudur:<br />
Kurallar nettir, standartlar tanımlıdır ama sistemler beklenen şekilde “anında doğru” davranmaz.</p>

<p>Bu durum genellikle bir sorun gibi algılanır.<br />
Oysa regüle ağlarda <em>eventual consistency</em> bir zafiyet değil, <strong>bilinçli bir sonuçtur</strong>.</p>

<p>Bu yazı, regüle ağlarda neden anlık tutarlılığın değil, zamanla oluşan doğruluğun hedeflendiğini anlamaya odaklanıyor.</p>

<p><img src="/assets/img/13431c72-3ebd-447b-aab9-6836653d12da.png" alt="Regüle Ağlarda Neden Eventual Consistency Kaçınılmazdır?" /></p>

<h2 id="regüle-ağ-ne-demektir">Regüle Ağ Ne Demektir?</h2>

<p>Regüle bir ağ demek:</p>
<ul>
  <li>Kimlerin katılabileceğinin belirlendiği</li>
  <li>Roller, yetkiler ve sorumlulukların tanımlandığı</li>
  <li>Kuralların merkezi olarak koyulduğu</li>
</ul>

<p>ama</p>
<ul>
  <li>uygulamanın</li>
  <li>performansın</li>
  <li>akışın</li>
  <li>teknik detayların</li>
</ul>

<p>tek bir merkezden zorlanmadığı ağ demektir.</p>

<p>Yani regüle ≠ merkezi.</p>

<p>Peppol gibi ağlar bu yapıya iyi bir örnektir,<br />
ama bu yaklaşım yalnızca Peppol’a özgü değildir.</p>

<h2 id="tek-bir-doğru-an-yoktur">Tek Bir “Doğru An” Yoktur</h2>

<p>Regüle ağlarda bir işlem:</p>
<ul>
  <li>tek sistemde tamamlanmaz</li>
  <li>tek aktörle sonuçlanmaz</li>
  <li>tek kontrolle bitmez</li>
</ul>

<p>Bir doküman:</p>
<ul>
  <li>gönderilir</li>
  <li>alınır</li>
  <li>ön kontrollerden geçer</li>
  <li>farklı sistemlerde işlenir</li>
  <li>daha derin kontrollerden geçer</li>
  <li>nihai sonuca ulaşır</li>
</ul>

<p>Bu adımların hepsi aynı anda çalışamaz.</p>

<p>Dolayısıyla:</p>
<blockquote>
  <p>“Şu an doğru mu?” sorusunun<br />
tek ve evrensel bir cevabı yoktur.</p>
</blockquote>

<p>Bu gerçek, <em>eventual consistency</em>’nin temelidir.</p>

<h2 id="doğruluk-hızdan-daha-değerlidir">Doğruluk Hızdan Daha Değerlidir</h2>

<p>Regüle ağların önceliği:</p>
<ul>
  <li>hızlı cevap vermek değil</li>
  <li><strong>sorumluluğu doğru yerine getirmektir</strong></li>
</ul>

<p>Bazı kontroller:</p>
<ul>
  <li>pahalıdır</li>
  <li>zaman alır</li>
  <li>dış sistemlere bağımlıdır</li>
  <li>hukuki sonuçlar doğurur</li>
</ul>

<p>Bu kontrolleri her zaman senkron yapmak:</p>
<ul>
  <li>sistemi yavaşlatır</li>
  <li>ağ genelinde gecikme yaratır</li>
  <li>operasyonel olarak sürdürülemez hâle getirir</li>
</ul>

<p>Bu yüzden regüle ağlarda sıkça şu model görülür:</p>
<ul>
  <li>önce kabul</li>
  <li>sonra doğrulama</li>
</ul>

<p>Bu yaklaşım <em>eventual consistency</em> üretir ama sistemi ayakta tutar.</p>

<h2 id="merkez-nasılı-zorlayamaz">Merkez “Nasıl”ı Zorlayamaz</h2>

<p>Regüle ağların merkezi otoritesi:</p>
<ul>
  <li>hangi kuralların uygulanacağını tanımlar</li>
  <li>kimlerin hangi rolü üstleneceğini belirler</li>
</ul>

<p>Ama şunu diyemez:</p>
<ul>
  <li>bu kontrol şu anda çalışacak</li>
  <li>şu sürede cevap verilecek</li>
  <li>bu sırayla uygulanacak</li>
</ul>

<p>Çünkü:</p>
<ul>
  <li>ülkeler farklıdır</li>
  <li>kurumlar farklıdır</li>
  <li>teknik altyapılar farklıdır</li>
  <li>hukuki yükümlülükler farklıdır</li>
</ul>

<p>Bu serbestlik:</p>
<ul>
  <li>zamanlama farkı</li>
  <li>akış farkı</li>
  <li>davranış farkı</li>
</ul>

<p>üretir.</p>

<p>Ama kuralın <strong>sonunda uygulanmasını</strong> garanti eder.</p>

<h2 id="hata-her-zaman-anında-yakalanamaz">Hata Her Zaman Anında Yakalanamaz</h2>

<p>Regüle ağlarda bazı hatalar:</p>
<ul>
  <li>işlem başladıktan sonra fark edilir</li>
  <li>daha derin kontroller sırasında ortaya çıkar</li>
</ul>

<p>Bu noktada sistemi tamamen durdurmak:</p>
<ul>
  <li>pahalı olabilir</li>
  <li>operasyonel olarak mümkün olmayabilir</li>
  <li>bazen hukuken bile yasak olabilir</li>
</ul>

<p>Bu yüzden sistemler:</p>
<ul>
  <li>ilerlemeye izin verir</li>
  <li>hatayı daha sonra ele alır</li>
  <li>sonucu sonradan düzeltir</li>
</ul>

<p>Bu yaklaşım da doğal olarak <em>eventual consistency</em> üretir.</p>

<h2 id="güven-anlık-tutarlılıktan-gelmez">Güven, Anlık Tutarlılıktan Gelmez</h2>

<p>Burada kritik bir yanlış algı var:</p>
<blockquote>
  <p>“Güven = her mesaj anında doğru”</p>
</blockquote>

<p>Regüle ağlarda güven şuradan gelir:</p>
<ul>
  <li>kimlik doğrulama</li>
  <li>sorumluluk tanımı</li>
  <li>izlenebilirlik</li>
  <li>denetlenebilirlik</li>
  <li>yaptırım mekanizması</li>
</ul>

<p>Yani güven:</p>
<ul>
  <li>anlık doğruluktan değil</li>
  <li><strong>yanlışın saklanamamasından</strong> doğar</li>
</ul>

<p>Bir hata:</p>
<ul>
  <li>geç fark edilebilir</li>
  <li>ama kaybolmaz</li>
  <li>iz bırakır</li>
  <li>açıklanabilir olur</li>
</ul>

<p>Bu yapı <em>eventual consistency</em> ile uyumludur.</p>

<h2 id="gerçek-dünya-zaten-eventual">Gerçek Dünya Zaten Eventual</h2>

<p>Aslında regüle ağlar,
gerçek dünyanın dijital karşılığıdır.</p>

<ul>
  <li>Bankacılık işlemleri</li>
  <li>Ticaret süreçleri</li>
  <li>Hukuki kararlar</li>
  <li>Vergi ve muhasebe akışları</li>
</ul>

<p>hiçbiri “anında mutlak doğru” çalışmaz.</p>

<p>Regüle ağlar bu gerçeği dijital sistemlere taşır.</p>

<h2 id="mimari-sonuç">Mimari Sonuç</h2>

<p>Bu gerçekler kabul edildiğinde entegrasyon yaklaşımı da değişir.</p>

<p>Regüle ağlarda:</p>
<ul>
  <li>entegrasyon bir çağrı değil, bir süreçtir</li>
  <li>durum takibi merkezîdir</li>
  <li>asenkron akışlar doğaldır</li>
  <li>retry ve replay kaçınılmazdır</li>
  <li>gözlemlenebilirlik kritik hâle gelir</li>
</ul>

<p><em>Eventual consistency</em> bu mimarinin yan ürünü değil,<br />
<strong>doğal sonucudur</strong>.</p>

<h2 id="sonuç">Sonuç</h2>

<p>Regüle ağlarda <em>eventual consistency</em>:</p>
<ul>
  <li>bir eksik</li>
  <li>bir zayıflık</li>
  <li>bir geçici çözüm</li>
</ul>

<p>değildir.</p>

<p>Dağıtık sorumluluğun,
hukuki gerekliliklerin
ve teknik gerçeklerin
kaçınılmaz birleşimidir.</p>

<p>Regüle ağlarda hedef:</p>
<blockquote>
  <p><strong>Anında doğru olmak değil,<br />
zaman içinde yanlış kalmamaktır.</strong></p>
</blockquote>

<p>Bu yüzden <em>eventual consistency</em><br />
kaçınılmazdır.</p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="regulated-networks" /><category term="integration" /><category term="distributed-systems" /><category term="event-driven" /><category term="eventual-consistency" /><summary type="html"><![CDATA[Regüle ağlarda entegrasyon geliştirirken neden anlık tutarlılık yerine zamanla oluşan doğruluğun hedeflendiğini, teknik ve operasyonel gerçekler üzerinden ele alıyorum.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/regulated-networks-eventual-consistency.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/regulated-networks-eventual-consistency.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="tr-TR"><title type="html">Her Şeyi Ben Yazayım mı? Harici Araçlardan Doğru Şekilde Faydalanma Üzerine</title><link href="https://fmarslan.com/2026/01/07/harici-araclardan-dogru-sekilde-faydalanma.html" rel="alternate" type="text/html" title="Her Şeyi Ben Yazayım mı? Harici Araçlardan Doğru Şekilde Faydalanma Üzerine" /><published>2026-01-07T07:30:00+00:00</published><updated>2026-01-07T07:30:00+00:00</updated><id>https://fmarslan.com/2026/01/07/harici-araclardan-dogru-sekilde-faydalanma</id><content type="html" xml:base="https://fmarslan.com/2026/01/07/harici-araclardan-dogru-sekilde-faydalanma.html"><![CDATA[<p>Bir sistemi geliştirirken en erken fark ettiğim ama en geç kabullendiğim şey şu oldu:<br />
<strong>Her şeyi kendin yazmaya çalışmak güç değil, yük.</strong></p>

<p><img src="/assets/img/harici-araclardan-dogru-sekilde-faydalanma.png" alt="Her Şeyi Ben Yazayım mı? Harici Araçlardan Doğru Şekilde Faydalanma Üzerine" /></p>

<p>Başta çok cazip geliyor.<br />
“Bu kütüphane tam istediğim gibi değil.”<br />
“Bunu ben daha temiz yazarım.”<br />
“Bağımlılık az olsun.”<br />
“Kontrol bende olsun.”</p>

<p>Ama sistem büyüdükçe, ekip genişledikçe ve iş gerçek dünyaya çarptıkça şu gerçekle yüzleşiyorsun:<br />
<strong>Her şeyi sen yazarsan, her şeyin bakımını da sen yaparsın.</strong></p>

<p>Bu yazı, harici araçlardan neden kaçmamak gerektiğini değil;<br />
<strong>nasıl ve ne zaman faydalanmak gerektiğini</strong> anlatıyor.</p>

<h2 id="her-şeyi-kendin-yazma-refleksi-nereden-geliyor">Her Şeyi Kendin Yazma Refleksi Nereden Geliyor?</h2>

<p>Çoğu mühendislik ekibinde bu refleks doğal.<br />
Özellikle genç ekiplerde veya erken aşama projelerde sık görülüyor.</p>

<p>Sebebi basit:</p>

<ul>
  <li>Kontrol hissi</li>
  <li>Hızlı ilerleme algısı</li>
  <li>“Bağımlılık risklidir” düşüncesi</li>
  <li>Dış araca güvenmeme</li>
</ul>

<p>Ama bu refleks uzun vadede şuna dönüşüyor:</p>

<ul>
  <li>Kimsenin dokunamadığı özel çözümler</li>
  <li>Güncellenmeyen internal tool’lar</li>
  <li>Dokümansız “bizim framework”ler</li>
  <li>Sadece bir kişinin bildiği kritik parçalar</li>
</ul>

<p>Ve en kötüsü:<br />
<strong>Sistem geliştikçe yavaşlayan ekip.</strong></p>

<h2 id="asıl-soru-şu-bu-problem-gerçekten-bana-mı-ait">Asıl Soru Şu: “Bu Problem Gerçekten Bana mı Ait?”</h2>

<p>Bir noktadan sonra kendime şu soruyu sormaya başladım:</p>

<blockquote>
  <p>“Bu problemi gerçekten ben mi çözmeliyim,<br />
yoksa bu zaten başkalarının yıllardır çözdüğü bir konu mu?”</p>
</blockquote>

<p>Örnekler çok tanıdık:</p>

<ul>
  <li>Loglama</li>
  <li>Queue yönetimi</li>
  <li>Retry &amp; backoff</li>
  <li>Authentication</li>
  <li>Configuration management</li>
  <li>Observability</li>
  <li>Deployment orchestration</li>
</ul>

<p>Bu alanlarda “kendim yazarım” demek,<br />
<strong>ürünün ana problemini ertelemek</strong> demek.</p>

<p>Çünkü kullanıcı senin logging altyapını değil,<br />
<strong>işinin çalışmasını</strong> önemsiyor.</p>

<h2 id="araç-seçimi--mimari-karar">Araç Seçimi = Mimari Karar</h2>

<p>Bir harici aracı projeye almak, sadece teknik değil <strong>mimari bir karardır</strong>.</p>

<p>Yanlış araç:</p>

<ul>
  <li>Sistemi karmaşıklaştırır</li>
  <li>Öğrenme eğrisini yükseltir</li>
  <li>Ekip içinde direnç oluşturur</li>
</ul>

<p>Doğru araç ise:</p>

<ul>
  <li>Koddan yük alır</li>
  <li>Ekibin hızını artırır</li>
  <li>Standartlaştırır</li>
  <li>Bakımı paylaşır</li>
</ul>

<p>Buradaki kritik nokta şu:<br />
<strong>Araç, problemi çözmeli; yeni problem üretmemeli.</strong></p>

<h2 id="en-i̇yi-araç-yok-bu-problem-i̇çin-uygun-araç-var">“En İyi Araç” Yok, “Bu Problem İçin Uygun Araç” Var</h2>

<p>Kafka mı RabbitMQ mu?<br />
Redis mi PostgreSQL mi?<br />
Kubernetes mi Nomad mı?<br />
C# mı Python mı Java mı?</p>

<p>Bu soruların tek doğru cevabı yok.<br />
Ama yanlış sorusu çok:</p>

<blockquote>
  <p>“Herkes bunu kullanıyor, biz de kullanalım.”</p>
</blockquote>

<p>Benim yaklaşımım zamanla şuna evrildi:</p>

<ul>
  <li><strong>Problem ne?</strong></li>
  <li><strong>Yük profili ne?</strong></li>
  <li><strong>Operasyonel karmaşıklık ne?</strong></li>
  <li><strong>Ekip bu aracı tanıyor mu?</strong></li>
  <li><strong>Yarın bu sistemi kim devralacak?</strong></li>
</ul>

<p>Bazen en “havalı” çözüm değil,<br />
<strong>en sıkıcı çözüm</strong> en doğru olan oluyor.</p>

<h2 id="araçtan-korkmamak-ekosistemi-renklendirmek">Araçtan Korkmamak, Ekosistemi Renklendirmek</h2>

<p>Bir dönem şunu fark ettim:<br />
Aynı problemleri çözmek için sürekli aynı araçlara abanıyoruz.</p>

<p>Oysa ekosistem geniş.<br />
Ve bu bir tehdit değil, avantaj.</p>

<ul>
  <li>Bazı işler için managed servis kullanmak</li>
  <li>Bazı işleri açık kaynak projelere bırakmak</li>
  <li>Bazı yerlerde “as a service” yaklaşımını benimsemek</li>
</ul>

<p>Bunlar mimariyi zayıflatmaz.<br />
Aksine, <strong>odaklanmanı sağlar.</strong></p>

<p>Odak şu olmalı:</p>

<blockquote>
  <p>“Benim gerçekten katma değer ürettiğim yer neresi?”</p>
</blockquote>

<h2 id="ekip-gerçeği-araç-kültürünü-tanımadan-karar-vermek-hata">Ekip Gerçeği: Araç Kültürünü Tanımadan Karar Vermek Hata</h2>

<p>Bir diğer büyük yanılgı:<br />
<strong>Aracı eleştirmek ama kültürünü tanımamak.</strong></p>

<p>Birçok araç, yanlış kullanıldığı için kötü ün yapıyor.</p>

<ul>
  <li>Kafka “karmaşık” deniyor ama aslında yanlış yerde kullanılmış</li>
  <li>Kubernetes “overkill” deniyor ama ekip hazır değil</li>
  <li>Bazı framework’ler “yavaş” deniyor ama problem yanlış modelleme</li>
</ul>

<p>Burada önemli olan şu:</p>

<blockquote>
  <p><strong>Araç tek başına iyi ya da kötü değildir.<br />
Onu kullanan ekibin alışkanlıkları belirleyicidir.</strong></p>
</blockquote>

<p>Bu yüzden bir aracı seçerken sadece teknik dokümana değil,<br />
<strong>ekibin gerçek yetkinliğine</strong> bakmak gerekiyor.</p>

<h2 id="maksimum-fayda--mevcut-yapıyla-barışmak">Maksimum Fayda = Mevcut Yapıyla Barışmak</h2>

<p>Bir sistemi geliştirirken her şeyi baştan yıkıp yeniden yapmak cazip gelebilir.<br />
Ama çoğu zaman bu gerçekçi değildir.</p>

<p>Benim öğrendiğim en değerli derslerden biri şuydu:</p>

<blockquote>
  <p><strong>Elindeki yapı neyse, onunla maksimum faydayı üretmeye çalış.</strong></p>
</blockquote>

<p>Bu şu anlama geliyor:</p>

<ul>
  <li>Kullanılan dili küçümseme</li>
  <li>Mevcut tool’ları karalama</li>
  <li>“Biz olsak baştan böyle yapmazdık” demek yerine</li>
  <li>“Bu yapıdan nasıl daha iyi sonuç çıkarırım?” diye düşün</li>
</ul>

<p>Bu yaklaşım hem sistemi hem ekibi büyütüyor.</p>

<h2 id="sonuç-mühendislik-ego-değil-seçim-i̇şidir">Sonuç: Mühendislik Ego Değil, Seçim İşidir</h2>

<p>Bugün geriye dönüp baktığımda şunu net görüyorum:</p>

<ul>
  <li>Her şeyi kendin yazmak sürdürülebilir değil</li>
  <li>Doğru araçlar seni yavaşlatmaz, hızlandırır</li>
  <li>Yanlış araç değil, yanlış yerde kullanılan araç vardır</li>
  <li>Ekip gerçeğini yok sayan mimari kağıt üzerinde kalır</li>
</ul>

<p>Ve belki de en önemlisi:</p>

<blockquote>
  <p><strong>İyi mimari, her şeyi kontrol etmek değil;<br />
doğru yerlerde kontrolü paylaşabilmektir.</strong></p>
</blockquote>

<p>Bu denge kurulduğunda, sistem sadece çalışmaz;<br />
<strong>yaşar, büyür ve devredilebilir hâle gelir.</strong></p>]]></content><author><name>Fatih Mehmet ARSLAN</name><email>contact@fmarslan.com</email></author><category term="engineering-culture" /><category term="system-design" /><category term="architecture" /><category term="tooling" /><summary type="html"><![CDATA[Bir sistemi geliştirirken her problemi kendimiz çözmeye çalışmanın neden sürdürülemez olduğunu ve doğru araçları doğru yerde kullanmanın mimariye nasıl güç kattığını anlatıyorum.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fmarslan.com/assets/img/tooling-ecosystem.png" /><media:content medium="image" url="https://fmarslan.com/assets/img/tooling-ecosystem.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>