I've had a solidly okay go at being an engineer thus far. I took a year off in school to work in the bay area and fortunately decided to return to school and get my degree.
I've worked on some cool things at a few startups, but I'd describe myself as a slightly above average engineer. I got to work on some awesome greenfield elixir stuff at my last gig, however the org sort of fell apart after failing to transition to full-remote. I was able to secure a 30% raise at a new growth stage org, (still being paid less than I think is standard in NYC for 3YOE but that's okay).
Basically, I've hit my current cognitive bound for my "intermediate" experience. I can do cool things, stuff well above what's available in documentation etc etc, but I still yearn to have the technical prowess to architect bigger and more complex things. Getting to work with event-sourcing code has been interesting, but my new gig although it pays well isn't really challenging me. It seems like I've been passed for interviews because of this too? I can't tell if this is because I'm a bad employee and the org doesn't trust me or if I just picked wrong and ended up stagnating my growth that way?
My catch 22 dilemma here is that I sort of suck at leetcode interviews, but in order to learn from a more advanced org with bigger challenges / opportunity I first have to be able to actually land an interview and pass. If I can't do that I feel like I should do product stuff, but obviously you have to get a product gig before you can really apply for those roles.
Thankfully, I'm located in NYC so there's plenty of opportunity here. I'm feeling a bit lost, because if I can't realize too much of it what's the point of living here after all? Admittedly, part of this is wanting to maximize my value and grow at the same time - I'm sort of worried that I might never reach the ability required to say even get a lowly gig at Bloomberg or something bigger than a series C startup?
Apologies if this sounds like a stream of consciousness - really looking for some guidance from people smarter than me / with more experience.
Let's hope 2022 is a better year ahead!
So my advice if you feel like you can't get this progression via work related activities and you really wish to push yourself. Just go ahead and build something in your own time. One of the great things about software engineering is that you can do far more learning and experimentation on your own than some other disciplines. It's great if you can be paid to learn but you don't have to be trapped in a stagnant state if you aren't fortunate enough to be in a company that helps you do that.
1) Silicon Valley volume of opportunities - lots of companies, lots of projects and a region that understands job churn, so no penalties for job hopping for the right reason. I have no clue how things work in 1 company towns.
2) Smaller companies working on challenging projects are desperate for people to grow into new roles. My first three jobs over 6 years all had engineering orgs with fewer than 100 people. Do your role well, and look for next steps as new projects come in. Actually review project proposals and design docs and provide feedback. If you don't know enough about the area to provide feedback, shift the material into #3 below.
3) Work at continuous learning. I did 5 to 10 hrs per week on growing my knowledge. Tech papers, coding side projects, in depth studies of the tools (s/w, infrastructure and h/w). In retrospect, this was sort of my version of 20% time by the pathological definition (I mentally budgeted this as for every hour above 40 I did for the company, I would do one hour for my career).
4) Learn the actual business. Who are the customers, what are they paying for, who is the competition.
5) Always interview the company to be sure there are people you want to learn from who are willing to help you grow. Of course what you will want to learn in two years may not match what you do when you take the job. If you get to the stage where you aren't learning from your coworkers anymore, look very hard at whether you should move on.
The modern coding interview is an interesting challenge. You'll get good at coding by writing more code in your day job or as side projects, and that will either show up in the interview, or you are one of the unfortunate "not a great coding interview" people. Practice can help - work with a friend doing fake interviews. Otherwise, some places will evaluate open source submissions to see if you have coding chops, which is of course the actual goal of this type of interview.
Finally, if you are desperate to get into a FAANG etc, but the interview path to s/w developer isn't working, think outside the box. SRE can be great both as a career and learning path, as can SQA. Also, you can check into acquisition news - if a company is buying Jane's Software Extravaganza, Inc, and Jane's is still hiring during the acquisition review period, see if there are roles that might work for you there.
Keep grinding. 3 years is not senior.