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 you 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