RSSAmplifier

Blog

Matthew Boston

Continuous improvement of software and people

matthewboston.comRSS feed ↗41 posts

Latest posts

The Agentic Test Pyramid

The test pyramid sorts tests by scope. That breaks the moment a model is part of your system. ]]>

Building a Platform Is a Balancing Act

Every platform team lives between two failure modes: say yes to everything and drown in custom code, or say no to everything and watch your users route around you. ]]>

Don't Just Build with AI — Learn Through It

Most developers use AI agents to ship faster. Fewer use them to learn faster. That’s the bigger missed opportunity. ]]>

Speed Is Only Useful If You're Going in the Right Direction

Everyone’s optimizing for speed. Faster deployments, faster iterations, faster code generation. But speed without direction is just expensive wandering. ]]>

Review the Outcome, Not the Output

In agentic engineering, humans don’t need to read every line of code anymore. What matters is whether the change solved the problem. ]]>

Don't Hire Me

Your expertise is a deployable artifact. A well-written SKILL.md file means anyone can spin up an AI agent that carries your judgment, your patterns, and your opinions into their codebase. ]]>

Use AI Agents to Break Your App

Use AI agents to break your app in ways your scripts won’t. ]]>

If You Can't One-Shot Your Feature, It's a SKILL.md Issue

The more I use AI-assisted tools, the more I realize the real work isn’t writing features faster. It’s teaching the tools better. ]]>

Turning Your Terminal Into an AI Dev Team

I’ve been using Claude Code with agent teams in a tmux terminal, and it fundamentally changes the development workflow. ]]>

Coding Agents Need a Faster Feedback Loop

If coding agents are going to be useful, they need the same thing humans do: fast feedback. ]]>

Every CLI Should Include Agent Skills

Most command-line tools still work like it’s 1995. But what if your CLI could think? ]]>

A Bad Line of Research Is a Hundred Bad Lines of Code

Dex Horthy’s “No Vibes Allowed” talk nailed it: AI agents are stateless. The only way to get better output is better context in. ]]>

AI Never Would Have Installed left-pad

AI never would have installed left-pad. It would have written its own in five lines, added three tests, and moved on. ]]>

Code Was Never the Goal

I love writing code. But the point has always been to solve real problems for real users. ]]>

Vibe-Coded Apps Need Real Security

Earlier this week a vibe-coded Google Calendar app went semi-viral. I was excited about it, but also worried about how loose most of these projects are with security. ]]>

Code Quality Still Matters

AI writes almost all my code now. It’s fast, confident, and occasionally wrong in subtle ways. ]]>

My AI Recruiter Honeypot Worked

I slipped a prompt injection into my LinkedIn “About” section to see which recruiters were actually bots. The results were both hilarious and revealing. ]]>

Stay Out of the Dumb Zone

The more I work with AI coding tools, the more I think context window management is the skill nobody talks about, and the one that matters most. ]]>

I Got Tired of Writing Bad Commit Messages

I built git ai-commit because I was tired of writing commit messages that said nothing useful, and I knew Claude could do better with the diff right in front of it. ]]>

Your Tests That Make Network Requests Are Flaky

Your tests that make network requests are, by definition, flaky tests. ]]>

Over-Engineering Is Just Future-Proofing Gone Too Far

Over-engineering is just future-proofing gone too far. ]]>

Building a Platform Is Raising the Floor for Everyone

A platform is a raised level surface on which people or things can stand. That definition is the whole philosophy of platform engineering in one sentence. ]]>

Ship as Fast as Possible, but Not Faster

Mikhail Parakhin said something recently that stuck with me: “Ship as fast as possible, but not faster.” It’s a paraphrase of Einstein’s famous line about simplicity, and it captures the same essential tension. ]]>

Sparse Is Better than Dense

PEP 20 got it right. “Sparse is better than dense.” Code packed too tightly is hard to read and easy to misinterpret. Whitespace isn’t wasted space. It’s how you communicate intent. ]]>

Flat Is Better Than Nested

Deeply nested code is a readability tax. Every level of indentation is another thing the reader has to hold in their head. ]]>

I Built an AI Tool to Write My Brag Document

I always found it difficult to summarize my impact during review cycles. So I built Reflect to do it for me. ]]>

Complex Is Better Than Complicated

Complexity is the cost of solving a real problem. Complication is the cost of solving it badly. PEP 20 draws a clear line between the two: “Complex is better than complicated.” ]]>

Simple Is Better Than Complex

PEP 20’s most quoted line is also its most ignored. Everyone agrees that simple is better than complex. Almost nobody writes simple code on the first try. ]]>

Explicit Is Better Than Implicit

Implicit code hides decisions. Explicit code puts them where they belong: right in front of you. ]]>

Today I Learned: Using BETWEEN with SQL Dates

I came across some weird behavior today when running PostgreSQL queries with dates. Specifically when using BETWEEN to search for records that are within some date range. It turns out, the BETWEEN comparison predicate behaves differently for the date type as it does for the timestamp type. ]]>

Today I Learned: Docker Compose Networks

Due to a bug fix or maybe a new feature to Docker Compose, I caught myself yak shaving how Docker and Docker Compose handle local networking. ]]>

Understanding Clojure: cond and condp

This is the first part of a multi-part series I want to start titled “Understanding Clojure”. Often times I come across Clojure code that can be refactored a bit better or even there’s an existing function to do X . Hopefully I can shine some light on some aspects of Clojure you didn’t know existed. ]]>

Datomic Performance with Clause Ordering

When optimizing datomic queries, it’s best to put the most restrictive clauses first. This lets the datomic query engine do less work. ]]>

The Avocado Project: Day 1

I was inspired to try growing an avocado tree after some new friends mentioned theirs. As I was about to cut open my daily avocado this morning for breakfast, I figured I would give it a shot. I mean, we do have four empty planters on our deck we need to fill. ]]>

Setting Null Values in Datomic

Datomic does not allow the storage of null values. We must reconcile which values were edited and which values were emptied. The emptied values must be retracted. ]]>

Clojure Protocol Namespaces

Importing and requiring Clojure protocols has its tricks. There are some edge cases you must be aware of when using them from separate namespaces. ]]>

Mixpanel Mock

Mixpanel is great for tracking and analyzing user behavior within your application. Here, I will show how to mock out the JavaScript agent to keep from sending events during local development. ]]>

Implementing Clojure Protocols

Protocols are Clojure’s way of defining Java interfaces. Here, I will show how to define protocols and how to implement them. ]]>

Null Object in Groovy

When writing tight unit tests, you should use the Null Object Pattern to isolate the method under test. Here is a helper class I would use when writing unit tests in Groovy. ]]>

When to Extract Constants

Oftentimes I see programmers get a little “Extract Constant” happy. Here, I will discuss some of the scenarios in which I believe it is okay to use constants and when it is not okay to use constants. ]]>

Hello World!

Hello world! Every engineer’s first program, and now my first blog post. ]]>