Journey to ippon.acrossthe.world
The Ippon Australia team have been working hard over the last couple of weeks on a recruitment challenge, called Ippon Across The World. It’s a short game to test technical skills, without being too over the top, and hopefully it’s a little fun along the way. Give it a try if you haven’t seen it yet.
Err Why?
During the downtime between projects, it’s important to maintain team cohesion, as well as learn new skills. Self-paced learning is good to a point, but you learn so much more by having a tangible deliverable, and a target to work towards. We also have on-boarded some great new team members recently, and it was a great opportunity to get to know them a little better.
Design
We went with an 8-bit video game motif, because, well who doesn’t like 8-bit? We wanted to capture that original Carmen Sandiego vibe but with a Melbourne twist.
Architect
AWS is our default cloud provider, so we used a modern AWS design for our application. We wanted to leverage as many AWS services as possible, to give us a holistic view of how some of these newer components hang together.
- CloudFront is incredibly important to hosting a modern application on AWS; saying that, it is very often ignored or misunderstood. It provides not just caching services, but also edge-content delivery and TLS support. You can even now run Lambda Edge functions as part of your content delivery strategy; we’re using it here for CORS header support.
- Route53 is the DNS provider for AWS, both internally and externally. You can also purchase and manage domains through it. I particularly enjoy finding novelty domain names.
- AWS Connect is a rather unusual AWS offering, and we wanted to try it out. It’s effectively a call-center in a box, allowing you to establish elaborate inbound and outbound call flows, including ML-based text-to-speech, as well as human operator steps.
- S3 static file storage for the website and Java libraries.
- API Gateway for rate limiting and routing requests to Lambda.
- Lambda for serverless API processing. The Lambda functions are primarily used to respond to answers and provide the next URL to follow, as well as for processing analytics events.
- DynamoDB is used for storing temporary data, which we’re cleaning up with the automated TTL function. For those that are unfamiliar with DynamoDB, it’s a scaled NoSQL offering from AWS.
- Pinpoint (and Cognito) used for analytics; tracking primarily website interactions.
User Interface
We decided to use raw JavaScript with GSAP for the animation components, with a focus on modern desktop browsers. No legacy Internet Explorer support here. Apart from the animation aspects, we also used Web Crypto API for one of the challenges, which was pretty exciting to see in action.
CI/CD Pipeline
No project is too small for a CI/CD pipeline. It makes life easier if you’re deploying something more than once, and it’s important when you have a number of people wanting to make a lot of little changes quickly.
We used Terraform for setting up the base infrastructure, and then a combination of shell scripts for updating deployed assets. Gitlab, which is our source-control tool, has an amazing pipeline mechanism for defining build processes, and we use that to push changes into the various environments when a single commit occurs.
What’s Next
Shipping an application is not the end of the journey, it’s the beginning. We’re collecting usage metrics via Pinpoint, which allows us to see how far users (anonymously) get through the game. We will be offering slight variations to the challenges depending on skillsets, and potentially offering a harder difficult level for the clever cookies.
We certainly enjoyed putting this together and we hope that you enjoy playing it.
Originally published https://www.linkedin.com/pulse/journey-ipponacrosstheworld-gerard-gigliotti/.