Being an Intern in willhaben’s Tech Division

Chris Schnabl
5 min readSep 16, 2019

--

I started as an intern in willhaben’s Data Tech Team in June 2019. Twelve weeks later, Autumn is approaching and, as my Internship comes to a close, our CTO asked me if I wanted to share my experiences on willhaben’s Tech Blog. I’m pretty sure he must have guessed how much of a Medium fan I am.

In this post, I will outline why I decided to work during my summer holidays and how I joined willhaben. You will also get a quick overview of what I’ve learned and accomplished during this time.

Why would one want to work during the summer holidays?

No, I am not a workaholic, and yes, I also love to enjoy some free time. In case you’re wondering, I’ve still managed to travel a lot — as far as my budget allowed. (Off-season travel is cheaper and less crowded, by the way). Nevertheless, I’ve spent all of my summer holidays as a high school student working. But why did I do that?

One misconception is that I’ve only worked during the summer to earn some extra money. While I do not deny that — money can, indeed, be motivating — it was not my primary reason.

I’m an early bird. I usually start working at 6:30 AM, which leaves me with plenty of time to enjoy the warm summer afternoons and weekends. Luckily, willhaben encourages this type of freedom with flexible work hours.

If you love to learn new things, as I do, an internship is a great way to get your hands on new frameworks or technologies. Especially if you already have some coding skills, being able to apply them in a software engineering environment is a whole new skill. Implementing a software feature to make it production-ready is a totally different process than hacking together a prototype for some cool feature in your free time.

Some more thoughts on internships

An internship not only opens the possibility of gaining some work experience, it also puts you in a special position to observe many things from a more objective point of view. This type of feedback is not only personally valuable, it is also valuable for the whole team you are working in.

No one expects you to be perfect right at the beginning of an internship. This gives you a lot of room to grow and experiment. Maybe an internship will be the starting point of your software engineering career.

How I became an intern at willhaben

It was October 2018, and I was on a quest to find a summer internship. I have always been quite picky, as I do not intend to brew coffee (I like brewing coffee — don’t get me wrong), scan amounts of useless documents day in and day out, or do various other so-called “internship tasks.” I did some research and sent some applications, which led to offers from various Austrian and German tech startups and software companies.

I opted for willhaben for a few reasons: First, the tech stack the Data Team is using really intrigued me — it still does: Kotlin, Kafka, Spark, Cassandra, Cucumber, and Zookeeper just to name a few. Second, the job interview gave me the best feeling. Our CTO, Thomas, also assured me that I wouldn’t be doing any “internship work,” especially as willhaben usually does not have tech internships. Last but not least, I decided to stay in Vienna during the summer, simply because I love the city.

Getting technical

So, what did I do for 12 weeks, if not serve coffee? I worked with data, which turns out to be hard. Unsurprisingly, dealing with a huge amount of data is even harder. At peak times, we were ingesting more than 80k events per minute related to our ads and close to 80k search events per minute. — And we were just getting started.

The Marketing Tool Sync

If you’ve ever used the willhaben app on your mobile device and opted to receive push notifications, chances are that you encountered one of the campaigns our marketing department runs via a marketing tool (e.g., “The Price for the ad xyz on your wish list has dropped by x€”, or notifying you that have not been active in a while, when one of your ads is about to expire, or various other campaigns). In order to sync data to the aforementioned marketing tool via HTTP, we run a variety of services, most of them in real-time. Creating an additional service to export users and their subscription state (whether or not you want to receive marketing news) was one of my first tasks. I also added other small additions to some of those services.

How such a push notification might look — not affiliated with Ikea :-)

Argo — a lean application written in Kotlin

During the development work with our services for the Marketing Sync Tool, I encountered a few stumbling blocks, as a deprecated proprietary HTTP client library with loads of dependencies was used to interact with willhaben’s back-end. Thus, I simply decided to build a new lean client library myself, using Kotlin. By the way, the Data Tech Team is now writing all new projects in Kotlin, whereas Java and Scala are used in our already existing projects.

Argo, the shiny new client library (because greek mythology is cool), uses square’s okhttp as its HTTP client and moshi for json serialization. It supports concurrent GET requests in a “non-blocking” way using Kotlin coroutines. I also put in some effort to get 100% test coverage using Cucumber, a behavior-driven test framework.

Consuming a Kafka Stream

We are currently implementing a stream, the so-called “ad stream,” which basically writes all changes and details of ads into a Kafka Topic. An “ad” is anything someone has placed on the willhaben platform in order to sell it. Because of the ad stream, fewer applications need to call the willhaben REST APIs directly to obtain that specific information for an ad, which reduces the load on our DB. There is an extra post on that about to drop, so I won’t spoil it with adding details here :-).

I adapted one of our existing services to be the first consumer of our newly built ad stream. This reduced our API call toward the REST API from 3 to 1 per event. This also served as an example for other teams at willhaben of how to consume our new stream effectively.

Conclusion

Now for some hard facts: I opened 23 pull requests, wrote 9624 lines of code, drank about 150 cups of coffee (about 50 lines per cup), and produced a few bugs and fixed them all — as far as I know. In the end, I never had to fill in useless spreadsheets or do other “internship work.”

I would like to thank willhaben for giving me the chance to work there, and to everyone for supporting me during this time.

--

--