It really is good enough
Field notes from making a living without writing a line of code
I bill myself as a consultant now. What I actually am is a guy who copies error messages into Claude and pastes the answers back into production systems. Last month I invoiced $67,000 doing exactly this.
The weird part isn't that it works. The weird part is how boring it's become.
Background Noise
Twenty years touching computers for money. Started when PHP4 was hot shit. 10 years of freelance, hundreds of clients, then the corporate ladder — developer, lead, manager, CTO. Had a team of fifty at the peak. Fintech, crypto, hot shit all the way. By the end of a career built on shipping fast and good software, I was spending most of my time in meetings about why we weren't shipping, while secretly knowing it was because I was in meetings about why we weren't shipping. Money was good enough to keep the pretence for a while.
Left that world a year ago. Not dramatically. Just stopped showing up to the office. Figured I'd freelance for a bit, clear my head, maybe build something nobody wants. Done with boardroom politics and the illusion of busyness. Done with pretending it mattered. I moved to the sun.
Then AI happened. Not as a revelation but as a tool. Like discovering you can use a drill instead of a screwdriver. Except the drill also knows how to build the entire cabinet. A tool that felt enough like magic that learning to master it was exhilarating. I had fun shipping again
Real-life example
Three clients. All B2B. All past product-market fit but held together with prayer and if…else .
Client 1: Fintech that processes business loans. Eight years old. Still running the original Django monolith. Third outsourced dev team. The kind of codebase where every file has a comment from 2019 saying "TODO: fix this properly." Their AWS bill is $6k/month. Half of it is resources nobody remembers creating.
Client 2: Healthcare scheduling platform. HIPAA compliant in the sense that they check a box saying they're HIPAA compliant. PostgreSQL database with 400 tables because every feature got its own schema. The original developer named all foreign keys `thing_id` regardless of what they reference.
Client 3: Payments processor for Latin American markets. Integration with 17 different FIs, each with its own idea of what "ISO" means. Their reconciliation system is a cron job that emails when numbers don't match.
These aren't scrappy startups. They have real customers, real revenue, real regulators asking questions. They also have systems that would make you weep if you looked too close.
Monday Through Friday
Here's last week. Not cleaned up. Not dramatised. Just what actually happened.
Monday, 9:47 AM Client 1 messages. Their loan approval system is approving everything. Not most things. Everything. Even test applications for negative amounts.
I pull out the approval function. 400 lines of nested conditionals that hurt my eyes. Ask Claude what's wrong. It spots it immediately: someone changed the math in the credit score check. Probably a typo. No unit test. Been live since Thursday.
Fix takes five minutes. Explaining to their board why they approved $60k in loans to people with 200 credit scores will probably take a while longer, but not for me.
Monday, 2:15 PM While Client 1 panics, I'm building Client 2's new audit log system. They need to track every click for compliance. I describe what they want to Claude. It writes a middleware that logs everything. Too much everything: passwords, SSNs, the works. Tell Claude that's bad. It apologises and fixes it. Now it logs everything except sensitive data. Ship it.
Tuesday, 10:00 AM Client 3's reconciliation is off by $400k. Not missing. Just... somewhere. They think it's timezone-related because it's always timezone-related. I feed Claude their transaction logs. It's not timezones. It's that their Colombian bank returns amounts in centavos but their documentation says pesos, so they've been dividing by 100 twice since they added the currency.
The fix is one line. The cleanup takes two hours of running SQL that Claude writes while I watch TV.
Wednesday, 3:00 PM Bad day, not feeling it. Claude triages emails and surfaces only the most important stuff. We make runbooks for our next sessions.
Thursday, 8:00 AM Routine maintenance for Client 2. By which I mean I ask Claude to `Look into the db logs and the codebase for SQL performance issues`. It pretty much gets it straight away, focusing on not only on the obvious but also finding weird anomalies I wouldn’t have looked at. It fixes a bunch of n+1 queries, adds twelve indexes and rewrites a join that was accidentally cartesian. Page load drops from 8 seconds to 0.3 seconds.
They ask what I did. I could explain about query planners and index selection. Instead I say "optimisation" and they're happy.
Thursday, 3:00 PM Client 3 emergency. Bank API changed without notice. Everything's failing. They sent documentation. It's in Portuguese. I don't speak Portuguese. Claude does. Twenty minutes later we're processing payments again.
Friday, 10:00 AM Weekly check-in. I join, camera off, while making breakfast. Client 1 wants to know about scaling strategies. I ask Claude to write a scaling strategy while making coffee. It's probably better than anything I would have written. More thorough, too. I read and cherry pick the good parts into an actionable plan. Client loves it.
Friday, 2:00 PM Invoice time. I bill hourly but I'm not tracking hours. I bill based on value delivered. Fixed a loan approval bug that could have cost millions? That's $8k. Audit logging system? $12k. Found missing $400k? $5k.
Nobody questions it. They're used to paying consulting firms 5x more for PowerPoints. I give them results and peace of mind.
The Uncomfortable Parts
Sometimes I'll be on a call, sharing my screen, and realise I'm just reading Claude's response out loud like I thought of it. The client's nodding along, impressed by my insight. I'm literally reading from another tab.
There's a particular loneliness to this. I solve real problems for real money, but I don't actually solve them. I just broker solutions between clients and an AI. I'm a very well-paid middleman.
The code isn't the value. Never was, but now it's obvious.
Client 1 doesn't pay me to write Django. They pay me to know that their loan approval breaking means regulatory breaches, that the fix needs audit trails, that the board needs a story that doesn't involve incompetence.
Client 2 doesn't need clean code. They need someone who knows HIPAA means you can't log SSNs even accidentally, that auditors care more about documentation than implementation, that compliance is mostly about proving you tried.
Client 3 needs someone who understands that banking is held together with Excel and email, that every country has different rules, that the technical solution is usually easier than the political one.
Claude can write good enough code. It can't sit in a meeting and know when the client is lying to themselves about what they want. It can't tell when a technical requirement is actually a political problem. It can't navigate the human mess that surrounds every system.
The Trajectory
I'm billing between $60-80k per month across multiple clients. My costs are:
- Claude Max: $200
- ChatGPT Pro: $200 (backup)
- AWS (personal): ~$1000
- Rent/bills/food: ~$2000
The math is absurd. One client pays me more than my entire cost structure. But what's their alternative?
They could hire a team. They've tried. Teams need management, coordination, meetings. Teams build what they're told, not what's needed. Teams have opinions and egos and sprint planning.
Or they get me. No meetings unless necessary. No opinions unless asked. Solutions that work today, not architectures that might work someday.
Sometimes I think this isn't sustainable. Not because AI will replace me — it already has. But because eventually clients will realise they can use AI directly.
Except they won't. Same reason I don't fix my car even though YouTube exists. Same reason they hired consultants before AI existed. They need someone to blame who isn't them. They need someone who knows what to ask. They need the confidence that comes from someone else taking responsibility.
The real trajectory is weirder: I'm becoming less technical and more... whatever this is. Therapist for broken systems. Translator between business needs and AI capabilities. Professional responsibility-taker.
What it actually feels like
Lonely. Productive. Boring. Profitable.
I ship more in a week than I used to in a quarter. But there's no satisfaction in it. No clever solution I worked out. No architecture I'm proud of. Just prompts answered and code that works.
Some days I feel like a fraud. Other days I check my bank balance and feel like everyone else is trying too hard.
Mostly, I feel like I'm living in a gap. The space between AI being good enough to replace most developers and everyone realising it. It's a profitable gap. But it's still a gap.
The Truth
My clients' systems are held together with the digital equivalent of duct tape and prayers. Every codebase is a horror story. Every architecture is a compromise that metastasised. Every deployment is a risk.
Claude makes it faster, not better. Instead of taking six months to build something that barely works, we can now build it in six days.
Is it good enough? The systems process millions without falling over. The audits pass. The customers don't complain more than usual.
That's not a ringing endorsement. But it's the truth. Most software is garbage. AI-generated garbage isn't notably worse. It's just faster to produce and easier to replace.
Most software is garbage. AI-generated garbage isn’t notably worse.
The real question is whether human code was ever good in the first place.
Based on what I've seen in twenty years? We've been shipping "good enough" and calling it excellence all along.
At least now I can do it in the sun, in my underwear, billing Fortune 500 rates while an AI does the actual work.
That's the consultancy business in 2025. It's absurd. It works. I'm not sure what that says about any of us.

