Hey there! 👋

I'm Tom Usher, a Web Developer & DevOps Engineer based in lovely North Wales, UK.

AI Can't Replace Us - We Know Too Much

It's hard to avoid the refrain that AI is out for our jobs. That all developers will be replaced by LLMs and we'll all have to brush up on our prompt engineering or just become gardeners (tempting, to be honest...).

But developers don't just write code, we also know how everything actually works. Which systems are held together with wishes and crossed fingers. We're deeply embedded in how companies operate, and more often than not, we're what's keeping the lights on.

Read more →

Here's how I use LLMs to help me write code

The king of LLM blogging, Simon Willison, has a great overview on using LLMs to write code.

Using LLMs to write code is difficult and unintuitive. It takes significant effort to figure out the sharp and soft edges of using them in this way, and there’s precious little guidance to help people figure out how best to apply them.

Even if you’re not sold on how LLMs can boost your development, I’d highly recommend that learning to manipulate them to your benefit is a skill worth learning.

Confessions about my smart home

Frenck (lead engineer of Home Assistant) breaks down the state of his smart home. While you might assume the lead engineer of a home automation platform has everything figured out, it’s fun to hear that’s far from the truth.

…my dashboards are so bad that if I turn on the “Coffee machine” switch, it actually powers on my 3D Printer. 🤦‍♂️

I keep seeing examples of this - lead developers and experts in their field often don’t have the perfect environment - they are focused on the things they want to do and often the pursuit of the ideal environment falls by the wayside.

This is something I often need to remind myself about when I go on a yak shaving adventure tweaking my editor setup or finding the perfect tool for a job.

When Imperfect Systems are Good, Actually: Bluesky's Lossy Timelines

I love reading technical deep-dives in to system design and scaling. This post from Jaz (infrastructure at Bluesky) is a great read on how they balanced user needs with performance by finding where they could be ‘imperfect’.

By specifying the limits of reasonable user behavior and embracing imperfection for users who go beyond it, we can continue to provide service that meets the expectations of users without sacrificing scalability of the system.

There’s always sacrifices to be made in system design - I like the idea of defining a ‘reasonable limit’ for any one user and building optimisations around that limit.

Minimal GitOps-like Deployment Tool

If you have more than 1 server and a need to deploy multiple applications 'somewhere' on that cluster without having to micromanage - don't reinvent the wheel, just use Kubernetes. It's the industry standard for a reason, and you're not going to have a hard time finding help when you need it.

However, it's easy to forget that there's a class of service/business where this doesn't make sense. Many small businesses (if they're not using a PaaS like Fly), don't have the resources to run a Kubernetes cluster and 95% of the time, just need an app to run on a single VPS.

Read more →

Django on Fly.io with Litestream/LiteFS

I've been playing with Fly.io a lot recently (see my series on deploying Wagtail to Fly.io).

One of the neat things that has come out of Fly is a renewed interest across the dev world in SQLite - an embedded database that doesn't need any special servers or delicate configuration.

Some part of this interest comes from the thought that if you had an SQLite database that sat right next to your application, in the same VM, with no network latency, that's probably going to be pretty quick and pretty easy to deploy.

Read more →

Need some help?

  • Need help with your Wagtail site?
  • Got a Django project that needs an extra hand?
  • Cloud infrastructure still on the ground?
  • Just need some expert advice?

Let's work together

Whether you need help with a project, have a question, or just want to say hello, I'm always happy to chat.

Get in touch