Ask HN: I’m falling out of love with coding
I remember the days I started coding, and how much I enjoyed that. I was able to create things with just the power of my thoughts, and it felt like a superpower.
Nowadays, I feel like I have to jump so many hoops and spend so much mental bandwidth just to get the permission to code. It would be fair to say that on avg I spend less than 20% of my time coding or solving problems.
Any project I work on is connected to a million different tools, workflows and services, that all do things their own way, and everything lives in a totally different place, where it’s hard to monitor what’s going on.
I feel like anything can break at any moment and ruin my day. I don’t understand any of the tools well enough to be confident that it’s stable, and the worst problems are the silent ones. This is giving me anxiety.
I work mostly with Javascript — and that doesn’t help. All the frameworks/libs I use insist on being too flexible, to the point where I don’t know where to start and how to do things. Just show me the “right” way, and let me figure out how to opt out if I want to. Oh and every 10 minutes there is a new tool that pops up that does things differently.
I wish I could go back to the days where I spent most of my day in the IDE and at the end produce something that was (to me) amazing. My most challenging moments were when I had a tough logic problem to solve — but I enjoyed those immensely. I’d rather fight with my brain than with the tools I use.
I wish I could just use an IDE that takes care of all the crap for me and just lets me code and write business logic.
I now understand why there’s a trend of developers who want to go live in a farm or take up woodworking: tough(er) problems, but with less variables & easier to reason about. If the wood breaks, you can see where and can probably guess why. Making a table is a mostly linear set of steps, and the basic tools you use don’t change much throughout the years. There is no invisible ghost that lives in a separate realm (dev environment) that can ruin your work at any time and leave no trace.
Any insights? Should I just switch careers?
300 comments
[ 4.3 ms ] story [ 226 ms ] threadI read it really quickly, but different language, different org that's more flexible? Try out a few different ones?
I own a farm and a carpentry business, both since the start of covid. And I do freelance development. I have no plans to return to corporate coding. Life is great, never been happier or more fulfilled. But that is just me, your mileage may vary. Also it is a lot of hard physical work, at least during building and growing season. The grass is always greener. I code in the winter.
I applaud you. I sleep in the winter.
Glad you enjoyed yourself. And yes safety is paramount. Gloves and glasses are a staple for me, and hearing protection. I know a guy that lost the tip of his thumb. And not from a saw accident either. He got a splinter and it became infected. He tarried going to the doctor and ended up needing to have the tip amputated.
I thought this was well put: > I now understand why there’s a trend of developers who want to go live in a farm or take up woodworking: tough(er) problems, but with less variables & easier to reason about. If the wood breaks, you can see where and can probably guess why. Making a table is a mostly linear set of steps, and the basic tools you use don’t change much throughout the years. There is no invisible ghost that lives in a separate realm (dev environment) that can ruin your work at any time and leave no trace.
There's not many things less starting an implementation and discovering a series of hard to anticipate incompatibilities between your implementation and the rest of the system. I'm sure this happens in other professions, but perhaps it's easier to work around?
This is why I prefer reinventing the wheel. I have exactly zero desire to learn someone's mental model when I could instead learn how to perform actual work.
Although, I don't consider connecting APIs to be coding either.
Usually libs in the dotnet ecosystem are pretty clear on how to use them, and the stdlib of dotnet is huge - so you use a lot less 3rd party dependencies than other enviroments.
Personally for webapps I prefer MVC to Razor Pages, but that is personal choice and probably because I am so used to it.
I also do a lot of JS/TS work and really know what you mean with "fighting" the ecosystem.
It seems like the SPA trend is slipping away which I think is a good thing.
But it's also possible to find joy in tech by moving to a new area for a while. Of course, it feels like another particularly tough era to think about moving, which may contribute to both the feelings of anxiety and sadness about where the OP is at the moment.
My recommendation when counseling folks on this situation is to start by finding a willingness to try a new path. Working on getting onto a better path is often as engaging at rewarding technical work.
Try working on something fun on the side. Make a game, or a mobile app, or something you’ve always been curious about that doesn’t have anything to do with your job. You might be amazed by how productive you feel when you work on something ambitious that doesn’t involve all of the corporate machinery.
I’ve been getting a nice dose of that with game development. Sometimes I sit down on a Saturday with a big plan that should last me through the weekend, and I get it done before dinner that evening, and I feel like some kind of programming wizard. It’s been a great reminder that I am a talented programmer, but I’m just feeling burned out on all of the tedious process that’s involved when coding professionally.
Key thing is to make small game projects that you aim to finish in well under a year. Once you embark on a big project and feature creep sets in, you’re back to avoiding programming.
There is a third one too, I can't remember what it's called though. I think it has "Love" in the name.
[0] https://tic80.com/
[1] https://www.lexaloffle.com/pico-8.php
1. https://godotengine.org/
I ask as a matter of curiosity and personal interest--it's something I'd like to learn as a hobbyist, but my knowledge is limited to simple OpenGL tutorials and the (relatively speaking) watered-down Graphics course I took in College years back.
Unfortunately, many managers are bad at giving positive feedback. The only time you hear from them is when something isn’t working. Corporate processes slow things down and make you feel ineffective. Eventually you start to wonder if you’re actually bad at software development, or if you’re just a bad worker.
Let’s say you get a ticket for a performance problem. It turns out that the app is doing something kind of silly, and it would be easy to fix the problem and you’re confident that users would be okay with it. Well, too bad. You’re not allowed to make product decisions; only management can do that. So you bring it to management, but they’re in a meeting. You don’t have enough time to do anything else, so you spend 15 minutes reading HN.
They get out of the meeting, and you explain the problem. They’re okay with the change, but because it affects the UI, you need to get approval from the UX team. You explain that it’s a very minor change, but management insists that you have to follow the process.
You go to UX. You explain the problem, but they don’t have time to get back to you. You figure it’s going to be a bit, so you grab another ticket. 20 minutes later, it turns out that they’ve approved your request. It was a very small change, after all. So now you have to put your ticket back, which is going to mess with the time tracking in Jira that your boss gets pissy about, but whatever.
You make the change, which takes about 5 minutes. You commit, push, and open a PR. The CI tests fail. Apparently there was some kind of silly linter error, so you fix that and push again. Now you wait for the tests to pass, which takes about 40 minutes.
The QA team requires a detailed set of instructions for how to test every ticket, so you start writing up those instructions in the Jira ticket. As that’s happening, you get a Slack message from the documentation team. They noticed your ticket status change, and you forgot to mark it as requiring doc review because it affected the UI. You apologize and go back to update the ticket.
When you’re done updating the ticket, you notice the build has failed. Looks like a flakey test that’s been a problem for months now, but no one ever gets time to fix it. You re-run the tests and cross your fingers.
Time for a sprint planning meeting. Two hours later you resume work. The build passed, but your irritatingly picky co-worker has requested a change on your PR. He always requests at least one change on every PR, no matter how small. You used this method to find an element in an array, and while there’s nothing wrong with that, he personally prefers that method for doing it, and he won’t approve your PR until you change it.
So you update the branch and push again. Then you start working on filling out information for the compliance team which is needed for anything affecting this part of the application. You wrap that up and notice that the flakey test failed again. Swearing under your breath, you re-run the build.
You spend some time reviewing PRs for your co-workers and see that your build passed and your picky co-worker approved the changes. You merge and move onto something new. A few minutes later you get a message from the QA team. You didn’t provide documentation for how to test the code. You remember that you were in the middle of writing it when you got interrupted, and you forgot. You apologize and finish writing it.
You look at your watch and realize that it’s the end of the day. You know your boss is going to be irritated with you after standup tomorrow because you spent all day working on a ticket that was only estimated for half a day.
This is the kind of stuff that makes me want to run away...
- "Any project I work on is connected to a million different tools, workflows and services, that all do things their own way, and everything lives in a totally different place, where it’s hard to monitor what’s going on."
- "I feel like anything can break at any moment and ruin my day. I don’t understand any of the tools well enough to be confident that it’s stable, and the worst problems are the silent ones."
- "All the frameworks/libs I use insist on being too flexible, to the point where I don’t know where to start and how to do things. ... Oh and every 10 minutes there is a new tool that pops up that does things differently."
- "I’d rather fight with my brain than with the tools I use."
- "I wish I could just use an IDE that takes care of all the crap for me"
- "There is no invisible ghost that lives in a separate realm (dev environment) that can ruin your work at any time and leave no trace."
I was trying to convey that burnout is (IMHO) a result of putting a lot of effort into something and not getting enough back out of it. It’s like a defense mechanism to stop wasting energy. This may be a result of processes, tools, compensation, treatment by co-workers, or any number of other factors.
And my suggestion on how to resolve burnout is to find a way to feel productive and capable again. Personally, game development worked for me. But I also mentioned mobile app development as a possible avenue, but obviously this list isn’t intended to be exhaustive.
Just find something that helps you remember why you loved programming in the first place. You probably haven’t stopped enjoying the act of writing code. It’s just that something at work is making you unhappy, and you’ve started to associate those negative feelings with programming in general.
I do know some people that had to switch careers entirely, but often it's the job tearing one apart.
If you think there is anything worth salvaging, just go to your boss and tell them that this ship needs righting or you're gone. Preferably with some things you feel could be done right now.
I was just skimming and read that, and I thought "he is working in Javascript" and yep, later on that's it.
I stay away from the Javascript/TS ecosystem (npm et al). I program mostly in Go, but also quite a bit in Typescript.
I would learn/use (even if for personal projects) more boring tech stacks, like Java/C#/Go/PL-SQL/T-SQL. For myself, Go has extremely stable tools that just work and have well-known limitations. Consider a lateral move within tech.
IMO JS is really fun to program this way. You program straight to the capabilities of the browser. All of the problems people promised I'd face by avoiding their framework of choice didn't show up after all.
That's when I started experimenting with Elm, Bucklescript (now ReScript) and Clojurescript. It was a very insightful journey that made me enjoy frontend development again.
Today, Clojurescript is my favorite method of working with frontend code and, as long as I can pick my own tools, that's the one I'm sticking with.
For those suffering of Javascript fatigue, I highly recommend playing around with these alternatives. Try doing a simple, small side project in them. It may reignite your joy for programing and who knows, maybe you can find a job to work full-time with these tools.
I rely on the TS compiler to bundle into a single JS file, so I avoid bundler (etc).
I build a simple framework that meets my needs that I can essentially vendor and keep in my head. I'm would love to use an established framework rather then my own (don't get me wrong, there are serious downsides to rolling my own), but it must be small enough I can read it easily in a single sitting. I will not touch the NPM ecosystem. I sometimes will pull a dependency in by manually copying in the parts I need (preserving licenses, etc).
There are real downsides to doing what I do, but I do it to keep myself sane. I do not touch the npm ecosystem.
I also review every line of code I pull in from any language (Go, TS, etc). An ecosystem that makes this difficult or impossible is just a non-starter.
This way, the only dragons I have are ones I created and ones I can slay. The more I write my things in functional style and build only exactly what my application needs, the company's "framework" continues to evolve AND our apps continue to work!
No one is going to change any of the "ecosystem" out from under me because there isn't one. Everything is compiled in Vite (automatically and hot reloaded) and I only ship a minified, static, single index.html file with my entire app in it. There are no globals that I didn't make, no functions that are required unless I required them, etc. It's a HUGE timesaver when debugging or adding new things the team requests.
I'm able to continue to write new, cool stuff in both our public-facing web app and in our internal web tool (game dev), both on the same framework.
I use vanilla JS & CSS wherever possible, usually in a Go template.
If I have to create a SPA then I use Vue - I've found it's the least complex of the front-end frameworks. I build it using ESBuild from the flat JS files downloaded from the Vue site and stay as far from yarn/npm as possible.
I'm trying to work out how to compile Go to WASM and manipulate the DOM easily from there, but so far it's more complex than just writing JS.
1. Since WASM doesn't yet expose a feature to share GC with the host, the GC functionality with necessarily be bundled with your outputted code, making your WASM size larger than ideal.
2. All calls from WASM have to go through a JS layer in order to interact with the Web APIs anyway, so now you actually have _two_ GCs to run.
3. The developer experience is going to be poor unless you write a shit ton of wrappers for the existing DOM API.
I say the above not to dissuade you, I find WASM an attractive value proposition and use WASM in all sorts of ways in personal projects. Good luck
Everything else is spot on, that's the pain!
0: https://tinygo.org/
For example the mentioned Go has a HTML templating package in the std library.
You could use something like htmx (the creator is a regular on here) which is a very small, very convenient library that gets you 80% of the way for your typical web application.
For the rest, you can always just stick with plain old DOM manipulation or write web components if you want something that's more re-usable and general. No build step or transpilation shenanigans required here.
I've made a career writing Django apps. In most cases, the JS I write is limited to vanilla JS with no JS dependencies (the minification is done by a Python library which might depend on JS, but it's abstracted away enough that I don't have to know). There needs to be a serious amount of justification to even install Node/NPM as part of a project.
The vast majority of work is done on the backend, with JS only being used for UX. I used to pull in React+ReactDOM on some projects, but Web components are paving the way for that to no longer be necessary.
As I mentioned elsewhere, it's possible to pull all of pip into a Python project and have all the same problems, but the culture around Python isn't quite as myopic as the JS community, so I've generally been able to keep dependencies more sparse when working on Python teams.
I like typescript, I've tried Deno but it's just insane to me how people get caught up in all the hype around the NPM ecosystem only to end up crashing into walls like 'entire system shutting down' with no idea how to fix it. Friend who came before me hit me up asking about a 'linux problem' and it was just webpack crashing his entire computer with semaphore exhaustion. I keep that stuff confined to where it was spawned from, in the browser, anywhere else just doesn't feel sane to me.
If the company is doing anything web related it will have JS people somewhere right? And it might also choose to make everyone full stack (so doing both Go and JS) or making some of the teams hybrid. That's quite common. I don't really see much difference between a company that chooses Go to a company that chooses Node (or Ruby, whatever), they both have their pros and cons and it doesn't tell me that much about the people I'll be working with.
This feeling is absent from React-based apps. The React eco system has been around for many years now, but is missing many of the advantages age typically brings. The eco system feels much more fragile and driven by hype. I simply don't trust things to work as smoothly. Maybe this instability is what keeps React popular? If it becomes more stable, it will not generate as much hype and developers move to the next big thing.
I used Spring Boot at work and I have worked with backend libraries like Express(JS), Flask(Python), Gin(go) all the experiences have been much better than using Spring Boot. Java takes too long to compile, dependecy injection in Spring just seems to take forever, and overall Java is very very verbose. Just to create a stupid API, you have to create a new class for request, one for response, controller, service. I can do it if I am paid for it but using that for side projects, a big NO.
I would like to comment on how you feel Java compilation is slow. Incremental compilation while developing is fast and doesn't affect my productivity (your experience may differ).
Triggering a single threaded full build with one of my services (1000+ files and 80k lines) took less than 30 seconds on my laptop (18s with parallel compilation). But I never do that locally, as incremental compilations are almost instant.
If you need to download dependencies and run tests, the number is higher, but that is not specific for Java
As you point out, the React ecosystem does seem to be mired in "what approach should I take"-style questions for basic things like data loading, routing, etc.
I tried to do side projects with Spring Boot and I also worked with it professionally. I never got to the point where I can focus on just solving problems, I'm always fighting with the framework, looking for how to do certain things in the depths of blogs and stackoverflow because I can never find what I need in Spring docs. I actually find it interesting how some people seem to be very productive with it, while others have issues similar to mine.
Get a job doing something else that involves coding. Do you know advanced math and physics? There are tons of opportunities in the applied sciences and you'd be a god-tier coder among men at federal research labs etc.
Maybe finding a side project you actually like and understand can help.
5 years ago I started https://github.com/akalenuk/wordsandbuttons to focus on interactive writing. Just text and JavaScript to make interactive illustrations. There are no dependencies in principle. Nor external, neither external. Only text and code. Tons of fun, no red tape.
You might think that this works for small projects only. Well, there are more than 50 interactive pages now (would have been more, but I spent 1.5 years writing a book), and things haven't started to fall apart yet.
I strongly advice vanilla programming for hobby. JavaScript or not.
When, as a retired musician, painter, plumber or electrician, you walk into a project that was done yesterday, you can just understand it and start working. With software (well, frontend mostly), you will have spend an insane amount of work figuring out which billions will of crappy dependencies and myriad of frameworks were chosen and then learn those to start working.
That is just not very normal in most professions.
But sure, you could get bored after doing something for a long time. The getting annoyed and frustrated by not being able to do your job because someone added crap no one asked for (for tech ego etc), making all kinds of pain you have to figure out before writing code, I have not seen outside software dev.
You certainly seem to be in a rut, but before you take up woodworking or glassblowing try branching out and do some programming in a totally different area. This could lead to a change of career focus but you would have to start in a part-time/hobby way. I can't make any concrete suggestions since I don't know you or your circumstances, but make radical changes. Choose a new language, get into a totally different programming area, think of your own projects where you have total control.
Personally, I work in the scientific area doing a lot of varied work including visualization. I have an embedded programming hobby in the Arduino world using C/C++. I have been making measuring instruments for ham radio but currently I'm in the middle of three clock projects. All of them are designed to JUST WORK™. They guess the current timezone, take time from the internet and try to handle daylight savings changes automatically. Configuration, to set access point and password, is done through a web server that runs on the clock acting as an access point. I cut acrylic cases for them and they are good enough to make nice gifts. It's very satisfying to take a project from the back of the envelope through to completion, and it appears that is something you are missing.
Yup. I would even say it's probably the root cause. Stop working with JavaScript.
In my industry there certainly was a lot of jobs being dumbed down and hiring standards falling, with the indivisible challenging work being concentrated into the hands of a small number of people.
Personally, I don't find technical implementation any more interesting than creating Excel spreadsheets - it's just a tool for me. Maybe some applications require very sophisticated implementations, but I don't think that's the majority of cases. There's no high-tech feel about IT in 2023 to me.
Try learning Rust.
Your anxiety of things constantly breaking will disappear.
I've been coding for about 20 years. My joy of coding would be gone if not for Rust. Instead, writing code is my primary hobby today, in addition to it being (part of) my job professionally.
I wanted a more deterministic and reasoned approach to things. Also as another person stated elsewhere, practicing minimalistic engineering where you roll your own instead of mindlessly bringing in another library can help sometimes.