<?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: Viktor Rozenko</title>
    <description>The latest articles on DEV Community by Viktor Rozenko (@sharpvik).</description>
    <link>https://dev.to/sharpvik</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%2F4131712%2Fa93ba93a-a02e-488d-90c2-a55dea42cb68.png</url>
      <title>DEV Community: Viktor Rozenko</title>
      <link>https://dev.to/sharpvik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sharpvik"/>
    <language>en</language>
    <item>
      <title>Bloated Clouds, Anyone?</title>
      <dc:creator>Viktor Rozenko</dc:creator>
      <pubDate>Fri, 18 Sep 2026 19:25:58 +0000</pubDate>
      <link>https://dev.to/sharpvik/bloated-clouds-anyone-1jhc</link>
      <guid>https://dev.to/sharpvik/bloated-clouds-anyone-1jhc</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Conventional cloud platforms had to serve everyone, and they became bloated with features. Chasing the next big thing, they abandoned any attempt at improving developer experience, which is &lt;em&gt;the&lt;/em&gt; reason clouds blew up in the first place. Big tech companies have the money to pay for DevOps. The rest of us have to choose between wasting developer time on it or delegating it to an AI agent that can't be held responsible when it all comes crashing down.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can rent a &lt;em&gt;plain VM&lt;/em&gt;, &lt;em&gt;but&lt;/em&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;regular deployments have to arrive via SSH or some elaborate CI setup (we'll look at the options in the next post),&lt;/li&gt;
&lt;li&gt;you'll be paying for more compute than you actually use,&lt;/li&gt;
&lt;li&gt;and when your service becomes popular enough to use its entire CPU/RAM allowance, you have to scale it up manually.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  You can go &lt;em&gt;serverless&lt;/em&gt; and it will scale up and down automatically, &lt;em&gt;but&lt;/em&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;servers with stateful functionality will underperform (for instance, &lt;a href="https://nextjs.org" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; has server-side caching, and it doesn't work when you run it as a scale-to-zero container),&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://firebase.google.com/docs/functions" rel="noopener noreferrer"&gt;Firebase Cloud Functions&lt;/a&gt; are public by default and weird to set up (they have their own CLI just to package and deploy them, and only JS/Python are allowed),&lt;/li&gt;
&lt;li&gt;a few providers let you create a cloud function right in the cloud console. That's terrible, because it's a piece of code that lives in a weird online editor and isn't type-checked against your latest code changes. You &lt;em&gt;will&lt;/em&gt; forget to update it sooner or later, and it &lt;em&gt;will&lt;/em&gt; crash with a bug.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Suppose you &lt;em&gt;do&lt;/em&gt; want the scalability, smooth CI deploys that just make sense, and all your code living in a GitHub repo &lt;em&gt;you&lt;/em&gt; control. Welcome to &lt;a href="https://kubernetes.io" rel="noopener noreferrer"&gt;&lt;em&gt;Kubernetes&lt;/em&gt;&lt;/a&gt; and the 4,000 lines of YAML config that come with it.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Welcome to provisioning a Docker image registry.&lt;/li&gt;
&lt;li&gt;Welcome to setting up &lt;a href="https://traefik.io" rel="noopener noreferrer"&gt;Traefik&lt;/a&gt; for TLS termination.&lt;/li&gt;
&lt;li&gt;Welcome to setting up security groups and service accounts.&lt;/li&gt;
&lt;li&gt;Welcome to configuring ingress and egress rules.&lt;/li&gt;
&lt;li&gt;Welcome to not understanding why this call from "web" to "api" times out. (Is it egress, ingress, or both? Or is it because the "api" service link you put into the "web" env is cluster-local, and "web" lives in a different cluster?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can hear you thinking, "&lt;a href="https://claude.ai" rel="noopener noreferrer"&gt;Claude&lt;/a&gt; can do that for me, no problem," and &lt;em&gt;you're right&lt;/em&gt;... but every time? For every project you start from scratch? And remember, all this setup bought you a nicer dev experience (aside from having to set it up and maintain it), &lt;em&gt;but&lt;/em&gt; Kubernetes runs on top of real VMs! So the money problem isn't solved. It might even have gotten worse!&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's what I came up with
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Put your Next.js app on &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; (for most of us, their &lt;a href="https://vercel.com/pricing" rel="noopener noreferrer"&gt;$20/mo tier&lt;/a&gt; is enough).&lt;/li&gt;
&lt;li&gt;Provision managed resources (&lt;a href="https://www.postgresql.org" rel="noopener noreferrer"&gt;Postgres&lt;/a&gt;, &lt;a href="https://www.mongodb.com" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;, &lt;a href="https://kafka.apache.org" rel="noopener noreferrer"&gt;Kafka&lt;/a&gt;, &lt;a href="https://www.rabbitmq.com" rel="noopener noreferrer"&gt;RabbitMQ&lt;/a&gt;, etc.) from &lt;a href="https://www.digitalocean.com" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt;, &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;, &lt;a href="https://www.scaleway.com" rel="noopener noreferrer"&gt;Scaleway&lt;/a&gt;, &lt;a href="https://aws.amazon.com" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;, or &lt;a href="https://cloud.google.com" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;. It doesn't really matter which; they all offer good SLAs.&lt;/li&gt;
&lt;li&gt;Put your API on DigitalOcean or Scaleway, either as serverless or on &lt;a href="https://www.digitalocean.com/products/app-platform" rel="noopener noreferrer"&gt;App Platform&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set up a &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; workflow (&lt;code&gt;lint + test + build + deploy&lt;/code&gt;) as early as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this for every project is still a stretch, but when it's done properly, you can &lt;code&gt;git push&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; and it'll just deploy, without having to run your own k8s.&lt;/p&gt;




&lt;p&gt;This rant covers only a fraction of what's wrong with today's cloud infra. As a developer, I have to live with it every day. So I said "enough," and now I'm building &lt;a href="https://gagarin.cloud/" rel="noopener noreferrer"&gt;Gagarin Cloud&lt;/a&gt;, where deploying a web app is just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gg resource add gagarin/pg postgres
gg ship         gagarin/api:8080 &lt;span class="nt"&gt;--deps&lt;/span&gt; pg
gg ship         gagarin/web:3000 &lt;span class="nt"&gt;--deps&lt;/span&gt; api
gg domain   add gagarin/web
&lt;span class="c"&gt;# =&amp;gt; Live at https://web-3cnciet6.apps.gagarin.cloud/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a nice dependency graph is included:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpz9poh8vpg1mrrr52hzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpz9poh8vpg1mrrr52hzk.png" alt="Gagarin Cloud Console Screenshot" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>kubernetes</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
