Meta had been on my wishlist ever since it began hiring in Bangalore in February 2025. An old colleague, now an E7, gave me a referral, and through all of 2025 I applied to a wide spread of openings without once checking the level requirements. Job alerts were on, and any new posting got an application from me right away.
At some point a recruiter hiring for an E6 role based in London reached out, which honestly shocked me. I walked her through my background, and we both felt it sat closer to E5. She told me she would submit me as E6 regardless, since I had worked across teams and driven a couple of critical projects.
My screen was set for roughly a month after that chat. All through 2025 I had been grinding problems, following the well-known free DSA roadmaps and keeping a daily streak going on LeetCode. By the end I had gone through every topic, and I had Gemini play the interviewer in mock coding sessions. I also leaned on it a lot to rehearse how I would phrase my behavioural answers. During that last month I bought LeetCode premium and worked through every question reported for Meta in the previous 90 days.
In the screen itself, two questions came straight off that list and I solved both comfortably. The interviewer added a couple of behavioural questions as well, about my most impactful project and about a disagreement with a partner from another function. My real experience and all the Gemini rehearsal made those easy, follow-ups included.
Two days or so later, a second recruiter wrote to say I had passed. She laid out what came next and told me I would be going forward at E6, because they rated my coding as very strong and my experience as relevant.
Since those two areas felt prepared, I booked the coding and behavioural interviews for one week after the screen result, and the two Product Architecture rounds a week beyond that, because my experience leaned toward product more than infra.
In between, I worked through an online system design course, watching one video a day, including on topics I had zero background in. I paired it with hands-on practice: whatever I watched on a Monday, I practised on the Tuesday, and so on, so I ended up both watching and practising the entire set. I also arranged several peer mock interviews on a mock-interview platform.
Day 1 had the standard coding round and the AI-enabled coding round.
The standard round opened with Group Shifted Strings, and my mind went blank. I sank 5 to 10 minutes into tracing examples without finding anything clean, and I was pretty much going around in circles. After a hint from the interviewer I got to the answer, but by the time the code was written it had some typos and one bug. The second problem involved trees; I had an algorithm and a solution in mind, but there was almost no time left to do it. A rough start to the onsite.
It stunned me that after close to a year of practice I had choked on an easy problem. The AI-enabled round was only an hour away, so I decided not to stew on it and took a walk to reset. In my mind the application was already dead. Oddly, that calmed me down: this was surely my worst possible performance, and if I got rejected for it anyway, I could do the remaining rounds with zero pressure.
The AI-enabled round's problem was about finding words that appear inside other words as substrings. It was new to me, yet I had no trouble finding my way around the codebase. The interviewer began by asking me to go through the code and tests and state the time and space complexity of the brute-force solution already there, which seemed simple. Next he told me to implement an improvement. I was already sure a Trie was the way to go. I prompted the AI assistant with Opus 4.5, and after roughly two prompts it simply stopped returning output. Sonnet did the same thing. Gemini 3 gave nothing either, and neither the interviewer nor I could tell what was broken. Gemini 2.5 finally worked. What I appreciated about this round is that the AI performs very well once you are specific about what you want. I requested two solutions, one built on substrings (a bit better than the brute force) and one on a Trie. Within the 50 minutes I showed both, explained them thoroughly, ran benchmarks and wrote new tests. The interviewer looked genuinely impressed, and he more or less signalled that he would recommend a strong hire.
So Day 1 was uneven, but that excellent AI-enabled round gave me a little hope.
Day 2 was the behavioural interview.
It was a string of the usual "tell me about a time" prompts. The AI practice felt justified. The interviewer kept a completely blank face, so I had nothing to go on about how my answers were received.
After that I took a week off, and the product architecture interviews made up Day 3.
Round one asked me to design a catalog system. I had not met that exact question, but the course videos and the peer mocks all came flooding back. I got a sound list of requirements down in 5 minutes, the APIs and core entities in the next 5, and the design with deep dives in the last 30. We had some great exchanges about marketing events that cause enormous bursts of writes, and about the integrity of the images in an uploaded catalog. It felt like one of my best interviews ever, and the interviewer seemed impressed as well. He said he had enjoyed running it. I assumed I had banked another strong hire and went into the final Product Architecture round far more confident.
That final one was to design online chess. Two-way communication such as WebSockets is not my comfort zone, and pitching it at Facebook scale sounded intimidating. I still fell back on the structured approach I had used in my earlier mocks, split the requirements up, and took them on one at a time. The interviewer asked a handful of follow-ups, but I thought the overall design was complete.
The next day the recruiter messaged that my packet was headed for initial review. A week later she asked to set up a quick call. "Quick call" has never meant good news to me, but this time the news was mixed. Both the AI-enabled panel and the product architecture panel had given strong hire. The behavioural interviewer thought I matched E5 more than E6. The coding round, though, was a no hire. The recruiter pointed to the bugs in my code and to the second problem, which I had hurried and not finished. On top of that, my answer to the first problem was not convincing enough to earn even a lean hire. To settle the conflict, they asked for a follow-up interview.
Because I was travelling, I booked that follow-up 15 days later. It started with Range Sum of BST, which I explained and coded in under 10 minutes. Then came a twist on Merge Intervals that has no direct match on LeetCode. I derived an algorithm and talked through it carefully, corner cases included. The interviewer seemed satisfied and told me to write it. This time my code came out sloppy. I lost a lot of time trying to handle the main example and tangled myself up with the iterators. I got it finished somehow, but it looked really messy to me, and I could not tell whether the interviewer bought it.
When another quick call request showed up a week on, I was sure this was the rejection. The recruiter actually told me the feedback was positive.
What they still wanted was additional E5-level evidence from the behavioural side, mainly regarding the scope of my work.
I took the first slot available, two days later. There were four questions: balancing competing priorities, a disagreement with a manager in which I was the one in the wrong, a moment when I changed course halfway through a project, and mentoring a colleague. I had a strong story ready for each. Beforehand I had also practised telling my stories in the CARL format.
Another week passed and an email arrived saying I had cleared the onsite interviews and would be moving on to team matching. It has only been a week as I write this, so I am waiting to see what comes next.
Discussion
Loading comments…