Yeah, I've been in the business properly since 2013, have worked at various companies, and I'm often disillusioned. Reasons include:
- I've given up on the hope that tech makes the world a better place. Outside of some niches that probably pay next to nothing, or the rare jobs that probably require maths or CS PhDs, it serves as a minor convenience at best and is downright exploitative and damaging for society at worst (I refuse to work at the latter kind of company, so I'll just choose the "minor convenience" ones)
- As a perfectionist person with a somewhat "scientific" mindset, I'm disappointed by the lack of rigour in our discipline. We have decades of research on software engineering, yet we continue to recycle hypes, and don't learn from past mistakes. I'm not complaining that some problems have no clear solutions and that picking the right one for a given context is hard; I'm complaining that, by and large, we refuse to even seriously engage with the "what has come before" kind of thinking, seriously evaluate solutions before committing to them, a rigorous style of arguing, etc.
- Most codebases don't pay appropriate consideration to security. I'm not even arguing about complicated stuff like supply chain attacks, just simple things like "don't print out full stack traces in your user-facing exceptions" or "don't rely on IP ranges to limit access to your API".
- The reason for the two previous points is that nobody has time for anything. The tech world moves too fast, investors throw money at dubious enterprises, users expect too much at too little cost, we don't communicate that complexity comes at the cost of speed of iteration, security and so on, and even if we did, users wouldn't care. We deploy these hot messes of distributed monoliths, every project of which depends on hundreds of packages, each of which could introduce a security vulnerability at any time or needlessly constrain our ability to evolve further, and there is basically no solution for that.
- Basically every company that I've been at has been bad in a different way. It's funny that there seem to be almost infinitely many ways of screwing things up.
- Coding in a team is genuinely hard. Even if you all like each other, even if you're all brilliant - you still have to agree to some lowest common denominator and code can never be as elegant and intuitive as something written by just a single person. And when you don't like everyone, or when some people are technically weak, it just gets harder.
I worked in one team, a couple of years ago, that was really great. Unfortunately, we didn't really have support from the rest of the org and were eventually all let go. Since then, I've never found another team with the same level of rigour, ownership, passion and curiosity, and I'm starting to think that it was this once-in-a-lifetime perfect storm that I won't be able to find anywhere else.
I'm not sure what to make of all that. For now, I try to focus more on my life outside of work. I don't hate working per se, I still enjoy solving a hard problem, fixing a weird bug, refactor a hot mess into something readable and writing elegant code, and maybe if I just accept that work is work and not an extension of yourself, all of the above will become easier to accept.