My writing on Turbo Native, Ruby on Rails, and building transparent businesses.

Get started with my latest article and some of my favorites.

Hybrid iOS apps with Turbo Favorite

How to build hybrid iOS apps with Turbo and Ruby on Rails. An ongoing series covering authentication, the JavaScript bridge, architecture, and more.

Subscribe to the ⚡️ Hotwire dev newsletter

Turbo (Native), Stimulus, and Strada articles, code, courses, and more every month.

And everything I've ever published, in reverse chronological order.

Being more intentional in 2023

Too many days last year ended with me feeling like "I didn’t get anything done." Here's how I'm hoping to fix that in 2023.

Free Ruby on Rails communities

I use online communities to ask for help, offer advice, and keep up to date with the latest trends. Here are 10+ of my favorites.

My favorite podcasts

The podcasts I listen to every week – mostly about Ruby on Rails and bootstrapping.

Zero to App Store in 7 weeks

New record! I ported a client’s Ruby on Rails app to iOS and went live in the App Store in 7 weeks.

Custom Rails configuration

TIL about ActiveSupport::OrderedOptions and config_for. Here's how I'm using them to configure my Rails app.

RailsConf 2022 slides

Slides from talks and presentations at RailsConf 2022.

My sane approach to test fixtures in Rails

My approach on how I keep my test fixtures manageable, sane, and obvious. Not hard and fast rules, but guidelines to help you implement the same in your app.

RailsDevs has a gender diversity problem

It is not OK that RailsDevs represents 180+ developers but fewer than 10 identify as women. This is how I'm learning to create a more inclusive platform.

How I took my SaaS from idea to sold in 14 months

I built an MVP in one month and grew the product for a year. But now it’s time to pass the torch. It’s official, I sold Mugshot Bot! Here’s how it all went down.

Hybrid iOS apps with Turbo

How to build hybrid iOS apps with Turbo and Ruby on Rails. An ongoing series covering authentication, the JavaScript bridge, architecture, and more.

Dynamically verified Swift mocks

How to verify which messages a Swift mock receives with less boilerplate and no third-party code.

Swift mocks without protocols

How to reduce boilerplate by abusing inheritance to create mocks in Swift.

Idea to paying customer in one month

A month ago I ran into a problem. One week later I solved it. And three weeks after that I turned it into a (tiny) business.

Better unit testing with Swift

Ideas and best practices for real world Swift testing, including protocols, dependency injection, and Equatable.

Great two-player board games

Deck-builders, card games, tile placement, and more. Some of my favorite board games to play with only two players.

How to Test UIAlertController

Learn how to test UIAlertController with protocols, mocks, and dependency injection. No swizzling required.

BeerMenus & Turbolinks

How our small team supports 600k+ monthly users on four platforms with Turbolinks.

Where has Joe been?

What has Joe been up to since his last post?

Waiting in XCTest

Waiting is hard, and waiting in Xcode is no exception. Learn a new approach with classes introduced in Xcode.

XCTest documentation

Apple has officially sent me a cease and desist letter to take down my host of the XCTest Documentation.

SwiftCoders podcast

Earlier this month week I spoke on the SwiftCoders podcast. The host and I talked about getting started in Swift, and, obviously, testing.

Flattening Asynchronous Tests

Shave time off your test suite by flattening asynchronous tests. Learn how to mock more of URLSession to test response data, network errors, and status codes.

Joe's favorite things

All the stuff I'm enjoying right now: iOS apps and games, Mac productivity apps, card games, and programming books.

Mocking classes you don't own in Swift

Not owning a class doesn't mean you can't mock it! Learn how to unit test URLSession with Swift and protocol-oriented programming.

Concepts in Code podcast: Testing

Last week I spoke on the Concepts in Code podcast. The cohosts and I chatted about testing in Swift, TDD, and pair programming.

Custom helpers in XCTest

How to extract XCTest helper methods and keep sane failure messages.

UI Testing cheat sheet and examples

Answers to common "How do I test this with UI Testing?" questions. A quick reference for everything from tapping buttons to reordering table cells.

NSDate Manipulation in iOS

Create and modify dates by taking advantage of iOS 8's NSCalendar APIs.

Building NSURLs with NSURLQueryItems

Build and manipulate complex URLs with NSURLQueryItems. No more ugly string concatenation to append query items to URLs.

How to test PDFs with Capybara

Use familiar HTML testing tools to test drive PDF generation by combining wicked_pdf with some asset pipeline knowledge.