Now GA: Repo Grep Check. Find and fix issues in your codebase faster, with our open-ended repo search capability. Read all about it!

Take Home Programming Problem

Problem Description

In this problem, we’re going to take a small program and deploy it across multiple environments to publicly routable servers.

1. Clone the hello-svc repo    

This is a minimal “Hello World” HTTP service written in Go. It reads an env var named ENV and displays that in its output.  e.g., if ENV=production, then the service outputs


Hello! I am running in production

2. At a high level, your job is to set up this program to run on a publicly routable server in a repeatable fashion.    

Requirements

  • The service is running      
  • There should be at least two environments set up (e.g., one with ENV=production and another with ENV=staging).
  • You can use whatever domain name you like for these envs (e.g., env.yourname.com or just ec2-xx-yy-zz-ww.compute-1.amazonaws.com)
  • The service should listen publicly on port 443 (it’s fine to use a self signed cert or provision one from a CA like Let’s Encrypt)
  • The service should redirect port 80 traffic to port 443 with an appropriate HTTP status
  • It’s possible to view and/or query recent access logs for the service

Non-Requirements

  • You don’t need to have multiple instances per environment, but you should be able to explain how you’d add this.      
  • You don’t need to have isolation between environments, but you should be able to explain how you’d add this.

Use whatever software / technology you’re most comfortable to provision infrastructure and deploy the app.  e.g., Chef, Puppet, Ansible, Dockerfile, Terraform, k8s, AWS, DigitalOcean, some random VPS… the choice is yours.

Submission

Please try to spend at most two hours on this problem.  It’s better to have some parts fully complete and working vs. everything partially done, but not working.

When you’re done, please email the following to our technical recruiting team

  1. URLs for the environments you provisioned  
  2. a Git{Hub, Lab} link or a Git bundle with your solution

Evaluation criteria

In the on-site portion, you’ll walk us through your solution.  We’ll be looking at how you structured your code, how maintainable it is, and various tradeoffs you made.  We’ll also ask about how you would extend your code to support new functionality like isolation and redundancy.