Fighting Imposter Syndrome, and Switching From Backend Dev to Machine Learning Engineer
This blog post is about fighting thoughts on imposter syndrome, and about the journey of switching careers from a backend Laravel developer to a machine learning engineer. I’ll touch on imposter syndrome in a bit, for now…
Some background
I used to work at a company that built a B2B SaaS solution for building your own AI agents (more chatbot than agentic, honestly). It was a really great company for me in my first years in tech. I learned a lot from everyone around me; not just about BE dev, but engineering as a principle, which I can’t overstate the importance of. Working on novel problems in a startup environment fostered my curiosity and tenacity for problem solving to a much greater degree, and it definitely pays dividends with how it transfers across roles.
I was there for about 18 months and most of that I genuinely enjoyed. Towards the end however, things started to shift, the way they often can at small startups. The pace quickened, the appetite for constant output kept growing, while headcount thinned to generate more runway. Soon, I was 1 of 2 engineers. For context of scale, in addition to our 5 BE engineers in product, we used to have an entire Professional Services team, with 3 engineers and a Head of Delivery managing client engagement/requirements. Don’t get the wrong idea, none of that was anyone’s fault, sometimes that’s just the reality of startup life. I hold no ill will towards the company for it, they were navigating a tough situation. The practical result though, was more workload spread across fewer people, with less and less time to think and learn - to do anything beyond the next feature.
The longer I spent there, the more washed up I felt. My Data Science skills and shiny new degree I dedicated 4 years of my life to? Atrophying into the ether. The work itself wasn’t bad, but I sensed I was stagnating, just about keeping up. When you get into that headspace, it makes you believe that “keeping up” is now all you’re cut out for.
The decision to make the move
I studied ML extensively at uni - but my career was keeping me at the periphery. Working at a company in the AI space meant I was adjacent to a lot of interesting problems without actually working on them directly. At some point I decided I wanted to stop being adjacent and start being involved. A lot of people who are non-technical don’t get this. But I like to try to put it this way: imagine you’re an artist, and you love painting beautiful landscapes, but instead you’re forced to only paint the clouds above them. It’s not quite scratching that itch, you can almost taste what you want, but never quite get it. This is what it was like for me. I tried to push for features we should overhaul in the product (our analytics dashboard needed some love). I did a whole 45 minute talk on how much data we record, and how we could be better utilising it, generating more complex insights, more sophisticated visualisations. It went down great; it generated a ton of discussion at the end and some serious proposals and solutions. Only during my last week did that feature approach the roadmap, which was unfortunately too late.
Luckily, I had a recruiter approach me about a role at a really awesome Applied AI consultancy. The company’s ethos and mission: “the safe, widespread adoption of AI”. It felt like I’d finally found a company that is genuinely trying to better humanity with the development and integration of AI. Just what I was looking for. On their website, and on glassdoor, they preached how they only hired ‘top talent’. I felt a wave of imposter syndrome hit me. I had convinced myself I wasn’t ready before even trying. If it wasn’t for my partner, I’d probably have ghosted the recruiter or told him it’s not the right fit. She said “the worst thing that could happen is I’d learn a lot in the process of trying”. She was right.
If I was going to try for this company, I wanted to give it my all. That meant studying 2-3 hours a night, minimum. Pandas, system design, Docker deployments, CI/CD, Pytest, Python - all the skills I’d need to polish for the upcoming pair programming and systems design interviews I knew were coming. All after a full day of work. It was exhausting, my brain felt like it was on the brink of overload every day. I read Chip Huyen’s Designing ML Systems (mostly), and a bunch of other ML interview specific books. I kept going out of a mixture of determination and fear (of failure), not confidence.
The interview process
The whole process took me about 6 weeks start to finish. In part, because work became so unimaginably busy that I genuinely didn’t have the time to give for the interviews and some of the prep required, without first getting through my sprint tickets. As I said, headcount and workload were stuck in a toxic, inversely-proportional relationship. I won’t get too deep into the specifics, but there is something uniquely humbling having 2 senior engineers watching you code in real time. I think I mentioned on 3 separate occasions how nervous I was, as I apologised for making another typo. Watching me forget some basic syntax and having to google the Pandas documentation real-time while sharing the whole thing. There were moments where I stumbled, where I had to say “I don’t know, but here’s how I’d think about it,” and where I was pretty sure I’d blown it. But I think that’s just what a rigorous process feels like, and I tried not to read too much into the anxiety.
Each round, I kept thinking “I doubt I got through, but I’m damn proud of myself for trying. At least I gave it my best”. I was even more shocked when the email came through with “Congratulations” from the Lead Talent Partner each time. For the Pair Programming, the one I thought was especially rough, the confirmation came through the same day! A rarity in hiring these days.
Getting in and feeling out of my depth
I got the offer, which felt absolutely surreal. And almost immediately, the imposter syndrome kicked in properly. Some might ask, “If you got the job, how can you feel like an imposter?”. I think it comes from a mixture of things. The reputation of the company precedes it — a 0.7% acceptance rate doesn’t exactly help you feel like you belong. Then there’s the codebases.
Moving to new codebases always makes you feel that sense of imposter syndrome. Massive chunks of legacy code from years past mingled with bleeding edge tech. It’s daunting. You have this perception that you’re expected to just dive right in and start adding features or completing refactors. The reality is though, it’s all about building up gradually, and usually in my case, writing some tests first. This is what helped me figure out how things connected, what takes what arguments, where things fail. All while tackling notorious tech debt. Everyone hates it, no one wants to do it until it’s critical. But, when you’re just joining, it’s an easy in. You don’t get the pressure of blocking someone else’s PR who needs your work, or completing the feature by a deadline. You can take the time you need to figure it out, and people are grateful for you doing it. And then there’s the people.
My new colleagues were genuinely some of the smartest people I’d ever met. PhDs and Masters from the best universities, experts who’ve built production ML systems at massive scales, and super niche deployment environments with tons of constraints. Engineers and scientists who discuss novel papers and architecture tradeoffs at a level I’m barely able to catch up to. In my first few weeks, I understood about 40-50% in any given meeting. I’d be lying if I said that didn’t make me more than a little nervous.
But, here’s the thing I’ve now come to appreciate: being surrounded by colleagues who are better than you at nearly everything is an incredible learning opportunity if you let it. It can be an ego hit, there’s no getting around that, but underneath are conversations that give you the chance to learn something new all the time. Every pairing session, every code review, every casual chat about how to approach a problem. The density of learning is unlike anything I have experienced before.
The culture encourages this too, asking questions and gaining new knowledge is a foundational pillar of being successful there. No one makes you feel stupid for not knowing something, people are always happy to explain things, and actually seem to enjoy it mostly. That makes all the difference when you’re the newbie who’s just trying to find their feet.
Managing to show my worth
I had my mid-probation review at the 3 month mark. To be honest, I was going in expecting some constructive criticism. “You’re doing okay, but here’s some areas you need to work on”. The usual thing.
Instead, the feedback was really positive. My manager said I’d ramped well, that the work I’d been putting in was being noticed, and that I should be thinking about going for promotion at the end of my first year. It caught me by surprise. Not because I hadn’t been trying my best and working hard, I absolutely had, but because the narrative in my head was still very much “you’re the Laravel guy who snuck in”.
On imposter syndrome
I said I’d come back to this, so here it is.
Imposter syndrome hasn’t disappeared. I don’t think it does really. I still sit in meetings where people are discussing things way above my current level and feel the familiar twinge creep in “I shouldn’t be here”. But, I’ve now started to reframe it a little. If I never felt out of my depth, then I wouldn’t be testing my limits. Therefore, I wouldn’t be growing. The discomfort is not a sign something is wrong, it’s a sign I’m in the right environment.
Another point to add, is that the people I look up to - the ones I think “have it all figured out” - often feel a similar way. Imposter syndrome isn’t about competency. It’s the gap between what you currently know, and what you think you should know. I believe that gap exists for everyone. It just gets smaller when you stop treating it as evidence, and start treating it as a signal you’re where you need to be.
This isn’t to say that the above is a cure for feeling this way. I think it’s more about refining the process of feeling like an imposter, accepting the emotion and then reframing it after. Making sense on reflection. And over time, that loop becomes faster, until eventually, I hope to get that feeling and shortly smile after. Because I know what that feeling means now.
If you’re thinking about making a similar jump
I’m not going to pretend I have all the answers, because I’m only 24 and still very much figuring things out. But if you’re in a position similar to where I was — feeling stuck, wondering if you’re capable of more, eyeing a role that feels out of reach… I’d just say this: the gap between where you are and where you want to be is probably smaller than it feels. The skills you’ve built are more transferable than you think. And the worst case scenario of trying is that you learn a lot and end up better prepared for the next attempt.
Start practicing. Apply for the thing. Be willing to feel uncomfortable for a while. It’s worth it.