๐ My Quince Frontend Engineer Interview Experience (2025) | Software Development Engineer 3

Position: Software Development Engineer 3 [Frontend]
Location: Bangalore
Compensation: ๐ฐ 40-42 LPA Fixed + 40 LPA Esops
Tech Stack: JavaScript, HTML, CSS, VanillaJS, ReactJS
๐ข About Quince
Quince is a fast-growing e-commerce platform focused on providing luxury-quality essentials at radically lower prices by cutting out middlemen. Their tech team is lean, and their hiring process aims to filter top performersโbut as youโll see in this article, even well-prepared candidates can hit roadblocks.
๐งฉ Round 1 โ BarRaiser Round
This was a highly structured and concept-heavy round where the interviewer focused on a deep understanding of web fundamentals, frontend performance, and clean problem-solving. Letโs break it down ๐
๐น Topics Covered
โก Core Web Vitals (LCP, FCP, CLS)
These are Googleโs UX-focused performance metrics:
- LCP (Largest Contentful Paint): Measures loading performance. Should occur within 2.5s.
- FCP (First Contentful Paint): Measures the time from page load to when the first DOM content is rendered.
- CLS (Cumulative Layout Shift): Measures visual stability. Avoid layout shifts caused by images, fonts, etc.
โ How to improve:
- Use proper
width
andheight
on images. - Avoid using
document.write
. - Use lazy loading.
- Minify JS and CSS.
- Serve static assets with a CDN.
๐ง Critical Rendering Path (CRP)
This is what happens behind the scenes when you type a URL and hit enter:
- DNS Lookup โ Resolves the domain to IP.
- TCP Connection โ Handshake with the server.
- HTTP Request/Response โ HTML is downloaded.
- Parsing HTML โ Builds the DOM
- Parsing CSS โ Builds the CSSOM
- JS Execution โ Blocks rendering unless
async
ordefer
used. - Render Tree Creation โ Layout โ Paint
โ Optimization Tip: Move critical CSS inline, defer non-critical JS, compress images, and preconnect important resources.
๐ Performance Optimization Techniques
- Debounce and throttle expensive event handlers
- Reduce DOM depth and complexity
- Use
requestIdleCallback
orrequestAnimationFrame
when appropriate - Avoid inline styles and long-running JS tasks
- Avoid memory leaks (event listeners, timers not cleared)
๐น Problem Solving
1๏ธโฃ Union & Intersection of Two Sorted Arrays
const a = [1, 3, 4, 6, 7];
const b = [2, 3, 4, 5];
// Union
const union = [...new Set([...a, ...b])].sort((x, y) => x - y); // [1,2,3,4,5,6,7]
// Intersection
const intersection = a.filter((val) => b.includes(val)); // [3, 4]
Problem Statement
2๏ธโฃ Find the Election Winner (Frequency + Order)
const votes = ['a', 'a', 'b', 'b', 'a', 'b', 'c'];
function findWinner(votes) {
const map = new Map(); // ๐บ๏ธ To store frequency of each candidate
// ๐งฎ Count votes for each candidate
for (let v of votes) {
map.set(v, (map.get(v) || 0) + 1); // ๐งพ If already exists, increment count; else set to 1
}
let maxVotes = 0; // ๐ข Track highest vote count
let winner = ""; // ๐ Store current winner
// ๐ Loop through original votes array to maintain first appearance priority
for (let v of votes) {
if (map.get(v) > maxVotes) {
maxVotes = map.get(v); // โ
Update maxVotes if current is higher
winner = v; // ๐ฅ Update winner accordingly
}
}
return winner; // ๐ฏ Return final winner
}
console.log(findWinner(votes)); // 'a' ๐ณ๏ธ
Problem Statement
๐ก JS Note: Use Map
for preserving insertion order with count frequency logic.
3๏ธโฃ JavaScript Object Comparison
let obj1 = {};
let obj2 = {};
console.log(obj1 == obj2); // false โ
console.log(obj1 === obj2); // false โ
Code Block
โ ๏ธ Even though both are empty objects, in JavaScript objects are compared by reference, not by value.
const obj3 = obj1;
console.log(obj1 === obj3); // true โ
Code Block
4๏ธโฃ JavaScript Execution Order (Event Loop)
console.log("a"); // ๐น 1st: Synchronous โ prints immediately
setTimeout(() => console.log("b")); // ๐ Macro task โ pushed to the task queue
new Promise((resolve) => {
console.log("e"); // ๐น 2nd: Synchronous โ prints immediately
resolve("c"); // โ
Promise resolved
}).then(console.log); // ๐ธ Microtask โ added to microtask queue
console.log("d"); // ๐น 3rd: Synchronous โ prints immediately
Code Block
โ Output:
a // sync
e // sync inside promise
d // sync
c // microtask (resolved promise)
b // macrotask (setTimeout)
๐ง JS Note:
- Synchronous code runs first
- Then microtasks (
.then
,MutationObserver
) - Then macrotasks (
setTimeout
,setInterval
)
Priority: Sync > Microtasks > Macrotasks
โ Result: Cleared the Round Successfully
The BarRaiser round tested not just coding, but also how well you understand browser internals, JS runtime behavior, and performance best practices.
๐ป Round 2 โ Machine Coding
๐ก Task: Build a basic app that fetches API data and handles edge cases like failure or empty responses.
โ๏ธ My Solution:
- Used Redux to manage API data
- Wrote a fully structured, modular, scalable app
- Added loader and error states
- Followed production-level patterns instead of just local state
๐ง Tip: Don't over-engineer if the round doesn't demand it. Sometimes, simple solutions are better received.
โ The Harsh Reality โ Rejected After Clearing Everything
Unfortunately, despite solving everything correctly, I was rejected. Here's why I believe this happened:
- ๐จโ๐ป The interviewer was a fresh graduate and seemed uninterested
- ๐ซ No video was turned on during the entire round
- ๐ฃ๏ธ Zero engagementโfelt like speaking into a void
- ๐ No feedback, no discussionโjust a rejection mail
I reached out to HR with feedback, but received no acknowledgment. But if I could have cleared that round, then only the one round would have been left, one of my friends cracked the offer for a similar role, and his HM round looks like below:
๐งโ๐ผ Round 3 โ Hiring Manager Discussion
๐งฉ Topics Covered:
- โ General discussion on recent projects, product ownership, and real-world frontend challenges
- โ
Live coding task:
mapLimit
function to control concurrency in async operations - โ Bonus: Implemented a caching layer to prevent redundant API calls
๐ฏ Takeaway โ Interview Red Flags to Watch Out For:
- ๐ฉ No video on? Might signal disinterest
- ๐ฉ No follow-up questions or engagement? Be cautious
- ๐ฉ Overqualified interviewer mismatch? You might not get the review you deserve
๐ก Never join a company that doesn't respect your time during interviews. If theyโre careless now, what can you expect after joining?
๐ Final Thoughts
This experience with Quince reminded me that performance alone isnโt enough. Interviewers must be aligned, respectful, and invested. Otherwise, candidates are left in the dark, no matter how prepared they are.
๐ Shoutout to all those going through similar rejectionsโyou are not alone.
Hey there from LearnYard! ๐
Glad to see you exploring the free content from our course! Weโve shared 10 valuable articles at no cost to help you get a real feel of whatโs inside.
If youโve found these helpful, weโd love to know! ๐ฌ
Share your thoughts or key takeaways on LinkedIn, Twitter, or Instagram โ and donโt forget to tag Gourav Hammad & Mohammad Fraz. Weโll personally respond to your post!
Thanks for being part of the LearnYard journey. Keep learning, keep growing! ๐
Loved the free content? Want access to the full course โ for free? ๐ธ
Hereโs how: share the course with your friends using your affiliate link (youโll find it on your profile or home page), and earn 20% commission on each sale.
Just 4โ5 sales and youโll recover the full course price of โน999/- ๐
So why wait? Start sharing, start earning, and unlock the rest of the course effortlessly! ๐ ๏ธ๐
๐ข Hashtags for Visibility
#FrontendInterview #ReactJSTips #HiringReality #QuinceInterview #FrontendDeveloper #TechRejection #BarRaiserExperience #MachineCodingRound #CrackTheInterview #InterviewTips #SoftwareEngineerLife #TechHiring #CodeNewbie #FrontendMasters #Quince #SDE3 #QuinceFrontend #LearnYard