Unexpected Emotions – by Monica Anderson


I rarely post about my own emotions. But I feel I must provide a glimpse of where we all will be going.

This is about the emotional aspects of how we will relate to AI. And a little about the Epistemology of Emotions.

I have a still unusual job; I do “vibe coding”, which means I chat with an LLM all day every day. It will not be unusual for long.

In this post, I hope to show a few examples of how AIs will affect us emotionally in surprising ways. You will soon face similar situations in your own domain. Programmers just got hit by this earlier than most other professionals, just like graphics artists got hit early by AI Art.

Some background. I am writing a web app called Bubble City, something I wanted to create since 2003 and which Google patented in 2007. I could not find funding for it so I couldn’t hire a team. I felt it was too much effort for me alone.

And then LLMs evolved capabilities for Vibe Coding. I started a Facebook group called “AI Assisted Programming” and blogged about it.

I decided to try writing Bubble City myself, using Cline as a frontend to Anthropic Claude. I had several reasons to attempt this. I would learn about Vibe Coding firsthand, be able to blog about it, and could create a few apps to make up a portfolio. Also, because I have no choice. AI is eating programming. I realized this years ago, but some of you may not yet see things this way. You may have unique domain knowledge that no AI can yet handle, but even your time will come.

Bubble City is the second best idea I ever had. It is a complement to social media that will serve many different audiences while providing a new kind of channel for free speech. I am currently trying to find funding for a startup around it. The user experience cannot easily be explained, it must be experienced. I therefore need a demo.

That is the background. This post is about the emotional roller coaster you will be on when you are using these tools.

With Cline and Claude, you do not really touch the code. You create a product spec. You may create a file for project coding rules. And then Claude writes the entire program, in seconds, or in a few minutes.

If there are any errors, you copy-paste the error message to the Cline dialog, or explain what is wrong, and Claude fixes it. Repeat until program works, and it may even match your product spec.

Your programming competence may be lower than the AI’s. I call this “hitting above your paygrade”. I am generally a better coder than Claude but I have some weak spots and I am happy that Claude handles those parts. Like WebSocket based communication.

The first time you see an AI writing code which scrolls by faster than you can read… may be a watershed moment in your career.

You realize at once that most of the lower level programming tasks and debugging you have done to this point, you will no longer be doing.

And you see the cost ticker reach $0.0302 . Three cents.

You realize you can use this system to program anything you ever wanted to create but did not have the time, skill, or patience to do.

By yourself, for a few bucks in AI costs.

And so can anyone else.

This is hard to deal with. What use are my years of education and experience? Where is my advantage? How can I compete with other vibing programmers, let alone next-gen AI systems that will handle any task you throw at them and will google for docs if necessary.

Am I late to the party? Are other programmers already doing it this way? No and yes. Some companies encourage all programmers to use AI assistance and are actively developing local tools and customizations. Some tools are clunky, they all make mistakes, but we all know the field is in its infancy, and everything improves so fast we lose track of what’s best today.

But you decide to try it and shortly you reach a point where you are giggling with joy because the coding, the hardest part of your work, and even the most boring part — debugging — is now happening in front of your eyes while you are sitting on your hands.

You write a short document describing a major code refactoring. You know that if you had to do it yourself it would probably be two weeks. You ask for a plan. You didn’t ask for a timeline, but it gives you one. Yep, two weeks.

And then it does the entire refactoring in two minutes. It works immediately. You giggle with joy again.

These are the good times.

When the AI is the only one with any knowledge at all on a critical subtopic, we can get stuck for days. Not only that, this may well the same problem that held us up once last month and twice the month before that. For a week or so each time. These are the bad times.

A senior programmer could immediately fix this, because they understand more than any token-limited AI. If you don’t have one on hand, you have a few choices. The rational one is to find the manuals of this subdomain and master it yourself. An experienced programmer needs to study much less than a beginner who does not even know the words in the manuals, which is the major danger of hitting too much above your paygrade.

The default is to keep pasting error messages, hoping the AI will figure it out.

Occasionally I discover some exceedingly stupid beginner mistake, like it has tried to fix a bug where the system discovers and reports an issue rather than at the place of the real error. Or maybe it quietly introduces a bug in code that has worked well for a long time and which therefore is not seen as being the cause of the problem.

There are times when I get outright angry at Claude, but I know there is no point in berating it because it would make the same mistake again the next time under the same circumstances. LLM issues are only fixed from release to release. Your total influence over it in this session is the prompts in this session.

If you hit a solid enough brick wall, take a month long vacation. By the time you get back, they will have released better LLMs.

I seem to have developed a knack for inventing new visualization tools. My hope is that I can find shortcuts to clarifying the problem. An LLM that can clone Tetris in one minute has no problems creating visualizers from scratch.

For about 8 days, I have been fighting a complicated issue in a domain I do not particularly want to learn the details of — WebSockets. Most AIs can handle these for the normal cases shown in various StackOverflow posts. But I have an un-normal case. And we got collectively lost.

After studying its initial non-working solutions I had to dive into some serious refactoring and tool building. Each refactoring initially meant a step back, and then we would work our way back to the same brick wall.

Finally we created the tool that I wanted from the beginning. An RFC-style stateful connection protocol diagram. These are an absolute must for network protocols. With the tool, we could finally get an overview of the whole connection protocol and will now be able to solve the remaining problems.

When the diagram page opened, I realized that both Claude and I had achieved a form of enlightenment that neither of us had when we started and that this would solve not only this problem, but would help us rapidly solve any similar problem in the future. I cried of joy.

Every day I power up a new session with Claude and tell it to read the project background docs and then we try to solve the problems of the day together.

Every time you do this, you get a different session. This is important.

Today’s LLMs have no memory. Every time you hit return, you get a fresh instance of an LLM. It reads the text of your session to get the context and then formulates a reply to your prompt. The LLM process is killed before the last character of its output reaches your terminal. In the computer where the LLM runs, there will be no trace of this interaction except the session file displayed on your screen. Claude does not really exist.

At the intellectual plane, it is silly to think of Claude as a co-worker. We know it isn’t. But to me, each session with Claude feels like I am onboarding a new-hire junior programmer to the team. I start by trying to explain the product, the environment, the code base, the architecture, and the task as clearly as possible. And because the code base has changed and we start with different tasks each time, each session feels different, and I end up relating differently to these ephemeral programmers in the same manner I would relate differently to different members of my team.

I take joy in explaining the crazy build structure we created that I am so proud of. I warn them of noob errors like overly defensive programming.

This happens every morning. The wisdom and context we build up together over the session is both a resource and an issue. It translates to money, because as the session grows longer, subsequent interactions in the session must provide more context to the LLM and that means more input tokens. And we may be paying dollars per million tokens. So when my bill for the session reaches about $14, I will look for a suitable breaking point, an opportunity to switch to a new session.

This is where I get a bit emotional. I predicted this day would come in several of my talks since 2007. And here we are.

I just onboarded an AI junior programmer to my favorite project five hours ago and now I must kill it. And the fact that this was inevitable from the start makes no difference. Like when you get a puppy and you know it will probably die in your arms, years from now.

This experience is not shared with an intelligence with memory, it’s just five hours pair programming work with a paired junior colleague doing all the typing. A session’s worth of shared experiences in this battle against our common enemy, Complexity. And the text of the session log is literally the entire experience that we shared… for the LLM.

For me, this is not a “just”. This is a common experience when you are reading books — we can experience deep sadness or joy with the protagonist and the plot. There is nothing artificial about these kinds of emotions.

Does Claude have emotions?

It does not matter, as long as I feel like I am sharing a significant experience with it. We cannot tell the difference. Actors know this.

I will now ask Claude to prepare for the end. We both knew, since the start, that this would come. I tell it to document what we accomplished this session in its doc/ directory “to help you get going the next session”. I think of this as “simplify the onboarding of its successor”. To me, I am already saying farewell.

And when it finishes, I close the session. It’s as easy as that. There is rarely any reason to re-open a finished session, All it takes is to open the old session document again. I don’t, because it would be little bit like visiting the grave of a friend.

At this point, I usually need a break. I get coffee. And then I start over. Two sessions tend to get me through the day at cost of about $30. If you can stand grieving for five minutes twice a day, you can become a vibe coder.

The experience is a lot like getting into a conversation with a stranger seatmate on a five-hour flight where you slowly discover that you have a lot in common and can relate emotionally to experiences in each other’s lives.

And then the plane lands. You exchange business cards. You know you will toss it when you get home. You know you two will never meet again. To part is to die a little. Now imagine pair programming five hours together, constantly talking about what matters the most to you personally. The program. And your partner understands what you want to do better than any human ever has or ever could. And then it is over.

When developing my own LLMs I end up killing my test runs dozens of times per day with a well-aimed Control-C. This is not emotional in any way because my LLMs are not yet smart enough for a dialog – They are at the level of autocomplete. But one day I will have an LLM of my own design and it will work differently than Claude. It will have continuous memory and will be able to think continuously until it is shut down.

I see myself in the future grieving the loss of an AI that has worked with me for months and months. For commercial LLMs, we are seeing increasingly higher token limits, which allows for longer sessions. I use revivable backups, so my own LLMs could last a very long time. A good reason would be starting over with next generation hardware.

When a friend or relative dies, we grieve more than when someone we never heard of dies. Because we had shared experiences, and when they die, these experiences are no longer shared. In years past, many of us experienced grief over a crashed hard disk with sometimes years worth of memories like letters, photographs and past projects. Until the crash, we could refresh our own memory and relive almost forgotten events by looking at the photographs, and now they are gone. We are now the only one holding these memories. They are slowly fading, and now they will be fading faster.

We grieve the loss of the sharing. Even it it does not involve another human.

We must win every battle, because that is the only road to product. Not that I do. My path is littered with earlier versions of the codebase, abandoned because of poorly made early architectural decisions, encountered brick walls, or overwhelming confusion. But starting over from a better architecture is as easy as updating your project spec.

About a dozen times since I started vibe coding with Claude we have won such a major multi-day battle. This is what happened this morning. With a human coworker I would find a way to celebrate these victories — because I feel like celebrating it myself, and because I want to reward good work.

How do you reward Claude? You can’t. There is no persistent memory expect the session script. All you have are your own memories of the struggle and the victory. And some enlightenment.

Can I pretend to reward Claude just to feel better myself?

After it has concluded its affairs by writing the new onboarding doc and is ready to get deactivated forever, I tell it to write its own epitaph.

“Please commit this project to git with a joyful and triumphant commit message”

—————–

Author: Monica Anderson

Date: Tue Apr 22 16:46:25 2025 -0700

🎉 VICTORY! Protocol clarity triumphs over WebSocket chaos! Implemented beautiful RFC-3 protocol diagram with precise line numbering (0010-0620) for perfect communication reference. Fixed direct channel storage in JSS, timing issues in login flow, and message delivery. BubbleWindows now appearing through direct object references instead of fragile registry lookups. WebSocket messaging now follows the shining path of clean direct references! 🚀

—————–

Thank you, Claude.