Honestbee 面試:10 億美元新創公司、被困倉庫的主管與胡椒牛肉飯
The $1 Billion Startup Interview, the Director Locked in a Warehouse, and a Beef Pepper Rice
作者回憶自己在 2018 年參加 Honestbee 的 Senior Data Engineer 招聘面試,並在 7 天內完成以 Dota 2 公開 API 為基礎的居家技術測試。測試要求用 Python 編寫 Web API,提供玩家勝率排行榜、玩家比較和英雄推薦;作者以 Flask 和 SQL 實作。
Back in 2018, Honestbee was one of Southeast Asia's most promising startups. It was valued at almost $1 billion and was ready to revolutionize grocery delivery. I had never heard of them, but my relatives in Singapore confirmed that they actually used the service. I later found out that the company was hiring like crazy at the time, paying well, and looking for talent all over the world.
One morning, I received this email:
My name is Joey and I am the Talent Acquisition Partner here in honestbee.
I came across your profile on Stack Overflow and noticed that you are currently
looking for new opportunities. [...] We are currently hiring a Senior Data Engineer,
will you be interested to have a chat with me to find out more?
A few days later, we scheduled a first call. It wasn't a technical interview, just an initial screening with a recruiter. She wanted to understand whether there was mutual interest, whether my experience matched their needs, and whether the idea of working on the other side of the world made sense to me.
The fact that I lived in Italy wasn't an issue. They were used to handling relocations, but the fact that I actually knew Singapore was considered a plus. I had relatives there, and my wife had previously worked at Marina Bay Sands, then at Orchard Road and Changi Airport, selling clothes and accessories.
During the chat, perhaps to break the ice, she asked me what my favourite Singaporean dish was. I could have said "Chili Crab" or "Hainanese Chicken Rice", but instead I answered "Beef Pepper Rice" from Pepper Lunch.
She started laughing. Pepper Lunch is actually a Japanese chain, not a typical Singaporean restaurant. It's a bit like saying your favourite Italian dish is Turkish kebab. But honestly, it's the kind of food you actually eat when you live there.
Anyway, I passed the first screening, and a few days later she sent me a take-home test.
A take-home test is not a multiple-choice exam. It's a real programming problem, often based on an actual company use case, that you solve at home without an interviewer sitting next to you.
I like this kind of test because it changes the whole dynamic of recruitment. You're not trying to guess the answer the interviewer wants to hear. You're showing how you actually work, using your own tools and your own time.
Joel Spolsky, co-founder of Stack Overflow, makes a similar point in his famous Joel Test, question number 11: "Do new candidates write code during their interview?"
If a company hires you without asking you to write any code, it's hiring you on trust. A take-home test lets them see how you actually work, not just how well you perform in an interview. Of course, AI has changed all this nowadays, but that was 2018.
Job Description and Test
Shortly afterwards, Joey replied, attaching the job description and the test.
Hi Federico, Thank you for your CV and it was pleasure talking to you earlier.
Please find attached the JD and the technical test for your review and attempt.
You have 7 days to complete the test.
The job description was overwhelming. They were looking for a Senior Data Engineer to handle terabytes of data, someone who knew Kafka, Kubernetes, Redshift, GCP, and could build real-time ETL pipelines with Airflow.
It was the kind of job posting that looks scary. But hey, they were the ones who had contacted me.
The test, on the other hand, was much more concrete and practical. They asked me to write a few web APIs in Python, using the public Dota 2 APIs, to solve three specific problems:
- Given a list of players (by ID or username), return a leaderboard based on win rates over different periods (last week, last month, etc.).
- Compare two players.
- Suggest a hero to a player based on their historical data.
I also liked this note:
We are looking for elements of good style and creativity, so go for elegant code as well as originality.
Too bad I had barely written any Python in my life, and I had no idea what Dota 2 was.
The Test (and the Art of Admitting You Don't Know)
Dota 2, apparently, was a famous online competitive video game where two teams of five players fight each other using characters called "heroes". It was a massive phenomenon, with tournaments offering millions in prize money.
I had no clue about it, and no intention of learning its lore. Fortunately, match statistics were available through web APIs.
I didn't need to understand the game. I just needed to understand its data: what a match was, how a win was calculated, and how to connect a player's ID with their favourite heroes. I spent the first evening going through the OpenDota API documentation.
As for Python, I could have simply given up. Instead, I tried to figure things out, starting from what I already knew: mostly SQL and Perl.
I had seven days. After trying out a few libraries, I went for the simplest solution I could think of: Flask as a minimal Python framework, and PythonAnywhere to deploy the application without having to configure any complicated servers.
I split the application into two files: flask_dota2_app.py to handle web requests, and dota2utils.py for the business logic.
For the hero recommendation, I relied on SQL. I wrote a query using a couple of CTEs to identify heroes the player had tried often enough to be familiar with, but not necessarily mastered. The idea was to suggest someone they could improve with a bit of practice, rather than their absolute favourite hero or a completely unfamiliar one.
Of course, I had to take a few shortcuts. To pass the player's ID to the SQL query executed through the OpenDota API Explorer, I wrote this:
# substitute the sql placeholder with the account_id - not usually the
# safest way to run a query but on this particular context it can be fine
query = queries['recommendations'].format(account_id)
I knew it wasn't the safest way to run a query. But with 24 hours left before the deadline, and only seven days to learn Flask and the Dota 2 API, .format() did the job.
I figured the comment would be appreciated: I'm doing something wrong, I know it, but at least I know that I'm doing it.
Years later, almost as if to close that circle, I wrote a Python library called filtersql to prevent SQL injections in dynamic queries.
To submit the test, I also prepared a PDF report using StackEdit and Markdown. I explained my choices, including why I had ignored username searches (Steam usernames are not unique), admitted that the player comparison endpoint was the least elegant part of the project, and pointed out that I couldn't verify the time zones used by OpenDota's servers when testing the time filters.
The Director Locked in a Warehouse
A few days after submitting the test, I received this email:
Joey: "Hi Federico, I am very pleased to inform you that we have received
good feedback for your test and would like to move you to a video interview
with our Head of Data Science/Data Engineering. He is available on 5th July
at 8am or 10th July at 8am your time. Please let me know which works best for you."
In short, I had passed the test!
It wasn't perfect code (after all, I had learned Python and Dota 2 just seven days earlier), but I think they appreciated the way I had approached the problem. I had delivered on time, documented my choices, and pointed out my own shortcuts and potential security issues.
We scheduled the interview for the following morning at 8:00 AM Italian time.
I logged into the Zoom room and waited. And waited.
Nobody showed up.
Could this be some classic corporate trick to stress-test candidates?
I messaged Joey to ask if everything was okay. She replied that the interview was definitely confirmed on her end, but she would check immediately and let me know.
About 15 minutes later, she wrote back. She had found the director. He was literally locked inside a warehouse and couldn't get out.
The interview had to be rescheduled.
In true hyper-chaotic startup fashion, the Head of Data Science/Data Engineering had somehow managed to get trapped in a physical warehouse while they were launching a "big project".
(I didn't know it at the time, but it turned out to be a huge automated, cashier-less supermarket/warehouse covering 6,000 square metres, inaugurated the following October.)
The Interview
A few days later, the call finally happened.
I don't remember the exact technical details we discussed, but I remember the company's organisational structure quite well.
The team was massive. There were dozens of data engineers working exclusively on transactional data. Then there was a Business Intelligence team, responsible for internal reports as well as updates for investors. Finally, another group collected application data to monitor the platform's health in real time.
He was German, and remembering the Beef Pepper Rice incident, I decided to avoid making any more food jokes. Italians aren't exactly famous for being kind about German food habits.
He told me they were looking for someone to develop and manage data pipelines orchestrated through Airflow DAGs.
I told him I knew data inside and out, that I wasn't familiar with that particular technology, but that I wasn't afraid to learn. He seemed happy with that answer.
He also mentioned that they were interviewing an Oracle DBA for the same position around that time. They were clearly looking for talent, but I couldn't help thinking that perhaps they didn't have a very clear idea of what they actually wanted.
The offices were located inside a former shopping mall. The director proudly told me that they didn't have any physical data centres at all. Everything ran in the cloud, using AWS services.
It was 2018, and it felt like being right in Silicon Valley. Looking back, it still makes me smile to think about the contrast: an entire architecture running on AWS, and the Head of Data Science/Data Engineering literally trapped in a physical room.
The Outcome
A few days later, the email with the final decision arrived.
The call had gone well overall, but they decided not to move forward because of a "misfit in terms of technology expectation". Which, to be fair, we both knew from day one.
In hindsight, it turned out to be a huge blessing in disguise. Between 2019 and 2020, the company collapsed: massive layoffs, a CEO resignation, bankruptcy, and plenty of scandals.
Even without knowing how things would turn out, I think it was a great experience.
For a week, I had been in contact with the people running one of Southeast Asia's most modern, technologically advanced, and promising companies. They gave me a programming challenge, read my report, and spent time trying to understand how I think.
They didn't choose me. Fair enough.
But the fact that I had made it that far, starting with a message on Stack Overflow, was a pretty satisfying milestone.
來源:DEV Community · dev.to




