Platform Engineer Hiring Challenge

Important Note - please do NOT put “Synpulse” or “Synpulse8” in your code or documents

Background

A well-known international bank in Asia is looking for ways to increase the productivity of their developers. The bank currently operates all infrastructure on-premise. Deploying applications - and any changes to them - is a long process involving multiple departments that prepare the required infrastructure, networking, access controls and monitoring separately for each application. While security is a high priority, the bank is interested in exploring different services and setting up their pre-production environments on a public cloud provider. It is also important to automate as much of build and deployment processes as possible.

The bank’s architecture is a 3-tier stack, using a JavaScript-based React front-end with a network load balancer, auto scaling is used for Tomcat J2EE application servers deployed on VMs and an MySQL database.

Your task is to put together a plan to create this environment.

Further concerns raised by the bank:

  • Security of resources and limiting access to infrastructure
  • Potentially high cloud costs
  • Whether they should move from self-hosted tools like Jenkins, Artifactory and Sonar to managed services, and if so, what to choose
  • Whether they should change from the concept of ‘single app, single vm’ towards kubernetes or other managed services, and if so, what to choose
  • Strict separation of environments
  • Ability to easily create/replicate environments as needed

Objective

  1. Propose an environment setup that addresses the bank’s concerns
  2. Suggest a CI pipeline and its key steps to ensure code quality and security
  3. Suggest a CD pipeline and its key steps to take source code and have it running on a public cloud provider
  4. Prepare a brief Terraform-based infra-as-code prototype environment for AWS, Azure or GCP based on the bank’s architecture

Deliverables

A concise and well articulated document (no more than 3 pages) that articulates the proposed pipelines, and a code sample/repository containing the required Terraform code to bring up a prototype environment.