On AI and Fulfillment
Recently, I’ve been reflecting on my usage of AI and its implications on my own happiness and fulfillment. I’ve grappled with both feelings of exhaustion and elation over the past couple years, and am left with more questions than answers. This post is part rant and part introspection.
Let me try to explain.
Around 1.5 years ago, I discovered Midjourney (AI art generator). I spent the whole first month generating images literally non-stop. The ease of typing a prompt into a Discord bot, getting a relatively stunning image matching my prompt, and the resulting dopamine hit was… intoxicating. It got so bad, my wife started calling me on it. “Stop generating AI images and come to dinner!”
I was obsessed. For about 2 weeks.
Something strange happened in that 2 weeks. I went from generating hundreds of images a day to a handful, to none. I went from having trouble falling asleep because I was so overstimulated by the blur of AI images and ideas in my head to… sort of bored? Frustrated? Hard to explain exactly what, honestly.
By the end of the first month, I was barely using it at all. I kept my account open for another month while I did some tinkering for a D&D campaign I was working on, but then I closed it.
Looking back, it was a surreal experience. At first, the whole process was incredible. I was short-circuiting the creative dopaminergic cycle (if you’ll allow me to butcher that term), reaping the “ends” of creating art with none of the “means”. However, the high quickly diminished, and I was left feeling hollow. Trying other image gen AI’s was interesting for a minute, but had the same ultimate outcome.
I look back on the nearly 3000 images I generated in that short burst with some pity. Individually, they were interesting enough. But faced with them all on a well-designed masonry grid? They were uncannily mediocre in their sameness.
Note: I want to be clear that the technology here was monumentally impressive. This isn’t to take anything away from those achievements or the incredible work the Midjourney team has done. Rather, this is me reflecting as a hobbyist playing with tools.
In Contrast
I want to contrast this with the more formative years of my art experience. Growing up, I loved art from an early age. I drew every day in grade school, and even got “pretty good” at it. As I got into high school, the trend dissipated as I became interested in other things, but I still regularly returned to art. It was only when my high school “guidance counsellor” gave me a professional ultimatum between Computers and Art that I, regrettably, decided to spend less time drawing and focus on programming.
(As an aside, I put airquotes above because that is horseshit. You can and should pursue multiple interests. Fucking guidance counsellors.)
Anyway, back then the process of creating art was orders of magnitude slower. I spent days or sometimes weeks on a single piece. The resulting high was similar to what I felt in those early days of Midjourneying, but it was accompanied by something grander.
A sense of fulfillment. Deep-in-the-soul satisfaction at both having created and the creation itself. That contentment was a result of not one, but both.
And it was whatever this nebulous thing is that I don’t have a name for that kept me coming back every day yearning to create more. In psychology, people who know way more about psych might refer to this as the intersection of hedonia (feeling good) and eudaimonia (feeling purpose). Supposedly, the key to happiness can be understood in their relationship—forgive my hand waving. I digress.
The revelation is that this is in stark contrast to what I experienced with Midjourney and other AI image generation tools. In less academic terms, making art manually was fun AND purposeful, generating art was not.
Look, this is a loosely tech/fantasy themed blog y’all. I have to do the cliche thing and quote Sanderson here.
“Journey before destination.”
On Coding With AI
Recently, I have felt a similar growing dilemma professionally.
To no one’s surprise and probably to my guidance counsellor’s self-congratulatory delight, I didn’t continue my artistic pursuits professionally. However, I eventually found the same fulfillment in programming.
It took some time, and like other fulfilling craft, has its highs and lows. But I got there. In particular, the past 4-5 years have grown increasingly fulfilling as I’ve honed my craft and gained confidence in my work.
However, recently I felt the actual act of programming slowly get less enjoyable.
It was about 6 months ago that I first started feeling this. Also, this was only around 6 months after making the shift from manager back to IC, specifically after recognizing it’s the actual craftsmanship that gives me energy. So, it was alarming to feel like I was less energized by my work.
I started to wonder what was going on.
At first, I chalked this up to stressful circumstances. I was working on a particularly thorny project involving a massive rewrite of my company’s core funnel in our new frontend (an updated Next.js app that has been an improvement, but not without… caveats, and significant hand-holding/manual tuning). As a lead on the project, I was responsible for some of the more complex and necessarily innovative pieces.
I don’t think it was that (though, my frustrations with contemporary frontend trends certainly didn’t help).
Then I thought maybe it was the fact that I was expecting my second daughter soon. Naturally, I wanted to spend more time with my family and making sure my family had all the support I could give them. Perhaps this was at odds with my desire to craft?
I don’t think it was that, either.
After my daughter arrived (and a revitalizing, cold-water-to-the-face 3 months of paternity), I had some time to back away from work. In that time, I had little time to code, but ample time to reflect.
In the little time I did have to code, I returned to my roots. I picked emacs back up (DOOM emacs) and fell in love with it all over again (ultimately, I left emacs again for Zed after losing a much-needed week to config hell—but the lessons remain). I rabbit-holed into linux after hearing DHH rant on it, and rediscovered the joy of spending weekends tinkering in Arch. I spent a bunch of time not writing React and not constantly banging my knee against JS tooling.
Oh, and I forgot to turn copilot on for all of this. I just… forgot about it—or likely wasn’t bothered to configure it. Weird.
Anyway, I came out of this post-paternity fog energized to return to work. It was only then that I noticed I had been coding without copilot for the past 3 months. I turned it back on, and within a couple weeks noticed something.
The aforementioned feeling of dread returned. I was having less fun.
Now, the attentive reader will retort, “well, yeah! you returned to work! that’s not as fun as the play you were doing on paternity… kind of sus to blame it on AI.”
True, but it made me curious.
So as an experiment, I turned copilot back off. I also stopped using other AI tools for anything but quick search purposes. I didn’t feel better over night, but gradually I noticed improvements in how much fun I was having while programming.
I noted that I had passively been relying heavily on copilot (and Claude) to do things that were my bread and butter. It made a lot of the boring parts of coding easier, but it also seeped into the parts that were enjoyable. I’m sure many people would disagree with what parts are “fun”, and that’s fine. For example, stuff like designing a component or thinking critically about the structure of code was fun, and often copilot would have a “satisfactory” solution that I would accept, not recognizing I was missing out on what delighted me.
It’s sappy, but I felt re-energized by these revelations, and have revisited my relationship with AI tools to more closely align with what’s important to me.
Am I just a luddite clinging to some sense of non-AI idealism? Maybe. Or was it something deeper, more fundamental, like Ginger Bill’s (creator of Odin) rejection of LSPs?
Reflections
It’s possible this is purely a me thing, and I’m definitely not saying anyone else should do this. (Though, I am saying you should try it! See what happens.) I also don’t mean to paint this as black and white.
For example, I’m fairly confident that I code more efficiently (as in bang out shit for my company faster) with copilot enabled. On the contrary, I’m less confident that I code more effectively (as in, am a good engineer).
But what’s clear as day to me right now and retrospectively, is that I have less fun when I let the AI do all the work for me. And paradoxically, though I might be programming faster with it, I feel less competent.
I should clarify it’s not purely the more mental parts of programming—it’s also the mechanical. I’ve recently picked up vim motions (which is trying to find space in my brain next to 14 years of emacs muscle memory). As an added bit of experiment, I tried Cursor and, while it was neat, it felt mechanically lacking. I’m left searching for parallels like the art one at the beginning of this post to try and express this, but even that feels not-quite-right. Maybe a closer analogy is the difference between playing a physical instrument and composing with a digital tool. I recognize the utility, but that doesn’t mean I enjoy it the same way.
I heard a similar take that resonated with me when listening to TJ Devries and The Primeagen interview Mitchell Hashimoto, creator of Ghostty. In the interview, they ask “Why Zig over Rust?” He responds with:
“My answer to this makes everyone mad. Because programmers that care about programming languages want an answer that’s based in some sort of theory, or safety, or like something. And my answer, dead to rights, is just… I have fun writing Zig, and I do not have fun reading or writing Rust.”
What I’m noticing is a similar correlation with myself and AI tools. I do not doubt the utility of copilot. I doubt whether it’s making me fulfilled.
Aside: I stumbled across a paper citing negative impacts on critical thinking due to over-reliance on AI tools. Yikes.
That’s not to say I’m writing them off entirely, and I think that would be a shallow conclusion. Rather, I’m trying to consistently monitor the balance of how I use AI. What’s working now is using Copilot as a sort of “emmet” or super autocomplete for tedious work. I will intentionally trigger it with a hotkey for areas where I know I have the shape of something and want a little extra help filling in the details. Also, I will use it as a quick inline search.
For example, the other day I was writing the “Stats” section of the lore page of this blog, and I couldn’t remember what the syntax looked like for the details
HTML element. Rather than popping into MDN, I simply wrote <details>
and then hit my copilot hotkey and got the following <summary>
element I couldn’t remember.
What I try not to let it do for me anymore is get in the way of my own creative process. The same is true of “heavier” tools like Claude, etc. I make use of them for lightweight pairing (especially in areas on the edge of my experience) or high-level brainstorming. But I explicitly tell it not to generate any actual code.
Because I want to write the code. I want to be familiar. I want to be competent and understand what I’m doing. I want to be responsible for my own mistakes, and be able to bring that deep understanding for what I’ve built to the table in meetings with my colleagues and stakeholders.
And I suspect I am not alone in this line of reasoning.
DHH expresses as much in another Top Shelf interview. He says that he is having more fun working with some AI tools, but not because they’re doing the coding for him, but because they’ve augmented the grueling parts of his workflow.
“I enjoy AI as a better version of that. What I have not enjoyed is to have AI write my code.”
Conclusions
Is there a world around the corner where AGI replaces the creative process of software engineering? What would that mean for someone like me who derives a lot of pleasure from it? Maybe simply that it’s not profitable professionally? I’m not sure! I’m sure I could find something else fun to do (eat shit, counsellor).
Frankly, I doubt it’ll come to that soon (if ever), but I don’t want to write off so tacitly as is posh in modern programming forums. It seems like an eventuality we should, at least, seriously think on. This post is already long, though, so I’ll reserve those thoughts for a future one.
Instead I’ll try to leave on a positive note.
John Cleese, famous comedian, writer, and screenwriter known for works like Monty Python and A Fish Called Wanda says this of the creative process:
“Confidence really comes from doing it a lot, doing anything a lot.”
“Anything really new comes from the unconscious, and the only way you can get in touch with the unconscious is to be in a playful mood.”
If your goal, like mine, is true craftsmanship, and your value to my company is, first and foremost, to use said craftsmanship to build innovative, excellent software, then this element of play, fun, fulfillment
or whatever else you want to call it is requisite.
Finally, questioning whether our tools are building this up or diminishing it should be at the forefront of our attention.
Afterward: more thoughts
One pessimistic read on what I’m saying is that perhaps most companies don’t need this sense of purpose from their engineers, but just need efficiency. Or maybe they only need a smaller number of effective engineers to innovate and create if efficiency was higher.
I could see that. Also, there’s nothing wrong with not loving coding/software engineering either and just wanting a paycheck.
Maybe innovation/excellence is more an emerging product consideration, chiefly prioritized by organizations trying to do something remarkable, but not so much a business consideration. Mediocrity can be plenty profitable.
As I said at the beginning of this post, I have more questions than answers.
What do you think?