I’ve been using Windsurf editor for about six months now, and it does most of the coding work for me.
Recently, I realized I no longer enjoy programming. It feels like I’m just going through the pain of explaining to the LLM what I want, then sitting and waiting for it to finish. If it fails, I just switch to another model—and usually, one of them gets the job done.
At this point, I’ve even stopped reviewing the exact code changes. I just keep pushing forward until the task is done.
On the bright side, I’ve gotten much better at writing design documents.
Anyone else feel the same?
Suggestion - pick up a new hobby that is engaging outside of work
Review the code. Hell, maybe even write some code yourself.
What you're describing is how I feel whenever I use an LLM for anything more than the most basic of tasks. I've gone from being a senior level software developer to managing a barely competent junior developer who's only redeeming skill is the ability to type really, really quickly. I quit the management track some time ago because I hated doing all my software development via the medium of design documents which would then be badly implemented by people who didn't care, there's no way you're going to get me to volunteer for that.
And while AI often produces high-quality code on the surface, when things go wrong, they take longer to fix. MTTR for AI-generated code is much higher, especially when devs don’t fully grok the code they accepted. That undercuts a lot of the perceived velocity gains, especially in complex, evolving systems.
Re LLMs I love collaborative coding because I can sometimes pick up or teach new tricks. If I'm too tired to type the boilerplate I sometimes use an LLM. These are the only two redeeming values of LLM agents: they produce code or designs I can start from when I ask them too. I rarely do.
I hope OP can find a balance that works. It's sad to see the (claimed) state of the art be a soulless crank we have to turn.
Then if I need something similar for a Dockerfile, I’d write that also. The duplication is a sad feeling.
So I described what I wanted, /bin/sh with posix, detailed what both scripts do, and it merged both scripts without ever seeing their full codebases! (Both for work and my own code, I never share code unless it’s already in a public repository)
I fired up ShellCheck linter and zero issues. At work I Replaced both tech-debt laden scripts with a repo and people said they’d use it too, NICE cleanup, and how long did it take? :-)
I know if I leet code ground myself into the dirt, I’d get better, and more importantly: faster.
But there’s never been any payoff to me full-time coding.. not when the pay is close to coding, and my role wants me to address test tech debt or Nice To Haves tooling, and (until Go) I had to do my 9-5 work in a scripting language…
There’s now more days behind me than ahead, and I no longer want to understand low level details and theories about the kernel or TTY.
All progress is built on abstraction. It has to be.
I can and have lead discovery sessions either virtually or hop on plane and do it in person, design the architecture, be a halfway decent project manager, tech lead, hands on development, take an empty AWS account and set up best practices from a security, networking, deployment pipelines, etc.
But I can’t do it all at once and there is still only so much I can do at once and no business would be happy with the length of time it would take me or any one person to do a complex implementation at scale. At some point, if you have big ideas, you have to lead projects.
However LLMs make a damn good and fast junior developer that can do it all especially on a green field project with clear requirements and the amount of work I can get done now by myself on each of those levels - post requirement gathering is at least 2x - 3x.
And I am not bragging - I’m old. I should be able to do all of things I mentioned.
Code is an implementation detail. My job has always been to get computers to do stuff to either make the computer money or to save the computer money either via my own hands or via leading a team.
---
For example: About two years ago I worked with a contractor who was a lot more junior than our team needed. I'd give him instructions, and then the next day spend about 2-3 hours fixing his code. In total, I was spending half of my time handholding the contractor through their project.
The problem was that I had my own assignments; and the contractor was supposed to be able to do their job with minimal oversight. (IE, roughly 0.5-1.5 hours of my day.)
If the contractor was helping me with my assignment; IE, if the contractor was my assistant, I'd have loved the arrangement.
(In case you're wondering how it ended up for the contractor, we let him go and hired someone who worked out great.)
---
I suspect if the OP can figure out how to make the AI an assistant, instead of an employee with autonomy, then it will be a better arrangement. I personally haven't found an AI that does that for me, but I suspect I'm either using it incorrectly or using the wrong tools.
Ask it first to plan out a project you briefly described, focus on the planning, file structure is ok but no coding. Tell it what functionality is integrated, or what what should become a standalone module. Ask it to summarize.
I then start a new chat for the code, and tell it follow the summary. Tell it “before you make code, ask questions if there is commonly another way to do this.
Chances are you’ve done this way more than me and tried variations of this. But it’s working here as an assistant. I’m now doing wIdk I wasn’t hired for, and people are happy.
Hits the nail on the head. For an actual junior developer, they'd at least learn over time. With LLM, open up a new chat and you start with a new hire.
I spend most of my time editing these files. It's as if I am training a junior dev.
Everything is so fast, no body gets an opportunity to do things slowly and better.
I feel the opposite. I appreciate the ability to iterate and prototype in a way which lowers friction. Sure I have to plan steps out ahead of time, but that's expected with any kind of software architecture. The stimulating part is the design and thought and learning, not digging the ditch.
If you're just firing off prompts all day with no design/input, yea I'm sure that sucks. You might as well "push the big red button" all day.
> If it fails, I just switch to another model—and usually, one of them gets the job done.
This is a huge red flag that you have no idea what you're doing at the fundamental software architecture level imo. Or at least you have bad process (prior to LLMs).
I feel the same way. Things I like: Thinking about architectures and algorithms. Things I don't like: Starting out with a blank slate, looking up the exact function names or parameters. I find it much easier to take something roughly implemented and improve upon it than to start from nothing and build it.
I think about what I want fairly specifically. I discuss it with the LLM. It implements something. Half of the time it's what I expect, I can move on. Sometimes it's done something I wasn't expecting in a better way, which is nice. Frequently it's done something I wasn't expecting in a worse way; I either tell it to fix it, or just fix it myself.
In my previous role, I did a huge amount of patch review, which I always found quite tedious. Even though this looks superficially similar, it doesn't have the same vibe at all. I think it's because the LLM will accept being told what to do in a way no self-respecting coder would. (One complaint I'd heard about another person's reviews was that the person whose code was reviewed felt like they were a marionette, just typing exactly what the reviewer told them to type.)
This way I can do the things I enjoy, while neither having to worry about some human being's feelings, nor having to do the low-level stuff that's a chore.
"Add a sidebar to the side that tracks where we are in the document".
"Move all elements in area A into a split screen view with those elements at the left hand side and the remaining elements in the right hand side"
The above sort of thing can be painful to do manually. Changing a layout which can have 100's of elements and moving everything across to the new layout structure. Often you can waste a day tweaking it in various ways. LLMs are actually pretty amazing at it since it's a job where you "put old things from one context into a new context" and that's basically what they do. As in AI has saved me some of the biggest pain points and allowed me to focus on the meatier aspects of the code (which it's not so good at).
Particularly in the present. If any of the current models can consistently make senior-level decisions I'd like to know which ones they are. They're probably going to cross that boundary soon, but they aren't there yet. They go haywire too often. Anyone who codes only using the current generation of LLM without reviewing the code is surely capping themselves in code quality in a way that will hurt maintainability.
How? There’s no understanding, just output of highly probable text suggestions which sometimes coincides with correct text suggestions.
Correctness exists only in the understanding of humans.
In the case of writing to tests there are infinite ways to have green tests and break things anyway.
The typical approach is to prompt an LLM model with an outline of what the problem is and let it write the code itself by giving it file (+ maybe some other things) access. You could look into software packages like Windsurf (as original post) or the Cline extension for VS Code which are both pretty good at this sort of thing.
They perform at what I'd estimate is a mid programmer's level right now and are rapidly improving in quality.
And that's not just because its output is often not the best, but also because by doing it myself it causes me to think deeply about the problem, come up with a better solution that considers edge cases. Furthermore, it gives me knowledge in my head about that project that helps me for the next change.
I see comments here where people seem to have eliminated almost all of their dev work, and it makes me wonder what I'm doing wrong.
I'm in the same boat: I'm mostly doing C# in Visual Studio (classic) with co-pilot, and it very rarely gives useful code from prompts. Often times the auto-suggestions are hallucinations, and frequently they interfere with "normal" tab completion.
I'm wondering if I'm using the wrong tool, or if Visual Studio (classic) co-pilot is just far behind industry norms?
I am playing with Zed now though, and it has a "subtle" mode for suggestions which is great. When I explicitly want to see them, I press option key. Otherwise, I don't see them.
I find it’s really great for augmenting specific kinds of concentrated tasks. But just like you, I have to review everything it creates. Even Claude Opus 4 on MAX produces many bugs on a regular basis that I fix before merging in a change. I don’t mind it though, as I can choose to use it on the most annoying areas, and leave the ones I enjoy to work on myself.
- Type of dev work (infra, frontend, backend, etc)
- Programming language
- Level of experience
- Quality expectations of project/work environment
But on the flip-side, using the AI to help me learn the bits of programming that I’ve spent my whole career ignoring, like setting up DevOps pipelines or containerisation, has been very enjoyable indeed. Pre-AI the amount of hassle I’d have to go through to get the syntax right and the infrastructure set up was just prohibitively annoying. But now that so much of the boilerplate is just done for me, and now that I’ve got a chat window I can use to ask all my stupid questions, it’s all clicking into place. And it’s like discovering a new programming paradigm all over again.
Can 100% recommend stepping outside your comfort zone and using AI to help where you didn’t want to go before.
Second, you can look at it differently.
AI is going to do most of the coding in a very short time. That's a fact. The opportunities are going to come to those who know how to prompt the AI and hold it accountable.
So yes, you're no longer going to be the hero for the code you type out.
But you CAN be the hero for being the Senior Developer or Project Manager who know what needs to be done and knows how to get the AI to do it right the first time.
I actually got out of coding a number of years ago because I was tired of keeping up with the latest changes in languages, standards, best practices, etc.
When AI became a thing over the past couple of years, I decided to try again ... and I'm actually enjoying it a whole lot more. I make a lot more progress a lot faster, which means I get to see faster results.
You can't control the direction that coding is going. It will go where it goes. But you can control how you think and feel about it. So what choice will you make?
[citation needed] and this really depends what you are doing.
That's not a fact it's a fact only on HN
Great evidence. Add "full stop." to really drive the point home
Essentially, vibe coding is synchronous as it is necessary to wait around for the LLM to respond. Codex is async and allows you to focus on other things while it is working. The primary issue with async workflows is you really don't want to have to iterate much. Therefore, investing more time upfront clearly defining the prompt / agents.md and prior examples becomes really important. Usually if it is > 90% correct I will just fix the rest myself. For hand coding, I use a fairly basic vim setup with no LLM plugins. I do not like LLMs jumping in and trying to auto complete stuff.
The majority of what I end up using langle mangles for is trivially verifiable but tedious to do things like "turn this Go struct into an OpenAPI Schema" or "take this protocol buffer definition and write the equivalent in Rust prost".
You stopped reviewing the code..? You're not gonna make it.
You still need the visceral feel of writing the code, this builds the mental model in your head.
You don't? Sounds to me like you just don't enjoy prompting. Try doing some programming again. Engage your brain with a challenge and try to solve the problem itself not just explain it to an ai and never even look at the code. You enjoy the driving not the destination, getting a taxi there is removing your purpose.
That said, I have loved writing software for 40 years, but I too have lost some joy. I am retired now and am having trouble finding joy in my personal projects. I use the LLM's to write functions for me and I do the rest (and I like not having to deal with minutia any more - but one time I loved taking apart binary files by hand and getting paid well).
I liken it to too many choices. If you have 2 cars to choose from, you can feel good about your choice. But from 40, you are always saying, Hmmm, maybe I should have gotten that 17th choice instead of the 26th.
Back then. A C compiler, a linker, a manual and a couple books. Get to work. Create something by your own hand.
Now when I find the right project, usually music related, and it get's under my skin, I get those old vibes and I love it.
I guess I'm glad I'm out of the rat race - but in all honesty - I little envious too of the younger gen who embrace the new tech. Yea - I wish I had it back then!
This isn't programming. Delete the AI stuff and start programming again. It's fine to use LLM's if you want but nobody is forcing you to.
I found the joy of making things.
As a technical person who is not a professional programmer, but finds or makes whatever I need, LLMs (Gemini) are dizzyingly powerful.
I've made so many things I never would never have even attempted without it: a change-based timelapse tool, virtual hand-controlled web-based theremin, automated sunrise and sunset webcam timelapse creator, healthy-eating themed shoot'em up, content-based podcast ad removal tool, virtual linescan camera, command line video echo effect, video player progress bar benchmark tool, watermark remover, irregular panoramic photo normalizer, QR code game of live, 3D terrain bike share usage map, movie "barcode" generator, tool to edit video by transcript, webcam-based window parallax effect, hidden-image mosaic generator, and all kinds of other toys I've already lost track of.
Sometimes I want to hunt it down and erase the lazy, lying, gas-lighting **** from existence.
I've became very lazy. Most tasks, I explain to the LLM, and go browse the web while it computes. More often than not, it fails, and I re-iterate my prompt several times. Eventually, I need to review the changes before submitting it for review, which isn't very fun.
Overall, I feel I'm losing my skills and the competitive advantage I had at my role (I'm a decent coder, but don't care too much about product discussions). The way I'm using the tool right now, I'm pretty sure I'm not more productive.
We'll see how it goes. It's still a pretty new tech and I think I should learn when not to use it and try to have good hygiene with it.
It's also got me to explore a lot more domains than I would've considered otherwise, e.g. using Python to accomplish tasks with local pytorch/onnx models and creating ComfyUI nodes or using bash for large complex scripts that I would've previously used bun .ts shell scripts to implement.
Even non dev tasks like resolving Linux update/configuration/conflicts have become a breeze to resolve with Claude/Gemini Pro being able to put me on the right track which no amount of old-school Google searches were able to.
Although it's not all upside as LLMs typically generate a lot more code than I would've used to accomplish the same task so code maintenance is likely to require more effort, so I don't like using LLMs to change code I've written, but am more than happy to get them to make changes to code that other LLMs have created.
Thanks to LLMs, I actually enjoy writing more than before. I spend less time typing and more time thinking about the core idea. Every time AI rewrites my messy draft, I find myself saying, “Yes—that’s exactly what I meant.” Then I get to fine-tune it and add my own voice, which makes the process fun.
I also love this quote from Paul Graham, "Writing, Briefly": “Writing doesn’t just communicate ideas; it generates them. If you’re bad at writing and don’t like to do it, you’ll miss out on most of the ideas writing would have generated.”
I enjoyed building products and creating value with those products. Coding was just an implementation detail. It wasn’t even the hard part or the real work - the real work was understanding and clarifying business requirements.
As someone that enjoys the problem solving, creativity, learning, and sense of ownership that comes out of building software, I would feel less fulfillment if I hand over everything (or most tasks) to an LLM. It's like being a painter but not painting.
Hence I choose not to do that.
LLMs can be good if used responsibly and when it makes sense. It should not be at the cost of taking away something that matters to you.
I don't know your current situation. Maybe you are doing this at your workplace. Maybe you are under pressure of using LLMs. I get it. But you have a choice.
Now that you have come to this realization, you'll know what to do. Find the right balance.
I usually start out with good intentions like
1. planning out work
2. crafting really good prompts
3. accepting bare miniumum code changes
4. reviewing and testing code changes
But most 'agentic code tools' are not really well aligned with this philosophy. They are always over eager and do more than what you ask them to. Like if you ask it to change button color, it goes and builds out a color picker .
They sneak in more and more code and vex you with all the extra junk that you slowly stop caring about extra stuff that's being snuk in and the whole thing spirals out of control. Now you are just doing pure vibe coding.
Nobody forced you to switch LLM models until eventually one of them solve your problem.
Long story short, LLMs are great for people who never wanted to become "code artists" (aka hackers) which many people within CS and SWE do not wish to be.
If you goal is to be able to express your ideas fluently though, you'll have to get good at coding. The differentiator is how you look at the pain and struggle involved. If your goal is to improve yourself, the struggle has value. You learn by trying to do harder and harder things. If your goal isn't to learn though, you may as well outsource the struggling to a bot.
Context. I'm burnt out,doing web software development for business apps for 15 years now and going
I started to get into game development. I started to test out chatGPT and claude to assist and it's been going great. I make so much progress and the results are fun which makes the coding process fun. The LLM covers gaps in my knowledge of math and physics and game dev strategy and architecture. But since I know how to code I can take what it gives and accomplish all kinds of things that would be much more difficult going on my own.
(e.g. did you consider simply not using LLMs to write code and maybe just use them for rubberducking, cross-checking your code and as StackOverflow replacement?)
I just wrote a new book about how engineering leadership has to change and this is one of the key problems. https://productdriven.com/book
No more joy in writing software. Instead my time is spend in writing user stories and specifications as good as possible.
The actual meat I prefer to code myself with minor LLM support (for example, I ask it to review my code).
Sure, get an LLM to suggest an approach, but how can you feel joy when you've turned yourself into a system architect working with a particularly stupid and relentlessly optimistic bunch of idiots who never really learn?
You can choose how you do your work. You have autonomy. So, choose.
Personally I have found that the sky is now the limit thanks to AI assistants! I was never the best coder out there, probably a median level programmer, but now I can code anything I imagine and it's tons of fun.
Find some creative projects you want to work on and code them up!
This is definitely going to end well.
This book helped me put it in perspective: https://pragprog.com/titles/cfcar2/the-passionate-programmer...
You don't have to give up anything you did before at all.
LLMs just here to increase your productivity, but cranking out unreviewed code where you don't want to do that is just silly to me.
then sitting and waiting for it to finish. If it fails…
I could not help but think that sounds like the old days of batch processing and even somewhat recent compilers.
¿Maybe waiting is an ordinary part of programming?
¿And maybe LLM’s fill a vacuum created by desktop systems with abundant memory and fast bulk storage?
¿Could it be that waiting is a fundamental dimension in our relationship to machines and when we change the mechanism to remove one cause of wait, another wait often whack-a-moles itself up? [1]
——
Anyway, my empathy on your job frustration. My advice is programming, no matter how much you love it, is still a day job when programming is your day job. What matters most are the things your day job allows you to do, e.g. Friday night pizza for your children, vintage rollerblades, or a trip to Guam.
And if your mental health is suffering, there’s nothing wrong about talking to a clinical therapist. In fact there can be a lot right about it.
Or not. Good luck.
[1]: We might do something else while we wait for the laundry to finish the dryer cycle or microwave popcorn to pop. Often this can be just filling time and the completion interrupts us with buzzers and beeps.
[2]: The nature of machines is that we tend to eat more popcorn and have cleaner clothes ^and^ spend more time cooking popcorn and washing clothes because it is less bother. Particularly when it comes to our day jobs…the machines of the call center increase the number of calls the call center handles per employee.
Why would you program in a non-joyus way if you're doing it for fun? For professional work I fully get why you'd want to optimize.
I'd say if you used to find pleasure and satisfaction if the art of writing code unless you're willing to stop using AI it might be worth finding a different pursuit to channel that energy into. If you don't enjoy prompting now it's only going to get worse from here and your energy will be better spent finding something you do enjoy.
I’ve always done software engineering that wasn’t programming: QA, QA automation, devops, operational sustaining (legacy maintenance).
The whole reason I got into software (besides it being easy money) was my childhood of typing in code from magazines and making it my own.
I didn’t go to university, and I didn’t focus personal time in developing coding skills enough to get me a job in it full-time. I know lots of the fundamentals I’m just not fast, and I fail to memorize lots of idiomatic stuff that’s necessary.
What changed for me? Two years ago I discovered Golang, love it. In the last few months I set aside my aversion for AI, and it’s amazing. I know AI code is mediocre sometimes, so is what I write myself. But the feedback loop is way encouraging. It has me engaged. I feel I can maintain the code. If I don’t feel comfortable with anything I take the time to review and rewrite, or run just that piece of code through a different AI.
Whether it’s right or wrong, I’m now engaged daily, instead of working a full day in “adjacent” engineering and then trying to push through tutorial hell.
I’ve pivoted to architecture and higher level problem solving to continue my growth.
I have also found I do my best work when I’m happy. It’s important that the tool works for me and I don’t work for the tool.
How is this the future of software engineering?
Programming is also the field where it's the easiest to strike out on your own. Seizing the means of production in programming amounts to grabbing a $200 laptop.
OP, take some time off and evaluate what you want.
s/these comments/this website/
have self-respect
The real kick in the nuts is that people don't care about quality. Honestly they never have, but now it's just worse. People see productivity gains and that's literally all that matters. I guess they know they can ship bad stuff and still sell it. Only when retention numbers get bad do they complain - not even think about taking the time to do things proper of course - about it and demand higher quality.
I think there's going to be a high demand for AI slop fixers in the future. Don't get me wrong, it's not that AI itself is incapable, it's that people aren't putting any effort in.
I think we'll push the people who code for enjoyment away and they'll be replaced by people who aren't as senior.
Getting tasks done, tasks you would never have had the time or courage to tackle the traditional way, is another source of joy.
Maybe it's more of a problem with your job and the tasks you're assigned?
Why do you find this strange? It's like saying you find it strange that a carpenter enjoys working with wood, that it's only about the end product and not the process.
I do, however, use electric planers, table saws and miter saws, because I want to produce the product fast and efficiently, because the end product still is the goal.
Your point is well taken however.