I love software development. I have the right personality for it and have a logical mind suited to this kind of work. I literally can't imagine doing anything else nor do I want to. But the last 6 years have shown me that I might not be good enough to succeed in this field. To be blunt: I'm not smart enough. Let me explain:
I started my career as a dev at a large defense contractor where the work was very relaxed. Got by fine and stayed there for two years while I completed my CS master's. After graduating, I struggled like hell to get past interviews for new jobs. Eventually, I got a position at a decent tech company.
I was 'ok' at my job. Not great at it. At all. I could get my work done for the sprint but it took me nearly twice as long as my co-workers who were hired at the same time as me. This might be fine if my code was better but it was not: it was still buggy or disorganized come time for code review.
I couldn't learn as fast as my coworkers. I couldn't problem-solve as fast. They were more clever and connected dots that I didn't even see. I often had to rely on them heavily to get my work done. They weren't jerks about it but my manager constantly compared my work to theirs. He constantly was giving me feedback like: "This should take 10 minutes", or "You should be able to understand this quickly". He never said it out loud but in the tone, I could hear what he was really saying: "Why aren't you smarter??".
I switched off that team. Figured it was a bad project match and went to another team. I resolved to be a lot better. I thought to myself, all I needed to do was work harder. Study more deliberately in my free time. Twice or three times as much as my coworkers. Then I'd finally be able to make myself good enough.
But after a year on that new team, I was starting to see that was never true. In spite of my diligent effort, I still couldn't keep up. Not even close. Every time I'd do pair coding I was always the one lagging behind.
I read books on clean code, took online courses, practiced on my own personal projects, and even timed myself while writing code. I studied how to learn faster. I even met with my psychiatrist, got diagnosed with ADHD, got meds, and a rigid diet/workout routine to improve my cognitive function.
Slight improvements. My manager didn't even notice. The feedback, however tactful, was the same: "Why aren't you smarter??"
"Ok I need a change of pace," I said to myself. "I'll apply to a different company." Struggled like hell to prep for interviews again and I landed at another reputable tech company.
After a year at this company, last week I got put on PIP. The feedback: "Takes too long to deliver on tickets. Relies too much on the senior engineers for help given his experience level."
Will I find another job? Probably. But I have too much experience for junior/mid-level roles, and yet will almost certainly struggle at the senior level. Worse still, there are juniors who produce better than I can and It'll be obvious soon.
It looks like I will never be able to work hard enough to do the work of people with actual talent. I'm always thinking all of my efforts will pay off but, in the end, it's always the same: It seems I'm destined to always be mediocre no matter what I do.
I turn 29 in December and it feels like my career is already over. I don't know how to take it; I'm not sure what to do anymore; I've tried everything I can think of. I desperately don't want to give up but it might be time to read the writing on the wall.
It seems like everything was already settled for me before it even began: if only I had been born a little smarter.
JobAdvisor:
Few ideas:
you could go back to a slower-paced, more “boring” position like the defense work. Government jobs, old companies, and hardware companies.
you could switch specialties so you can get beginner-type work again
you could keep company hopping, filtering for companies that have positive management reputations (safety to fail, mentorship, etc) and working on these skills in therapy, and hoping the small gains will keep racking up.
you could do contracting work where you aren’t being compared directly to other engineers
depending on your non-programming skills, you could pick another role at the companies you’re into. Engineering managers often don’t code at all.