Building a Django application on GCP for David Morgan Education
David Morgan Education develops products to help children to read and spell. They came to us asking if we could rebuild and revamp the learning management system (LMS) of their existing product, Easyread.
Of course, aims and ambitions are always likely to evolve as the project matures. We quickly realised that, in order to make the LMS reusable for other projects in their pipeline, we should be building a framework, rather than a standalone site. In fact it eventually came to be that we launched the LMS with one of these new projects, Peasyread, and later transferred it to the Easyread product.
In rebuilding their site we decided to replace their existing PHP backend with a Django based one. This meant that our framework was structured much in the way as a Django Package is. After careful planning of database structure we decided to favour the rigidly defined schemas of SQL over NoSQL databases, and opted for PostgreSQL due to its modern features and fast performance. We chose Docker to quickly create reusable Linux-based images from which to run the site and hosted these server side with Kubernetes, which allows for resilient and scalable management of Docker containers. We hosted our servers in the cloud using Google Kubernetes Engine on Google Cloud Platform. Webpack and Google Storage were used to package and host JavaScript, CSS and other assets.
A key part of our philosophy for this project was to follow DevOps principles. This means that we automate as much as possible, all of our code is thoroughly and continuously tested, and we deploy small updates frequently. A key tool we use to manage this process is CircleCI. This is used to build pipelines that run every time we push or merge code at our repository on GitHub. We test every bit of code we write, and these tests run in every pipeline. We also use a linter that ensures that code written by differing developers all follows the same strict style guidelines. These pipelines also automatically handle deployments whenever we update the main branches of the code base.
In order to ensure that no bugs make it through to our production environments we run an additional staging environment. This means that before deploying any code to the site we can see it running in an identical set up to as it would be live, and makes certain that only high-quality, working code ever finds it way to end-users.
Another principle we follow is Agile methodologies. We create tickets for every piece of work we do on the project. We organise these into 2 week sprints and then we deliver. A quick 5 minute stand up a day ensures that every one on the team is up-to-date and on task. We then have a weekly call with the client to both review previous work and look forward to any potential challenges in the coming week.
When developing the LMS for Peasyread, we worked in collaboration with a team in Manila who were developing a mobile app with Unity. To expose the data held by the LMS to their app we created and maintained an API. We used Django Rest Framework to quickly and reliably provide a secure, well designed API that allowed their team to quickly integrate our service into theirs.
Beyond just the development of the new LMS we also provided general technical support to the client. This included helping to set up WordPress sites and conducting maintenance on the Google Cloud Platform servers that hosted them. The team at Lambert Labs made sure that all of the valuable constituent parts of David Morgan Education’s business were running and supported meaning that they, and more importantly their customers, were satisfied.
When it comes to Python and Django, Lambert Labs know their stuff. They have designed and built our latest product, Peasyread. The product looks good and works well – everything is always tested thoroughly! I enjoy working with their team. (David Morgan, CEO, David Morgan Education)