I have realized I am someone who needs at least one of these things to be happy with work, and I’m currently not getting any of them. This next year I would like to seriously make an effort to get on track to change this for myself.
I write code in C# or C++ (but also Python, pipelines, scripts, JS, etc.) and it needs to be somewhat efficient. We all follow the same rules (62304 especially), we must write unit tests, and make sure that my features are properly integrated at all steps of the development up to the release, and even after when you must validate it with the authorities, when you have bugs, etc. If you're in a small company, everyone can be involved in all the processes and it's fun because you go much further than mere development (like preparing reports for various agencies all over the world, or helping PhDs integrate their code in the application).
We have commit hooks to check and format code, pipelines must be green. You cannot cheat because someone will find out. And you can’t pretend that your code worked once on your computer because the test team will refuse your code if it breaks anything. It’s more rigorous at all steps of the development.
Last but not least we have specifications for everything because it’s the law. Overall it’s what software engineering should have been all the time. It feels like working at NASA even if it's only a stupid desktop tool or application.
Of course everything is not perfect, you can stumble on assholes like every other company, but it's not everywhere. I’m happy to go to work every day, I may have saved a life or two with my code, and that's a good feeling.
My experience comes from having worked with the biggest assholes on the planet at different companies. To answer your question, I would say that an interesting job is rigorous, peaceful, and has some kind of meaning.
Edit: as another guy said, I too settled for lesser wage to work for a company that would not destroy my soul and spirit. That's important too.
That’s all actually. There’s a few months ramp up where you have to learn and adapt to the process, but it’s a regular coding job. Nothing special actually.
How, exactly?
More and more, I also build contacts in and around Berlin's government to effect change at a lower level, instead of building a nice layer on top of a crap bureaucracy.
It has been my full time job since 2020, and it's still going pretty solid. I absolutely love it, in part because the work itself is fun, and in part because I have a kind and grateful audience.
I describe the why and the how here: https://nicolasbouliane.com/projects/all-about-berlin
My whole life I've worked on places that work performance was everything in software engineering, many toxic places etc.
I hope at some point I can chill down and make peace with myself like you did. Congratulations!
For a while as a student I worked for a nursery that supplied plants to restaurants we would go to when they were vacuuming the floors and stuff. Pick up all the plants, take them outside for water and light for a couple hours, and set them back up. Just reminiscing about it last night at a dinner where they had poinsettias everywhere.
It's a tough job but somebody has to do it :)
Edit: Also when I was in college in north Florida, we used to drive rental cars back from points south where the popular destinations and resorts were. We would crowd into one car and head down to Tampa or Orlando and come back with half a dozen cars or more.
I'm also surprised to find teaching is harder work than a 24/7 saas. You can become removed from your users in IT. Your users in teaching are right in front of you with all their joy, stuff of life, and drama.
Job title: network engineer
What I really do: code, solve a wide variety of problems MacGyver-style[1], debug other people's code, work on a vast array of systems from embedded to HVAC to electrical to cloud, crawl around in tunnels, attics, roofs, and spaces.
It's pretty demanding and intellectually-stimulating. It demands I be a generalist with a decent level of expertise about a wide variety of topics. It took decades to get here. Now I get joy out of mentoring younger colleagues.
I don't think I could work on any one thing for even a year.
I’m the Director of IT Operations for a contract research organization (CRO). While that might not sound inherently interesting it’s deeply fulfilling. My role involves building and maintaining software that help facilitate critical research for NIH and NCI, often supporting breakthroughs in healthcare and science. I love the intersection of technology, problem-solving, and enabling teams to deliver life-changing results by helping change the standard of care for people affected by cancer.
Outside of work, I’m heavily involved with FIRST robotics, which is a worldwide competitive robotics program for high school age students. It’s an amazing initiative where students design, build, and program robots to compete in team-based challenges. And it’s very fun. I mentor students, guiding them through the technical challenges we come up against and help them discover their own potential. Watching young minds light up is very rewarding. Being a small part of that community is one of the most rewarding things I do.
It’s fun. I’m never bored. I’d never have imagined this would be my life.
I love building and coding has always drawn me in. I also love working with people so managing engineers and later whole teams turned out to be fulfilling. Now as an advisor I get to pick projects that have particular aspects of management that I liked and companies need. Along the way I learned that I like being a teacher and enjoy recruiting. Both of these things surprised me.
Also I have more time left over and am getting back to the roots of building things.
Along the way I learned a ton. I had to change my mindset numerous times. It was not easy going and there was a lot of effort and frustration along the way. Building a business involves marketing and selling and those are the things that come hardest to me. However, I even found those parts to be fulfilling in the right ratio with building.
Key thing is realizing that past a certain point more money does not translate in more happiness. If you can define what you might like doing, and can build up some cash reserves, give the new passion a go. It feels dangerous and will require a lot of work, but if it works out you’ll be glad. If it does not work out you can always go back to what you did before.
One of the most interesting periods of my work was when my cross-border e-commerce business grew too fast, and we started to outgrow our warehouse. We designed so many ideas to save space and optimize work, it almost doubled our efficiency. I remember drawing some sliding rows and robotic shelves, though it didn't come to that. I was tired but happy, and the work was one of the most interesting in my life. Now, if I say, "I have an interesting job, it's in Warehouse Automation", you'd think I'm crazy, right?
I've never minded working with old legacy code and tangly messes, and there's a lot less (definitely not zero!) bullshit at a FAANG.
Now I'm tech lead in numerous cloud projects, hold workshops to share my knowledge (reduce the bus factor), and even adopted some eager mentees along the way.
It's interesting to me and certainly fulfilling to be laying the foundations of such an epic journey at a multi-billion Euro company.
Traveling and working with others face to face was a big part of the job I enjoyed; COVID destroyed that.
Currently, I'm 'de-obfuscating' a codebase that was unintentionally obfuscated by having a list of 'steps' that are composed into 'pipelines' and share a communication datastructure. People in general are really bad at making DSLs (see Greenspun's tenth rule[0]). If you've ever used a framework that encodes coarse instructions in JSON, you get the gist of where this was headed. The direct way would be to have humans write out the equivallent in plain statically-typed code without shared mutable state. Using an LLM may be of help but still needs human checking. So I instead made a code generator that uses the DSL structures at runtime and self-inspection to write the equivalent plain code. It's not perfect, so always generates from the DSL structures and compares that to the hand-made implementation by showing a diff of the overridden sections. This way it stay's in sync until we flip the switch to use the new code.
TL;DR - There are no small parts, only small actors.
My jobs are my jobs…day jobs. No matter how much I love them.
I am lucky to have work and jobs that enable me to pursue it.
Good luck.