Structure and Purpose: The structure of the code you write can communicate your intentions, making it easier to understand for other developers.Updated: February 28, 2024
Service Objects: Service Objects are a popular software design pattern in the Ruby on Rails community. They are used to extract procedural logic away from models and controllers and into their own objects.Updated: February 26, 2024
The Rubby Game v0.1I just finished playing the first iteration of a board game I created about building Ruby on Rails applications. It was actually kind of fun!July 18, 2024
System tests haven't failedWhat's with all the buzz about system tests in the Ruby on Rails community right now?June 18, 2024
In Defence of GerritI'm not saying we should all use Gerrit, but I am saying that using Gerrit early in my career made me a much better programmer.March 13, 2024
Goodbye, Pivotal TrackerPivotal Tracker is shutting down. It might not have been perfect, but I'll still miss it.March 11, 2024
The Null Object Pattern and RubyObject-oriented programmers have a solution to null propagation, the null object pattern, but is it a good fit for Ruby and other dynamic languages?January 24, 2024
Don’t assert return typesHave you ever seen a test in Ruby (or any dynamic language) that tested the type of a method? I’ve always hated those tests, but never really explored why.January 09, 2024
What if service objects were just Procs?Service objects, a popular design pattern in the Ruby on Rails community, are analogous to higher-order functions, and we can demonstrate that more clearly by refactoring one into a Proc without changing its API.August 03, 2023
Doing TCR without the RI recently simplified the workflow where I'm using git as my test-runner, essentially doing TCR without the R.July 16, 2023
Adding Parameterized Layouts to phlex-railsOut of the box, phlex-rails currently doesn't support parameterized layouts. I found a quick way to hack support in.April 16, 2023
I just learned two interesting Ruby edge-case behavioursKevin Newton's explanations of how YARV works alerted me to a couple of edge cases in Ruby that I'd never thought about.December 07, 2022
This article was written by ChatGPTI instructed ChatGPT to criticize itself and include a Ghostbusters reference for good measure.December 05, 2022
Here are my TDD on the Shoulders of Giants talk slidesRubyConf Mini is over and my talk went well. Once the videos are posted, I'll do a quick write up about the talk, but for now here are the slides.November 19, 2022
Doing AgileWhat is Agile software development? How do we do it? In my experience, there are far more organizations following rigid software development frameworks than there are who are meaningfully Agile.November 23, 2021
Suit ReconfigurationI rebuilt my dotfiles and decided to write some fiction about it.September 07, 2021
What I learned from 5 days of solving Advent of Code problems using TCR in RubyI used test && commit || revert to do the first 5 days of this year's Advent of Code. Here's what I learned along the way.December 05, 2020
There's a trick to using Hash.newRuby's Hash class supports default values, but there's an edge case where using this feature produces some unexpected results. Python developers should know what I'm talking about.April 29, 2020
Recapping the first day of RubyConf 2019Alistair, Amy and I were in Nashville for RubyConf to hear about what's next for the Ruby community.November 18, 2019
How to use Hash.new with a blockThe default values of Ruby's hashes can be made completely dynamic. Let's look at some dogs (to understand how we can use this feature.)October 03, 2019
A whole world of Ruby codeExposing yourself to more code is one of the most important things you can do to improve your development skills.August 19, 2019
A blog series on software designI've just finished Ousterhout's book, A Philosophy of Software Design and want to share what I think Rubyists can learn from it.August 14, 2019