How a single message kick started my consulting business, personal brand, and niche expertise.
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.
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.
The podcasts I listen to every week – mostly about Ruby on Rails and bootstrapping.
New record! I ported a client’s Ruby on Rails app to iOS and went live in the App Store in 7 weeks.
TIL about ActiveSupport::OrderedOptions and config_for. Here's how I'm using them to configure my Rails app.
Slides from talks and presentations at RailsConf 2022.
I was on another podcast! We talked about building RailsDevs in public, challenges I have faced, and the technical decisions I am proud of. Also, a bit about my upcoming workshop.
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.
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.
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.
Tips and tricks I’ve picked up over the years that help make the app feel more native and development easier.
Authenticated requests, how to share cookies, and Devise-specific helpers to implement native authentication.
How to install Turbo in Rails 6, custom iOS form handling, and web-based authentication in hybrid apps.
Part 2 covers visit actions, path configuration, error handling, native view controllers, and more with Turbo iOS.
Hybrid mobile apps powered by Turbo: Basecamp's not-so-secret formula for producing large scale apps with small teams.
10+ of my favorite techniques that I've picked up over the past few years of testing Swift code.
5 lines of code go a long way in making your test names much more readable.
Learn how to avoid force unwrapping optionals in your test suite without any trade-offs.
Learn how to "set" a computed property by taking advantage of the internals of WKWebView.
How to verify which messages a Swift mock receives with less boilerplate and no third-party code.
How to reduce boilerplate by abusing inheritance to create mocks in Swift.
Our own DI without third-party libraries. Build a robust, extendible micro-framework you can use in all your apps.
Feature tests: three techniques to try before reaching for XCUITest.
A single Rails route gets you what you need, but watch out for a small gotcha.
A tiny tip to make regexes with multiple slashes a bit more readable in Ruby.
Yesterday I was the #5 product of the day on Product Hunt. Here's what I learned.
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.
It’s been a busy month! I’ve gone all in on Tailwind CSS, launched a new product, and started building a newsletter. Here’s what’s been keeping me busy.
Embedding a tiny HTTP server inside our test suite opens up a world of opportunity.
A step-by-step journey on how I refactored an app to handle any number of sheets with ObservableObject and an enum.
How I built a landing page and redesigned my blog in Tailwind CSS over the weekend. And why I’ll never go back.
BGA, TTS, Steam?! This guide is for anyone who wants to play board games online with your friends but isn’t sure where to start.
Ideas and best practices for real world Swift testing, including protocols, dependency injection, and Equatable.
Deck-builders, card games, tile placement, and more. Some of my favorite board games to play with only two players.
1249 records in prod. 3775 records in dev. Something's not right.
Learn how to test UIAlertController with protocols, mocks, and dependency injection. No swizzling required.
How our small team supports 600k+ monthly users on four platforms with Turbolinks.
What has Joe been up to since his last post?
Waiting is hard, and waiting in Xcode is no exception. Learn a new approach with classes introduced in Xcode.
Apple has officially sent me a cease and desist letter to take down my host of the XCTest Documentation.
Earlier this month week I spoke on the SwiftCoders podcast. The host and I talked about getting started in Swift, and, obviously, testing.
A type-safe approach to testing dictionaries in Swift with clean failure messages.
Learn how to stub network data when running UI Tests with the magic of some "secret" XCTest APIs.
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.
All the stuff I'm enjoying right now: iOS apps and games, Mac productivity apps, card games, and programming books.
Not owning a class doesn't mean you can't mock it! Learn how to unit test URLSession with Swift and protocol-oriented programming.
Last week I spoke on the Concepts in Code podcast. The cohosts and I chatted about testing in Swift, TDD, and pair programming.
How to extract XCTest helper methods and keep sane failure messages.
Answers to common "How do I test this with UI Testing?" questions. A quick reference for everything from tapping buttons to reordering table cells.
Generic querying syntax, first-class support, and native asynchronous assertions make for a great TDD experience on iOS.
Flatten out your asynchronous tests with and_do_block().
Better dependency injection on iOS with NS_UNAVAILABLE.
How to navigate around an lightly documented but powerful framework in Xcode 12.
Create and modify dates by taking advantage of iOS 8's NSCalendar APIs.
Build and manipulate complex URLs with NSURLQueryItems. No more ugly string concatenation to append query items to URLs.
Use familiar HTML testing tools to test drive PDF generation by combining wicked_pdf with some asset pipeline knowledge.