Frontend work on apps like Facebook and Instagram means long feeds full of photos and video, comment threads that update live, and chat windows that must feel instant, all on phones and networks of every quality. Meta also created React, so expect questions on how rendering works. Prepare stories about scroll performance, optimistic updates, accessibility and shared components. What to show here: interfaces that feel instant on any phone or network. Each question below has what the interviewer is checking, an answer frame and a sample spoken answer to adapt.
How Meta hires, in its own words, and its questions for every job →
“Our photo gallery page felt fine on office machines, but support tickets said it was slow on phones. I used the browser's throttling settings and a low-end test phone, and recorded a performance profile. Most of the time went to decoding large images and running a big script before first paint. I served smaller images based on screen size, lazy loaded everything below the first screen, and split the script so the gallery code loaded first. The result was your result. We then added a size budget check to the build so the page could not quietly grow again.”
Weak answers list optimisations without any measurement, or only test on a fast connection.
“I built an avatar component that showed a profile photo with an online dot. Three teams wanted it. My first version had many props for every case I could imagine, and people still used it wrongly. After watching two engineers try it, I cut the props down to size, photo and status, and wrote short examples. One team needed a group avatar, so I made that a separate component instead of adding more options. When I had to rename a prop, I kept the old name working with a warning for a while. The result was your result.”
Weak answers describe a component with endless options, or changed it without telling the teams that depended on it.
“If every post stays in the page, memory grows and each layout pass gets slower. I would render only the posts near the visible area and replace the rest with spacers of the right height. Photos load just before they scroll into view, and each has its size set in advance so the page does not jump. Video plays only when mostly on screen and is paused and released when it leaves. I would measure heights as posts render, since text length varies. When the person opens a post and comes back, the feed restores the same position from saved state.”
Weak answers keep appending items forever, or forget that video off screen still uses memory and battery.
“On tap, I update the local state so the heart fills and the count goes up by one, and I send the request in the background. I keep the earlier value. If the request fails, I restore it and show a small message that the like did not save. Quick taps are the tricky part. I would track the latest intended state and only send the final one after a short pause, or tag each request so an old response cannot overwrite a newer tap. When the server answers, I trust its count, since other people may have liked the post too.”
Weak answers wait for the server before updating the screen, or ignore what happens when a request fails.
“I would open the React profiler and type a few letters to see what renders. Usually the draft text is stored in a parent that also renders the list of comments, so each keystroke re-renders the whole thread. The cleanest fix is to move the draft state into the reply box component, so only that box updates. If the list still re-renders because of new function or object props, I would make those stable with useCallback or useMemo, and wrap the comment item in memo. Then I profile again to confirm the list is quiet while typing.”
Weak answers wrap everything in memo without profiling, or cannot explain why a parent state change re-renders children.
“I would use a web socket for live messages, with reconnect that waits a little longer after each failure. Each message typed gets a temporary id and a status of sending, so it appears at once. It goes into a local queue, and when the server confirms, the temporary id is replaced by the real one. If the connection drops, the queue waits and retries in order. After reconnecting, the client asks for anything newer than the last message it has, to fill gaps. Typing signals are sent at most every few seconds and expire on their own if no update follows.”
Weak answers assume a perfect connection, or lose the message a person typed when the network drops.
“I would treat it as a bug that blocks people, not as polish. First I would turn on a screen reader and use only the keyboard to see what happens. My guess is the new viewer uses plain clickable elements with no role or label, and focus stays on the page behind. I would make the controls real buttons with clear labels, move focus into the viewer when it opens, keep it inside, and return it on close. The escape key should close it. After testing with two screen readers, I would add an automated accessibility check and a keyboard test to the release checklist.”
Weak answers call it a rare case to fix later, or test only with automated tools and never with a screen reader.
“I like frontend work where the details decide whether something feels good, like a feed that scrolls without a stutter or a like that responds the instant you tap. Apps like Facebook and Instagram have to do that on old phones and weak networks, which is a harder and more interesting target than a fast laptop. I have built most of my work in React, which came from Meta, and I would like to work close to the people who think deeply about rendering. I want to learn how large teams keep an interface fast while many people change it every day.”
Weak answers say they like the apps as a user and say nothing about the engineering.
No figures on this page: pay depends on the level, the city and the offer in front of you. When the offer comes, the free salary negotiation script helps with that part.
ClapAssist is an AI interview assistant for Mac and Windows. It listens to the interview on your computer and shows you what to say, in short lines you can read while you talk. Your live interview audio and screen are never stored. Your resume and notes are saved to your account so the app fills them in on any computer. It is hidden from screen share on every plan, including Free; only you can see it.