Zalando | Senior Software Engineer(FE) | 8 YOE | SELECTED

Role: Senior Frontend Engineer

Designation: Senior Software Engineer

Location: Berlin, Germany

Interview Mode: Online

Result: Selected

Online Coding Test

The coding test was on Codility. The problem statement was pretty straightforward. It was a take-home test for 3 hours.

Question: React-Node-based application to design a search box with auto-suggestion list on every keystroke.

I implemented it with React and Node and added the required test cases.

The solution was accepted. In my opinion, a few things that we should care about while submitting a solution like this include:

  • Implementing basic required features
  • Writing better Unit Tests (add multiple scenarios)
  • Writing better comments in code for each function and complex logic
  • Using meaningful variable names (do not use foo, bar, etc.)
  • Implementing techniques for better performance (used debouncing in keystroke event)

Always keep in mind, when the problem is complex in nature, it means evaluating your problem-solving skill and abilities to break down big problems into small ones and then solve them. When the problem is straightforward and easy to implement, it means they want to know how beautifully and perfectly you can solve the problem, because they are aware that this problem can be solved by a lot of candidates.

// Example implementation of a debouncing function in JavaScript
function debounce(func, wait) {
    let timeout;
    return function(...args) {
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(this, args), wait);
    };
}

// Usage of debounce in a React component
import React, { useState, useEffect } from 'react';

const SearchBox = () => {
    const [query, setQuery] = useState('');
    const [suggestions, setSuggestions] = useState([]);

    useEffect(() => {
        const fetchSuggestions = debounce(async (query) => {
            // Fetch suggestions from API
            const response = await fetch(`api/suggestions?query=${query}`);
            const result = await response.json();
            setSuggestions(result);
        }, 300);

        if (query) {
            fetchSuggestions(query);
        }
    }, [query]);

    return (
        <div>
            <input 
                type="text" 
                value={query} 
                onChange={(e) => setQuery(e.target.value)} 
                placeholder="Search..." 
            />
            <ul>
                {suggestions.map((suggestion, index) => (
                    <li key={index}>{suggestion}</li>
                ))}
            </ul>
        </div>
    );
};

export default SearchBox;

Solution Discussion | Round 1 (45 Min)

In this round, a senior software engineer was taking my interview. It was pretty easygoing; he made me comfortable by asking general questions about the day and slowly started to deep dive into the code that I had submitted in the coding challenge.

The main purpose of this interview was to understand my ability to explain the code that I wrote. Some of the questions were:

  • What will happen if we removed imports?
  • How can you optimize the application further?
  • Can you write your own debouncing method?

This round was mainly for evaluating that I had submitted the code and that I know how things work in React.

JavaScript Technical Interview (1 Hour)

In this round, two senior frontend engineers were taking my interview. It was purely JavaScript-focused. They covered topics from ES6 features to JavaScript execution, event loop, and more.

Topics covered:

  • DOM Tree, DOM Parsing (with async, defer), CSSOM, FCP (First Contentful Paint), Time to Interaction, rendering time, server-side rendering, non-blocking and blocking loading
  • CSS Specificity, HTML5 semantic elements, Web Accessibility (roles, alt, aria-hidden, aria-labelledby, aria-describedby), reading with screen reader like VoiceOver, sprite vs. SVG
  • JavaScript types, functions, objects, prototyping
  • ES6 features like map, object destructuring, filters, array.some
  • Builder Pattern, SOLID principles
  • Request header, cookies, clickjacking, Cross-Site Scripting (XSS)
  • Webpack, minification, and bundling, bundle optimization

Apart from JavaScript, some questions were also on:

  • Dockerization
  • CI/CD Pipeline
  • Automated Testing
  • Git Hooks

This round was mainly to evaluate my experience and expertise in these topics.

System Design (1 Hour)

This round was scenario-based. A Senior Principal Engineer was taking this round. I was given a scenario that uses a load balancer for HTTP requests and how we can optimize the database read-write operation in the same system.

This was mainly a discussion and drawing of the system architecture. For database read-write operation performance optimization, I represented something like this:
image

This was mainly to evaluate my understanding of the complete system (including server, loading, database) and common solution approaches to load balancing, database operation, etc.

Discussion with Engineering Manager (45 min)

As you all know, this is not a technical discussion. The discussion with the Engineering Manager was mainly to understand my personality and teamwork capabilities. Some interesting questions included:

  • What will you do immediately if your code breaks the production system?
  • What will you do if you are not feeling motivated to work?
  • How will you resolve team conflicts?
  • What is your idea about leading a team?
  • Are you comfortable working in a cross-functional team?

It was a very long day and these interviews back-to-back were intense. But I appreciate each interviewer from Zalando; they made me very comfortable. My overall experience was great. 😊

I got my result after 2 weeks of interviews. It was a tough waiting time for me, but everything paid off in the end.

Comments (1)