The engineering philosophy enabling us to scale at speed

Find out about the simple philosophy guiding our engineering decisions and how it enables us to rapidly release features that directly benefit our clients.

Codat follows a simple engineering philosophy that starts at the very top, with our approach to tool selection, and filters down to the code we write on a daily basis.

The mantras we like to think about are “keep it simple and straightforward” (KISS) and “you ain’t gonna need it” (YAGNI). The idea with this philosophy is to make sure we eliminate as much waste as possible from the design of our system, and minimize our volume of work. We apply this at an architectural level with another mantra, choose boring technology.

Our objective

We want our engineers to be able to spend all of their time and effort building systems that are directly useful to our clients. This means we tend to select technology that may seem far from the bleeding edge, knowing that plenty of support already exists for the engineers operating it. It also means that we are spending as much of our time as possible building products that we can sell, and not tinkering with configuration or implementation details.
Our aim is to balance technology choices with operational and maintenance costs. In practice, this means we might pay a little more for something that takes toil away from engineers. It was these ideas that made us buy into the Microsoft stack across engineering from day one.

C# on .NET Core

C# is a great language, it has very sensible abstractions for writing clear and readable code.

You can write object oriented code when you want to, with useful polymorphism, functional programming, and reflection that allows for all sorts of meta programming. 

It’s also able to get down to the metal when needed, with a little bit of thought. Now that it is open source and advances are being made to the runtime, C# is also finally achieving the performance the language deserves, at higher abstractions as well.

For us, the most important aspect is the fact that C# and .NET have been around for years, meaning there’s plenty of really useful information online about how to use these tools effectively. There are also plenty of talented C# engineers in the world, making hiring great people into the team to use these familiar tools easy.

.NET on Azure

Considering we’re all in on Microsoft for the application layer, it makes sense to be all in for our infrastructure as well. We use Azure as our product operating system, and leverage a large number of the platform-as-a-service (PaaS) offerings, including Web Apps, Function Apps, Azure Storage, Service Bus, Redis Caching, and Azure SQL. 

These technology choices might not be seen as cutting-edge these days, but there is a wealth of knowledge out there that we can tap into and use it to solve novel problems.

Scaling at speed

Our technology choices are directly related to the organisation by Conway’s Law, meaning we organise our teams around client needs and products. To do this we need an architectural approach that supports decoupling, so we use micro services and micro front-ends. 

Where possible, we favour choreography for passing information between products. This allows teams to rapidly design, build, and release value into their products without having to pay a large coordination cost (typically time), or having code waiting on a release train to be shipped to users.

If you feel passionately about our engineering philosophy and are excited by our growth, then we’d love to hear from you. Please visit our Careers page to find out more about opportunities to join the Codat team.

Jason Dryhurst-Smith