After the fallout with BYI Systems and being broke for 9 months made me reconsider my decisions of not looking for a job. One of the conditions I had was to not look for jobs within India, because working with arseholes is not something that I look forward to anymore. I have had enough experience working with people / companies in India who treat you like shit and I do not think it is neither worth my time or effort to go through that again. So I looked for opportunities outside India.
One such opportunity was an interview with Cliqz[1]. I had a friend who referred me to the company. The company’s profile seemed good, the work looked interesting enough and the job is in Germany so it kind of met my expectations.
First Interview
I had not attended interviews in quite sometime. Understandably I was a bit nervous (also the lack of social skills was not helping) in the situation. The call started off pretty good with introductions. Gabor[2] very promptly explained the kind of work they do. Most of it would involve web crawling, writing up services using python / golang. He also mentioned that I may not be able to work with operating systems, since it was one of the highlighted things in my resume. And I mentioned this is fine and I do not mind working in fields slightly orthogonal to operating systems.
After this our conversation turned to my career history. I explained about my experience with unit testing and TDD. I did mention my rather dismal and lacklusture role as a Drupal developer. Towards the end I was quite exicited to explain about my work with NetBSD. We discussed some aspects of HTTP protocol, RESTFul APIs a typical HTTP vs HTTPS handshake. I do admit that I did not give picture perfect answers but I did give an abstract answer to most of these questions.
Gabor and I also ended up discussing in-depth about my college project called SICvm[3]. I was explaining the basic SIC architecture to him and his first instinct was to ask about the book “The art of computer programming”[4]. I mentioned that I have tried reading the book several times but never could get past the first couple of chapters and that I always felt I was not mature enough to understand the book. His next question was about the hypothetical machine introducted in TAOCP and it’s comparison to SIC. I said it is similar in that respect i.e a machine introduced to explain the challenges of writing software for as well as introduction to tools that may be used to develop machine code which will eventually run in the respective architectures. I did however mention that unlike MIX[5], SIC has a link register which can be used as a mechanism for subroutine calling and returning. But I did mistakenly say that MIX may have a stack mechanism, which it does actually lack. I explained the difficulty of implementing nested subroutine calls in SIC and I had to tackle it by keeping subroutine calls to a maximum of 1.
Towards the end of the interview, he mentioned that the next round will be a series of programming exercises that I need to do and submit.
Programming puzzles
After couple of days wait, I got a mail stating I need to do 3 programming challenges in 90 minutes. The challenges were hosted in a popular European online code evaluation platform.
This was my first experience taking up an online test. Luckily the website did provide an example set of challenges that I could try out to get a feel of how things work. I failed quite terribly in my initial attempts to do the examples due to lack of familiarity with the interface. So instead of taking the test on the same day, I spent a day working out various example exercises from the website to be familiar with the system before going into solving the actual problems.
NOTE: You may note that I am being slightly abstract and not going into the details of these challenges and this is intentional since I agreed not to share the questions or their solutions.
I shall admit it right now that I am not a huge fan of using puzzles to evaluate one’s programming skills. This is due to a couple of reasons.
-
Solving puzzles[6] takes up a different kind of mentality. It shares multiple aspects with programming, but the thought process I believe is fundamentally different from the way engineering is used as a technique to solve problems. Puzzles of this nature are human made and requires some level of convoluted thinking to solve them. It can be fun, but solving a Rubick’s cube does not make you an engineer or mathematician.
-
Real world problems do not present themselves as trivial factorials or jumping around an one-dimensional array. They manifest themselves as actual engineering problems, regarding limits of computational speeds for example or implementing things from a theoretical paper in computer science like a new compression algorithms or optimizing existing problems for time or space efficiency and so on and so forth. In my limited 10 years of writing programs for a living, I rarely had to sort an array or build an algorithm for a balanced binary tree. Of course as a programmer and engineer one is expected to know the existance of things like “balanced binary trees” or “B-Trees” and one is expected to know why one would fare better in a given situation, but I digress.
I addition to the above There is a 90 minute limit on the test, which means I do not get to spent more than 30 minutes on the average for each problems. Once again this creates another issue, the fact that I need to be familiar with the problem space before I can start to write up a solution. Putting a 30 minute time limit on the average does not help with this thought process, at least not for me. To put this in context if someone not familiar with Rubick’s cube is presented with one it would take a considerable amount of time before they solve it for the first time, in contrast for a speed cuber this is a value probably under 30 seconds and for a casual normie this would be under 10 minutes. So putting a hard limit of 30 minutes is not fair or even empirical.
Out of the 3 problems, I was not familiar with two and I was quite familiar with one of them. I spent roughly 15 minutes on the familiar one. Over 50 minutes for one of a non-familiar ones. I was not making any progress on the third one, so I just searched for a solution online and pasted that in. I was slightly ashamed to do this, but I guess all is fair in love and war I suppose.
Now from a company that does privacy based search, I expected a higher standard of questions. With the question set I recieved I am not sure what exactly is their MO. Is it that they only deal with puzzles in their real work environment and everyone is given exactly 30 minutes to come up with solutions?
That being said there is an exception for this rule (a little bit), i.e if you are applying for a company that actually builds and runs platforms that does sort of evaluation of questions being submitted for example HackerRank[7], such an evaluation can be justified to some extend.
My submission had a mistake in the familiar question and the two non-familiar questions actually went through with 100% score. Despite giving me a second chance to fix that error I could not get it done because of a difference in the base assumption between the platform and myself. In the end I managed to score only a 90%.
Second Interview
Sometime later, I got scheduled for a second interview. This time it was with another Director of Engineering. Ahead of the scheduled date I asked via mail if I should prepare myself on any specific topic, for which I got a reply of “No” and I did not need to prepare for anything specific.
On the day of the interview, things did not go so great. I blame myself for some of the things, I shall put an approximate re-collection from my memory on the interview conversation here.
After the usual pleasantries, she asked a technical question
Director of Engineering (DoE): Are you familiar with on how to handle events?
Me: I have some experience handling events in applications, the usual way is to have a callback mechanism that is registered with the event.
DoE: Can you explain how this works?
I went ahead with a bird’s eye view explantion of how “Interrupt handlers” work in Operating systems and from a Web perspective how “web hooks” work within Drupal.
DoE: Now, if you want to record the number of events that occurs every Minute / every Hour, how would you do this?
Me: I will need sometime to think about this.
DoE: That is fine, think out loud, I would like to know your thought process.
Even though I am not too comfortable sharing my half baked thoughts with another person, I went ahead with what I was actively thinking.
Me: One way would be to use a name-value-pair, which records the time, like a unix time stamp and then write up a filter to search specific hours or minutes and count the number of events that happened at that given point in time, take the cumulative and display the total.
After a moment of silence.
Me: But I am not too convinced with the solution, I am sure there is a better way to do it but I cannot seem to think of something better at this moment.
This was not too convincing of an answer to myself and also the reason why I do not like to give out my half baked thoughts to people. Due to the initial assumptions / statement I made and the nature of the answer, the whole thing just tunneled into my specifics of the implementation.
DoE: What do you think is wrong with your implementation?
Now instead of thinking how I can come up with a better solution, I was distracted by what is wrong in an already awful way of doing this simple task.
Me: One of the things I can think of going wrong is, the name-value-pair list keeps on growing large in memory and this will eventually run out of memory. One way to solve this would be to log the timestamps to a file, but that is just shifting the problem to a different space. And as the data set keeps growing over periodic logging of events happening, it just keeps increasing in size.
DoE: Can you think of another way of doing this? How about if you consider an array?
Me: But won’t that lead to the same problem?
DoE: What would be the size of the array?
Me: …
DoE: How many minutes are there in an hour? How can you use that to make the array?
Me: 60 minutes. But I do not know this is helpful.
DoE: Ok, if we multiply the number seconds in a minute by the number of minutes in an hour.
Me: Ok
DoE: At this point, I am literally stating the answer here, What if we use an array of 3600 slots?
Me: Oh, so you do not want to record the events happening, per minute / per hour / per day / per week and so on?
DoE: No just minutes and hour.
At this point, I was pretty much disappointed. I was having the assumption that we are recording events happening, every minute / hour / day / week. Like a typical system log entry. But due to a lot of miscommunication and the heavy european accent (well at least I felt it was) it was hard for me, I knew at this point I had lost out to the question. The one bad assumption and really bad intepretation of the question by me basically resulted in failing this answer. But I carried on…
Me: In that case we can use a circular array of size 3600 and do the calculation on event count based on that.
We discussed a bit about circular arrays and I was expecting some more technical questions in this round or at least a discussion of the various questions I had done during programming round. But nothing of that sort happened. The rest of the questions were less technical and more HR style asking me what sort of qualities I expect from the people I work with and so on.
Considering this was a technical round I expected better.
Towards the end of the interview, she asked me if I had any questions for her.
Turn the tables
Well well, if you made me jump hoops during an interview, it would be unfair if I did not return the favor. During the first round Gabor asked me if I had used the Cliqz browser and I had to reply “No”. And during the time between the interview I managed to get it installed and do some simple tests with the browser and found an interesting behavior.
Searching for the term “Warcraft” yeilded the following results in Cliqz.

Note: As you can see above, this screenshot was taken mid interview. This was because the interviewer was “not” able to “replicate” the search results.
As you can see the 2016 movie “Warcraft: The Beginning”[8], was having higher weightage over, “World of Warcraft”[9] the game. It was just a curiosity when I found this, but it was time to use this as a means to guage my interviewer.
For reference, here is the result of the search of the same term in 3 popular search engines. Google, DuckDuckGo and Bing.

Note: All of the above searches were done in incognito mode. The search results are subject to change as of the time of writing this blog post.
DoE: So do you have any questions for us?
Me: Yes, I am quite impressed by the speed at which your search results are executed and displayed on screen. But I have a question about a particular search result I did. As you might know from my resume I played World of Warcraft quite extensively and when I search for the term “Warcraft”, Cliqz was displaying the movie as the first result instead of the game.
Me: Considering that Warcraft existed since 1994 why is it that Cliqz ranks the movie over the game? What is the logic behind the search indexing algorithm that you guys used? More specifically why is it that Warcraft the movie is ranked over Warcraft the game?
Me: Of course, I do not want to go into any of your NDA / confidential stuff, but a general reasoning as to why this ranking happens would suffice?
After a bit of thinking…
DoE: It could be due to a number of reasons, due to the locality of the search. The importance of the search term.
Me: Alright, but does the search result vary for you?
DoE: I cannot reproduce the result here
Me: That is fine I can sent a screenshot. Even then why would your search algorithm ranks it this way?
DoE: I do not know why it ranks it this way. There are a number of services that happens, a lot of pipelines that the data goes through. Then we have to strip it off any identifiable data to make it anonymous.
Me: Alright, thanks for that explanation.
End of Interview
BULLSHIT, I have been through enough to know when a person starts to “Bull-fucking-shit”. For someone who introduced themself as the person who set up the DevOps pipeline and Mobile developer team, claiming to have over 7 years of experience in this company, does not fucking know how their “core business” technology which is searching and ranking results work is utterly disappointing.
May be it is because she believes in aliens[10] and cookies probably causing amnesia because you know alien abductees suffer from that apparently or was it memory damage from too many cookies.
Sorry if I sound like a judgemental arsehole but that is what you did to me too, ask one abstract question on events and guage everything else on it. I am not saying I gave the perfect answers, but as the Director of Engineering the least competency I expect is that you know the core business aspect of your company.
Conclusion
This is not how your do interviews. And I am not an isolated case[11][12]. Doing interviews and guaging your propective employees is an acquired skill set, it requires some level of comptency from the side of the Interviewer and not just the Interviewee.
I intend to write up a sequel on how an interview “should” be done to find the matching candidate you seek.
References
- https://cliqz.com/en/
- https://cliqz.com/about/team/gabor
- http://sicvm.sourceforge.net/home.php
- https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming
- https://en.wikipedia.org/wiki/MIX
- https://prog21.dadgum.com/177.html
- https://www.hackerrank.com/
- https://www.imdb.com/title/tt0803096/
- https://en.wikipedia.org/wiki/World_of_Warcraft
- https://cliqz.com/about/team/eleni
- https://rejected.us/
- https://www.facebook.com/ce.pramode/posts/1312777725526716