If you were to assign a grade level to Let’s Go Learn’s online diagnostic assessment and personalized instruction, it would come in at about 11th grade. But when it comes to the company’s technology infrastructure, it’s fair to say that it’s equivalent to a 7th-grade level, but on the fast track to high school.
Over the past 20 years or so, Let’s Go Learn, based in Kensington, Calif., has administered nearly 14 million diagnostic math and reading assessments worldwide. The data from these assessments enable educators to personalize the learning experience for each student more effectively.
During that same period, the Let’s Go Learn IT team has worked hard to keep up technologically, making both incremental and major improvements to company technology and processes.
For example, when CTO Joshua Lawrence joined the company about 12 years ago, the assessment engine was built in Python, and its front end was built in Adobe Flash, with all reporting done in PHP. All of it was housed in a data center shared by other companies. The Let’s Go Learn team did its own hardware and systems administration, and there was no version control at all.
Lawrence decided to live with the outdated technologies for a few years while he figured out what to do next. About five years in, he moved the system to Rackspace Technology, which took care of maintenance and systems administration duties. The two-person development team also adopted as many frameworks as possible and moved the assessment to HTML5 to avoid writing so much custom code.
By that point, the volume of assessment data had grown to 220G, housed in PostgreSQL, and the company was still functioning with two developers. That meant that Let’s Go Learn had to depend on Rackspace even more. However, the developers found that they weren’t getting the necessary support from the vendor, which caused delays and frustration in the development process. It was time for another big change.
That big change was to finally embrace the cloud – something Lawrence had known was in the cards for several years.
“We really struggled … because we had so much technical debt, but about two years ago, I decided that we just had to do it. There was no option,” he said. “I was tired of not being able to integrate solutions easily, and, in education, there are so many security concerns and it was becoming harder to check all of those boxes."
Partnering for the AWS Cloud Migration Journey
Lawrence’s team had initially decided to move its DNS, mail services, and entire application and database to the cloud, then containerize the application after the move. The company’s partner, Mission Cloud Services, a Los Angeles-based AWS cloud service provider, suggested a different approach. Mission Cloud Services said it might be better to containerize the application before porting it to the cloud. That’s the route Let’s Go Learn ended up taking.
It was such a good call that Lawrence decided to stick with Mission for the rest of the project, which ended up taking more than a year. Lawrence said that he did not know all the intricacies of the different technologies and it made sense to have Mission guide them through the project.
Mission first upgraded and enabled PostgreSQL for the cloud by moving to Amazon RDS for PostgreSQL, a serverless managed database. It then built a containerized version of Let’s Go Learn’s e-learning platform in an Elastic Kubernetes Service cluster. Once the platform was transformed, Let’s Go Learn was able to convert monolithic applications into microservices applications.
Mission then used its services to optimize the environment. Mission Cloud Elevate, a managed cloud service used to streamline code deployments, helped to migrate from Rackspace to AWS, Lawrence noted. In addition to speeding up the migration process, Mission Cloud Elevate helped the team begin to use AWS services faster, with improved visibility and control.
Post-migration, the team used Mission Cloud One to continuously monitor, maintain, optimize, and secure the AWS environment. Meanwhile, Mission’s cost optimization tool, Mission Cloud Foundation, allowed Let’s Go Learn to cost-optimize compute resources. The team added Amazon CloudFront, a content delivery network service, for application image caching and improved webpage loading time.
AWS Cloud Migration Benefits
With the platform running well in its new environment, Lawrence said he has seen some real benefits. For example, deploying new code had previously meant temporarily taking the system offline, but the team now can spin containers in and out without experiencing downtime.
The migration also improved database response times. As the company grew, the spike in reads and writes on the database had begun to create bottlenecks and affect the application’s performance. To fix the problem, Mission Cloud Services changed the data volume of the RDS instance from GP2 to GP3, which allowed for a greater burst of capacity for IOPS. The database can now handle traffic spikes without disrupting other parts of the application.
In addition, the upgraded infrastructure has enabled Let’s Go Learn to advance its data analytics capabilities, a major need since school districts rely on the platform to identify learning trends, which they use to make adjustments to teaching strategies.
“We have 20 years’ [worth] of instructional [data] and metadata, and there is a lot to be said of taking advantage of machine learning to analyze that metadata to make data-driven decisions,” Lawrence said. With the help of machine learning, the company can get more granular and compare a client’s last year’s usage to how they are trending today. The company can even fine-tune the data down to individual students to determine their needs.
Another benefit of the migration was the ability to adopt a more event-driven model. The goal was to be able to run processes as requests come in, Lawrence explained. For example, if an update to a student’s progress is submitted, the resources needed to run the application code could be spun up and the right commands executed to make the changes.
In this scenario, the application sends a message to Amazon Simple Queue Service (SQS) that the student’s progress needs to be updated. The request goes into a queue, which then connects to the AWS Lambda function and passes the information to make the changes. After the Lambda function completes the update to the student’s profile with their current progress, SQS sends in the next message that needs processing. This event-driven approach ensures other parts of the application run smoothly, unaffected by the overhead needed to process these events.
Finally, using AWS CodePipeline and AWS CodeBuild, the Let’s Go Learn team can now incorporate automated testing instead of relying on manual testing of local infrastructure. This allows the team to release code on the fly instead of in two-week cycles.
Next Up: A Cloud-Native App
As the primary migration work comes to an end, the team will have set the groundwork for what will be its biggest innovation yet: a cloud-native app. “Our goal is to develop an app that kids can pull up on tablets and other devices and [use to] take our assessment, which they can’t do now,” Lawrence said.
Lawrence said he expects to build the app in the Unity development platform, with the API and backend event-driven and powered by Lambda.