It's not about money, it's about discovering the unsolved problems that Google can't solve
I am 15 years into my career, and I have noticed that past the ten-year-mark, job satisfaction really arises from how much we can maneuver ourselves into a position where the interesting problems land on our desks. That usually goes hand-in-hand with more moneys, but the moneys are just another integer in our lives past a certain point. It is hard to even think of things that 10k in your bank account can't buy or replace overnight, so it all becomes a matter of resource allocation and priorities.
The more I think about it, the more I believe that the 10-year-mark is where developers split into two groups, the one that will still be getting a kick out of it the day they retire, and the one that will suffer for as long as they can stand it, and may or may not retire as developers. All my life, I have worked with people who were bitter to the point of disability, and people who just had a great time and loved a job that others hated.
I believe that once we reach this split in the road, there is very little outside influence in how we treat ourselves, and most of it becomes a choice. A 10 year dev can find work elsewhere, a 10 year dev has the skills to go freelance, to build something, to make a lateral move into a career path they prefer. They can start a SaaS, a YouTube channel, not even just about code, but the other stuff we do in life. People have the choice to willingly freeze their career progress to focus on life instead, or hire on with a company that has values they believe in. We have a lot of options in life, more than many other professions provide.
After our junior dev years, the people around us stop having any kind of motivation to teach us things we haven't learned so far, and a lot of people mistake this point when other people stop nagging us as a sign that things are going well, and that we no longer have to improve so much all the time. I have seen quite a few people who were promising junior developers and ended up middle-of-the-road-disgruntled just a few years later, just because they stagnated too early.
I write this post from a position at work that I don't mind freezing, at least for a few years. Not in terms of skill, just in general career progression, mainly because there isn't much above my current senior dev role in the org that doesn't replace the fun with the suck. I could shoot for one level higher, but that already requires too much people stuff in my software dev, and I would honestly rather not.
Instead, I sit here having interesting challenges at work, ongoing evening projects that I can bill overtime on as I am working my way through my own design, implementation and testing stages. I am part of multiple projects where I can advise, build and improve, and hopefully make myself obsolete so I can volunteer for some of the other projects that sound fun and challenging.
The main source of my job satisfaction is twofold:
I get to solve interesting problems with no immediate solution
I am part of enough projects that none of them can eat me up
In a way, I found that my job that requires overtime just about every week has been a lot more relaxed than any of my previous jobs, surprising as that was for me. I get to work from home most days, and other people have a vested interest in keeping things that way. When I don't work from home, I get paid to travel, and other people would rather have me working than pay for my little weekday vacation and hotel stay. It still happens sometimes, but at that rate, I don't mind the weekday vacation and hotel stay.
The other big portion is that the challenges that come up are usually either deadlines (meh) or unsolved problems that nobody else has gone freelance to build a large B2B product for yet. In the B2B world, there are quite a few interesting challenges left that most of us wouldn't have access to outside of our jobs, either for the lack of knowledge about these problems, or for a lack of the professional network that even gets your work in front of the people who would happily pay for it.
This construct has proven to be a godsend for me, because there isn't so much road left ahead of you once you reach these senior dev stages. A lot of it becomes more of the same, and that is why many people end up going freelance or building products. Simple if-statements and for-loops lose their appeal after the hundredth time you write them, and I am a couple thousand in at this point. I like designing systems, workarounds, middleware that connects two large systems that don't want to talk to each other natively.
In many ways, I find the "boring" world of industrial software dev to be the more interesting, because there is a lot more room for custom development, and it can feel like the Wild West in some regards with how often the pragmatic solutions are greenlit, not dismissed. A lot is legal in between deadlines, ancient systems, migration projects and time and budget constraints, offerings made a bit too low to get the contract in the first place. There is a lot going on around me that ultimately keeps me happily supplied with interesting challenges, and I have been at this for five years now and wonder if I'll ever move on from it.
Just last week, I got paid for weekend work that I thoroughly enjoyed, just this process of being locked inside on a rainy weekend with nothing to do but writing code, iterating ideas, and brewing fresh coffee. I think I did 15 billable hours that weekend, and I still managed to get out and walk in nature. It just captivated me that this problem had an obvious-to-me solution, and that after talking to my boss, he saw things my way and gave me until Monday to come up with a proof of concept, before we would have no other choice but to throw manual labor at the problem to meet the deadline. 15 hours isn't a lot of time when it saves us from ramping up the human machinery of meetings, onboarding people on the problem, the workflows and solutions, and then organizing the hectic reduction of the pile of work, while other stuff is left to rot in the meantime.
Not only did I make it, but I managed to solve it natively within the third-party system's available options, so now we have a direct upselling opportunity in the future. I like this, it feels a lot less scammy and scummy than most sales tactics out there to go in with a base product and then go "we have this nice extension that you can have if you're willing to pay for it." Paid addons are fine in my book, they aren't loot boxes or microtransactions of the business world.
Personally, I really enjoy this, especially because it seems like a lot of software development these days has one clear solution, and books have been written about the design patterns that dictate them. I am all for that if you ask my architect-adjacent-personality - but code-monkey-me? He wants to throw banana peels at problems, and is said that bananas have been largely replaced by closed-off banana boxes being shipped from one country to another.
In the past five years, I have tackled more interesting problems and challenges than in the first ten - and I already enjoyed those, although sometimes only in retrospect.
I feel like having immediate access to these problems, and room for experimentation, personal choice towards doing overtime when I feel like it - all those are job benefits at this stage of my career, and I have them all within reach, unlike having to do product-market-fit, A/B testing and promotion / sales work. I find it quite liberating how much I am limited by the constraints of reality, and how often there is a way to cut through some red tape, and come up with solutions that may or may not pass the professional sniff test. Honestly, a lot of my code is pretty clean, tested and properly integrated - but there are cases where I go like "well, it's fine because this won't survive the migration period". A lot can be handled pragmatically when there are just a few developers involved, and we can cut ties with our past choices before they have any chance to grow enough hydra heads to bother us long-term.
All is fair in love and in war, and migration projects that are deleted together with the ancient systems once it gets replaced by a slightly less ancient system.