Issue #41: ToothFairy by Michael Tsai

Today, we're looking at ToothFairy by Michael Tsai [and Robin Lu].

ToothFairy simplifies the process of connecting and disconnecting from Bluetooth devices by offering convenient buttons accessible through the menu bar and configurable hotkeys.

I'll often use my AirPods with both my Mac and my iPhone. However, it can be difficult to tell at a glance whether the audio will play on the Mac's built-in speaker or the AirPods without peeking around in the Bluetooth menu.

ToothFairy has completely solved this problem for me and makes toggling my connection to my AirPods and other Bluetooth peripherals so convenient.

You can choose a different icon and hotkey for each Bluetooth device.

ToothFairy also works with all of your typical devices: headphones, speakers, headsets, controllers, keyboards, mice, etc.

You can customize the menu bar icon, hotkeys, and whether the app launches on login.

In ToothFairy's advanced settings, you can also ensure that it uses the higher quality AAC codec when you only care about audio output (i.e. listening to music or playing a game).

You can also run custom shell scripts after connecting or disconnecting peripherals

Now, I can have my Magic Keyboard, Trackpad, AirPods, and other peripherals all easily accessible in my Menu Bar with their own respective battery status indicators.

ToothFairy has received a lot of press coverage - check it out!

A quick thank you to Astro for supporting this issue of Indie Watch!

‌Can you tell us a little bit about yourselves?

Michael Tsai (@mjtsai)

I'm 43 years old and live in a small town in New Hampshire. I studied Computer Science in college and have been an indie Mac developer, though C-Command Software, since I was finishing up my Master's degree in 2002.

Before that, I had been writing and editing Mac stuff online for about 10 years, which I think was helpful in understanding the software industry and seeing things from the user/reviewer side.

These days, aside from ToothFairy, I'm most known for SpamSieve, EagleFiler, and DropDMG. I also write a blog that's focused on Apple products and development.

How did you come up with the idea?

I didn't - I started out as just a fan of ToothFairy and acquired it from the original developer, Robin Lu, after he was no longer able to work on it. He knew from my blog that I used the app and that I was an indie developer, and he asked if I'd like to take it over. I loved the app and wanted it to live on.

So, Robin gets all the credit for the idea, which I assume was based on his own pain points dealing with Bluetooth devices. Since then, I've been refining it and adding features based on customer requests and on my own needs and intuition.

💡 Want to see your app featured?‌
Submit your app or reach out on Twitter 🐦

How did you market the app as an indie developer?

I haven't done as much marketing as I should, honestly. I try to blog about it and tweet about it, and just generally be active in the Mac / iOS community. I try to get it into various app directories and each year I do a Black Friday sale.

In addition to the App Store, it's also available on Setapp, which helps more people discover it. I think I have my customers to thank, mostly - word of mouth is key for an indie developer. If you have a quality product and are responsive to people's questions and needs, they will want you to succeed and want to tell their friends and colleagues about the cool thing that they've discovered.

What’s your app design and development workflow like?

I manage the process using EagleFiler. I have Markdown files for each issue (bug, potential new feature, or inquiry with Apple or another company), and I organize them into folders (by app and milestone) and tag them based on the area of the app (Bluetooth, scripting, documentation, etc.). I try to make sure every idea or potential bug gets captured, and then it's just a matter of organizing and prioritizing. I have a rough plan for when I want to do what, but reliability is the top priority, both because I take pride in shipping quality software and also because it's a waste of everyone's time if multiple customers keep running into the same issue. So, I will drop what I'm working on if a bug report comes in or if Apple makes a change to the OS that affects my app.

At a more technical level, all of my apps and shared frameworks are in a single Git repo, which I try to keep mostly to a single branch. For code, I write in a mostly test-first workflow.

For design, I try to be documentation-first. Thinking about how to explain a feature to the customer helps to flip one's perspective so that you aren't just thinking about things from the engineering side.

Any advice on monetizing your app and improving conversions?

Assuming that the app is decent, I think the biggest issue is increasing the number of people who know that it exists.

Beyond that, it's important to have a good icon, screenshots, and clear copy on the App Store. If a review mentions a problem, I reply right away so that people can see that help will be there for them if they purchase.

For my other apps, having a free trial has been key. ToothFairy hasn't had that, as an up-front purchase in the App Store. I think it's less of an issue with it being a simpler and less expensive product, but I'm considering whether and how to add a trial.

What's your favorite tool in your dev workflow?

It's hard to pick just one. My own apps, EagleFiler and DropDMG, are of course favorites and essential to developing (issues database, customer support archive, development notes) and shipping (disk images) my apps.

From other developers, I really like BBEdit, Tower, Dash, and LaunchBar.

  • I've been using BBEdit for all manner of development tasks for nearly 30 years. It's rock solid and always getting better.
  • Tower is by far the best Git client that I've used, and as a solo developer it's extra important for me to be able to review the code that I write.
  • Dash is a great way to browse and search API documentation. I also use its snippets feature to speed up my typing in various apps.
  • LaunchBar is great for quickly opening header files, for managing multiple clipboards, and for helping me insert larger snippets of text for customer support and coding.

What are the future plans for your app?

The top priority is always keeping the app working. Each year, Apple seems to change something with Bluetooth that causes breakage, and so I need to respond to that. And I'm always adding support for new types of AirPods and other Bluetooth devices that become available.

Longer term, there are lots of features that I'd like to add, I plan to redesign the user interface, and I'd like to make it available for direct sale outside of the App Store.

A quick welcome to the ✨ 4 new people ✨ joining us this week - feel free to reply to this email and say 👋.

If you're enjoying the newsletter, please consider sharing it! Have some feedback you want to share? Drop me a message 📧

If you missed last week's issue, you can read it here:

Issue #40: PastePal by Khoa Pham
PastePal is an iOS clipboard manager that allows users to easily manage and access their clipboard history. It features a simple and intuitive interface with powerful search and organization capabilities.

If you have an interview coming up, check out my books Ace the iOS Interview and Practical Tips for Junior iOS Developers!

Ace The iOS Interview
The best investment for landing your dream iOS jobHey there! My name is Aryaman Sharda and I started making iOS apps way back in 2015. Since then, I’ve worked for a variety of companies like Porsche, Turo, and Scoop Technologies just to name a few. Over the years, I’ve mentored junior engineers, bui…
Practical Tips for Junior iOS Developers
The best investment for fast-tracking your iOS programming careerMy name is Aryaman Sharda and I’ve been making iPhone apps since 2015. My career has included working for a variety of companies, from a few lesser-known startups in San Francisco to well-known companies like Turo, Scoop Technologies,…

Check out my blog for more articles on iOS Development & Swift.

Subscribe or follow me on Twitter for updates!