The Friday Deploy
The plain English newsletter for people who run the business, not the tech stack. No jargon. Every Friday.
Code confidence: You built it fast. Now let’s make it last.
Six months ago you had an idea and a deadline and not much else. So you opened Cursor, or Lovable, or Bolt, or Bubble, typed out what you needed, and started iterating. And something remarkable happened: it worked.
Real users. Real data. Maybe real revenue.
That’s not a hack. That’s a product.
But somewhere between “it works” and “it’s live,” a quieter feeling showed up alongside the pride. You’re not entirely sure what’s running under the hood. You don’t know how it would handle ten times the users. You’ve got a login page, but is the data behind it is locked down properly? And if something breaks on a Friday night, your plan is… to figure it out then?
You’re not a fraud. You’re just in the gap between building something and understanding it.
That gap is real, and it’s where a lot of vibe-coded apps quietly stall.
What actually goes wrong
It’s rarely one catastrophic thing. It’s usually a few small things that compound.
Environment variables sitting in a place they shouldn’t be. Authentication that works fine until someone tries something unexpected. A database that handles 50 users no problem, then starts crawling at 500. An app that’s never been monitored, so the first sign of trouble is a user email saying “hey, is this down?”
None of these are unfixable. Most of them aren’t even that complicated to address. But you have to know they’re there first, and AI tools are genuinely good at shipping features and genuinely inconsistent at the infrastructure and security layer underneath them.
Cursor doesn’t know your threat model. Lovable doesn’t know what happens when your Heroku dyno runs out of memory at 2am. Bolt builds fast, but it’s not thinking about what your monitoring setup looks like six months from now.
That’s not a criticism of the tools. They did exactly what they were supposed to do: get you to shipped.
The other thing they did, through no fault of their own, is write code that works but that no human can confidently change. Each prompt gets answered. But because there’s no overarching plan, you end up with logic duplicated across multiple files, functions that do five things at once, and no clear separation between different parts of the app. It runs fine. Until you need to change something.
Then whoever opens it has to reverse-engineer what the AI was thinking when it wrote each section. You make a change in one place and break something in another place you didn’t know was connected.
And here’s where it gets circular. When something breaks, the natural instinct is to go back to the tool that built it, describe the symptom, and apply the fix. Which works, in the sense that the immediate symptom goes away. So the behaviour gets reinforced.
But the AI is fixing what it can see right now. It has no memory of what it built three sessions ago. No context for why the code is structured the way it is. No way of knowing that the symptom you’re describing is actually a consequence of a decision it made four weeks earlier. So it patches. The patch works. The next problem is slightly harder to diagnose because there’s now a patch in the way. The session after adds another one.
The codebase becomes a record of every problem that ever got fixed without anyone understanding why it broke in the first place. The app still runs. But the gap between “it works” and “I know why it works” gets wider every single session. Developers call this spaghetti code. It’s not a disaster. It’s just brittle, and brittle is fine until the day you need to grow, or until the AI patches its way into a corner you can’t prompt your way out of.
Two founders. The same app.
The first had been running a client booking system for about four months. Built it in Cursor over a long weekend, iterated for a few weeks, launched to her first paying customers. It worked. Payments going through, customers booking, business running.
She came to us not because anything had broken, but because she’d started losing sleep over the fact that she didn’t know if it would break. Her developer had gone quiet. She had no idea what was actually running the app or where the data was sitting. She’d started avoiding showing it to potential enterprise customers because she couldn’t answer basic questions about security.
We did a review. The app itself was solid. The logic was sound, the UX was clean. But there were a few things that needed attention: credentials stored in a place they shouldn’t have been, no monitoring set up, and a third-party dependency with a known vulnerability. None of it was catastrophic. All of it was fixable in a week. She got a short document telling her exactly what the app was, what we’d fixed, and what to watch going forward. She’s on a maintenance retainer now. She sleeps fine.
The second had the same booking system, six months later. Same solid foundation, same happy customers. Then she wanted to add one feature: the ability for customers to reschedule rather than cancel and rebook. Should have been straightforward.
The booking logic had ended up scattered across four different files with no clear reason for the split. One file handled the calendar display but also, for reasons nobody could reconstruct, a chunk of the payment confirmation logic. Changing the reschedule flow meant touching all four files, and every change risked breaking something that was working. The developer scoped to build the feature gave an estimate three times what it should have been, because half the budget was just reading the existing code and figuring out what it actually did.
We didn’t rebuild it. We spent a focused week consolidating the booking logic, adding basic documentation, and writing tests around the parts that couldn’t move. After that, the reschedule feature took two days.
The app wasn’t broken. It was just built in a way that made it hard to change. That’s the thing AI tools don’t warn you about.
What “lasting” actually looks like
It doesn’t mean a full rebuild. It doesn’t mean handing your codebase to an agency and starting again with a six-month timeline and a $50K quote.
It means a few specific things, done properly:
Knowing what you’ve got. A plain-English read of your application. What’s solid, what’s fragile, what needs attention in the next 90 days and what can wait. Not a 40-slide deck. A short document you can actually act on.
Closing the obvious security gaps. The things AI-generated code tends to skip: exposed credentials, open endpoints, authentication edge cases, dependency vulnerabilities. Caught early, these are usually quick fixes. Caught after an incident, they’re a much bigger problem.
Monitoring before you need it. If your app goes down, you want to know before your users do. That means alerting set up properly, not just hoping the Heroku dashboard tells you something eventually.
A maintenance plan that fits what you’ve built. Not a retainer sized for a development team. Something appropriate for a founder who needs their app to keep running without thinking about it constantly. Regular dependency updates, security patches, someone to call when something breaks.
Who this is for
If you built something with Cursor, Lovable, Bolt, Bubble, or any combination of AI tools and raw prompting, and it’s now live and being used, this is for you.
Maybe you’ve already prompted your way out of a few problems. Something broke, you went back to Cursor or Lovable, described the issue, applied the fix, and it worked. Which is great. Except each time you do that, the feeling doesn’t get smaller. It gets bigger. Because now there’s another change you don’t fully understand sitting on top of the ones you didn’t fully understand before. And as we’ve seen, the AI fixing what it created, without memory, without context, without anyone in the room who understands the whole picture, is exactly how the problem compounds.
You don’t need to know how to explain your stack. You don’t need to have a technical co-founder ready to translate. You just need to want the thing you built to still be working in two years.
We work with founders and operators who built fast and now need someone to help them build confidence in what they’ve got. No judgment about how it was made. No pressure to rebuild it. Just clear, practical support from someone who’s been managing technical delivery for fifteen years and has seen what happens when this stuff is handled well and when it isn’t.
The AI tools aren’t going anywhere, and you shouldn’t stop using them. But they have no memory and no judgment, and over time that gap has to be filled by something. That’s what we do.
If that sounds like where you’re at, let’s have a conversation.
No obligation. No sales pitch. Just a straightforward conversation about what you’ve built and what, if anything, it actually needs.
MV Studio provides technical support and maintenance retainers for Rails, Shopify, and custom web applications. Based in Australia, working with founders and operators who need their apps to keep running.
Read more Decision Guides
App Maintenance, No-Code, Technical Support, Vibe Coding
Previous NextThe Friday Deploy
The plain English newsletter for people who run the business, not the tech stack. No jargon. Every Friday.