Background

With Commit, I just finished my first pilot placement with a startup that I really enjoyed working with. One of the things waiting for me when I finished was a +-8 hour take-home coding exercise from a different startup.

Commit is working towards a future that all but eliminates the traditional tech interview because both parties have access to a rich source of information about each other (see Sarah Marion's post about Data Rooms). As they work towards that future, most of my "interviews" at potential startup opportunities consist of 60-minute conversations. In some cases, these startups need more reassurance and ask for a further conversations or a take-home coding challenge. It is always up to the Engineering Partner, but if they agree, they can engage with the startups in these extra steps.

One of the startups asked me to do a fairly time consuming coding challenge. I am fairly busy outside of work with a large family and a homestead, so I found it difficult to find the blocks of uninterrupted time to dedicate to the challenge. Thankfully the Commit team assured me that once my placement had finished, I could use my time back at Commit to work on these sorts of challenges before I jump in to help with internal commit projects.

The Coding Challenge

The challenge was to create a URL shortener; frontend and backend, and have it easily installable and runnable with a few simple commands (preferably using a Makefile).

The complete brief for the challenge can be found in the README file on my solution in Github.

Honestly, initially I was put off by such a large chunk of time and effort being required of me, when I was already so busy. But, when I had time to think about it, I began to see it as an opportunity to learn and do a mini hackathon.

Ideas came to mind, like using Docker & Docker Compose for the "easy installation" part of the requirements, which excited me as I had been looking for a reason to mess with Docker and get more familiar with it.

So I decided to approach it as a learning opportunity, rather than a chore and as a result I really enjoyed the process and went a bit above and beyond what was required.

The Solution

The full solution code as well as a short demo GIF can be found at https://github.com/jaydlawrence/coding-test-url-shortener

There are full instructions in the README for how to set up and run the project on Unix environment, Windows and additional instructions for setting the project up for development.

Some of the extras that came about as a result of a more positive attitude are:

Containerization using Docker

As mentioned above, I have been looking for a reason to dive into Docker. I have gone through a couple tutorials and online video series on Docker, but like most of software development, the real learning comes from jumping in and applying that knowledge, so this was the perfect opportunity to do so.

Windows support

I have a separate project on the go to make my popular Stock Checker project easier to run on Windows as I have had a few people find my blog post that have had issues running it there. So I took this opportunity to refine the process of running unix style NodeJS Docker containers on Windows.

A bit of Graphic Design

I have a lot of experience of taking designs created by designers and implementing them with code. A lot of the time it is more of a collaboration with the designers, going back and forth with ideas and implementations to get the best result. But I have not really spent much time doing the graphic design part myself.

So I took this opportunity to make a simple user interaction flow through the app as well as spending some time playing with Gimp to make a fun (but most likely unnecessary) logo for the app.

Learning about Makefiles

The brief made the Makefile part optional, but I took it as a challenge to learn more about Makefiles and try and get the Makefile commands to bundle and proxy the various docker-compose commands.

All about the attitude

Something that I am always trying to teach my children, which I had to remind myself of in this situation, is that attitude determines outcome.

In this case, having time between pilots at Commit definitely helped towards being more relaxed about the coding exercise, but attitude was still a huge factor.

Regardless of the outcome of this particular interview process, I feel confident that I have given this challenge my best effort. I can see how choosing to see it as an opportunity instead of a burden has helped me learn, enjoy the process more and improve the quality of my solution.