RSSAmplifier

Blog

John Wilger

Senior Engineering Leader & Principal Engineering Consultant

johnwilger.comRSS feed ↗22 posts

Latest posts

Somebody Has to Design the Factory

Four rules got added to my agent harness the morning I built Lanyard . Ticket work has to happen in an isolated worktree. Commits and pushes from the primary checkout are blocked. A deployment isn't a deployment until a live URL answers. And a task-closing command's exit code doesn't count as evidence that the task closed. Each of them came from something going wrong that day. None…

The Software I Wouldn't Have Bothered to Build

This morning I had an annoyance. By lunchtime it had a name, an architecture, a public repository, a Rust implementation, ADRs, strict tests, release automation, and a website that looks better than most developer-tool sites have any right to . The tool is Lanyard , an SSH-agent switching proxy. I built it because I use 1Password's SSH agent when I'm sitting at my desktop, but I also SSH…

AI Might Not Make You Faster. It Can Make You Free.

Every pitch for AI-assisted development leads with speed. Ship faster, close more tickets, multiply your output. I've spent the past year and a half building my daily workflow around coding agents, and speed isn't what I got out of the deal. Some days I doubt I got any. What I got back was my attention, and it took me longer than I'd like to admit to notice that was the better…

Making Chrome Profiles Real Launch Targets on Niri

I use separate Chrome profiles for personal and work browsing. Chrome supports that, but its desktop integration didn't match the way I wanted to use profiles from a keyboard-first Linux desktop. The problem wasn't that Chrome lacked a profile picker. The problem was that "open Chrome" had become an underspecified action. Sometimes I meant personal. Sometimes I meant work. Sometimes I…

Coding Harness Plugins Are Agentic Systems

I didn't set out to build an eval system for my coding-assistant plugins. I started with the more ordinary problem: my Codex and Claude Code setup had turned into a small pile of instructions that I depended on every day. There was a worktree plugin because I kept wanting feature work isolated from the main checkout. There was a PR babysitting plugin because "watch this until it merges" means…

Make Fabrication Unrepresentable

A while back I helped build an AI assistant that lived inside a business application and answered questions about the company's data. You'd ask it something, it would call the right tools, pull the real numbers, and hand you a clean little summary with a table and a recommendation at the bottom. Most of the time it was genuinely useful. And every so often, it made something up. Nothing…

The Tools You Build Are More Important Than The Tools You Use

There's a pattern I've noticed among developers working with AI coding assistants. Some are having transformative experiences—shipping features faster, tackling problems they'd previously avoided, genuinely enjoying their work more. Others are frustrated, producing buggy code, and increasingly skeptical that these tools offer anything beyond fancy autocomplete. The difference…

The Hidden Pitfalls of AI Software Development

Before we start, I want to make it clear that I'm not going to "blame the controller" for losing this game. I've always believed that a software engineer using AI assistants to write code is still responsible for reviewing and understanding every line of that code, and this situation is no different. Even though the issue I faced was unexpected, it's still completely my…

The Language Model Is Just Another User

The first time I worked on an application that heavily relied on OpenAI's chat completion API, my years of experience managing APIs within an extensive service infrastructure shaped my approach. It seemed straightforward: it was just another JSON API where you send a request to a known endpoint and get back data in a specific format. However, as the development progressed, we encountered…

Generative AI is a UX Revolution

When I first engaged with computers, the landscape was predominantly shaped by command-line interfaces, a stark contrast to the GUI-based systems like Windows or MacOS that later emerged and democratized computing. This transformation was monumental, making technology accessible to a broader audience. Yet, it also introduced a dichotomy: while GUIs simplified interactions for the majority, they…

Using the 27" LG UltraFine 5k Display with Linux

UPDATE 2019-07-25: Based on some comments made on the original post below, I swapped out the Asus ThunderboltEX 2 AIC for a Gigabyte GC-Titan Ridge Thunderbolt AIC that supports two DisplayPort inputs. I'm happy to report that I can now use the monitor in full 5k resolution and that X11, GDM, and Gnome were able to autodetect all of the correct settings (after removing the…

Complex Unique Constraints with PostgreSQL Triggers in Ecto

Ecto makes it easy to work with typical uniqueness constraints in your database; you just define your table like this: defmodule MyApp.Repo.Migrations.CreateFoos do use Ecto.Migration def change do create table(:foos) do add :name, :text, null: false end create unique_index(:foos, :name) end end and a module with a changeset validation for the uniqueness constraint , perhaps like: defmodule…

Kookaburra 0.24.0 Released - Exorcised ActiveSupport

I just released version 0.24.0 of Kookaburra to Rubygems.org . While there were no changes to Kookaburra's API with this release, it is a minor release rather than a patch release, because I removed ActiveSupport from Kookaburra's dependencies. Previously, Kookaburra depended on ActiveSupport >= 3.0, and this prevented it from working smoothly with Rails 2.x applications (at least in the…

tmux and the OSX Clipboard

I started using tmux recently after a) I was informed that GNU screen is basically an outdated POS, and b) an excellent book on the subject was published. I'm glad to have made the switch, as tmux is a wonderful improvement over screen. However, on OSX, I found that the pbcopy and pbpaste commands (among other things) would no longer work from within a tmux session. After a bit of searching,…

Kookaburra Rewrite for 0.15.1

After getting some good feedback on Kookaburra Kookaburra since the original release announcement as well as using it in a few more projects, [Sam] SLG and I decided to treat all of the versions prior to 0.15.0 as a spike and rewrite the framework from the ground up. Although we certainly learned a lot about the approach with the pre-0.15 versions, the problems with continuing to grow Kookaburra…

Using Jeweler for Private Gems

I really like using [Jeweler] 1 to create and manage gems, but its default behavior is to publish your gem to [rubygems.org] 2 whenever you run rake release . This is great for generally useful libraries that you want to open-source, but not as great when you want to use gems as shared libraries for internal use only (whether because the code contains business secrets or just because it's not…

Acceptance and Integration Testing with Kookaburra

UPDATE (2012-01-22): I realized this morning that the credit I gave to Sam Livingston-Gray below may not have adequately shown how instrumental he was in getting this project off the ground; especially since much of his work was done in the private repository from which this was extracted. So, thanks, Sam. This might not have gone anywhere if you hadn't worked to put the idea in practice in…

Capybara, Selenium and Firefox 3.5

I banged my head against this one while setting up our CI build for a new project at work and just now figured it out. I added an example integration spec that just visits the default Rails homepage, clicks the "About your application's environment" link, and verifies the Rails version. This link uses an AJAX action to load the environment details, so I marked it as a JavaScript test, which…

Apprenticeship Program at Renewable Funding - Thoughts?

The Renewable Funding technology team is moving into some new office space in a few months, and now that we'll have our own space, I'd like to start up a variation on an apprenticeship program at work. I'm still in the early stages of designing this, and I want to gather some input from the community before deciding how we might run the program.

Production Release Workflow with Git

After growing the ProjectDX team from three to eight software developers, our release process was a complete pain, and it typically took two to three hours to get a good build on the production branch (and even then some insidious issues would sneak through). By making a few changes to our development and acceptance process, we were able to turn it into a five-minute, low-stress job.

What it Really Means to be "Agile

Yesterday, Elizabeth Hendrickson posted her Agile Acid Test in which she asks three questions to determine whether or not a team is truly "agile". There is also the Agile Manifesto which describes the values that an agile team should adhere to. While there is nothing that I disagree with in either Elizabeth's post or the Agile Manifesto, there are two simpler questions you can ask that get to…

Retrospective Facilitation

Sprint 1 (11/03) Sprint 2 (11/24) Alpha (12/15) Beta (12/29) 11/03 11/24 12/15 12/29 I facilitated my second release retrospective with the ProjectDX team yesterday. The first one, back in October, went reasonably well considering I was asked to facilitate at the start of the retrospective and had no time to prepare. However, yesterday's retrospective…