The tools I use, and why.

Notes on the software behind client projects, written for the person paying for the work. Each one ends with the short version: what it means for your costs, your risk and your independence.

8 entries
1 min read

n8n or custom code? Where I draw the line on automations

Visual workflow tools are brilliant until the third exception. How I decide, and what it means for your running costs.

Read

n8n lets you wire services together on a canvas: when an email arrives, pull the attachment, post it somewhere, ping a channel. For a simple, linear job it is quicker to build than code, and a curious member of your team can follow what it does by looking at it.

The trouble starts with exceptions. Once a workflow has branches for missing purchase orders, duplicate invoices and suppliers who send three PDFs in one email, the canvas becomes harder to read than the code would have been, and much harder to test. My rule: if I can describe the job in one sentence with no "unless", it goes in n8n. If it needs an approval step or more than a couple of exceptions, it becomes a small Python service with tests.

The short version for clientsSimple, linear automations are cheaper to build in a visual tool and easier for you to adjust. Anything with judgement in it is cheaper to own as code, because it can be tested every time it changes.
1 min read

Local models with Ollama: when they are good enough for client data

Keeping documents on your own hardware is appealing. Here is where a local model holds up and where it does not.

Read

Ollama makes it straightforward to run open-weight language models on a machine you own. Nothing leaves the building, there is no per-request bill, and you are not affected by a provider changing its terms.

In my testing on the homelab, local models are dependable for narrow jobs: pulling fields out of an invoice, classifying an enquiry, summarising a document into a fixed template. They are noticeably weaker at long, multi-step reasoning, and they need a reasonably capable machine with a graphics card to be quick. I always test both options against a sample of your real documents before recommending one.

The short version for clientsFor sensitive, repetitive extraction work, a local model is often good enough and keeps your data in-house. For open-ended reasoning, a hosted model is usually worth its usage cost. The scope will state which, and why.
1 min read

Why your app runs on Docker Compose, not Kubernetes

The boring choice keeps your bill and your dependency on me small. When that stops being true, I will say so.

Read

Kubernetes is built for organisations running many services across many machines with a team to look after them. A small business app is usually one web service, one database and a background worker on one server.

Docker Compose describes that in a single readable file. Any engineer who has used containers can understand it in minutes, it runs on an ordinary virtual server, and upgrades are one command. If your app genuinely outgrows a single machine, moving on from Compose is a well-trodden path.

The short version for clientsA smaller server bill, fewer moving parts to break, and a setup any competent engineer can take over. Not a ceiling: a sensible starting point.
1 min read

Tailscale for small offices: remote access without opening ports

Reaching the office server from home used to mean a VPN appliance or a hole in the firewall. There is a calmer way.

Read

Tailscale builds a private network between your own devices. Your laptop at home can reach the office server as if it were on the same desk, without the server being visible to the rest of the internet at all.

For a small team it is quick to set up, works on phones, and access can be removed for a leaver in seconds. It does depend on Tailscale's coordination service; for clients who want no outside dependency at all, the open-source Headscale project can stand in, at the cost of a little more upkeep.

The short version for clientsSafer remote access than an open port, usually free or cheap at small-team sizes, and simple to manage when people join or leave.
1 min read

Postgres is probably the only database your business needs

Customer records, search, queues and AI document lookups, in one well-understood place.

Read

PostgreSQL has been in steady development for decades and is supported by every hosting provider worth using. With the pgvector extension it can also power the "search your own documents" features that AI projects often need, so there is no separate specialist database to pay for and back up.

One database means one backup routine, one thing to monitor and one set of skills for whoever looks after your system next.

The short version for clientsFewer services to pay for and maintain, and a database that will outlive any of today's fashionable alternatives.
1 min read

Backups you have actually restored: my restic routine

A backup is a hope until you have restored from it. What I set up, and what I check every month.

Read

restic takes encrypted, de-duplicated backups to almost any storage you like, including cheap off-site object storage. Encryption happens before anything leaves your server, so the storage provider cannot read your data.

The routine matters more than the tool: nightly backups, an automated integrity check, and a restore to a spare machine once a month, with the result written down. The first restore test is part of every handover.

The short version for clientsOff-site, encrypted backups for a few pounds a month in storage, and evidence, not assurances, that they work.
1 min read

Fixed price or day rate? How I quote, and why

Why most of my work is fixed price, when it is not, and what a fair change request looks like.

Read

Day rates move the risk of a project being underestimated on to you. Fixed prices move it on to me, which is where it belongs, because I am the one estimating. The price is only fixed once the scope is written and agreed, which is why the scope is so specific.

If you want something added mid-project, you get a short written note with the cost and the effect on the date before anything changes. Open-ended work, such as investigating a failing legacy system, is the exception: that is time-boxed and billed by the day, with a cap.

The short version for clientsYou know the cost before you commit, changes are priced before they happen, and nothing is billed by surprise.
1 min read

Letting an AI agent near your accounts: the guardrails I insist on

Agents can do real work. Here are the rules that decide what they are allowed to do without asking.

Read

An agent that reads invoices and prepares draft bills saves real time. An agent that can approve payments on its own is a liability, however good the model. The difference is in the permissions, not the AI.

Every agent I build gets read access to what it needs, write access only to drafts, and an approval queue for anything that sends money, emails a customer or deletes data. Every action is logged with the agent's reasoning in a sentence, and before going live it runs in shadow mode against real past cases so we can compare its choices with yours.

The short version for clientsThe agent prepares; a person approves. You get the time back without handing over the cheque book.

Tell me what eats your week.

A few lines is enough: what the job is, how it is done today, and roughly when you would like it sorted. You will get a straight answer on whether I am the right person for it.

Start an enquiry