Sign in

Jon Reid

@qualitycoding.org
883 followers 198 following 590 posts

qualitycoding.org Author of iOS Unit Testing by Example iosunittestingbyexample.com. Technical coach, ex-Industrial Logic. Over 20 years of #TDD. Code with joy, drive down your cost of change. he/him

PostsRepliesMedia
Jon Reid @qualitycoding.org · 03/08/2026
In TDD, you sometimes write code that looks obviously wrong on purpose — like hard-coding "0" instead of real logic. It feels uncomfortable. That discomfort is actually the point. Here's why. qualitycoding.org/swiftui-tdd-fake-…
SwiftUI logo surrounded by Red → Green → Refactor → Integrate → back to Red
020
Jon Reid @qualitycoding.org · 20/07/2026
I'm building the trip preparation checklist app _I want_ for myself. Note I say "preparation checklist" not "packing list" because hey, I have more to do than pack. With completely customizable "categories" (Flying, Driving, etc.), I bet people will use it in ways I never thought of. #BuildInPublic
iPhone screen "Select Categories": Choose which categories to include in your trip checklist.
260
Jon Reid @qualitycoding.org · 17/07/2026
In TDD, you sometimes write code that looks obviously wrong on purpose — like hard-coding "0" instead of real logic. It feels uncomfortable. That discomfort is actually the point. Here's why. qualitycoding.org/swiftui-tdd-fake-…
SwiftUI logo surrounded by Red → Green → Refactor → Integrate → back to Red
030
Jon Reid @qualitycoding.org · 07/07/2026
Swift Testing's failure messages look "funny". But that's not the real problem. The real problem is when they show up in the wrong place entirely. qualitycoding.org/swift-testing-cus… #SwiftLang
Image shows a man looking through binoculars and asking "WHERE ARE YOU?".
000
Jon Reid @qualitycoding.org · 06/07/2026
> ❯ Elegant Objects by Yegor Bugayenko recommends against `-er` names

⏺ Good catch — TipsBootstrapper has the same -er shape as Controller. Bugayenko's critique: -er/-or names describe a job
  title (what it does) rather than what the object is, and tend to signal procedural thinking smuggled into an object.

  Looking at what's already in the codebase, the existing names are all "thing" nouns, not agent nouns: SavedFile,
  KeyValueStore, TemplateRepository, TipsResetStore — none end in -er.

  ⭐ TipsStartup — names the thing itself (the startup routine/state), matches the noun convention already in use, and
  still reads naturally as TipsStartup.create().configureForLaunch(...).

  ❌ TipsSetup — close second, but "setup" reads slightly more like a one-time action than a persistent thing.
  ❌ TipsLifecycle — accurate but broader than what the object actually does (it only handles the launch moment, not the
  full lifecycle).
  ❌ TipsLaunch — reads oddly as a type name (TipsLaunch.create() sounds like invoking a launch, not building an object).

  Want TipsStartup in the plan?
000
Jon Reid @qualitycoding.org · 19/06/2026
Swift Testing's failure messages look "funny". But that's not the real problem. The real problem is when they show up in the wrong place entirely. qualitycoding.org/swift-testing-cus…
Image shows a man looking through binoculars and asking "WHERE ARE YOU?".
000
Jon Reid @qualitycoding.org · 17/06/2026
Is LinkedIn website broken for anyone else? I tried disabling my ad blockers but that hasn't helped.
LinkedIn feed with spinner where content should be
300
Jon Reid @qualitycoding.org · 08/06/2026
Just starting to watch the #WWDC keynote. Oh hey, they highlight the most egregious things about Liquid Glass that will be "improved" in iOS 27, meaning fixed. Meanwhile, here's my lovely face on iOS 26:
Jon's face distorted by a folder on iOS 26
250
Jon Reid @qualitycoding.org · 06/06/2026
Does testing SwiftUI feel impossible compared to writing the feature itself? qualitycoding.org/swiftui-tdd-first…
Shia Labeouf: "Nothing is impossible."
010
Jon Reid @qualitycoding.org · 16/05/2026
Does testing SwiftUI feel impossible compared to writing the feature itself? qualitycoding.org/swiftui-tdd-first…
Shia Labeouf: "Nothing is impossible."
120
Jon Reid @qualitycoding.org · 15/04/2026
British tabloid front page response to Trump-as-Jesus: "You're not the Messiah you're a very naughty boy"
032
Jon Reid @qualitycoding.org · 02/04/2026
Finally! Discovered thanks to running SwiftFormat over this project. Swift 6.2 means you can write backtick test names (like Kotlin).
Code diff.
Before:
@Test("Current app version is valid")
func appVersionCurrent() async throws

After:
@Test
func `Current app version is valid`
030
Jon Reid @qualitycoding.org · 14/03/2026
Brian Zahnd:

You can justify wars of conquest with the Bible, but you have to ignore Jesus to do it.

Using the Bible to ignore Jesus is the worst thing you can do with the Bible.

The question isn't, "Is it biblical?" Wars of conquest, the institution of slavery, death sentence for adultery, and women as property are all biblical.

The question is, "Is it Christlike?"
000
Jon Reid @qualitycoding.org · 01/03/2026
“Christ Breaks the Rifle” by kellylatimoreicons.com
Icon by Kelly Latimore depicting Jesus Christ breaking an assault rifle
000
Jon Reid @qualitycoding.org · 28/02/2026
I'm starting a new iOS app, and feel like I already have several things to blog about. But first, a micro-blog: - I want the Swift Package to contain all non-UI code. - Incredible feedback speed compared to testing in iOS simulator! - Many think "unit tests" means each type needs a test file. Nope.
Xcode showing Swift Package. Production code: 17 types. 12 Swift Testing tests in 3 test suites, total time 0.002 seconds.
160
Jon Reid @qualitycoding.org · 14/01/2026
Bugs are opportunities. How can you get the most value from the next defect you fix? qualitycoding.org/safety-nets-guard…
000
Jon Reid @qualitycoding.org · 09/01/2026
This was me, at the top of the main AppCode page. I still hold to that quote.
JetBrains webpage for AppCode, with testimonial from Jon Reid: "With AppCode, it feels like code flies from my head to the screen."
010
Jon Reid @qualitycoding.org · 09/01/2026
Cleaning out a drawer, I found my old AppCode t-shirt. It's been 3 years since the only JetBrains IDE for Apple development was killed. It still has no substitute. AI tools can do some refactoring, but not: - provably - deterministically - locally - in a single keystroke that expresses my intention
120
Jon Reid @qualitycoding.org · 17/12/2025
ApprovalTests in Swift makes it easy to write powerful parameterized tests. Verify a sequence of inputs, but transform the values through the function you want. qualitycoding.org/parameterized-tes…
020
Jon Reid @qualitycoding.org · 21/11/2025
Looking for a technical book for a friend? Or for yourself? …Maybe even my book iOS Unit Testing by Example? Now's your chance to snag a deal at pragprog.com! Check out with discount code "save50" Do it while you can, offer ends December 1
Save 50%
pragprog.com
code: save50
All our ebooks except The Pragmatic Programmer
Offer ends December 1
001
Jon Reid @qualitycoding.org · 17/11/2025
Stop pretending SwiftUI tests are impossible — ViewInspector lets you inspect views and verify behavior. qualitycoding.org/viewinspector-swi…
010
Jon Reid @qualitycoding.org · 30/10/2025
Stop pretending SwiftUI tests are impossible — ViewInspector lets you inspect views and verify behavior. qualitycoding.org/viewinspector-swi…
031
Jon Reid @qualitycoding.org · 28/10/2025
How ViewInspector Unlocks SwiftUI Testing qualitycoding.org/viewinspector-swi…
020
Jon Reid @qualitycoding.org · 03/10/2025
TDD isn't about writing code first — it's about thinking first qualitycoding.org/describe-test-pla…
Geordi Drake meme
Top (reject): writing code first
Bottom (approve): thinking first
091
Jon Reid @qualitycoding.org · 02/10/2025
RIP Jane Goodall. I used to read about her in the old National Geographic issues we had at our summer cabin.
The Far Side cartoon features two chimpanzees in a tree, with one discovering a blonde hair on the other, asking, "Conducting a little more 'research' with that Jane Goodall tramp?"
130
Jon Reid @qualitycoding.org · 30/09/2025
Describe Your Test in Plain English qualitycoding.org/describe-test-pla…
iOS Test-Driven Development
Describe Your Test in Plain English
Quality Coding with Jon Reid
Image of post-it note with test
000
Jon Reid @qualitycoding.org · 18/09/2025
🚨 FLASH SALE ALERT 🚨 45% OFF iOS Unit Testing by Example! Sale starts NOW (14:00 UTC) — for just 48 hours. Already have my book? Grab another! May I suggest Agile Retrospectives? Visit pragprog.com Promo code: flashsale
Flash Sale
45% off
Sept 18–20
Promo code: flashsale
Only at pragprog.com
100
Jon Reid @qualitycoding.org · 01/09/2025
Anyone else write a lot of Xcode code snippets? I haven't seen a description of the "Availability" choices, showing "This applies here, but not there."
000
Jon Reid @qualitycoding.org · 18/08/2025
TDD isn't just "write a test first." It's also knowing _which_ test matters most. qualitycoding.org/tdd-where-do-you-…
010
Jon Reid @qualitycoding.org · 13/08/2025
See how my code changes as I pair program with Swift 6. Join us for a fun conversation about working with strict concurrency for data race safety. qualitycoding.org/conversation-swif…
170
Jon Reid @qualitycoding.org · 12/08/2025
I am not happy, Apple
Future versions of macOS will no longer support Time Capsule disks for Time Machine backups.
110
Jon Reid @qualitycoding.org · 02/08/2025
Xcode supports some automated refactoring — but the options are often disabled when you need them. They're buried, unpredictable, and easy to give up on. So… qualitycoding.org/xcode-key-binding…
Lucy pulling football away from Charlie Brown's kick (again)
020
Jon Reid @qualitycoding.org · 31/07/2025
TDD isn't just "write a test first." It's also knowing _which_ test matters most qualitycoding.org/tdd-where-do-you-…
020
Jon Reid @qualitycoding.org · 15/07/2025
Xcode supports some automated refactoring — but the options are often disabled when you need them. They're buried, unpredictable, and easy to give up on. So… qualitycoding.org/xcode-key-binding…
Lucy pulling football away from Charlie Brown's kick (again)
040
Jon Reid @qualitycoding.org · 07/06/2025
Going to #WWDC? I’ll be at the RevenueCat pre-WWDC Bashcade on Sunday night. Help this introvert out by saying hi, and ask me for a Quality Coding laptop sticker 😀
Holding several Quality Coding laptop stickers
160
Jon Reid @qualitycoding.org · 16/04/2025
Learn to set up CI tooling for Xcode projects using GitHub Actions. Reduce remote debugging time with local scripts and fast feedback loops. qualitycoding.org/github-actions-ci…
020
Jon Reid @qualitycoding.org · 10/03/2025
Should you really test that? Rethinking SwiftUI unit tests qualitycoding.org/what-to-test-in-s…
"Two buttons" meme with sweating guy, titled "SwiftUI Unit Testing"

Button 1: Test nothing
Button 2: Test everything
020
Jon Reid @qualitycoding.org · 09/03/2025
In the industry, legacy code is often used as a slang term for difficult-to-change code that we don't understand. But over years of working with teams, helping them get past serious code problems, I've arrived at a different definition.

To me, legacy code is simply code without tests. I've gotten some grief for this definition. What do tests have to do with whether code is bad? To me, the answer is straightforward, and it is a point that I elaborate throughout the book:

Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.

You might think that this is severe. What about clean code? If a code base is very clean and well structured, isn't that enough? Well, make no mistake. I love clean code. I love it more than most people I know, but while clean code is good, it's not enough.
000
Jon Reid @qualitycoding.org · 24/02/2025
Unit testing SwiftUI: challenging the status quo qualitycoding.org/beyond-ui-tests-w…
Still from music video for Peter Gabriel's "Don't Give Up" featuring Kate Bush
030
Jon Reid @qualitycoding.org · 20/02/2025
Should you really test that? Rethinking SwiftUI unit tests qualitycoding.org/what-to-test-in-s…
"Two buttons" meme with sweating guy, titled "SwiftUI Unit Testing"

Button 1: Test nothing
Button 2: Test everything
020
Jon Reid @qualitycoding.org · 20/02/2025
Bumper sticker: Everything is a conspiracy theory when you don't understand how anything works
051
Jon Reid @qualitycoding.org · 18/02/2025
How to decide what to test in SwiftUI qualitycoding.org/what-to-test-in-s…
"Two buttons" meme with sweating guy, titled "SwiftUI Unit Testing"

Button 1: Test nothing
Button 2: Test everything
020
Jon Reid @qualitycoding.org · 15/02/2025
Cropped from emilyscartoons www.tumblr.com/emilyscartoo...
3 panel comic by emilyscartoons of two people talking.

Panel 1
Person 1: "Let's not talk about politics anymore, I can't bear it"
Person 2: "same"

Panel 2
Both people sit in silence

Panel 3
Person 1: "THE THING IS THOUGH"
Person 2: "THOSE FUCKING IDIOTS"
040
Jon Reid @qualitycoding.org · 07/02/2025
Protest sign: Some of those that burn crosses are the same that hold office!
051
Jon Reid @qualitycoding.org · 04/02/2025
SwiftUI Testing: Why I'm Still Pushing for Unit Tests qualitycoding.org/beyond-ui-tests-w…
Image of Sisyphus pushing the rock, with text: "Come on Sisyphus!"
120
Jon Reid @qualitycoding.org · 27/01/2025
"Our iOS Code is Too Complex for Unit Tests" is a Lie 🤥 qualitycoding.org/legacy-code-rescu…
061
Jon Reid @qualitycoding.org · 21/01/2025
Unit Testing SwiftUI? A Bold Challenge with a Simple Counter App 💡 qualitycoding.org/swiftui-testing-c…
020
Jon Reid @qualitycoding.org · 14/01/2025
I had a great time in my latest #SwiftLang live coding, which is now uploaded to www.youtube.com/@QualityCoding. Here are the retro notes:
- Snapshots
- First parameterized test!
- Use makeSUT
- Refactor ruthlessly
- OO: Don't expose properties!
- …and more
040
Jon Reid @qualitycoding.org · 09/01/2025
"Our iOS Code is Too Complex for Unit Tests" is a Lie 🤥 qualitycoding.org/legacy-code-rescu… #iOSDev
040
Jon Reid @qualitycoding.org · 07/01/2025
⚡️ 6 Tests to 120: A Legacy Code Transformation Story qualitycoding.org/legacy-code-rescu… #LegacyCode
010