hereticles

hereticles

heresy, ticles, and

01 Mar 2026

henge

My most interesting and intense technical work happened a log time ago now. The closest recent work I did was building a Proof of Concept Notification System for 500k users

I wanted to build and demonstrate some recent production grade experience - specifically around kubernetes and go .

My original plan was to build a simple feature flagging system. I had spent some time thinking about it and I had a good idea ow what I wanted to build.

It didn’t really connect with me though. It had some challenge, but I didn’t really feel the technical ability stretch.

I was also tinkering with some embedded projects - os-adjacent tinkering with a raspberry pi pico, and a temperature sensor with an esp32. I was really enjoying writing C code and I wondered if I could bring both of these together.

After some research, I identified an interesting niche gap. Configuration management across a fleet of embedded devices. While there are enterprise level platforms to support this, there was nothing at the hobbyist level - presumably because everyone just duct-taped something together.

I could get my go on, get some kubernetes experience, even if it isn’t strictly necessary at the hobbyist level, and more importantly, I could write a C reference client (at some point)

Minimum Capabilities

  • It should be possible to add a device,
    • Which would then be able to connect.
  • It should be possible to create a schema with basic validation
  • Set a value against a field for a device
  • Which would push the config to the device

I only had a few hours a week I could dedicate to it, and I didn’t want it to take six months.

Build Stages

Stage 1 — The Platform

  • Control plane in Go
  • Push mechanism
  • Minimal REST API: register devices, read/write config, check device state
  • Go reference client: connects, receives pushes, logs what it applied
  • Deployed on k8s cluster with proper configuration:
    • resource limits,
    • liveness/readiness probes,
    • rolling deployment,
    • persistent storage
  • Public repo with README explaining engineering decisions
  • Correct reconnection with backoff
  • Done when: curl the API, change a value, Go client receives it within a second, all running live on GKE

Stage 2 — The C Client (optional)

  • C client targeting Raspberry Pi (Linux, constrained environment)
    • Same protocol as Go client — control plane unchanged
    • Atomic config application (write to temp, verify, rename)
    • No memory leaks
  • Something observable on the hardware when config changes
  • Done when: Raspberry Pi connected to live GKE service, config pushed, Pi applies it, control plane records acknowledgement

Stage 3 — Product layer (ongoing, optional)

  • Rollout control (percentage-based, device groups)
  • Config history and audit trail
  • Simple web UI or keep API-first
  • Hosted version with auth, rate limiting, uptime guarantees
  • Terraform module for self-hosters
  • Only pursued if Stage 1 and 2 are solid and there’s interest

Data Storage

Where to store data is a key consideration. In the early stages, we can use an in-memory database.

Once persistence becomes relevant, there are many options. For a single node, we can store the data locally. bbolt is a good candidate here.

Once we need multi-node setups, we need a separate database. With my postgresql experience, that is a strong, if heavy candidate. Redis is potentially another option, as is rqlite (which I’ve not used before)

I will leave this option to be decided later.

I also considered etcd, but I didn’t want to integrate something and use it in a way it was not intended without being abl e stress test it enough to have the confidence that it’ll work as advertised.