Skip to content

Instantly share code, notes, and snippets.

@thclark
Last active April 29, 2024 09:28
Show Gist options
  • Save thclark/3b67c90a7bc384056a4a70ab5120ad47 to your computer and use it in GitHub Desktop.
Save thclark/3b67c90a7bc384056a4a70ab5120ad47 to your computer and use it in GitHub Desktop.
A gist describing the backend developer case study for hiring python backend engineers

Backend Developer Case Study

HI POTENTIAL BACKEND DEVELOPERS!

I'm Tom, I run development of the WindQuest webapp. If we end up working together, I'll be responsible for mentoring and training you as well as overseeing your work on WindQuest and similar applications within WindPioneers.

Right now, if you're willing, I'd like you to complete a small case study so I can get a sense of where your skill level is at. We hire quite broadly from Very Junior to Super Senior so it's OK to be wherever you're at right now!

At WindPioneers and our partner company Octue.com, we're keen on helping our employees and candidates improve themselves continually. With that in mind, I've designed this case study so that most developers (regardless of skill level) can learn things while doing it - put a little time in and you'll come out of the other side a better developer.

Also, I've noticed that a lot of applicants have very few public demos on their GitHub account, so once you're done, well, it's your code! You can keep the repo on your GitHub account to show off your work.

Background

We all use websockets every day. Chatbots, live feeds on news websites, status updates on GitHub are all powered by websockets (or very similar technologies).

We also all use django every day. Django is the web framework we use for building WindQuest but it also powers a massive number of websites out in the wild, including Instagram, Pinterest, and YouTube.

The same goes for Flask, which is an alternative to Django (it's easier to set up and get started with a project, but much harder to scale it to a complex application) - Flask is used in many microservices around the world which bind together many of our most commmon digital services, like Netflix, AirBnB and Uber,

Companies building software live or die on the User Experience (UX). UX is mostly thought of as something frontend programmers do... but being able to push a live update out to a user leads to great user experiences (because refreshing a page continually to see updates is a pain point) and that's where you, a backend engineer, get to shine.

The Task

Spend a few hours doing something interesting with a websocket.

That's it. A very broad brief! There are a few ideas below to help you get started, but feel free to ignore them and do your own thing.

In a bit more detail, you'll need to:

  • Create an empty public repo on GitHub ready for your python project.
  • Choose either django or flask, whichever you feel more comfortable with.
  • Clone the repo to your machine and get going!
    • Follow a getting started guide (if you need to) to the point where you're running a simple webserver.
    • Hatch a plan to ddo something you've never done before.
    • Follow a tutorial (ideas below) or do your own thing.
  • As you go, make notes in the README.md file about what your objectives are - and make regular commits to show your progress.
  • There's no need to deploy your app (although please do if you want to!), but please push your finished code back to GitHub and send us the link when done.

Top Tips:

  1. Different guides will use a variety of different python package managers - we recommend poetry :)
  2. If you're not sure which of Django or Flask to choose, Flask will probably be easier to set up.
  3. If you've chosen Django, the django-cookiecutter project is quite helpful for getting started quickly.

Are we crazy?

No, we're not. Honestly, an extremely simple websocket is an essential part of a backend developer's toolbox. If it's your first time working with sockets, then Keep It Simple and enjoy!

We'll be talking about this in your interview, so it doesn't even have to be a complete working example:

We're not looking for candidate who builds the best application, we're looking for the candidate who learns the most and can demonstrate that.

Some ideas

A basic chatroom app is a great place to start if you've not done websockets before.

If you're a seasoned pro, you could go all the way and implement your own specialized version of chatGPT.

Of course, a little creativity never hurt so entirely different use cases (sending events from a data processing pipeline, updates about train times or traffic conditions, etc, is always fun. It doesn't need to be real data, ok? Generating random data is fine because integrating a full-blown data system is way beyond the scope of what we're asking)

Expectations

DO Commit your code regularly. At each little step you complete, commit your code. That way we can see evolution that's meaningful. Here are some tips and tricks for getting the most out of Git Commits

DO NOT spend a really long time on this. Your time is precious. If you've solved problem after problem but never actually get a websocket working, that's fine - so long as you've learned something! And if you followed the previous 'do' and make a commit each time you go through a step, then you'll have plenty to talk about if we move to technical interview stage.

DO Use best practices for python development; in particular using tools like the black formatter and pylint is important - following the hints that linters give you massively improves the standard of your code straight away.

DO NOT Submit a complete app Copy/Pasted from somewhere else. To be clear, it's totally fine to follow a tutorial and lift a bunch of code from it to get you going - following each step at a time. But just shoving in a whole app that you found on someone else's GitHub - and not being able to show how you built it - will be very clear. It's also totally fine to build off an existing example (License permitting, please check!), but then improve it in some way - put a bit of polish or spin on to make it your own (refactoring, adding extra features etc).

DO Use CoPilot or ChatGPT to help you. Frankly, if you can get these tools to write well formed and working code for you, that's a rare talent! The fact is these tools are great for assisting but at the current state of the art, they can be very hit-or-miss and it's still entirely down to the programmer to get things working.

DO Use the docs of the libraries, and StackOverflow. Smart and quick developers don't reinvent the wheel, they find good examples and tutorials they trust, to accelerate the only thing that matters: a well functioning end product. In fact, we've chosen the this task precisely BECAUSE there are LOADS of examples and tutorials to help you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment