RSSAmplifier

Blog

bytes.zone

bytes.zoneRSS feed ↗134 posts

Latest posts

Winter Pinball League

I joined a pinball league at a local barcade! I've got like… lifetime stats now! It's been really fun so far, but, as you can see, I'm not that good yet. Pinball wizard? Nah, but maybe a pinball apprentice.

Software estimation that doesn't suck

You've been asked to give an estimate about when you're gonna be able to ship some code. Fine fine, except that there's something riding on this… a trade show, seasonal deadline, etc. Point is: there's another part of the business depending on you doing a good job here. But software estimates are notoriously inaccurate, to the degree that people frequently double or halve them…

Horizon Investments

In December 2025, I joined Horizon Investments as a software engineer.

Should we design for iffy internet?

I keep hearing claims like this: Not everyone in the US has access to stable, reliable internet, even in 2025. Web developers should stop assuming people have fast internet connections and slim their payloads accordingly. This seems intuitively true to me—programmers are gonna have better connectivity because that takes money, and programmers are well-paid. But what's the actual scope of the…

LFFS update, June 2025

It's been a while since I've written anything here, especially about Local-First from Scratch . Here's what I've been up to: I took a little break (just a couple weeks) to learn about MiniZinc. Mainly I learned that it's a very opaque system… even getting a problem optimized enough to even be solved is challenging (at least at my skill level.) Signed up for One Big Win as…

a dilemma, or is it a conundrum? Maybe it's a dilendrum!

So I thought I had a pretty good thing going: in my last post, I documented some early results from the time-tracking software that I wrote for Local-First From Scratch . I thought I was on track for an easy conversion to prose, then an easy beta-reading, then becoming a thousandaire and retiring to my private island couch to drink a budget mojito or whatever. But then… I committed to giving a…

some time tracking results

A while back I wrote ( post 1 , post 2 ) about how TagTime (and the then-called TinyPing) analyze time by assuming that each ping is worth 45 minutes, then getting a daily average and a 95% confidence interval. This can give you a pretty good idea of how you're spending your time, but I only did it for a simulated person with a perfect schedule. If you haven't read about this before,…

Local-First Foundations

I'm writing a book about local-first software tentatively called Local-First From Scratch . This is a snippet from that book—an intro to why you should care about local-first software and what it gets you. I thought it ended up being a pretty good summary of what the whole project is about, so I wanted to share it as a blog post as well! If you picked up this book, you might have some idea…

LFFS: both a TUI and a GUI?

I think I may need to change up the outline for Local-First from Scratch. Originally, I had this idea that it would be cool to make two separate clients that used the same sync code and data structures to demonstrate a modeling-first approach. Now that I'm in the thick of it, though, I'm realizing that I don't want to have to explain the incidental complexity of both a TUI and a…

Depth Year - January

David Cain wrote in 2017 about a depth year : what if, for a whole year, you stopped acquiring new things or taking on new pursuits. Instead, you return to abandoned projects, stalled hobbies, unread books and other neglected intentions, and go deeper with them than you ever have before. That really resonates with me! I have a terrible habit of making wishful acquisitions: things that I think will…

early thoughts on using beeps

I've been using the TUI version of the book software for a couple days, and have some observations! First off, here's how it looks: Unlike my previous attempts at making this software, I can see and edit the whole database. I knew that would be helpful, but it's way more helpful than I thought! For example, I no longer have to guess as much at what I previously tagged something. I…

LFFS: Simplicity vs Efficiency

I knew it was gonna happen, just knew it: I finally hit the first part of writing the book where I have to make a choice between something being easy to describe and understand up front vs long-term efficiency or flexibility. Let me explain. When you have a state-based CRDT, you have a merge operation. The details don't really matter for this explanation, but basically if merge is…

Local-First From Scratch, part 1

Since around Thanksgiving, I've been working on the draft of a book I'm tentatively calling "Local-First from Scratch." The idea is basically to write tinyping , but do it in book form. One thing I had to decide right away was whether this would use some off-the-shell local-first library or if I was going to explain and implement everything from first principles. I chose the latter,…

Local-First From Scratch

I wanted to write a book about local-first software. Instead of doing a survey of all the libraries available, I took a first principles approach. That meant doing a lot of explaining CRDTs, syncing, and the like, but I had a ton of fun with it. As of March 2025, I had the introduction and first chapter done, and was working on the implementation that would end up being built up throughout the…

CRDTs for tinyping

When I've been thinking about sync for tinyping, I've been using off-the-shelf CRDTs (mostly Automerge.) But thinking about it from very simple principles, I don't need all that. Tinyping can be broken down to: A log of timestamps Tags and other data for those timestamps A few settings (like the lambda value for calculating the offsets.) I think we can sync that data with: A…

doing in a day what I could not in 6 months

I've been working on tinyping for quite a while now, in various forms. Six or seven months, in fact. I feel frustrated that I don't have anything usable to show for it. When I stopped doing thing-a-month, I wrote : it turns out I'm pretty good at planning projects like this, but when I have such limited free time it's way too easy to overcommit. That's still true! And…

you can try tinyping, if you want

Despite not talking about it much, I'm continuing to work on tinyping. In the spirit of working with the garage door up, you can try an extremely early version at app.tinyping.net . It mostly works, though! Pings are scheduled and stored appropriately, and you can edit tags for them. It also follows the Automerge project's advice on how to best structure documents to avoid the main…

platform engineers work on the meta-product

In what is platform engineering? , I gave this definition: Platform engineering, as a discipline, takes a coherent approach to improving an engineering organization's output in ways that the rest of the business can see and understand. I've had some thoughts and discussions since then, though, and I think that definition needs revising. Specifically, I tried to be very clear in the last…

what is platform engineering?

Today I'm starting my third 1 platform engineering job. During the interview process, I had a few people ask me what exactly a platform engineer does, and I realized that… I've had my own short answer—"a platform engineer finds and reduces friction in the engineering organization"—but that's more an example than a proper definition, plus it doesn't cover everything. There are a…

platform engineer at PayNearMe

In September 2024, I started at PayNearMe as a platform engineer (architect level.) I wrote some early thoughts during the interview process in what is platform engineering? and refined them in platform engineers work on the meta-product .

Notes from setting up Nomad

A couple people have asked me for my impressions of Nomad . I used it a little bit back before 1.0, but haven't touched it for ~8 years so I'm going in with relatively fresh eyes. The "stack" here is Vault, Consul, and Nomad. Here's a snippet of what they do: Vault: secrets management. As well as basic key/value stuff, it can provision things like database credentials on…

Kubernetes whoops

Welp, I accidentally deleted my Kubernetes cluster. I was messing around with Hetzner Cloud and Nomad trying to figure out if they'd be a good fit for what I'm doing and ran a terraform delete thinking it would just affect my Hetzner machines. Turns out there's a good reason that the delete subcommand is disabled by default in Terraform Cloud. It took me a bit to come back, but this…

tinyping's stack

Hey! It's been a couple weeks. The big piece of progress is on tinyping: I've gotten unstuck by making different technical choices. Instead of using Elm for this, I'm using XState, Automerge, Tailwind CSS, and Svelte. This has forced me to learn some new things, which was a byproduct I wanted! Here are my impressions of each: XState : I'm using version 5, which moved focus from…

tinyping and scrub moves

I spent this week doing two things: Working on design for tinyping Wondering if I'm playing scrub games by developing this idea Let's take them in turn: Design for TinyPing As far as design is concerned, I think I have two basic jobs-to-be-done with the app: trying to discover how you're spending your time, or trying to change the same. The design challenge comes in when you factor…

tinyping

Tinyping is a tool to help people (myself included) to make sure they're using their time in accordance with their values. It does this by random sampling: every so often, it will ask you what you're working on. Once it has enough pings, you can use statistics to build up an accurate picture of how you're using your time! Tinyping is currently under development and hasn't been…

elm-duet 0.1.0

Just a quick note: I just made elm-duet public and released v0.1.0. If it sounded great to you based on my post from the other day then you can now get it! (But if you remember that, it's also worth noting I improved those docs a lot!) Hopefully this represents a stable release, but we'll see what we see when other people get their hands on it. I'm certainly planning to work on…

Stopping thing-a-month

I'm going to have to stop doing thing-a-month. I really love it as an idea, but it's not working out so well for me: it turns out I'm pretty good at planning projects like this, but when I have such limited free time it's way too easy to overcommit. trying to figure out how to build a business around a tiny idea in a month is a bit much. doing that and writing about it is even…

elm-duet

Just a little update on tinyping: I have a system that mostly works! Yay! It doesn't do reporting, but it'll alert you about new pings correctly. This actually doesn't feel like a huge win to me because it's so, so messy. I'm still using Automerge for this, and I think it's a solid decision, but taking the distributed nature of the system into account while building…

tinyping month 2

Let's talk about tinyping. The thing-a-month project is meant to be a thing a month, full stop. But sometimes life gets in the way: between illness and a long-scheduled and much-needed vacation, I didn't have the time I needed to do a good job on tinyping in March. But I really think it's a good idea, and not such a big one. It's also pretty close to being usable! So this month…

Kratky in the basement

Hello hello! Today is April Cools , which is like April Fools but for posting stuff outside what you normally write about instead of unfunny jokes. Hope you enjoy! I want to eat more salads, but: Viral and bacterial outbreaks come up pretty regularly in the US food system. I don't feel super paranoid about produce where you can wash or avoid eating the skin, but I feel worse in cases where…

elm-duet

While building tinyping, I had a lot of trouble syncing complex types between Elm and TypeScript, so I started building elm-duet. It takes a JSON Type Definition schema and generates both Elm and TypeScript type definitions so the system can be type-checked end-to-end. You can get source and binary releases for many platforms at BrianHicks/elm-duet .

seeing the forest through the trees

I’ve been pretty heads down trying to get the first version of tinyping done this week. Here are the highlights: Automerge is very cool, and it seems like it might even be able to do the encrypted syncing that I want. Data migrations are really tricky though, though. I’m using Elm for this, since I’m super familiar with it, but the way I’m setting up the app right now means duplicating…

app architecture

So, a little news to start: I decided on a name for this project and bought a domain. tinyping.net is now receiving traffic (but just linking back to bytes.zone for the moment.) But today I want to write about the ideal architecture! Part of the thing-a-month project is to pare down my ideas to the minimum that I can actually achieve in a month. I thought that was going to be easy on this project,…

what's between two pings?

I got to thinking about how pings work in this system ( last post and realized an optimization. Right now I'm treating them as though they're all the same size—that's safe because of the law of large numbers, remember—but they're not all the same size! Time varies between pings. Say you have these pings with these tags: Time Tag 8:00 work 9:00 work 9:30 coffee 10:30 work…

messing around with statistics

The basic idea behind TagTime is: Choose how often you want to be asked what you're up to. This constant is called λ. Let's assume that λ = 1 for now, which will mean "once per hour." If you wanted to be asked every 30 minutes (on average) you could set this to 2. Schedule pings (instances of being asked what you're doing) into the future following a Poisson distribution (which…

wrapping up month 0

Well, it's March 4 already, so it's about time to wrap up the first month with a short post. What'd I get done this month? Well: I have a Kubernetes cluster ready to run all the workloads from my other experiments. That cluster is running my blog and associated services, plus some other smaller sites. I've got deployments all automated and ready to go. There is some work left…

thing-a-month (awareness)

The second thing-a-month project is a "random time tracker" I'm calling tinyping. It works a bit like TagTime and is good for getting a better awareness of moods and how I (and others) spend our time. There are two big challenges here for me: Understanding enough of the statistics to get useful results. I think I've already go an OK understanding, but this will test that assumption.…

sourcing secrets from 1Password

I've been setting up a personal Kubernetes cluster recently. The whole thing is set up with Argo CD , which basically means that I make changes to the cluster by committing to a git repo and pushing. Really handy, especially when I make a mistake and need to clean something up or revert. One problem with this, though, is that it's probably not a great idea to commit secrets to the…

running this blog on Kubernetes

This week has been wild but I've got an update: I'm now That Person who has a static site blog running on a Kubernetes cluster. 😆 The workflow for publishing a new post is now: Write the post Put it in a PR Merge the PR when checks pass Everything else is automated. Once the PR merges, GitHub Actions builds the container with nixbuild.net, then pushes it to a container registry and…

Ukulele seems nice

I've wanted to pick up an instrument again for a while now. I considered the guitar, but: the strings hurt my fingers they're so big! when I've tried to learn, I've felt a lot of pressure to get good or get out. Rock star mentality, maybe? Not my speed, anyway. So instead, I'm going to try the ukulele: nylon strings small and cute all the stuff I have found about ukulele…

getting back off the CI train

I got Woodpecker working, but the first job I did (a nix build ) totally froze up the whole cluster for like an hour and a half, and didn't even complete successfully. Pretty yikes. Looking at this realistically, I don't want to buy the size nodes that I would need to do this properly, so it probably makes sense for me to use a hosted service (probably just a free one!) If I had a bunch…

getting on the CI train

If I’m going to be shipping apps by the end of the month, I’d better get CI set up. I’ve been looking around at different options and found: Argo Workflows. Probably a taste that goes great with Argo CD, but I’d like to source CI steps from the repos and this seems difficult. Tekton: similar. Woodpecker: an offshoot of Drone, looks nice, seems to do what I want, but I can’t get the Helm chart…

moving Kubernetes to New Jersey

So this morning was shaving yaks. (I mean, what infrastructure project isn’t?) I got up thinking I’d spend a couple hours before work setting up Keycloak, but then I realized that it needs a Postgres database for a proper setup, so I comparison shopped Postgres operators. But in testing out my choice, I realized that the region I deployed the cluster into doesn’t have support for NVMe drives. No…

first light on HTTP

Over the past few days I've been working on getting Kubernetes serving apps. As of this morning I have a sample web app (the Kubernetes guestbook example , minus Redis) running on my cluster, frontend by a load balancer, and with a certificate provisioned by Let's Encrypt to communicate with CloudFlare, who terminate SSL from the browser with their own cert. I'm not going to write a…

a Kubernetes shopping list

I talked to a few people yesterday—it sounds like Kubernetes is where it's at. I really enjoyed Nomad back in the day, but it looks like I'd have to do a lot of roll-your-own, which kind of negates the benefit of operational simplicity for me. That doesn't mean that I'm going to let simplicity go out the window. I looked around and found that Vultr will manage the control plane…

shopping for a scheduler

The first thing on my "meta" list is to get my house in order with how I deploy things. Right now I have a single VM in DigitalOcean that runs my blog, git.bytes.zone, and a couple other smaller static sites. (See clown computing .) That's starting to kind of burst at the seams, though. I haven't done an amazing job separating databases for various things, so they all live in one big…

thing-a-month

I'm interested in making new products, and I've got a bunch of ideas. So in 2024 (or at least the early part of it) I tried to make a thing a month! The rules were pretty simple: It had to be a "real" thing. Something you can buy, download, subscribe to, etc. It had to be ready in a month. If I decided I want one of the "things" to be improvements to an earlier thing, that would've…

kicking off thing-a-month

I'm going to try starting to make a thing a month. ( Here's the projects entry ) The long (looooong) term goal is financial independence, but the short-term goal is more about exercising my creative muscles, having something cool to write about, and actually trying to make the things I've been dreaming of. This first month is a meta-month. I know for the rest of the months I do this…

meta: micro posts are in the feed now

Hi out there to any folks subscribing via RSS! You probably got a bunch of posts in your feed reader just now that had to do with an exploration of starting a business I did in August of last year. And with the next post in your feed, you're going to start getting more like that. If that's cool with you, then great: no action required on your part to get everything. However, if…

thing-a-month (meta)

The first project in thing-a-month will be laying the foundation for the rest of the work. (Here's the intro post where I talk about this .) I've been running my own infrastructure for a while now but it's gotten really messy recently. Instead of throwing more stuff into that, I'm going to try and get things set up in a less chaotic way. This might seem like overkill, but I see…