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
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
- URLs for the environments you provisioned
- 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.