Meet Anomaly Labs

Dev Mukherjee on June 22, 2022 in Education

Illustrated by Suneth Sanjeewa

A man in a chemistry lab performing experiments and recording results

Consistency yields efficiency.

Over a decade ago we took to understanding the then forthcoming world of Application Programmer Interfaces (APIs) and expressed the recommendations of standards as a Python framework. prestans allowed our developers to consistently build REST APIs that conformed to the standard by writing code the prestans way. The project's documentation aided with the adoption of the framework, more importantly it became a core part of onboarding engineers at Anomaly. Our method allowed a small team to reliably build large Internet apps with extreme consistency. Every developer could pick up another's work (we had an idea called Blueprint, pretty much Swagger before Swagger, which promoted documenting endpoints).

Asynchronous not remote is the future of technical work. Where or when people work is only possible if everything asynchronous and so well documented that you never have the need to synchronously speak with someone to carry out meaningful technical work. There's no better example of this than a well run Open Source software project (I recommend listening to The New Future of Work episode, a conversation between Sam Harris and Matt Mullenweg). This became ever so evident over the lockdowns in Australia over COVID-19. Our team was doing good work but we were losing our consistency while attempting to adopt cutting edge technology.

So we've decided to start over and do it all again, properly, and open source our findings, thoughts, templates.

Meet Labs, our templates repositories that contain more than a hello world of each problem domain. Each repository contains what we have learnt, what we have concluded to be best practices and what we are building our application on. And because it's all in the public domain anyone is free to tell us where we are going wrong and more importantly learn from well documented knowledge of what we have right.

A forever work in progress, each module will be thoroughly documented so you can learn from what we've learnt. Currently our labs covers the following topics in detail.

Infrastructure

We partner with Linode for deploying workloads. We prefer their simplicity and alliance with open source technologies. Anomaly does not have infrastructure folk on staff. We depend on our partnerships and tools like Terraform to help us deploy and scale our workloads.

lab-tf-linode focuses around various permutations of deploying solutions on their infrastructure. It uses everything from LKE to managed databases to deploy containerised solutions. You can find recipes for:

  • Templates and recommendations for resources like a Kubernetes cluster, managed database, object storage, etc
  • Installation applications via helm charts, and from a private Docker repository
  • Managing QA and Production environments
  • Scaling and teardown
  • Development and production practices

Our intent is to extend this CI/CD process across other providers to be as provider agnostic as possible.

The Server Side

We love Python, the language and the tooling has always been a pleasure to work with. Our approach is choosing appropriate micro-frameworks as opposed to monoliths. Our approach is moving towards using completely cloud native projects in the attempt to be completely cloud agnostic. Our past approaches have locked us into particular providers costing us unwanted engineering and financial resources in running projects that didn't require proprietary services. lab-python-server repository covers:

  • How to structure your Python projects for scale
  • SQLAlchemy and alembic setup for database access and migration
  • FastAPI based APIs
  • Recommendation on libraries to ease server side development
  • Reverse proxy (with SSL) for development
  • Celery based workers with best practices
  • Docker and Compose templates to build development and production containers
  • Process to package and publish to Docker hub

The Client Side

We've sided with React for our client side development. It makes sense for us as our partners like Stripe are invested in the ecosystem. Interfaces are how our users experience our applications, and we want to be accessible, localised and friendly. lab-web-client template looks to provide:

  • Recommended React setup
  • Libraries that make our standard toolkit
  • Codegen utility to consume our swagger based API
  • Internationalisation and accessibility standards

Additionally we will document build process and deploying to publicly accessible document storage that ultimately fit into the entire ecosystem.

Payments

Anomaly is one of Stripe's first partners. We've helped numerous customers integrate Stripe's vast array of services into their platforms. Stripe has one of the most well documented developer ecosystems, but it can be overwhelming to figure out how to do it the right way.

Earlier this year we launched Catapult, a set of fixed priced engagements to help businesses design their platform around Stripe. This particular lab will focus on some best practices that will help everyone understand how to start thinking the Stripe way.

Where's this headed?

Our ultimate aim here is to provide battle ready templates for the various components that make for building software on the Internet. Documentation is a key focus to ensure it's a complete guide for anyone out there to use. We are also planning to write and record a formalised course to understand each lab and how we arrived at these conclusions.

That's for another day. For now we are happy that these labs are at a stage that we can build them publicly.

We will tag stable releases along the way, but the way we see these projects is an ever evolving knowledge base of the building blocks of our and hopefully your Internet software.

Write code to be read. Labs is our attempt to be verbose, so everyone can learn from our experiences, both good and bad. Paige Bailey (Twitter @dynamicwebpaige) a developer who's work I deeply admire (as much as her humour on Twitter) put it most eloquently "If you don't have documentation, you don't have a minimum viable product."

We would love your feedback and what else you would like us to share.

Happy building!