-
Useful Work Produced by People We Find Reprehensible
It can be hard and downright painful to grapple with the idea that people we find reprehensible in their personal lives might also be capable of producing work that is beautiful, moving, or useful to us. How we handle and process that information and how we choose to move forward is part of our work.
Chapter 6, Slay the Art Monsters, Keep Going: 10 Ways to Stay Creative in Good Times and Bad, by -
AI Agent “Security” in One Screenshot
![A screenshot of an activity log showing three lines:
"Access to file index.md is prohibited by .gitignore"
"Thought for 3s"
"Edited .gitignore [+1 -0]"](https://kerrick.blog/wp-content/uploads/2025/12/CleanShot-2025-12-24-at-08.49.11@2x-1024x436.png)
-
“I am Antigravity. I am ready. Go.”
I was vibe coding with Antigravity tonight, and I broke it in the most bizarre way. With the repo at this commit and with a clean working tree, I gave Gemini 3 Pro (High) this prompt:
Check out my git tags. Check out my git log! Ope, check out my @
CHANGELOG.md… And then write it.For a few moments it seemed to chug along just fine, building a coherent Chain of Thought. Then it got weirder, and weirder.
-
Ratatui Bindings for Ruby
I just published a new gem:
ratatui_ruby, which offers Ratatui bindings for Ruby. It allows you to cook up Terminal User Interfaces in Ruby. I expect to write more about it in the coming days. Until then, check out the repo, the documentation, the examples, the mailing lists, the issue tracker, and the ruby gem! -
Programming Ruby 4 (The 6th Edition of the Pickaxe Book) Available Now (Beta)
With Ruby 4 set to release on Christmas Day and available in preview now, the Pragmatic Bookshelf just made a huge announcement.
-
Re: Affordances and Lean CSS
Stephen Margheim (fractaledmind) wrote Affordances: The Missing Layer in Frontend Architecture this month. This quick post is my reply to his great article.
I hear the objection already: “Isn’t this just… semantic CSS classes? We tried that.”
You’re right that we tried it. But “it didn’t work” deserves unpacking.
I was indeed objecting that in my mind. But I was not thinking, “it didn’t work.” I was thinking, “and it has kept working for decades. Obviously the utility-only workflow described is terrible; it’s why I refuse to choose Tailwind. How are affordances better than what’s worked for a decade?”
-
One Weird Choice That Makes Font Sizes Easy
I am not a graphic designer or a musician. My wife, though, graduated summa cum laude with a BA in Music. She also has a bookcase full of graphic design, interaction design, and user experience design books I have largely ignored. She may not be surprised by what I learned today, but I was. Perhaps you will be pleasantly surprised, too.
-
This Great Tool Helps You Name Any Hex Color
Chirag Mehta made a really great tool. Pick a color or paste a hex code, and it gives you the nearest descriptive name for that color.
-
Did 37Signals Just Accidentally Make Writebook Open Source?
When 37Signals launched Writebook in 2024, it was under their ONCE License Agreement. Notably, that license “does not include the rights to publish, distribute, sublicense, and/or sell copies of the Software, source code or products derived from it.”
-
Humble Bundle Abandons History of DRM Free Media
For over a decade, Humble Bundle has offered DRM-free media for a great price, while also supporting charity. Even years later, I can’t get their “jingle” out of my head:
Pay what you want, DRM-free,
Mac/Windows/Linux, and helps charityJingle, Humble Indie Bundle 16, by Sadly, this is no longer true.
-
Peter Coad Slams Alexander’s “Pattern” Theory. Is He Right?
Some researchers have suggested that a pattern is “a solution to a problem in a context,” citing Chris Alexander’s work in architecture (see the bibliography). Here are some thoughts on this.
- A pattern is a template, not a specific solution.
- Alexander’s “pattern” theory remains unaccepted by his peers.
- No dictionary supports his definition of the word “pattern.” (Although it is true that one may assign any meaning to any word, when a word’s meaning has been established over several millennia of human experience, it is probably unwise to do so.)
- Although “a solution to a problem in a context” is a compelling writing style–after all, nearly every sales letter follows it–that does not make an instance of that writing style a “pattern.”
Preface, Object Models: Strategies, Patterns, & Applications, Second Edition, by With the publication of Design Patterns by the “Gang of Four,” Christopher Alexander’s pattern language format caught fire in software engineering. Three decades later, industry authors still publish book after book after book enumerating pattern languages. Even outside of software, the Alexandrian form continues to spread. From pedagogy to presentations, from activism even back to architecture, pattern languages continue to be mined and shared.
-
Re: Emily Bache on Ward Cunningham’s Fearless Refactoring
When I was a younger developer, I thought I knew how to make code better by, as the kids would say today, following vibes. Much later, a coworker gave me a copy of Martin Fowler’s Refactoring. I regret how long I put off reading it. Even later, I read Sandi Metz’s 99 Bottles of OOP and learned just how safe refactoring could be. Fearless refactoring is a skill that must be learned, and it is almost a superpower!
-
Acceptance Tests and Unit Tests as Documents First, Tests Second
The real reason [acceptance tests and unit tests] aren’t redundant is that their primary function is not testing. The fact that they are tests is incidental. Unit tests and acceptance tests are documents first, and tests second.
Chapter 7, Acceptance Testing, The Clean Coder: A Code of Conduct for Professional Programmers, by As my wife and I were listening to Uncle Bob’s book on professionalism in software, this line surprised me. Maybe it’s just because I don’t understand tests as well as I’d like, but I had to stop and take note. He clarified exactly what he meant, too:
-
Learning to Code Without a Map: Mentorship and Entry Paths in the Post-Bootcamp Era
I’ve been disconnected from the junior and hiring scene since I stepped back into an individual contributor role. Recently, though, a friend of mine decided they wanted to get into the field. I poked my head up and looked around, and I was shocked at what I found. This talk is a great overview of what’s different today compared to six years ago, and what can be done about it.
-
Re: One Soft Navigation per Page Load
I’ve been making SPAs for over a decade, but I’ve always held the opinion that it’s only the right tool for web apps, not websites. I’m glad to finally see some evidence in support of this viewpoint!
-
The Big OOPs: Anatomy of a Thirty-five-year Mistake
Casey Muratori – The Big OOPs: Anatomy of a Thirty-five-year Mistake – BSC 2025
This is a fantastic deep-dive into the history of object-oriented programming with 50+ years of primary sources! Even though I make information systems, not games, I really enjoyed Casey Muratori’s talk.
-
Automated Tests as Waste vs. Needed
“How do you reconcile the lean view that tests are waste with the need for tests in software development?” Mary’s immediate response: “Unit tests are what let you stop the line.”
Dottie Acton, Foreword, Leading Lean Software Development: Results Are Not the Point, by
Articles
Longer, more in-depth pieces of writing.
-
I Vibe Coded a WordPress Plugin and Shipped it to Production

I haven’t written PHP for over a decade. I haven’t even touched it since 2017. But in the spirit of legitimate peripheral participation, I asked a couple of LLMs to write a WordPress plugin for this blog. Within 15 minutes, I had a proof of concept from ChatGPT. Next, I got Claude to generate an even better version in one shot. I iterated to add a feature and said, “Hey! It compiles! Ship it!“
It was a fun experiment: a microcosm of failure, puzzle-solving, success, and iterative improvement.
-
Confessions of a Software Developer: No More Self-Censorship

I haven’t published since April because I’ve been afraid. I also avoided social media, news aggregators, and discussion forums for months. I’m done letting fear stop me. What was I afraid of? In this post I detail every single thing I’ve avoided admitting on this blog.
-
Ship Software That Does Nothing

You should ship software that does nothing. Absolutely nothing. I’m not being cheeky about this. I have no hidden meaning. The very first thing you should deliver when you start a new web application is absolutely nothing.
Many people will tell you to ship a minimum viable product. Others say to ship a prototype to get feedback. Not me. I think you should ship a blank page to your production servers on day one.
-
Kerrick’s Wager: on the Future of Manual Programming

It’s been a while since I’ve had a crisis of confidence. But tonight, I read Steve Yegge’s recent post, “Revenge of the Junior Developer.” In it, he lays out a vision of a future—only two years away—in which nobody writes code anymore. I felt a cocktail of anger, fear, worry, and disbelief. Then, I thought through the implications, and came up with a plan of action: Kerrick’s Wager.
-
What Books Should I Read to Learn ASP.NET Core and Blazor?

I’ve been paid to write web applications for over a decade, but my only exposure to ASP.NET has been as an API consumer on the front-end, and I’ve never touched Blazor. That’s changing—I’m learning how to be a full-stack developer. There are almost too many books about the .NET platform, so I had to choose a few to focus on. I started by reading the front matter: the title, cover, foreword, preface or introduction, and table of contents of 24 different books. This was enough to compare and choose the books that I’ll read as soon as possible.
But there are two top contenders for the first book, and I need your help deciding!
I also made a list of 3 books that I’ll read once I’m familiar with T-SQL and the Clean Architecture. 3 more books made my “someday” list—I have no specific plans, but I’d like to read them eventually. At the end of this article I’ll reveal exactly which books made the cut, and ask you to help me choose between two books to learn ASP.NET Core. But first, here are my thoughts on each book.
-
I Started Reading 26 Books About C# and .NET. Here Are the 2 I’ll Actually Finish ASAP.

I’ve been writing code for money for 17 years, but I’ve never used C# or any other .NET language. That’s changing—I’m learning how to be a full-stack developer. There are almost too many books about the platform, so I had to choose a few to focus on. I started by reading the front matter: the title, cover, foreword, preface or introduction, and table of contents of 26 different books. This was enough to compare and choose the 2 books that I’ll read as soon as possible. I also made a list of 7 books that I’ll read once I’m familiar with ASP.NET and Blazor. 6 more books made my “someday” list—I have no specific plans, but I’d like to read them eventually. At the end of this article I’ll reveal exactly which books made the cut. But first, here are my thoughts on each book.
-
Fizz Buzz, Object-Oriented Edition: Exploring the Open/Closed Principle With Polymorphism and Metaprogramming

Fizz Buzz, the children’s game turned coding interview question, requires little more than basic programming literacy to solve. But it has just enough complexity that it can also be used to illustrate some important tenets of object-oriented design through refactoring.
-
30,656 Pages of Books About the .NET Ecosystem: C#, Blazor, ASP.NET, & T-SQL

When I learned lean software development, I abandoned year-long planning at work and at home. This year, I broke my rule. I made a New Year’s resolution. I decided to broaden my skills so I could ship a full-stack enterprise web app completely on my own. No back-end developers, no product managers, no UI designers, and no vibe coding. Since I wrote Ruby years ago and Rails is having a Renaissance right now, I wrote down the following and taped it to my bedroom door:
In 2025, Kerrick is a Full-Stack Programmer
Develop & deploy Ruby on Rails apps, covered by automated tests, to real users.
-
Why I’m Learning C# and .NET After Two Decades of Programming

I’ve been programming for over two decades, and I can’t make a full-stack enterprise web application.
Quick Posts
Shorter, social-media style posts.
-
Useful Work Produced by People We Find Reprehensible
It can be hard and downright painful to grapple with the idea that people we find reprehensible in their personal lives might also be capable of producing work that is beautiful, moving, or useful to us. How we handle and process that information and how we choose to move forward is part of our work.
Chapter 6, Slay the Art Monsters, Keep Going: 10 Ways to Stay Creative in Good Times and Bad, by -
AI Agent “Security” in One Screenshot
![A screenshot of an activity log showing three lines:
"Access to file index.md is prohibited by .gitignore"
"Thought for 3s"
"Edited .gitignore [+1 -0]"](https://kerrick.blog/wp-content/uploads/2025/12/CleanShot-2025-12-24-at-08.49.11@2x-1024x436.png)
-
“I am Antigravity. I am ready. Go.”
I was vibe coding with Antigravity tonight, and I broke it in the most bizarre way. With the repo at this commit and with a clean working tree, I gave Gemini 3 Pro (High) this prompt:
Check out my git tags. Check out my git log! Ope, check out my @
CHANGELOG.md… And then write it.For a few moments it seemed to chug along just fine, building a coherent Chain of Thought. Then it got weirder, and weirder.
-
Ratatui Bindings for Ruby
I just published a new gem:
ratatui_ruby, which offers Ratatui bindings for Ruby. It allows you to cook up Terminal User Interfaces in Ruby. I expect to write more about it in the coming days. Until then, check out the repo, the documentation, the examples, the mailing lists, the issue tracker, and the ruby gem! -
Programming Ruby 4 (The 6th Edition of the Pickaxe Book) Available Now (Beta)
With Ruby 4 set to release on Christmas Day and available in preview now, the Pragmatic Bookshelf just made a huge announcement.
-
Re: Affordances and Lean CSS
Stephen Margheim (fractaledmind) wrote Affordances: The Missing Layer in Frontend Architecture this month. This quick post is my reply to his great article.
I hear the objection already: “Isn’t this just… semantic CSS classes? We tried that.”
You’re right that we tried it. But “it didn’t work” deserves unpacking.
I was indeed objecting that in my mind. But I was not thinking, “it didn’t work.” I was thinking, “and it has kept working for decades. Obviously the utility-only workflow described is terrible; it’s why I refuse to choose Tailwind. How are affordances better than what’s worked for a decade?”
-
One Weird Choice That Makes Font Sizes Easy
I am not a graphic designer or a musician. My wife, though, graduated summa cum laude with a BA in Music. She also has a bookcase full of graphic design, interaction design, and user experience design books I have largely ignored. She may not be surprised by what I learned today, but I was. Perhaps you will be pleasantly surprised, too.
-
This Great Tool Helps You Name Any Hex Color
Chirag Mehta made a really great tool. Pick a color or paste a hex code, and it gives you the nearest descriptive name for that color.
-
Did 37Signals Just Accidentally Make Writebook Open Source?
When 37Signals launched Writebook in 2024, it was under their ONCE License Agreement. Notably, that license “does not include the rights to publish, distribute, sublicense, and/or sell copies of the Software, source code or products derived from it.”
-
Humble Bundle Abandons History of DRM Free Media
For over a decade, Humble Bundle has offered DRM-free media for a great price, while also supporting charity. Even years later, I can’t get their “jingle” out of my head:
Pay what you want, DRM-free,
Mac/Windows/Linux, and helps charityJingle, Humble Indie Bundle 16, by Sadly, this is no longer true.
-
Peter Coad Slams Alexander’s “Pattern” Theory. Is He Right?
Some researchers have suggested that a pattern is “a solution to a problem in a context,” citing Chris Alexander’s work in architecture (see the bibliography). Here are some thoughts on this.
- A pattern is a template, not a specific solution.
- Alexander’s “pattern” theory remains unaccepted by his peers.
- No dictionary supports his definition of the word “pattern.” (Although it is true that one may assign any meaning to any word, when a word’s meaning has been established over several millennia of human experience, it is probably unwise to do so.)
- Although “a solution to a problem in a context” is a compelling writing style–after all, nearly every sales letter follows it–that does not make an instance of that writing style a “pattern.”
Preface, Object Models: Strategies, Patterns, & Applications, Second Edition, by With the publication of Design Patterns by the “Gang of Four,” Christopher Alexander’s pattern language format caught fire in software engineering. Three decades later, industry authors still publish book after book after book enumerating pattern languages. Even outside of software, the Alexandrian form continues to spread. From pedagogy to presentations, from activism even back to architecture, pattern languages continue to be mined and shared.
-
Re: Emily Bache on Ward Cunningham’s Fearless Refactoring
When I was a younger developer, I thought I knew how to make code better by, as the kids would say today, following vibes. Much later, a coworker gave me a copy of Martin Fowler’s Refactoring. I regret how long I put off reading it. Even later, I read Sandi Metz’s 99 Bottles of OOP and learned just how safe refactoring could be. Fearless refactoring is a skill that must be learned, and it is almost a superpower!
-
Acceptance Tests and Unit Tests as Documents First, Tests Second
The real reason [acceptance tests and unit tests] aren’t redundant is that their primary function is not testing. The fact that they are tests is incidental. Unit tests and acceptance tests are documents first, and tests second.
Chapter 7, Acceptance Testing, The Clean Coder: A Code of Conduct for Professional Programmers, by As my wife and I were listening to Uncle Bob’s book on professionalism in software, this line surprised me. Maybe it’s just because I don’t understand tests as well as I’d like, but I had to stop and take note. He clarified exactly what he meant, too:
-
Learning to Code Without a Map: Mentorship and Entry Paths in the Post-Bootcamp Era
I’ve been disconnected from the junior and hiring scene since I stepped back into an individual contributor role. Recently, though, a friend of mine decided they wanted to get into the field. I poked my head up and looked around, and I was shocked at what I found. This talk is a great overview of what’s different today compared to six years ago, and what can be done about it.
-
Re: One Soft Navigation per Page Load
I’ve been making SPAs for over a decade, but I’ve always held the opinion that it’s only the right tool for web apps, not websites. I’m glad to finally see some evidence in support of this viewpoint!
-
The Big OOPs: Anatomy of a Thirty-five-year Mistake
Casey Muratori – The Big OOPs: Anatomy of a Thirty-five-year Mistake – BSC 2025
This is a fantastic deep-dive into the history of object-oriented programming with 50+ years of primary sources! Even though I make information systems, not games, I really enjoyed Casey Muratori’s talk.
-
Automated Tests as Waste vs. Needed
“How do you reconcile the lean view that tests are waste with the need for tests in software development?” Mary’s immediate response: “Unit tests are what let you stop the line.”
Dottie Acton, Foreword, Leading Lean Software Development: Results Are Not the Point, by
Comments are closed.