I think I'm a good generalist with technical breadth and got I ask appropriate questions to learn a new stack. I think I lack in technical depth. Either I haven't had opportunities to develop meaningful technical depth or I haven't known how to leverage those opportunities.
A perceived limitation is I tend to associate these opportunities only with refactoring, which needs buy-in from business, but maybe there's more I don't see. My experience has been business only wants to spend the type of work that applies to covering 80% of the needs and the rest tend to be edge cases that don't get much review during initial design & implementation.
An idea I've considered is deliberately practicing DSA interview questions with the intent to identify concepts that may carry over to other implementations. How feasible does this seem?
And now, here's my thoughts around finding technical depth in general. At a high-level, my thought is to move away from the product layer and more towards infra. So what exactly does that mean?
Lastly, this isn't directly related to technical depth, but I highly recommend this discussion (also from a mid-level engineer) around how to come up with innovative, impactful projects: "How do I come up with innovative, impactful ideas and bring them to my team?"
Great question - I really appreciate all the added context! π
I'll split response into 2 parts: First I'll cover the pieces specific to your current situation, and then I'll share my thoughts on finding greater technical depth in general across the industry.
A perceived limitation is I tend to associate these opportunities only with refactoring, which needs buy-in from business, but maybe there's more I don't see.
I think your introspection is correct - There's far more to technical depth than just refactoring. In fact, I'm actually not a huge believer in massive refactors - The impact is hard to measure and they often times make things worse. If you are going to go down this refactoring path though, here's some great resources around strategies for measuring the impact and getting buy-in:
My experience has been business only wants to spend the type of work that applies to covering 80% of the needs and the rest tend to be edge cases that don't get much review during initial design & implementation.
This is unfortunately a pretty common operating pattern - So many companies and their execs just want to do the absolute bare minimum to get working software into customers' hands. Something to think is whether this is a default operating mode or something explicitly mandated by the company. Let's say you push to cover those 20% of the more "edge" cases to really ship a robust, stable, and scalable product that works in all scenarios - Will you get pushback or do you think there's a chance it'll be accepted?
When I joined Instagram Ads, the coding culture was decent, but it wasn't the best. I got a lot of credit for leaning the org towards being more quality-oriented by revamping the oncall process to fix bugs faster, making code review culture much healthier and thorough, and just doing a ton of cleanup work in general (and making all my mentees do it too, hehe). It was big part of my promotion to senior and finding staff scope; maybe you can do the same too. This is definitely to talk to your manager about.
An idea I've considered is deliberately practicing DSA interview questions with the intent to identify concepts that may carry over to other implementations. How feasible does this seem?
In a nutshell, not very. It's definitely possible, but it's pretty rare to find a real-life engineering problem that requires a "DSA-esque" solution. And even if there's a DSA component involved, a lot of it is abstracted away by core libraries anyways.
Alex's comment about moving away from product matches my experience. I moved from a product team to a research team.
I still feel like a generalist, but the research team offers an opportunity to dive into technical problems on a months-long scale.
The sub-team I'm on within the research team functions as an engineering team embedded in a team of scientists. I like being exposed to the domain of the scientists (biology, stats) while being able to offer engineering experience.
If you work at Capital One, I'd guess there's a fraud detection team. Maybe there's a team that builds infrastructure to run the anti-fraud models at scale. A team like that intersecting two domains could have interesting technical problems.
How novel can you be relative to your peers while solving problems? In my latest job, I'm wanting to revamp everything after ~1800 hrs of study and I'm largely in charge of a number of large-scale initiatives whereas some teammates might only be in charge of epics. That being said, get a sense of how often your coworkers defer to your knowledge in a meeting and then tip that in your favor by focusing in on areas of interest. I do high-end AI/ML, software development, DevOps, and business C-exec level stuff and that's all I'm good at, very little more if you count personal hobbies and trust me it shows in personal life. Build more knowledge in whatever interests you and build out your 10,000 hrs of learning. Remember only your own effort limits you from becoming as good as you want. Just didn't change or do lateral moves too much because you kill forward progress. Hope this helps!