Tim Mahoney Tim Mahoney

Rise of the Cowboy Coder

The nerds are mad about vibe code, but they should build guardrails instead of gates. Help us build good software, not just write code.

 
 
 

As a software engineer, I've always been more of a cowboy. Shooting from the hip, relying on intuition and feel. I would get annoyed when people got too theoretical, too academic, too…nerdy…

Nothing against nerds. I am a nerd. There's nothing quite like designing a beautiful software architecture where everything fits together perfectly. But sometimes we let our nerdiness get the best of us and forget that we're making something for someone else.

The person using our software isn't looking at the code.

They don't care about our precious architecture or our impeccably implemented design patterns. They don't care whether we use spaces or tabs, or that we strictly adhered to the purest ideals of functional programming. They just want our app to do what it's supposed to do.

The code doesn’t matter.

With the onslaught of AI coding assistants, the importance of the code itself diminishes every day. We're going to see a lot more cowboy coders in the coming years, but now they’re vibe coding.

For a nerd, the initial reaction to this is disgust. We've spent our whole lives perfecting our craft, and we love it. We have fun doing it. We don't want to see it all thrown away in favor of some kindergartener telling their coding assistant to create a fart app.

It's true that these assistants can produce some absolutely terrible code, and this bothers the nerds. The frustration boils even hotter when faced with an endless hype cycle that proclaims this technology as the be-all and end-all. As a result, the nerds dig in their heels.

If you read the commentary about this subject, you can see a grand battle between the nerds and the cowboys. Every time a cowboy hypes up the fact that they never look at code anymore, a nerd comes in to lambast them. This is wrong.

Instead, we should try to make it better for the cowboys. Make it safer and easier for them to shoot from the hip.

Fix It, Then Hide It

There are thousands of problems wrapped up in this transition, but two stand out to me.

First, we need to fix the output of the coding assistants. Turn today’s intern-level code slop machine into something closer to a reliable senior engineer.

Second, we need to move up a level of abstraction to hide the code completely. That way, we can focus on building software instead of writing code.

Level Up the Slop Machine

Right now, you can treat the coding assistants like an intern. An eager code monkey that can search the web for documentation and churn out code slop at light speed.

If you're an experienced engineer, you can guide it in the right direction. You can review all the code and make sure it's doing the right thing. But our new flock of cowboy coders can't do this. They're at the mercy of the slop.

If we improve the coding assistants so that they reliably write good code, everyone benefits. Experienced engineers become more productive, and non-engineers produce more sustainable code. Nobody has to babysit a machine that hallucinates dependencies and reinvents the wheel every prompt.

Thankfully, the creators of these assistants are already working on this, and the pace of improvement is staggering. The gap between what these tools could do six months ago and what they can do today is enormous. I won’t pretend to have any insight on how to improve the coding models, but I do know it's being solved by some of the smartest people in the world.

But this leaves me with a question. If we're moving to a world where AI generates our code, should the code even look the same? Maybe it would be easier for an AI to work with something different. Maybe it’s a completely new paradigm, or maybe it’s just something a bit more high level. More like building blocks with well-known, well-tested patterns.

I don't know exactly what AI-native frameworks will look like, but it's worth thinking about whether there's something that coding assistants can use to more reliably create what we need.

And that brings us to the bigger idea, moving up to a higher level of abstraction.

Compile My Vibe

Coding assistants have gone mainstream, and we're going to see many more non-technical people using them. These people are not going to go out and get a computer science degree, and they might never want to look at code. What they want is to build software at a new level of abstraction.

Think about assembly language. If you're a software engineer, you likely don't know how to write it, and you don't have to. You use a higher-level language that compiles down to it. You don't care what the assembly looks like in your compiled code because you trust that it does the job.

There are similarities here to vibe coding. Rather than typing out a higher-level programming language, you use natural language to describe your program. If you squint, you might say the assistant "compiles" that into an actual program.

Nerds hate this analogy. I can already feel them furiously typing the hate mail.

I admit it's not exactly the same. A traditional compiler creates deterministic output while a coding assistant is very non-deterministic, but the core pattern holds. Both translate a higher-level language into a lower-level one, and both replace the previous way of doing things by putting a more approachable abstraction on top.

Similar to how I don't want to learn assembly language, many of these people don't want to learn to code. And maybe they shouldn't have to.

Don't Write Code, Build Software

Right now, coding assistants are just automated code monkeys, but building software is more than writing code. It's an entire operation: testing, deployment, monitoring, project management, and everything in between.

If you're a nerd building a web app, you already know you need something like AWS to deploy it. You already know you want a repository on GitHub. You already know you might need a bug tracker. But if you've never touched code in your life, you don't know any of this. You don't even know what you don't know.

Coding assistants help you write code and then abandon you to figure out everything else. What if they didn’t?

What if, in a single prompt, you could create a real application: deployed, tested, monitored, and ready to go? Not a demo. Not a toy. Something that actually runs in the world. Something that does the right thing under the hood.

Hide the Foot Gun

The best way to ensure that people are doing the right thing is to make it impossible to do the wrong thing. Make it impossible to shoot yourself in the foot.

If I'm new, I just want easy mode. I ask it to build a web app, and it does everything I need. It registers a domain, deploys to AWS, monitors for problems, notifies me if something goes wrong, and fixes it automatically.

I don't want to navigate the insanity of the AWS console. I don't want to worry about the problems that come with a large-scale server deployment. Someone much smarter than me already knows how all this works, and they should make sure it just works without me knowing anything.

If I already know what I'm doing, I can look under the hood, but I shouldn't have to. When you let a human handle all of this manually, there's too much room for error. Rather than teaching best practices (or, even worse, scolding people for not following them), we should make the right thing happen by default.

The state of the art changes constantly. New tools emerge, new best practices take hold. I shouldn't have to track any of that. The assistants should recognize when something needs to change and just do it.

Hide the Nerd Shit

If we're going to enable a larger portion of the population to create software, we need to hide all the nerdy shit.

If you have to use a command line, it's a failure. Sure, these terminal UIs are cute. Phenomenal, even. I understand they make it easy to integrate with the developer ecosystem that already lives on the command line. But we can do better.

I shouldn't have to know that there are fifteen JavaScript frameworks to choose from just to add a search bar to my app. I shouldn't have to have an opinion about React versus Vue. Just pick one and build the thing. If I have a problem with how it works, I’ll tell you.

And when something breaks, I shouldn't be staring at a wall of red text that starts with “Uncaught TypeError: Cannot read properties of undefined” and ends with forty lines of gibberish pointing to files I've never heard of. That's not an error message, that's a cry for help from the machine. Tell me what went wrong. Tell me how to fix it. Better yet, just fix it.

Anything that requires the knowledge of a software engineer? Hide it. Don't make me know anything. Don't even think about showing me the word “npm". Just do it for me, please.

The Nerds Have a Point

I can hear the nerds already, “This is how you get security breaches. This is how you get apps that fall over at scale. This is how you get a generation of people who build things they don't understand." They're not wrong.

AI-generated code can be riddled with vulnerabilities that a vibe coder would never catch. It hallucinates dependencies, introduces subtle bugs, and builds architectures that work fine for a demo but collapse under real traffic. There's a legitimate concern that if nobody understands the code anymore, nobody can fix it when things go sideways.

But here’s the thing. This is an argument for better tools, not against vibe coding.

We don't require drivers to understand internal combustion engines. We don't require homeowners to understand electrical wiring. Instead, we build safety into the system itself. The answer to "people will hurt themselves" has never been "make everyone an expert." It's always been "make the dangerous parts safer."

The same logic applies here. If AI-generated code has security problems, the answer isn't to demand that every vibe coder learn about SQL injection. The answer is to build assistants that don't produce vulnerable code in the first place. If the architecture falls apart at scale, the answer isn't a lecture on distributed systems. It's an assistant that knows how to build for scale.

And for the nerds who genuinely understand the code? You're more valuable than ever. Someone still needs to build the guardrails. Someone needs to audit the abstractions, design the safety nets, and make sure the whole machine doesn't fly apart. The vibe coders need you. They just don't need you standing at the gate telling them they can't ride.

Holster the Hate, Help the Herd

So to all the nerds, let's stop fighting the cowboys. I know you hate when they swing their guns around and shoot at random things, but they don't mean any harm. They just want to build something.

Let’s help them. Give them a more accurate gun. Give them a horse that steers itself. Build the guardrails so they can ride fast without riding off a cliff. And for the stuff that's genuinely dangerous? Don't hand them the reins at all. Just handle it.

The cowboys aren't going away. The question is whether we help them build something real or sit on the sidelines and complain about their code.

I know which one sounds more fun.

Read More
Tim Mahoney Tim Mahoney

Am I An Asshole App

What if we had an app that provided self-awareness as a service?

 
 
 

Lately, I’ve been full of ideas but empty on follow-through. To break that cycle, I’m going to write one down.

I present to you an app called “Am I An Asshole?”

This wouldn’t be the final name, but the concept stands. This app answers one question: How am I acting right now? It analyzes your communication to tell you if you’re being rude, condescending, inconsiderate, or otherwise an asshole.

Some people clearly need this more than others, but we all have our moments. Whether you're talking with family, navigating a meeting with coworkers, or chatting with a stranger, there’s always an opportunity to cause unintended offense.

The value lies in real-time feedback. Reflection on past events can be useful, but we often forget how we felt at the time. Catching a mistake as it happens allows for immediate course correction and a better understanding of the triggers that lead to poor behavior. By surfacing these signals early, the app gives you a chance to pause, recalibrate, and respond more thoughtfully before a conversation spirals.

Beyond simple “asshole detection,” the engine analyzes a spectrum of behaviors such as defensiveness, snark, sarcasm, or aggression. Therapists could integrate this tool into behavioral programs such as anger management, notifying users the moment their speech patterns shift toward hostility.

Conversely, the app provides positive reinforcement when it detects supportive, empathetic, or constructive communication. Over time, this feedback loop could help users develop better conversational habits.

Think of it as self-awareness as a service. A digital angel on your shoulder.

Design

Ideally, this app integrates seamlessly into your daily life, helping without getting in your way. It should alert you to behavioral shifts with enough subtlety that you can adjust your tone without breaking the flow of a conversation.

Inputs

The app works by processing environmental inputs like audio and text through an emotional analysis engine. To be effective, the system would need to monitor all your speech and digital communications.

If you think this sounds like a privacy nightmare, you're absolutely right. This level of data capture represents a surveillance capability that would be the envy of any authoritarian regime. I’ll address these concerns in the section below on challenges.

Real-Time Notifications

When your behavior crosses a specific threshold, the app triggers a notification.

This notification could come in a few different forms. If you’re having a conversation in person, the ideal form factor might be smart glasses or an augmented reality device. This would allow for the most seamless usage and discreet feedback. A subtle hint in your peripheral vision would warn you that your tone is shifting. You could also get a haptic notification on a smartwatch, but it would distract from the conversation.

 
 

If you’re sending a message to someone, the app could notify you that you’re behaving in an undesirable manner. Similarly, if you’re on a video call for work, the app would notify you that you aren’t listening properly or that you just dismissed your coworker’s idea.

 
 

Heads Up Display for Continuous Monitoring

Real-time notifications can be useful, but you might also want a more detailed view of your current emotional state. The app can also show you a real-time visualization of your current disposition and the intensity of specific traits.

Analyzing Others' Emotional States

Another feature worth exploring is the analysis of other people in a conversation. If you’re talking with someone who is suddenly agitated, angry, or annoyed, you can adjust your approach or offer support.

Historic Behavioral Analytics and Patterns

Over time, the app can aggregate data to identify long-term patterns. You might be more irritable on Monday mornings or more relaxed when working from a specific location. Maybe you’re more patient or empathetic when speaking with a particular person. The app can display your history and highlight interesting patterns over time, helping you understand the triggers and contexts that affect your behavior.

Configuration

You should be able to configure the app to assist you only in specific contexts. For example, you can enable analysis in particular apps like Slack, text messaging, or Zoom. You could also enable or disable the analysis of other people in order to respect their privacy.

Ethical & Technical Challenges

The path to “self-awareness as a service” is paved with significant ethical and technical hurdles. To move from concept to reality, the system must address the friction between utility and risk.

Privacy

The app’s effectiveness depends on total environmental awareness, which creates an inherent privacy problem. To function as a true real-time mirror, the engine requires access to every word spoken and every message typed. Even with a local-first architecture where data never leaves the device, the sheer value of the information makes it a high-impact target for security exploits. Privacy and security would not just be features, they would be fundamental prerequisites for the product’s existence.

Accuracy

Human interaction is governed by nuance, subtext, and culture. Identifying the thin line between harmful aggression and playful sarcasm remains a significant challenge. False positives could undermine trust in the product, especially in emotionally sensitive moments. 

Thankfully, the app could leverage established tools such as Hume AI and openSMILE to build on a foundation of existing research rather than reinvent the wheel.

Authenticity Suppression

If you're constantly monitoring and adjusting your behavior based on algorithmic feedback, are you becoming a better person? Or just a better performer? Genuine emotional growth typically involves understanding why you feel and react certain ways, not just suppressing surface-level expressions.

An over-reliance on external feedback could short-circuit the deeper introspective work that leads to lasting change. Users might learn to game the algorithm rather than genuinely improve their emotional intelligence.

There's also the question of what it does to human interaction when we know we're being constantly evaluated. Some of our most important conversations involve expressing difficult emotions. A tool that's always nudging you toward “pleasant” behavior might suppress legitimate emotional expression and authentic communication.

The goal should be helping people communicate better, not just nicer. Sometimes being direct, even at the risk of seeming like an asshole, is the most ethical choice.

The Self-Awareness Catch-22

The people who need this most may be the least likely to admit they have a problem. Marketing an app as “Am I An Asshole?” appeals to the self-deprecating and the self-improving, but the true assholes may require an external incentive. If you were to truly develop this app, you would have to find a more marketable story.

Form Factor

Continuous behavioral analysis requires an uninterrupted stream of communication. The success of this product is linked to the mass adoption of ambient hardware such as smart glasses or AI wearables. However, an initial desktop-first deployment could target professional ecosystems like Slack, Zoom, and Teams.

Operational Costs

Running the analysis locally may put a strain on device batteries, and running in the cloud may be prohibitively costly at scale. Cost management would be critical for anyone seriously exploring the idea.

Conclusion

You may think this idea is absurd, invasive, or even dystopian. That reaction is completely understandable. This is essentially a surveillance state masquerading as a consumer application.

However, our society suffers from rampant miscommunication. We often hurt others without intending to, simply because we cannot see ourselves clearly in the heat of the moment. What if better self-awareness tools could genuinely reduce everyday friction, resentment, and miscommunication? Even marginal improvements at scale could meaningfully improve social interactions.

Call it crazy, but think about all the assholes in your life. Don't you wish they had this app?

Read More
Tim Mahoney Tim Mahoney

Spectator

Happy about the good things. Sad about the bad. Watching it go by.

 
 

Happy about the good things
Sad about the bad
Watching it go by

Desire to participate
Aimless in the options
Paralyzed

No urgency
Just waiting
Failing inspiration

Spectating

Read More
Tim Mahoney Tim Mahoney

Freedom for Demons

I have some bad news for you.
You’re no longer allowed to be free.

 
 

I have some bad news for you.
You’re no longer allowed to be free.
Your freedom causes me pain,
So it has to go.

And it’s not just you.
It’s all the people like you.
You’re all alike.
You’re merely a minion in a sea of demons.

I have plenty of examples.
You know what I’m talking about.
We all know what you are.
You’re one of them.

They’re the worst.
Honestly, I’ve never met a good one.
Give them sunshine when they need rain.
Give them snow when they’re cold.

And I know what you’re going to do.
You’re just going to yell at me,
Repeating all those things you always say.
All those lies you always tell.

You’re a joke.
A parody of yourself.

Honestly, we’ll probably go to war, you and I.
Don’t blame me. You started it.
You’ll never understand.
I guess I just have to beat it into you.

Read More
Tim Mahoney Tim Mahoney

Emotional Morning

Sometimes I listen to my own music.
That might sound weird, but it also makes sense.
I made the music because I like it (or at least parts of it).
Sometimes it even moves me.

 
 

Sometimes I listen to my own music.
That might sound weird, but it also makes sense.
I made the music because I like it (or at least parts of it).
Sometimes it even moves me.

It’s not perfect, and neither is anything I make.
But it’s an expression of how I was feeling at the time,
Executed to the best of my ability.
Or maybe not actually my best because I’m lazy.

This morning, I listened to a song called “Strange Interpretation.”

I wrote this song in the depths of the pandemic.
On my bed in a London flat with barely any furniture,
Awake in the dark with my phone,
Thinking about the state of the world,
Thinking about the state of myself,
My eyes filled with a tear or two.

I wrote it all within a few minutes.
The inspiration was there, and I took it.
I don’t always do that, but it works out better that way.
Otherwise, if I come back to the idea later, it’s gone.
If you don’t use your inspiration, they’ll give it to your rival.

I love the lyrics in this song.
I didn’t try to get too cute,
I just wrote whatever came to mind.
They’re a bit cheesy, but they’re real.

Years later, I accidentally recorded this song in one take.
I was up early and inspired to record something.
I just wanted to get a little scratch track down.
I honestly didn’t even remember the words.

Standing at my desk in my underwear in the dark,
Headphones on, guitar around my neck,
I opened up the note with the lyrics and started recording.
I had never practiced, but it just came out.

If you listen, you’ll hear that I’m struggling to sing it.
Since I forgot the lyrics, I was surprised by a few.
I was honestly laughing and crying at the same time.
A testament to how life is both funny and sad.
It might sound fake, but it’s not.

Quite an emotional morning.

Anyway, here are the lyrics:

I got a strange interpretation
Of life out on my own
And I’m a slave to hibernation
And I am not alone

Well here’s one for the afterlife
And one for before
Don’t forget to bring the light
When you enter the door

Cause people don’t really know what to do
They just make believe
And if you can make them smile a few
They just might not leave

I got a strange interpretation
Of life out on my own
And I’m a slave to hibernation
And I am not alone

Well there’s plenty of things to do
So if you think it’s boring
Some one is probably thinking of you
Even if they’re snoring

Sometimes I cry at night
Some times at dawn
But this here is a beautiful life
And it’s not the only one

I got a strange interpretation
Of life out on my own
And I’m a slave to hibernation
And I am not alone

“Strange Interpretation” by Grand Central Dispatch

Spotify
Apple Music
YouTube

Read More
Tim Mahoney Tim Mahoney

Kvetch Cast

Recorded a podcast about complaining.

Search for “Kvetch” on Spotify, Apple, or wherever you listen.

Anyone wanna kvetch with me?

Recorded a podcast about complaining.

A few more topics recorded, coming soon.

Anyone wanna kvetch with me?

Search for “Kvetch” on Spotify, Apple, or wherever you listen.

kvetchcast.com

Read More
Life, Career Tim Mahoney Life, Career Tim Mahoney

Jolly Fund

I was about to graduate.
About to start a job building an app.
One of my professors asked,
“Gonna spend your life making buttons?”

 
 

I was about to graduate.
About to start a job building an app.
One of my professors asked,
“Gonna spend your life making buttons?”

Now that I’m free from the button factory,
What should I do in this world?

What am I interested in?
What am I good at?
What can I do to help?

Looking through old notebooks.
Reading things I wrote while drunk.
Essays about how money is silly.
Always in cursive for fun.

I wrote very confidently,
All people should get the basics.
Just give everybody money.
We should all be able to afford life.

Too much imbalance in this world.

We talk about universal basic income,
But people just argue about it.
Can we do something about it?
Should we?

One of the many problems,
Where’s the money?
Some people say taxes,
But that’s a steep hill.

What if we just donate it?

Tax-deductible donations.
Split amongst anyone who signs up.

Free money.
Provided by those who care.
If we’re generous, we benefit.

Can we just do that?
Is that legal?
Can we start a Jolly Fund?

Read More
AI, Coding, Apps Tim Mahoney AI, Coding, Apps Tim Mahoney

AI Do Everything

AI is a paradigm shift, but at the moment it can’t do much.
Can we teach it to do more?
Here’s a little peak at a prototype.

 
 

Even the best apps are buggy.
They crash. They fail. They lose your data.
If they do too much, they’re confusing.
If they do too little, they’re useless.

Sometimes an app is almost perfect.
It almost does what you want, but not exactly.
So you move on.
You try another app.

And yet we keep making new apps.
Every bank has an app.
Every streaming service. Every restaurant.
Even your toaster has an app.

All these apps do the same thing.
They just use different colors.

They show you things.
They save things for later.
They let you press buttons.
They do stuff for you.

But maybe we don’t need all these apps.
Why not ask AI?

AI can show you things.
AI can save things for later.
AI can let you press buttons.
AI can do things for you.

For example, want to pay a friend?
Ask AI.

 
 

Want to be a better friend?
Ask AI.

 
 

But that’s a bit tedious.
You can’t be bothered to ask AI every time.
What if you just want a button?
Ask AI.

 
 

But what if you forget to press the button?
What if you’re too lazy?
You guessed it.
Ask AI.

 
 

But how can you trust the AI?
What if it doesn’t understand?
What if it’s not consistent?
What if you need more control?

Want to see the magic behind the curtain?
The AI isn’t special.
It’s just coding on your behalf.
What if you could code too?

 
 

What if you could access the world?

 
 

What would you do?

Read More
Sadness, Joy, Social Media Tim Mahoney Sadness, Joy, Social Media Tim Mahoney

Joy Deficiency

Why can’t you just be more jolly?
It’s only the flip of a switch.
Turn off the view of the sadness inside,
And give us a smile, you lil’ bitch.

 
A prescription bottle of "joy"
 

Why can’t you just be more jolly?
It’s only the flip of a switch.
Turn off the view of the sadness inside,
And give us a smile, you lil’ bitch.

You tell me you’re all about parties and fun,
Or that’s what your followers say.
But they only see a percent of your life,
And the rest is all boring and gray.

Not that my life is anything better,
You’re right, I’m a hypocrite.
But why do you need to prove that you’re happy
To people who don’t give a shit?

What do you want? Fame? Respect?
Sex, drugs, money, and power?
A like and a half won’t give any of that,
So just drain all those thoughts in the shower.

The singers, the leaders, the names in the stars,
They all live a meaningless life.
Just because they got a jawline and abs
Don’t mean you should go under the knife.

They look very happy, and maybe they are,
But that doesn’t mean less for you.
Their happiness doesn’t subtract from your own.
They can be red, and you blue.

You’re wonderfully perfect, you know that you are.
To change anything would be weird.
Just be yourself, the one that you love,
And ignore those who won’t give a cheer.

Life is hard enough for us now
Without you making a mess.
Just calm on down, erase that frown,
And let jolly take care of the rest.

After all, maybe you’ll never be rich,
You may never have muscles or cash.
And if that’s true, you can still be jolly,
Just don’t be a pain in the ass.

Read More
Apple, Career, Code Tim Mahoney Apple, Career, Code Tim Mahoney

Farewell Ode to Apple

Ten years ago, I snuck in the back door at Apple.

 
 

Ten years ago, I snuck in the back door at Apple.
New grad on a product about to be cancelled.
My team was repurposed to work on Notes.
I was a lucky kid.

Notes manager asks, “Who wants to build sync?”
Having never synced a byte in my life, I raised my hand.
Whether due to trust or desperation, I got the job.
A billion sync bugs later, I still had it.

Eventually I managed the Notes team.
I wore button ups then, but they’re a pain to wash.
Things were going well, but my bucket list screamed at me.
Apparently, I had to live in London.

Joined the CloudKit team. Moved across the pond.
Five years and a pandemic later, a pet project became API.
But now, the bucket list screams again.
Apparently, I have to quit.

Not going to a competitor. No problems. No spicy drama.
I just want to experiment with pure freedom.
Not sure exactly what I’ll do, but I have some ideas.
No kids. No responsibilities. Now is the time to be dumb.

I’m sad to leave.
Sad to miss everyone.
Sad for any time I made you mad.
Sad for all the crappy code I leave behind.

But I’m happy to have been here.
Happy for all the opportunities.
Happy for the laughs.
Happy for all the funky log lines and comments.

Thank you, Apple, for helping me make a dent.
My last day will be Friday, December 15th.
I need to finish the liquor on my desk before then.
Come by if you’d like to help.

Career Radar Stats

Bugs Filed: 8,135
Bugs CC’d: 26,175
Bugs Modified: ~40,000
Bugs Resolved (Fixed): 2,488
Bugs “Resolved” (Other): 4,620*

*Likely thousands more, but there’s a bug with how Radar tracks resolutions. Don’t worry, I filed a Radar about it.

Read More
Tim Mahoney Tim Mahoney

init

🍌🦥🦦

🍌🦥🦦

Don’t click the avocado.

Read More