<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: IWWOMI</title>
    <description>The latest articles on DEV Community by IWWOMI (@iwwomi).</description>
    <link>https://dev.to/iwwomi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13366%2Feaea4914-7682-4cec-b213-10dc458f6e29.png</url>
      <title>DEV Community: IWWOMI</title>
      <link>https://dev.to/iwwomi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iwwomi"/>
    <language>en</language>
    <item>
      <title>The Synthesis Wall: Frontier AI Without Sending Your Data</title>
      <dc:creator>mirac kodat</dc:creator>
      <pubDate>Sat, 16 May 2026 11:35:18 +0000</pubDate>
      <link>https://dev.to/iwwomi/the-synthesis-wall-frontier-ai-without-sending-your-data-1k92</link>
      <guid>https://dev.to/iwwomi/the-synthesis-wall-frontier-ai-without-sending-your-data-1k92</guid>
      <description>&lt;p&gt;Every executive team has now had the same uncomfortable meeting. Engineering wants to use Claude for code review. Sales wants GPT-4 to draft proposals. Customer support has been quietly piping tickets into a chatbot through someone's personal API key. Legal walks in, asks one question — &lt;em&gt;"where is that data going?"&lt;/em&gt; — and the whole program freezes.&lt;/p&gt;

&lt;p&gt;The freeze is rational. The frontier models do live on someone else's infrastructure. Your customer records, M&amp;amp;A drafts, source code, and medical histories are exactly the data you cannot ship to a third party. Yet the productivity gap between teams that have integrated AI well and teams that haven't is now the difference between weeks and quarters.&lt;/p&gt;

&lt;p&gt;The usual answer — &lt;em&gt;"self-host an open model"&lt;/em&gt; — costs millions, requires a team you don't have, and ships you a model that benchmarks 30% behind whatever Anthropic released last week.&lt;/p&gt;

&lt;p&gt;There is a third path. You don't bring the AI inside your walls. &lt;strong&gt;You build a wall that stands between your data and the AI.&lt;/strong&gt; This piece is about that wall — what it is, what it costs, how it scales, and how to deploy one in 30 days without disrupting a single existing system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture in one sentence
&lt;/h2&gt;

&lt;p&gt;A data sanitization layer is a programmable proxy that sits in the egress path between your applications and any external LLM provider. Outbound: it detects sensitive entities in a prompt, replaces them with reversible tokens, stores the mapping in your vault, and forwards only the tokenized prompt. Inbound: it receives the model's response, restores the original values from the vault, and delivers a complete answer to the user.&lt;/p&gt;

&lt;p&gt;The provider sees structure. You keep substance. The mapping never crosses your trust boundary, so the provider literally cannot leak what it never received — a property that matters enormously when your compliance officer asks for guarantees rather than promises.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea.&lt;/strong&gt; This is not a model. It is plumbing. The frontier model still does the thinking; you just changed what it gets to think &lt;em&gt;about&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why this is the right primitive
&lt;/h2&gt;

&lt;p&gt;There are four common alternatives, and each has a fatal flaw.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosted open-weight models&lt;/strong&gt; (Llama 3.1 70B, Qwen 2.5, DeepSeek V3) sound appealing until you cost out the GPU bill, the model-ops headcount, and the gap between an open model and the closed frontier. Even the most generous self-host plans land at $30k–$120k per month for serious inference traffic, plus two-to-three FTE in MLOps. For most enterprises this is the worst of both worlds: high cost, lower capability. We dig into this trade-off more in our &lt;a href="https://dev.to/blog/ai-transforming-business"&gt;AI transformation playbook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provider data-processing agreements&lt;/strong&gt; (the "we promise we won't train on your data" page) are necessary but insufficient. They are contracts about behavior, not about technical capability. An attacker who breaches the provider, an insider with the wrong access, or a future model that accidentally memorizes your data — none of these are stopped by a DPA. Modern security thinking has moved decisively from &lt;em&gt;promise&lt;/em&gt; to &lt;em&gt;prove&lt;/em&gt;. See OWASP's &lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;LLM Top 10&lt;/a&gt; for why provider trust alone is no longer acceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pure local redaction in the client&lt;/strong&gt; (regex stripping in the browser or SDK) is the right intuition wrong direction. Client-side anything is bypassable, inconsistent, and impossible to audit. A central layer enforces a single policy that every team inherits automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synthetic-data generation&lt;/strong&gt; sounds elegant — train a small model on synthetic versions of your real data — but it only solves &lt;em&gt;training&lt;/em&gt;. Inference still involves real user data, which is the actual problem.&lt;/p&gt;

&lt;p&gt;The sanitization layer is the only architecture that gives you frontier capability, central enforcement, and a clean audit trail at the same time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens in a single request
&lt;/h2&gt;

&lt;p&gt;Consider a sales operations analyst asking the AI to draft a follow-up email for a customer who placed a six-figure order. The prompt naturally contains a name, a customer ID, an order amount — the exact data that should never reach a public API in raw form.&lt;/p&gt;

&lt;p&gt;Behind the wall, in milliseconds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detection.&lt;/strong&gt; A named-entity recognition model scans the prompt and flags &lt;code&gt;Ahmet Yılmaz&lt;/code&gt; as &lt;code&gt;PERSON&lt;/code&gt;, &lt;code&gt;12345678901&lt;/code&gt; as &lt;code&gt;NATIONAL_ID&lt;/code&gt;, &lt;code&gt;$45,000&lt;/code&gt; as &lt;code&gt;MONETARY_AMOUNT&lt;/code&gt;. Detection runs through three layers: a transformer NER (multilingual, fine-tuned on your domain), regex rules (for things like IBANs, credit cards, IP addresses), and a domain dictionary (your product names, internal project codenames, partner companies).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokenization.&lt;/strong&gt; Each sensitive value is replaced with a format-preserving placeholder: &lt;code&gt;[PERSON_1]&lt;/code&gt;, &lt;code&gt;[ID_1]&lt;/code&gt;, &lt;code&gt;[AMOUNT_1]&lt;/code&gt;. The original-to-token mapping goes into an encrypted vault inside your environment — typically AES-256 at rest with per-tenant keys via AWS KMS or HashiCorp Vault.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy check.&lt;/strong&gt; Before the request leaves your perimeter, the policy engine asks: &lt;em&gt;Is this user allowed to send &lt;code&gt;MONETARY_AMOUNT&lt;/code&gt; data to &lt;code&gt;gpt-4o&lt;/code&gt;?&lt;/em&gt; If yes, forward. If no, block, escalate, or downgrade to a smaller model with stricter constraints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transmission.&lt;/strong&gt; Only the sanitized prompt goes to the provider. Your egress firewall can be configured to allow LLM provider IPs only via the wall — any direct call from an application becomes a policy violation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generation.&lt;/strong&gt; The model writes the email using tokens. It has no idea who Ahmet is or what he bought.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restoration.&lt;/strong&gt; The response comes back. The wall walks the response text, replaces each token with its original value from the vault, and delivers the final output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging.&lt;/strong&gt; Request metadata — user, timestamp, entity types involved, model used, policy applied, token count, cost — is written to your SIEM. The actual sensitive payload is never logged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;End-to-end latency added by the wall: typically 80–250ms on warm cache, less than the variance between OpenAI's own response times on the same prompt. Detection and tokenization can be parallelized; the vault lookup on restoration is the hot path.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six capabilities, properly scoped
&lt;/h2&gt;

&lt;p&gt;A sanitization layer is six tightly-coupled services behind one API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Detection and classification.&lt;/strong&gt; Multilingual NER (we use a fine-tuned XLM-RoBERTa for Turkish/English) plus regex plus dictionaries. Critically: the detector has to be tunable per industry. A bank cares about IBANs and SWIFT codes. A hospital cares about ICD-10 codes and medication names. A law firm cares about case numbers and party names. Out-of-the-box PII detection is the starting point, not the destination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tokenization and masking.&lt;/strong&gt; Format-preserving so the model still reasons correctly. &lt;code&gt;Ahmet Yılmaz&lt;/code&gt; becomes &lt;code&gt;[PERSON_1]&lt;/code&gt; (not &lt;code&gt;[REDACTED]&lt;/code&gt;) so the model knows it's a person and writes "Dear [PERSON_1]," in the right place. Numeric amounts become &lt;code&gt;[AMOUNT_1]&lt;/code&gt; with the right magnitude class so calculations still work. Dates become &lt;code&gt;[DATE_1]&lt;/code&gt; with preserved relative ordering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Policy engine.&lt;/strong&gt; Plain-English rules over (department, model, data class, action). &lt;em&gt;"Marketing can use gpt-4o for any data except &lt;code&gt;MEDICAL_RECORD&lt;/code&gt;. Engineering can use claude-3.5-sonnet for anything in the &lt;code&gt;PUBLIC_REPO&lt;/code&gt; class but must use the on-prem model for anything in &lt;code&gt;PRIVATE_REPO&lt;/code&gt;."&lt;/em&gt; These rules are versioned, reviewable in Git, and enforced before any external call. The engine ties closely to how we think about &lt;a href="https://dev.to/blog/secure-web-applications"&gt;security at the application layer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Audit and compliance.&lt;/strong&gt; Every request, every response, every policy decision — without the sensitive payload. This is what converts AI from a compliance liability into a defensible process under KVKK, GDPR, ISO 27001, and HIPAA. The audit log is what your legal team will demand in year two and never had in year one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Threat protection.&lt;/strong&gt; LLMs have a unique attack surface: prompt injection (embedded instructions in user data), jailbreaks (clever prompts that bypass safety), and exfiltration (asking the model to leak its system prompt or training data). The wall inspects both directions for these patterns — incoming prompts for injection attempts, outgoing responses for leaked secrets or non-compliant content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Model router.&lt;/strong&gt; Different requests, different models. A simple summarization can go to &lt;code&gt;gpt-4o-mini&lt;/code&gt; at $0.15 per million input tokens. A high-stakes contract review goes to &lt;code&gt;claude-3.5-sonnet&lt;/code&gt; at $3 per million. The router optimizes for cost, latency, and capability per request — and gives you vendor independence as a side effect. We cover the cost-routing pattern in our &lt;a href="https://dev.to/blog/microservices-architecture"&gt;microservices architecture writeup&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it scales to enterprise volume
&lt;/h2&gt;

&lt;p&gt;The naive implementation — single Node process, in-memory vault, sequential detection — works for a pilot but caps around 200 requests per second. Real enterprise traffic looks more like 5,000–50,000 RPS at peak. Three architectural decisions get you there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stateless detection workers behind a load balancer.&lt;/strong&gt; Detection and tokenization are CPU-bound but stateless once your models are loaded. Run them as a Kubernetes deployment of 8–32 pods, scale horizontally on CPU. Each pod holds the NER model in memory; cold-start is mitigated by readiness probes that wait for model load. We've covered this Kubernetes pattern in our &lt;a href="https://dev.to/blog/devops-best-practices"&gt;DevOps best practices guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vault as a managed service.&lt;/strong&gt; Don't build your own. Use Vault Enterprise, AWS Secrets Manager + KMS, or GCP Secret Manager. The vault is the most sensitive component in your architecture; making it bespoke is exactly the wrong place to save engineering time. Token-to-value lookups become a managed problem with audit logs you don't have to write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache the model client.&lt;/strong&gt; OpenAI-style HTTP/2 connections benefit hugely from connection pooling. Maintain a warm pool of 10–20 connections per provider per worker; the latency difference between cold-connect and warm is 200ms+ — bigger than your entire detection pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background restoration for large responses.&lt;/strong&gt; Streaming responses (server-sent events) need streaming restoration. As tokens arrive from the model, restore them on the fly and stream to the user. Do not buffer the full response, which forfeits the conversational latency advantage that made LLMs feel magical.&lt;/p&gt;

&lt;p&gt;At 50,000 RPS, a properly architected wall adds roughly $0.0001 per request in your own infrastructure (against $0.001–$0.020 in model API cost), uses ~15ms of detection time, and gives you a single audit-able choke point for every AI interaction in the organization. The cost ratio is so favorable that the wall pays for itself just on &lt;strong&gt;model cost optimization&lt;/strong&gt; — routing routine requests away from the flagship model is usually a 40–60% spend reduction. Database operations underneath this scale require their own discipline; we cover that in &lt;a href="https://dev.to/blog/database-optimization"&gt;database optimization for high-traffic apps&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 30-day deployment plan that actually works
&lt;/h2&gt;

&lt;p&gt;Big-bang rollouts of new security layers fail. Here's how to ship a sanitization layer in one month without disrupting anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 1 — Pick one workflow.&lt;/strong&gt; Choose the highest-pain, highest-leverage AI use case currently blocked by data sensitivity. Customer support triage. Contract clause extraction. Internal knowledge search over Confluence or Notion. Code review on private repos. One workflow, one team, one model. Define the entity classes that matter for this workflow and nothing else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 2 — Stand up the wall in shadow mode.&lt;/strong&gt; Deploy the layer in front of the chosen workflow but in &lt;em&gt;observe-only&lt;/em&gt; mode. It detects, logs, would-have-tokenized, but does not modify the request. You now have a real dataset showing exactly what sensitive entities your users send, in what frequency, in what context. This data is gold for the next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 3 — Tune the detection.&lt;/strong&gt; Based on shadow data, adjust the entity catalog. Add the domain-specific patterns the off-the-shelf model missed. Suppress the false positives (every team has at least one — for us it was repeatedly flagging "Stripe" as a person). Get the legal team to review the catalog: do they agree these are the categories that matter for KVKK Article 9 / GDPR Article 9 / your sector regulation?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 4 — Switch to enforce, then expand.&lt;/strong&gt; Flip from observe to enforce on the pilot workflow. Watch error rates for 48 hours. Review the audit log with legal and compliance. Once the pattern is validated, the second workflow plugs in with a fraction of the effort because the layer is already running, the policies are already written, and the team already trusts the audit trail.&lt;/p&gt;

&lt;p&gt;This phased approach is how every enterprise security primitive (WAFs, secrets managers, SIEM) actually rolled out — and how the sanitization layer should roll out too. The same pattern works for moving regulated workloads to the cloud, which we cover in our &lt;a href="https://dev.to/blog/cloud-migration-guide"&gt;cloud migration guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compliance picture, briefly
&lt;/h2&gt;

&lt;p&gt;Under &lt;strong&gt;KVKK&lt;/strong&gt; (Turkish data protection), Article 9 governs cross-border transfer of personal data — which is exactly what happens every time someone sends a customer name to an API hosted in the US. The sanitization layer is the technical control that lets you argue, with audit evidence, that personal data did not cross the border because it never left your perimeter in identified form.&lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;GDPR&lt;/strong&gt;, the same logic applies via Article 44 (transfers to third countries). Pseudonymization is explicitly recognized in Article 4(5) as a privacy-enhancing technology that materially reduces risk. A sanitization layer is, by definition, pseudonymization with a properly-secured re-identification key.&lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;ISO 27001&lt;/strong&gt; Annex A 8.10 (information deletion) and A 8.11 (data masking), the wall directly satisfies the technical control requirements that auditors look for.&lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;HIPAA&lt;/strong&gt;, the same architecture functions as a de-identification layer per the Safe Harbor method, with the vault holding the identifiers that would otherwise convert PHI exposure into a reportable incident.&lt;/p&gt;

&lt;p&gt;The same wall, configured per-industry, gives you a defensible posture across all four regimes. Your security team writes the policy once; the application teams inherit compliance automatically. This is a major reduction in audit overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes for IT
&lt;/h2&gt;

&lt;p&gt;For technology leadership, the sanitization layer is more than a privacy tool — it's a &lt;strong&gt;strategic chokepoint&lt;/strong&gt;. Three implications matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single point of governance.&lt;/strong&gt; Instead of negotiating data-handling terms with every AI vendor and auditing every integration separately, IT manages one layer with one policy set. Every AI-touching application in the enterprise — from the internal LLM chatbot to the marketing copy generator to the customer support bot we built using &lt;a href="https://dev.to/blog/future-of-ecommerce"&gt;modern web architecture&lt;/a&gt; — inherits those controls automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clean separation of concerns.&lt;/strong&gt; Application teams build features. The wall enforces data protection. Security teams audit one boundary instead of dozens. Compliance teams have one log to review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability into AI usage.&lt;/strong&gt; For the first time, IT can answer questions that today's ad-hoc AI use makes impossible: which teams are using AI most, on what data, at what cost, with what risk profile? Per-team token spend, per-model cost trends, policy violation rates — all emerge as a byproduct of doing the primary job.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The strategic frame.&lt;/strong&gt; Most enterprises will eventually have a single AI gateway. The question is whether you design it deliberately as a strategic asset, or accumulate it accidentally as ten different teams build ten different proxies. The first path takes a quarter and pays dividends forever. The second takes years and produces ten different audit liabilities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Common objections, briefly
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;"Won't sanitization hurt the model's accuracy?"&lt;/em&gt; In practice, no — modern LLMs reason perfectly well over structured placeholders as long as the placeholder preserves the &lt;em&gt;type&lt;/em&gt; of entity. Where accuracy does suffer is on natively unstructured tasks like sentiment analysis of customer feedback, where the customer's actual words matter. For those tasks you either accept the trade-off or run them through an on-prem model. The router can make this routing automatic.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What about agents that need to take real actions on real data?"&lt;/em&gt; The wall is for the LLM call, not the tool call. When the model outputs &lt;code&gt;send_email_to([PERSON_1])&lt;/code&gt;, your application layer restores &lt;code&gt;[PERSON_1]&lt;/code&gt; to the real address before invoking the email tool. The agent's reasoning happens on tokens; the agent's actions happen on real data inside your perimeter.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Can the provider deduce identity from context?"&lt;/em&gt; Possible in theory, mitigated in practice by entity rotation (the same person gets different tokens in different sessions), aggressive minimization (only send the prompt fragments that need to reach the model), and provider-side privacy policies. The threat model here is residual; the alternative is sending everything in clear text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to build one?
&lt;/h2&gt;

&lt;p&gt;If your organization is currently sending raw customer data to public LLM APIs — and most are — you are accumulating compliance debt every day. If you're holding back AI adoption entirely because legal said no, you are losing the productivity race.&lt;/p&gt;

&lt;p&gt;The sanitization layer is the architectural primitive that lets you stop both. Your data stays home. The AI thinks anyway. Compliance gets a defensible answer. Engineering gets to ship.&lt;/p&gt;

&lt;p&gt;We've built sanitization layers for regulated industries — finance, healthcare, legal — across both Turkey and Europe. If you want to discuss what one would look like for your stack, your data, and your compliance regime, &lt;a href="https://dev.to/contact"&gt;get in touch&lt;/a&gt;. The first conversation costs you 30 minutes and clarifies whether this is the right primitive for your problem.&lt;/p&gt;

&lt;p&gt;Keep your data. Use the AI. Both can be true at once.&lt;/p&gt;

</description>
      <category>aiml</category>
      <category>datasanitizationforai</category>
      <category>aiprivacygateway</category>
      <category>llmdataleakageprevention</category>
    </item>
    <item>
      <title>From Public Cloud to Self-Hosted PaaS: A Migration Story</title>
      <dc:creator>mirac kodat</dc:creator>
      <pubDate>Sat, 16 May 2026 11:35:17 +0000</pubDate>
      <link>https://dev.to/iwwomi/from-public-cloud-to-self-hosted-paas-a-migration-story-311c</link>
      <guid>https://dev.to/iwwomi/from-public-cloud-to-self-hosted-paas-a-migration-story-311c</guid>
      <description>&lt;p&gt;We just moved a client's production workload off the public cloud and rebuilt their infrastructure from the ground up. The result is the kind of work that doesn't fit in a status update — so here is the full story, the trade-offs we accepted, and what every growing company should ask before they sign their next AWS bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem was simple — and familiar
&lt;/h2&gt;

&lt;p&gt;Like many growing companies, our client was hosting their applications on a major cloud provider. Every month the same two questions came up at the leadership table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are we paying this much?&lt;/strong&gt; Cloud bills had quietly tripled over eighteen months. Most of the growth wasn't from new features or new customers — it was from "small" line items that nobody was watching: NAT gateway traffic, cross-AZ data transfer, idle managed-service buffers, and replicated storage that nobody had pruned in a year. The team had stopped reading the bill in detail because reading it didn't change anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does every customer require a different management process?&lt;/strong&gt; Each tenant had been onboarded as a one-off — a custom VPC, a custom database, a custom set of IAM roles. By customer number twelve, the operational surface was unmanageable. A configuration change for one customer meant a four-hour ticket for the platform team. There was no leverage in growth.&lt;/p&gt;

&lt;p&gt;The first problem was draining the budget. The second was draining the team's time. We saw both, and our recommendation was direct: it's time to leave.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The honest framing.&lt;/strong&gt; Public cloud isn't bad. It's a poor fit for a specific shape of workload — predictable traffic, multi-tenant by design, cost-sensitive, where the elasticity premium isn't paying for itself anymore. That described our client exactly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;We built a multi-tenant &lt;strong&gt;Platform-as-a-Service&lt;/strong&gt; infrastructure on private VDS (Virtual Dedicated Server) instances, fully under our control. The shape of the system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A single control plane&lt;/strong&gt; that provisions tenants, runs deployments, and handles upgrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-tenant isolation&lt;/strong&gt; at the namespace level — each customer gets their own Kubernetes namespace, their own database schema, their own observability scope — but they share the underlying nodes for cost efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity and policy&lt;/strong&gt; managed centrally with Keycloak, so the same access model applies whether a tenant has one user or fifty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-service onboarding&lt;/strong&gt; through an internal portal — picking the right combination of services for a new customer is now a 10-minute form, not a week of platform-team coordination.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed management surface&lt;/strong&gt; — the orchestration layer is reachable only from a VPN-gated jump host. There is no public internet path into the things that control everything else.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is closer to how Render, Fly.io, or Heroku built their platforms — except sized for a single company's needs and operated by the people who use it daily.&lt;/p&gt;

&lt;h2&gt;
  
  
  The outcomes that mattered
&lt;/h2&gt;

&lt;p&gt;After three months in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monthly infrastructure costs dropped significantly.&lt;/strong&gt; We don't quote the exact percentage publicly, but the spend trajectory crossed below the old cloud baseline in the second month and kept going.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New customer onboarding went from days to ten minutes.&lt;/strong&gt; What used to be a multi-team handoff is now a form on the internal portal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All environments became observable from a single point.&lt;/strong&gt; One Grafana, one Loki, one Tempo. The whole platform is legible from one screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The management layer was completely closed to public access.&lt;/strong&gt; No more public-internet-facing dashboards. No more "we'll set up SSO later." The reachable surface is dramatically smaller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor lock-in was eliminated.&lt;/strong&gt; The same Helm charts, the same infrastructure-as-code definitions, will run on any provider with a VDS API. If we want to multi-home tomorrow, we can.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These outcomes don't show up on a marketing page. They show up on a finance report and in a platform team's morale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real message of this project
&lt;/h2&gt;

&lt;p&gt;"Digital transformation" is too often discussed as adding new tools. A new dashboard, a new AI integration, a new observability product. Tools matter, but they're the visible 10%. What creates lasting impact is whether the foundation those tools sit on is built right.&lt;/p&gt;

&lt;p&gt;A foundation that will still scale three years from now. A foundation that will still stay secure when a key team member leaves. A foundation that's sustainable on whatever budget you have in 2028 — not just whatever you have today.&lt;/p&gt;

&lt;p&gt;This is the layer most companies under-invest in until it breaks. By the time it breaks, the cost of fixing it is much higher than the cost of building it right the first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where our work begins
&lt;/h2&gt;

&lt;p&gt;This is where IWWOMI's work starts. We don't just build applications or AI solutions — we design and deploy the entire infrastructure that keeps them running. From the data layer to deployment pipelines, from security to observability. The same discipline that makes our &lt;a href="https://dev.to/blog/synthesis-wall-data-sanitization-for-ai"&gt;AI transformation work&lt;/a&gt; production-grade is what makes our infrastructure work survive contact with growth.&lt;/p&gt;

&lt;p&gt;Some adjacent reading from our team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/cloud-migration-guide"&gt;Cloud Migration Strategy: A Complete Guide&lt;/a&gt; — the framework we use to decide what moves and what stays.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/devops-best-practices"&gt;DevOps Best Practices for Modern Development Teams&lt;/a&gt; — the operational practices behind self-hosted at scale.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/microservices-architecture"&gt;Microservices Architecture: When and How to Use It&lt;/a&gt; — the architectural shape that makes multi-tenant possible.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/blog/database-optimization"&gt;Database Optimization Techniques for High-Traffic Apps&lt;/a&gt; — what we tune once the database becomes the bottleneck.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to consider this
&lt;/h2&gt;

&lt;p&gt;You probably should not exit the public cloud if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your traffic is genuinely spiky and you need autoscaling that you couldn't justify staffing yourselves.&lt;/li&gt;
&lt;li&gt;You're a small team without operational depth, and one of the founders is on call.&lt;/li&gt;
&lt;li&gt;You depend on managed services (RDS, Aurora, DynamoDB) in ways that would take a year to replicate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably should consider it if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your traffic profile is predictable and your cloud bill is growing faster than your customer base.&lt;/li&gt;
&lt;li&gt;You serve multiple tenants that are structurally similar.&lt;/li&gt;
&lt;li&gt;Compliance (KVKK, GDPR, sector-specific) keeps adding requirements you find hard to satisfy on shared infrastructure.&lt;/li&gt;
&lt;li&gt;A single API price change from a single provider could meaningfully hurt your margins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The third option — and often the right one — isn't to fully exit. It's to build a self-hosted core for the steady-state workload and keep a small cloud footprint for the burst. The economics of a hybrid landing usually beat either pure cloud or pure on-prem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical deep-dive
&lt;/h2&gt;

&lt;p&gt;For the full technical write-up — the architecture diagrams, the trade-offs we accepted, what we'd do differently, and the specific tooling choices (Kubernetes, Cilium, Longhorn, Tempo, Loki, Argo CD) — read our team lead Abdullah Taş's piece on Medium:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://abdullahtas.medium.com/s%C4%B1f%C4%B1rdan-productiona-bir-self-hosted-paas-mimarisi-kurma-hikayemiz-434eeecd2cf3" rel="noopener noreferrer"&gt;From Zero to Production: The Story of Building a Self-Hosted PaaS Architecture →&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to talk?
&lt;/h2&gt;

&lt;p&gt;If your infrastructure is struggling to keep up with growing workloads, or if your cloud bill has stopped being sustainable, this is exactly the kind of work we do. The first conversation is a 30-minute call where we look at your current setup, your trajectory, and what a different shape would mean for you. No commitment, no slide deck, just an honest read.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/contact"&gt;Get in touch&lt;/a&gt; — we'd love to hear what you're building.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>selfhostedpaas</category>
      <category>cloudexit</category>
      <category>awstoprivatecloud</category>
    </item>
    <item>
      <title>Test post</title>
      <dc:creator>mirac kodat</dc:creator>
      <pubDate>Sat, 16 May 2026 11:19:27 +0000</pubDate>
      <link>https://dev.to/iwwomi/test-post-49ik</link>
      <guid>https://dev.to/iwwomi/test-post-49ik</guid>
      <description>&lt;p&gt;the test post&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
