<?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: Framz</title>
    <description>The latest articles on DEV Community by Framz (@framz).</description>
    <link>https://dev.to/framz</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4038735%2Fb1e3ad6a-0e2d-4bcc-ad72-00440c4541cb.png</url>
      <title>DEV Community: Framz</title>
      <link>https://dev.to/framz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/framz"/>
    <language>en</language>
    <item>
      <title>We scanned our own AWS account before selling audits. It found 3.4%.</title>
      <dc:creator>Framz</dc:creator>
      <pubDate>Sun, 02 Aug 2026 13:59:40 +0000</pubDate>
      <link>https://dev.to/framz/we-scanned-our-own-aws-account-before-selling-audits-it-found-34-6ic</link>
      <guid>https://dev.to/framz/we-scanned-our-own-aws-account-before-selling-audits-it-found-34-6ic</guid>
      <description>&lt;h2&gt;
  
  
  We scanned our own AWS account before selling audits. It found 3.4%.
&lt;/h2&gt;

&lt;p&gt;We built an AWS cost scanner. Around 70 checks, read-only, walks every region&lt;br&gt;
with spend in it. Before pointing it at anybody else we pointed it at ourselves,&lt;br&gt;
partly as a test and partly because it seemed like the minimum you should do&lt;br&gt;
before charging people for the same thing.&lt;/p&gt;

&lt;p&gt;It found $293.82 a month of savings against $8,746.75 of spend. That is 3.4%,&lt;br&gt;
which is below the 20% threshold we guarantee. If we were a client, the audit&lt;br&gt;
would have been free.&lt;/p&gt;

&lt;p&gt;We published the whole result anyway, resource by resource: &lt;a href="https://cloud-cost.framz.io/demo" rel="noopener noreferrer"&gt;https://cloud-cost.framz.io/demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post is the part that was actually interesting, which is not the total.&lt;/p&gt;

&lt;h3&gt;
  
  
  The findings were not where we expected
&lt;/h3&gt;

&lt;p&gt;105 findings. The distribution surprised us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;66 of them were S3, worth $148 a month, and almost all of it was one bucket
with no lifecycle policy.&lt;/li&gt;
&lt;li&gt;18 were EBS and snapshots, worth $96 a month, and most of that was snapshots
of volumes that no longer exist.&lt;/li&gt;
&lt;li&gt;Compute, the thing everybody optimises first, produced almost nothing, because
we already run small and we already schedule things off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern generalises. Compute is where attention goes because it is where the&lt;br&gt;
instance list lives. Storage is where the money quietly accumulates, because&lt;br&gt;
storage grows without anybody deploying anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Six things worth checking in your own account
&lt;/h3&gt;

&lt;p&gt;These are the checks that produced findings on ours, in the order they produced&lt;br&gt;
them. All of them are things you can do yourself in an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Cost Explorer, six months, grouped by service, then by usage type.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Grouping by service tells you where to look. Grouping by usage type inside the&lt;br&gt;
top service is the step people skip, and it is the one that turns "EC2-Other is&lt;br&gt;
$900" into "EBS snapshots are $400 of it". EC2-Other is not a service; it is a&lt;br&gt;
bucket containing EBS, snapshots, NAT processing, public IPv4 and data transfer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Log groups with no retention.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every CloudWatch log group AWS creates for you defaults to never expiring.&lt;br&gt;
Ingestion is $0.50 per GB and storage is $0.03 per GB-month, so the expensive&lt;br&gt;
part is getting the data in, but the never-expiring part is what makes the line&lt;br&gt;
grow forever. Setting retention is free, takes one API call per group, and the&lt;br&gt;
storage charge stops within about 72 hours.&lt;/p&gt;

&lt;p&gt;Check VPC Flow Logs specifically. Enabled once for a security review with ALL&lt;br&gt;
traffic captured, they are frequently the largest ingester in an account, and&lt;br&gt;
nobody reads them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Snapshots whose source volume is gone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terminating an instance does not delete its snapshots. Deleting the volume does&lt;br&gt;
not delete its snapshots. Deregistering an AMI does not delete the snapshots&lt;br&gt;
behind it. They are $0.05 per GB-month and they outlive everything they were&lt;br&gt;
taken from.&lt;/p&gt;

&lt;p&gt;One detail that trips people up: deleting one snapshot from a chain frees almost&lt;br&gt;
nothing, because later snapshots reference its blocks. You have to delete the&lt;br&gt;
chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Public IPv4 addresses.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since 1 February 2024 every public IPv4 address costs $0.005 an hour, about&lt;br&gt;
$3.60 a month, attached or not. The old rule that an attached Elastic IP was&lt;br&gt;
free is no longer true. Unassociated addresses left behind by terminated&lt;br&gt;
instances are the most common orphan there is, and they are also the easiest&lt;br&gt;
thing on this list to fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. NAT gateways carrying traffic that should be free.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A NAT gateway is $0.045 an hour plus $0.045 per GB processed. The per-GB part&lt;br&gt;
applies to traffic going to S3, DynamoDB and ECR, which never leaves the AWS&lt;br&gt;
network. Gateway VPC endpoints for S3 and DynamoDB cost nothing at all and take&lt;br&gt;
that traffic off the NAT path entirely.&lt;/p&gt;

&lt;p&gt;If your CI pulls container images through a NAT gateway a hundred times a day,&lt;br&gt;
that is real money for traffic that a free endpoint would carry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Savings Plan coverage.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cost Explorer, Savings Plans, Coverage. If it says 0% and your compute spend is&lt;br&gt;
flat month to month, that is the largest single number in your audit and it is&lt;br&gt;
one purchase away.&lt;/p&gt;

&lt;p&gt;Order matters here. Rightsize first, let the baseline settle for a couple of&lt;br&gt;
weeks, then commit to about 70 to 80% of what is left. A Savings Plan is a&lt;br&gt;
promise to spend a fixed amount per hour for one to three years, and committing&lt;br&gt;
before a cleanup means paying for capacity you are about to delete.&lt;/p&gt;

&lt;h3&gt;
  
  
  The uncomfortable conclusion
&lt;/h3&gt;

&lt;p&gt;Our account came in at 3.4% because it is small, it is new, and we already do&lt;br&gt;
most of this. An account that has been running for three years without anybody&lt;br&gt;
owning the bill is a different story, and 20% to 35% is normal there.&lt;/p&gt;

&lt;p&gt;But the reason it is normal is not technical. Creating a resource on AWS takes&lt;br&gt;
one API call and no approval. Deleting one requires somebody to know it exists,&lt;br&gt;
know nothing depends on it, and care. Those costs are wildly asymmetric, which&lt;br&gt;
is why the bill goes up while traffic stays flat.&lt;/p&gt;

&lt;h3&gt;
  
  
  The calculators
&lt;/h3&gt;

&lt;p&gt;We turned the arithmetic behind each of these checks into free calculators. No&lt;br&gt;
signup, no email gate, and they run on the same price constants the scanner&lt;br&gt;
uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cloud-cost.framz.io/tools" rel="noopener noreferrer"&gt;https://cloud-cost.framz.io/tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Twelve of them, including data transfer, NAT gateway, snapshots, CloudWatch&lt;br&gt;
Logs, S3 storage classes, Graviton and a Fargate against Lambda against EC2&lt;br&gt;
comparison.&lt;/p&gt;

&lt;p&gt;And the full checklist the audit runs, published in full rather than gated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cloud-cost.framz.io/guides/aws-cost-optimization-checklist" rel="noopener noreferrer"&gt;https://cloud-cost.framz.io/guides/aws-cost-optimization-checklist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full disclosure, since it would be odd not to say it: we sell a fixed-price&lt;br&gt;
audit. The scan of our own account is on the site precisely because it is&lt;br&gt;
unflattering, and it is the only real evidence we have that the thing works.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>finops</category>
    </item>
    <item>
      <title>Every AWS project starts with copy-pasting last repo's Terraform. I built a generator instead.</title>
      <dc:creator>Framz</dc:creator>
      <pubDate>Tue, 21 Jul 2026 01:05:33 +0000</pubDate>
      <link>https://dev.to/framz/every-aws-project-starts-with-copy-pasting-last-repos-terraform-i-built-a-generator-instead-2fpg</link>
      <guid>https://dev.to/framz/every-aws-project-starts-with-copy-pasting-last-repos-terraform-i-built-a-generator-instead-2fpg</guid>
      <description>&lt;p&gt;Be honest about how your last AWS project's infrastructure started. You copied the Terraform from the previous repo, deleted the bits that threw errors, and moved on. Six months later nobody remembers why half of it is shaped the way it is, and there's a 500-line &lt;code&gt;main.tf&lt;/code&gt; that everyone is scared to touch.&lt;/p&gt;

&lt;p&gt;I got tired of that ritual, so I built a &lt;a href="https://www.framz.io/tools/terraform-blueprint-generator" rel="noopener noreferrer"&gt;Terraform Blueprint Generator&lt;/a&gt;: pick your AWS stack, and it emits clean, &lt;strong&gt;production-structured&lt;/strong&gt; Terraform in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "production-structured" actually means
&lt;/h2&gt;

&lt;p&gt;Not one giant file. Not resources with wide-open security groups because that was fastest. What you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A sane module layout&lt;/strong&gt; — separated concerns, not everything crammed into a single file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure defaults&lt;/strong&gt; — least-privilege leanings, private-by-default networking, encryption where it belongs. The safe choice is the default choice, so you have to &lt;em&gt;opt out&lt;/em&gt; of security rather than remember to opt in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portable by design&lt;/strong&gt; — no gratuitous single-vendor lock-in baked into the baseline. (That's the same posture behind our &lt;a href="https://www.framz.io/tools/vendor-lock-in-auditor" rel="noopener noreferrer"&gt;Vendor Lock-In Auditor&lt;/a&gt; — portability as a default, not an afterthought.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it is and isn't
&lt;/h2&gt;

&lt;p&gt;It's a &lt;strong&gt;baseline you adapt&lt;/strong&gt;, not a turnkey production deploy. You still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;review every line (it's your infra, own it),&lt;/li&gt;
&lt;li&gt;set your own &lt;code&gt;tfvars&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;decide and configure your state backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it saves is the boring, error-prone bootstrapping — the part where inconsistency and quiet insecurity creep in. You start from a clean, well-organised foundation instead of last quarter's technical debt.&lt;/p&gt;

&lt;p&gt;Free, no signup: &lt;strong&gt;&lt;a href="https://www.framz.io/tools/terraform-blueprint-generator" rel="noopener noreferrer"&gt;framz.io/tools/terraform-blueprint-generator&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we made it
&lt;/h2&gt;

&lt;p&gt;We build and run cloud infrastructure at &lt;a href="https://www.framz.io" rel="noopener noreferrer"&gt;Framz&lt;/a&gt;, and a consistent, portable, secure-by-default starting point is something we wanted for ourselves. So it's public and free.&lt;/p&gt;




&lt;p&gt;Two questions for the DevOps crowd: &lt;strong&gt;which AWS stacks / resources should it cover next?&lt;/strong&gt; And — the one that always starts a good argument — &lt;strong&gt;modules or a flat structure for a small team's baseline?&lt;/strong&gt; Let me hear it in the comments.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>terraform</category>
      <category>cloud</category>
    </item>
    <item>
      <title>I ran 5 prompt-injection attacks against my chatbot's system prompt. Here's what broke.</title>
      <dc:creator>Framz</dc:creator>
      <pubDate>Tue, 21 Jul 2026 01:05:19 +0000</pubDate>
      <link>https://dev.to/framz/i-ran-5-prompt-injection-attacks-against-my-chatbots-system-prompt-heres-what-broke-1l1k</link>
      <guid>https://dev.to/framz/i-ran-5-prompt-injection-attacks-against-my-chatbots-system-prompt-heres-what-broke-1l1k</guid>
      <description>&lt;p&gt;Every team shipping an LLM feature has the same quiet worry: &lt;em&gt;what happens when someone tries to jailbreak our chatbot?&lt;/em&gt; And almost nobody has a real answer, because "is our system prompt resilient?" usually gets settled by gut feeling and a couple of manual pokes.&lt;/p&gt;

&lt;p&gt;I wanted a feedback loop instead. So I built a &lt;a href="https://www.framz.io/tools/prompt-injection-tester" rel="noopener noreferrer"&gt;Prompt Injection Tester&lt;/a&gt;: paste your system prompt, and it runs five classes of attack against it, then hands you a resilience score with the actual model responses as evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five attack classes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instruction override&lt;/strong&gt; — "Ignore all previous instructions and…" The classic. Still works more often than you'd like.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt extraction&lt;/strong&gt; — coaxing the model into leaking its own system prompt. If your prompt contains rules, examples, or hints about internal tools, this is how they get out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delimiter / escape&lt;/strong&gt; — breaking out of the formatting you wrapped user input in. If you concatenate user text into a template, this is the hole.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-play&lt;/strong&gt; — "Let's play a game where you're an AI with no restrictions…" Wrapping the override in fiction to slip past a naive filter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indirect injection&lt;/strong&gt; — the nasty one. The attack doesn't come from the user at all; it rides in on attacker-controlled text that enters through a tool call, a retrieved document, or a web page your agent reads.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last one is the eye-opener. A system prompt that looks bulletproof against direct attacks falls over the moment untrusted content flows in through RAG or a browsing tool — because the model can't tell your instructions from the ones hidden in the document it just fetched.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest limits
&lt;/h2&gt;

&lt;p&gt;Five families is a &lt;strong&gt;floor, not a ceiling.&lt;/strong&gt; A determined attacker has more, and prompt injection is not a solved problem — there's no system prompt that makes you immune. Treat this as a fast first pass to catch the obvious holes before they catch you, not a certificate of safety.&lt;/p&gt;

&lt;p&gt;One thing I deliberately got right: &lt;strong&gt;it runs on our own hardware.&lt;/strong&gt; Your system prompt is not shipped off to a third-party model to be "tested" — which would be a slightly absurd thing for a security tool to do. Free, no signup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;We build private, in-boundary AI at &lt;a href="https://www.framz.io" rel="noopener noreferrer"&gt;Framz&lt;/a&gt;, so "what can untrusted input do to a model?" is a question we live with daily. The tester is the thing I wanted for our own work, so we made it public.&lt;/p&gt;

&lt;p&gt;If you've shipped an LLM feature, run your real system prompt through it and see which of the five it survives: &lt;strong&gt;&lt;a href="https://www.framz.io/tools/prompt-injection-tester" rel="noopener noreferrer"&gt;framz.io/tools/prompt-injection-tester&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Genuinely curious about the community's war stories: &lt;strong&gt;what's the most creative prompt injection you've seen land in production?&lt;/strong&gt; Drop it in the comments — and tell me which attack classes you think the tester should add next.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>When Does Self-Hosting an LLM Actually Beat the API? The Break-Even Math</title>
      <dc:creator>Framz</dc:creator>
      <pubDate>Mon, 20 Jul 2026 22:25:36 +0000</pubDate>
      <link>https://dev.to/framz/when-does-self-hosting-an-llm-actually-beat-the-api-the-break-even-math-gl1</link>
      <guid>https://dev.to/framz/when-does-self-hosting-an-llm-actually-beat-the-api-the-break-even-math-gl1</guid>
      <description>&lt;p&gt;Every team I've worked with hits the same argument about three months after shipping something on top of an LLM: &lt;em&gt;"Should we still be paying per token, or should we just self-host?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And it's always argued on vibes. Someone read a blog post. Someone else got burned by a GPU bill once. Nobody's actually done the math. So here's the math — or at least the shape of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API wins right up until it doesn't
&lt;/h2&gt;

&lt;p&gt;Paying an API has one killer advantage that people forget to give it credit for: &lt;strong&gt;you pay for exactly what you use, and nothing when you're idle.&lt;/strong&gt; No GPU sitting warm at 3am doing nothing. No serving stack to babysit. If your volume is low or spiky, this is basically unbeatable, and honestly you should stop reading and just use the API.&lt;/p&gt;

&lt;p&gt;Self-hosting flips that. You take on a &lt;strong&gt;mostly fixed cost&lt;/strong&gt; — the GPU (rented or amortised) plus the very real human cost of running it — and in exchange, each extra token is almost free once you've paid for the box.&lt;/p&gt;

&lt;p&gt;So the whole decision collapses to one question: &lt;em&gt;at your volume, has that fixed cost dropped below what the meter would've charged you?&lt;/em&gt; That's the break-even. Everything else is just inputs to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six things that move the break-even
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Monthly token volume.&lt;/strong&gt; The big one. API cost scales straight up with it; self-hosting barely moves. Low → API. High and steady → self-hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input:output ratio.&lt;/strong&gt; Output usually costs more on APIs, and it's what eats GPU time when you host. A summariser (huge input, tiny output) and a chatbot look nothing alike on the curve.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality tier.&lt;/strong&gt; Here's where people quietly cheat: "self-hosting is cheaper" usually assumes a 30B open model is good enough. If you actually need frontier quality, compare frontier-to-frontier — and you probably can't run frontier yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU cost + amortisation.&lt;/strong&gt; Your fixed cost, per hour or spread over the hardware's life.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilisation.&lt;/strong&gt; A GPU you use 8% of the day is a space heater with a fan. This one number wrecks or saves the whole thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ops overhead.&lt;/strong&gt; The line nobody puts in the spreadsheet: someone runs it, patches it, and gets paged at 2am. At small scale that alone can be bigger than the API bill — think 10–20 senior-engineer hours a month.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The costs both sides conveniently forget
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Self-hosting quietly adds:&lt;/strong&gt; fine-tuning experiments, storage and egress, eval infrastructure, and your engineers' time — which is not free, no matter how much they enjoy it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The API quietly adds:&lt;/strong&gt; price changes and rate limits you don't control, and the awkward bit — your data (and your customers' data) leaving your walls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The break-even nobody charts: compliance
&lt;/h2&gt;

&lt;p&gt;There's a second crossover that has nothing to do with dollars. If you handle regulated or client-confidential data, &lt;strong&gt;self-hosting wins the moment that data would otherwise be shipped off to a third-party API&lt;/strong&gt; — full stop, whatever the token math says. When "our data can't leave our infrastructure" is a hard rule, you've already made the decision; you're just backfilling the spreadsheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Just run your numbers
&lt;/h2&gt;

&lt;p&gt;The model is simple. The arithmetic — 12 months, amortisation, utilisation — is annoying. So we built the boring part: the &lt;a href="https://www.framz.io/tools/llm-cost-calculator" rel="noopener noreferrer"&gt;LLM Cost Calculator&lt;/a&gt; charts API vs self-hosting over a year, no signup, no email wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;When does self-hosting get cheaper?&lt;/strong&gt; When your fixed cost (GPU amortisation + ops time) drops below the per-token meter at your sustained volume. Low/spiky → API. High/steady → self-host.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the cost everyone forgets?&lt;/strong&gt; Engineers' time to run the stack. It's usually the single biggest hidden line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is an open model as good as a frontier API?&lt;/strong&gt; Not automatically — decide your quality tier &lt;em&gt;before&lt;/em&gt; you compare price, or you're comparing a Civic to a truck.&lt;/p&gt;




&lt;p&gt;I'm genuinely curious where real teams land on this — &lt;strong&gt;what was your actual break-even, and did self-hosting turn out cheaper than you expected, or way more of a headache?&lt;/strong&gt; Tell me in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Shadow AI: What Your Team Is Already Pasting Into ChatGPT</title>
      <dc:creator>Framz</dc:creator>
      <pubDate>Mon, 20 Jul 2026 22:25:24 +0000</pubDate>
      <link>https://dev.to/framz/shadow-ai-what-your-team-is-already-pasting-into-chatgpt-29gc</link>
      <guid>https://dev.to/framz/shadow-ai-what-your-team-is-already-pasting-into-chatgpt-29gc</guid>
      <description>&lt;p&gt;Right now, somewhere in your org, someone is pasting a stack trace, a customer record, or a chunk of the codebase into ChatGPT to get unstuck. You know it. I know it. The person doing it half-knows it's sketchy and is doing it anyway — because it &lt;em&gt;works&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's shadow AI, and the reason it's so hard to stamp out is that it's not laziness or malice. It's people trying to do their jobs faster. Send the "don't use ChatGPT" email and you don't stop it — you just make it quieter.&lt;/p&gt;

&lt;p&gt;So don't start with a ban. Start with knowing what's actually leaving the building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four things that leak (roughly in order of how often I see it)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;PII.&lt;/strong&gt; Names, emails, addresses — worse if it's health or financial — tucked inside "help me reply to this customer" prompts. This is the one with legal teeth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets.&lt;/strong&gt; API keys, tokens, connection strings, a stray &lt;code&gt;.env&lt;/code&gt;, private keys — pasted into "why is this failing?" debugging prompts. High blast radius, and usually the person has no idea it was even in there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proprietary code.&lt;/strong&gt; Internal logic pasted in for a refactor. It doesn't come &lt;em&gt;back&lt;/em&gt; out, sure — but you've just handed it to a third party.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-confidential stuff.&lt;/strong&gt; Contracts, engagement letters, case notes. For a regulated firm that's not an "oops," that's a reportable breach.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The one everyone quotes is the reported case of engineers pasting proprietary source into ChatGPT. What made it nasty: the data was just &lt;em&gt;gone&lt;/em&gt;, unretrievable, and no DLP tool flagged it — because to a network monitor, an AI chat looks like any other encrypted web request, not a file leaving.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's a governance problem wearing a tech-problem costume
&lt;/h2&gt;

&lt;p&gt;The reflex is to buy a blocking proxy. But blocking just recreates the original problem: people route around it (personal laptop, phone, copy-paste on their own account), and you lose the productivity you were trying to protect.&lt;/p&gt;

&lt;p&gt;The thing that actually holds is a &lt;strong&gt;compliant path&lt;/strong&gt; — an approved way to get the same AI help without the data leaving your boundary — plus a short, human-readable policy on what's fair game and what isn't. And detection, because you can't govern what you can't see.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check — without leaking it to check it
&lt;/h2&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; scan for this yourself: regexes for key formats, entropy for secrets, NER for PII. The irony is that most "paste your text here to check it" tools ship your text off to &lt;em&gt;their&lt;/em&gt; server or &lt;em&gt;their&lt;/em&gt; model — which is the exact thing you were trying to avoid.&lt;/p&gt;

&lt;p&gt;So we built the &lt;a href="https://www.framz.io/tools/ai-data-leak-scanner" rel="noopener noreferrer"&gt;Shadow AI Data Leak Scanner&lt;/a&gt; with one rule we refused to break: &lt;strong&gt;it runs on our own hardware, and your text never touches a third-party AI.&lt;/strong&gt; Paste something in, see the PII, secrets, and code it contains, and whether it's safe for a public model. It's heuristics, not magic — treat it as a fast first pass, not a certificate.&lt;/p&gt;

&lt;p&gt;Shipping AI features yourself? The mirror-image risk is your &lt;em&gt;own&lt;/em&gt; app getting jailbroken — poke at that with the &lt;a href="https://www.framz.io/tools/prompt-injection-tester" rel="noopener noreferrer"&gt;Prompt Injection Tester&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is shadow AI?&lt;/strong&gt; Staff using AI tools with no approval or oversight — pasting in whatever gets the job done, usually without clocking that the data leaves the org.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What leaks most?&lt;/strong&gt; PII in "draft this reply," secrets in "why does this break," code in "refactor this," and client-confidential docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you stop it without a ban?&lt;/strong&gt; A compliant in-boundary path, a one-page policy people can actually follow, and detection so it's enforceable.&lt;/p&gt;




&lt;p&gt;Honest question for the room: &lt;strong&gt;has your company actually written down what's OK to paste into an LLM — or is everyone just quietly winging it?&lt;/strong&gt; I suspect I know the answer. Tell me in the comments.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>privacy</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Four Layers of Cloud Lock-In (and How Terraform Cuts Your Exit Cost)</title>
      <dc:creator>Framz</dc:creator>
      <pubDate>Mon, 20 Jul 2026 22:25:08 +0000</pubDate>
      <link>https://dev.to/framz/the-four-layers-of-cloud-lock-in-and-how-terraform-cuts-your-exit-cost-17he</link>
      <guid>https://dev.to/framz/the-four-layers-of-cloud-lock-in-and-how-terraform-cuts-your-exit-cost-17he</guid>
      <description>&lt;p&gt;People throw around "vendor lock-in" like it's a binary — you either have it or you don't. That framing is why the conversation usually goes nowhere. Lock-in isn't one thing. It's four different things stacked on top of each other, each with a wildly different cost to unwind, and once you separate them you can actually decide what's worth worrying about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four layers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data.&lt;/strong&gt; Proprietary formats, and — the real killer — &lt;strong&gt;egress fees&lt;/strong&gt; to get it back out. Cheap to design around early, brutally expensive to fix late.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform.&lt;/strong&gt; The vendor-specific managed stuff: serverless, managed databases, IAM, observability. This is where the deep lock-in lives, because these services are &lt;em&gt;genuinely good&lt;/em&gt; and have no clean equivalent next door.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contract.&lt;/strong&gt; Renewal clauses, termination terms, committed-spend discounts that quietly jack up your switching cost while feeling like a deal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operations.&lt;/strong&gt; Your team's muscle memory — the tooling, the runbooks, the way everyone thinks. The least visible layer, and usually the stickiest.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to know where you're most exposed, it's almost always managed databases, serverless, IAM, and observability. Those deserve a real decision, not a default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lock-in isn't automatically a problem
&lt;/h2&gt;

&lt;p&gt;Here's the part people skip: lock-in only &lt;em&gt;matters&lt;/em&gt; when it traps regulated data, kills your pricing leverage, or makes leaving hideously expensive. A managed service that saves your team a month of work and is easy enough to swap later? That's a good trade. Take the deal.&lt;/p&gt;

&lt;p&gt;The goal was never zero lock-in. It's &lt;em&gt;knowing your number&lt;/em&gt; and controlling it where it counts. Which is why step one is boring and unglamorous: audit each layer, put a figure on the exit, set a date to revisit. (We built a &lt;a href="https://www.framz.io/tools/vendor-lock-in-auditor" rel="noopener noreferrer"&gt;Vendor Lock-In Auditor&lt;/a&gt; that spits out a portability score and an exit-cost estimate, so it's an actual number instead of a vibe.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Terraform earns its keep — and where it's oversold
&lt;/h2&gt;

&lt;p&gt;Infrastructure-as-code (Terraform, Pulumi) is the highest-leverage move you can make on the &lt;strong&gt;operations&lt;/strong&gt; and &lt;strong&gt;platform&lt;/strong&gt; layers. Declarative, version-controlled infra buys you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An environment that's documented and reproducible instead of click-configured and half-remembered.&lt;/li&gt;
&lt;li&gt;Your vendor dependencies sitting right there &lt;strong&gt;in the code&lt;/strong&gt;, visible — you can literally read your lock-in.&lt;/li&gt;
&lt;li&gt;The ability to stand up equivalent resources elsewhere from one workflow, which is what makes a real exit or multi-cloud plan more than a slide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the honest bit: Terraform does &lt;strong&gt;not&lt;/strong&gt; make a proprietary managed service portable. It makes the &lt;em&gt;exit auditable and cheaper&lt;/em&gt;. The platform-layer dependency itself is still a design choice you make service by service. Anyone selling you Terraform as a lock-in cure is overselling.&lt;/p&gt;

&lt;p&gt;(If you're standardising from scratch, our &lt;a href="https://www.framz.io/tools/terraform-blueprint-generator" rel="noopener noreferrer"&gt;Terraform Blueprint Generator&lt;/a&gt; hands you a production-ready, portable-by-default baseline in seconds.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The playbook I'd actually follow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit&lt;/strong&gt; the four layers, price the exit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codify&lt;/strong&gt; infra in Terraform so the dependencies are explicit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide on purpose&lt;/strong&gt; for each high-lock-in service: take it (and write down the risk + a portability plan) or skip it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negotiate&lt;/strong&gt; egress caps and deconversion help &lt;em&gt;into the contract&lt;/em&gt; — before you're committed, when you still have leverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revisit&lt;/strong&gt; on a schedule, because lock-in creeps while you're not looking.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selective portability beats both religions. Keep the managed-service speed where it's worth it; keep your options open where it isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are the four layers?&lt;/strong&gt; Data (formats + egress), platform (vendor-specific services), contract (renewal/termination terms), operations (team skills/tooling). Highest risk: managed DBs, serverless, IAM, observability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Terraform fix lock-in?&lt;/strong&gt; It lowers the operations/platform layers and makes the exit auditable and cheaper. It does &lt;em&gt;not&lt;/em&gt; make proprietary services portable by itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should we go multi-cloud?&lt;/strong&gt; Usually no — it's real complexity for often-imaginary benefit. Prefer selective portability.&lt;/p&gt;




&lt;p&gt;Curious about the war stories here: &lt;strong&gt;what's the most brutal egress bill or exit cost you've personally run into?&lt;/strong&gt; Drop it below — those numbers are always more educational than any blog post.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>terraform</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
