This take-home assignment is designed to evaluate your Site Reliability Engineering (SRE) and software development skills. You will be working with a bare-bones service that interacts with Movable Ink's GeoIP API to retrieve geographical information for IP addresses.
- You have 5 days to complete this assignment from the time you receive it.
-
Choose one of the following template repositories in your preferred language:
- TypeScript: sre-assignment-typescript
- Python: sre-assignment-python
- Go: sre-assignment-golang
-
You will receive from Movable Ink:
- A production API token for the Movable Ink GeoIP API
- The production URL for the Movable Ink GeoIP API
- A
test_ips.txt
file containing 1000 IP addresses for testing
- Clone your chosen template repository
- Follow the repository's README for build and installation instructions
- Set up the required environment variables:
export API_URL="<provided-movableink-geoip-url>" export API_TOKEN="<provided-api-token>"
- Copy the provided
test_ips.txt
file to your project directory - Build and start the service
- Run the included test script:
./test-ips.sh
Your main goal is to improve the service's reliability to achieve a 100% success rate (HTTP 200 status codes) when running the test-ips.sh
test script against the Movable Ink GeoIP API.
- The initial template service will show a mix of successful (200) and failed (500) responses
- This represents a baseline implementation without any reliability engineering
Using SRE and Software Engineering principles, modify the template service to maximize request success rates. Consider implementing:
-
Reliable HTTP Request Patterns
- Retry logic
-
Observability
- Metrics in Prometheus exposition format
- Structured logging output
-
Health Checks
- Service health endpoints
- Dependency health monitoring
- Readiness/liveness checks
Your submission will be evaluated on:
-
Reliability Improvements
- Success rate improvement from baseline
- Robustness of error handling
- Quality of reliability patterns implemented
-
Code Quality
- Clean, well-organized code
- Proper error handling
- Good documentation
-
Observability
- Quality of metrics implementation
- Usefulness of logging
- Effectiveness of health checks
-
Zip your completed project directory
-
Include a detailed README or documentation that explains:
- Your reliability improvements
- The reasoning behind your choices
- How to run and test your improved service
- Any additional features or improvements you've added
- Known limitations or areas for future improvement
-
Submit your zip file to Movable Ink within the 5 day time limit
- Focus on reliability first - aim for that 100% success rate
- Use industry-standard patterns and libraries
- Document your thought process and decisions
- Consider edge cases and failure modes
- Test thoroughly before submission
- Keep your code clean and maintainable
If you have any questions about the assignment requirements or encounter technical issues, please reach out to your Movable Ink contact.