Yesterday’s release of Dark Noise exceeded my wildest expectations. According to my stats from Apple, the app sold 990 copies which brought in $4,190 in sales for a take home of $2,780 after Apple’s 30% cut.1
Statistics from App Store Connect
And the reaction from the community has been unbelievable. Friends and strangers alike have said so many kind words on Twitter, personal blogs, podcasts, and even a YouTube video! And to top that all off, one of my favorite websites, MacStories, wrote up an amazing review.
A few people have asked me how I got the coverage that I did considering I had essentially zero following and zero connections a few months ago, and my honest feeling is that I didn’t do anything special and simply got lucky. But I think that’s kind of a cop-out answer.
In a recent podcast, Myke Hurley mentioned that he’s stopped saying he got “lucky” in achieving the success he’s had with his company Relay FM and started using the term “fortunate” instead. As usual, I think #MykeWasRight.
The truth is, I did work really hard and tried a lot of different things. I have no idea what really worked and what didn’t, but I can at least share what I did and explain my mindset.
I’m going to try to write up as much as I can over the next few weeks while this is fresh on my mind, so keep your eyes on this feed if you’re curious. If you have particular questions or topics you’d like me to cover, please reach out to me on Twitter.
I’m sharing this all in the spirit of openness. I really hope this doesn’t come across as bragging and please let me know if it does ↩
Today I released my first app to the App Store, Dark Noise. It’s a simple yet powerful way to play ambient noise to help you sleep, focus, or relax.
This is the part where I’m supposed to tell you about a brilliant revelation I had that led me to solve a problem you don’t even know you have. But I cannot, because that’s now how all of this went down.
The truth is, Dark Noise started as a simple learning exercise and has turned into something more. I chose to build an ambient noise app because I’m very picky, and there wasn’t one in the store that fit exactly what I wanted: simple, fast, and fun. There are a lot of options out there, many of them quite good, but I think I’ve landed on a balance of those three attributes that is truly unique.
Simple
From the beginning, Dark Noise was designed to be simple to use. I primarily use ambient noise to help me sleep, and I wanted to make something that was really easy to use at night, half-asleep without my glasses on.
The main player page has a simple big play button that stands out in the dark. And a quick swipe down will reveal all of the different noises that can be played with a tap.
Fast
At the end of the day, an ambient noise app’s job is to start a sound, and then get out of the way as fast as possible, so I designed Dark Noise to have multiple ways to quickly start your favorite sound.
You can add and reorder your favorite sounds to a section that always shows at the top of the selection page. Siri Shortcuts integrations allows you to create a shortcut to start any specific sound using only your voice, even through a HomePod! And a customizable widget and Home screen quick actions allow you to quickly activate a noise before opening the app.
Fun
Something I learned from the wonderful weather app Carrot is that a utility app can be delightful to use. I wanted to try to make Dark Noise something that is fun to open up and interact with.
I loaded it up with multiple themes, and (way to many) custom app icon options, but the thing that I’m really proud of is all of the custom animations. Each noise has a custom icon that comes to life when you start playing it. And the buttons throughout the UI have little animations peppered throughout to make the app fun and fluid to navigate.
</iframe>
I’m really proud of how Dark Noise came together, but it wouldn’t be close to what it is today without all of the help I’ve received along the way. First from my friends at work who’ve essentially let me leech Swifty wisdom from them over the last 8 months. And also from the iOS developer / enthusiast community. Over 900 people have joined the beta and provided me with countless bug reports, feature ideas, and marketing advice. I can’t express enough how helpful this has been and it’s inspired me to try to lift others up more than I do.
This is just the beginning and I’m excited to see where Dark Noise goes from here. As always, I’d love to hear your thoughts and feedback on Twitter or on the Dark Noise Subreddit
At the beginning of this year I started working on my first indie app to release in the App Store called Dark Noise. It’s an ambient noise app for iPhone and iPad.
At first, I had a giant list of feature ideas and no idea how to distill them into a focused product. So I started by forcing myself to pick 3 principles to guide the design.
I eventually landed on these core principles:
Configurability
Targeting pro users who want as many options and hooks to work the app into their workflow as possible
Speed
Opening app to playing sound should be as fast as possible with no compromise since this is the 99% use case
Keep it dark (expect fat fingers)
Most users will probably be using this in a dark environment, possibly without their glasses on or half asleep. Keep that in mind.
After creating the principles, I took my list of feature ideas and tried to slot them all into one of those principles. If they didn’t fit, I tossed them in the backlog.
Keeping these principles in mind as I tried to design and form an MVP was really helpful. I have a tendency to get overly excited by an idea and drop whatever I’m doing and build it. Often that’s a bad idea, but sometimes it’s good!
Whenever I had the thought of adding a bunch of custom app icons referencing podcasts I like, I realized it was something that might actually resonate with the pro users I was targeting. And seems to have done just that!
This also played into my pricing decisions as that market tends to prefer paying up front and is a little more averse to ads. That’s not to say I won’t add a free tier in the future (in fact I probably will) but it’s something I’m always keeping in mind as I make these decisions.
Anyway, I’m not an expert at this, heck I’m barely a beginner, but maybe you’ll find my thought process interesting nonetheless.
This post is an attempt to make a more permanent record to this tweetstorm from a few weeks ago.
Being able to learn a new software language, framework, pattern, or platform has been one of the cornerstones of my career. I’m generally pretty quick to pick something new up, and I get distracted easily so I end up doing this a lot.
I bring this up because at the beginning of this year I moved into iOS development, a whole new ecosystem1 where I didn’t know the language (Swift), framework (UIKit), or any of the tooling (Xcode), and in the last week I reached one of my favorite milestones of learning a new skill: thinking with portals.
In Valve’s 2007 game Portal, you have to solve a series of puzzle’s using a unique “Portal” gun that allows you to arbitrarily place portals on the walls, and you can jump through them. While simple on the surface, it’s deceptively complicated, and at first you sort of fumble your way through the mechanic to make it through the challenges.
Eventually you will suddenly realize you’re brain automatically looks at a puzzle and starts calculating portal placements and jump trajectories, and the game’s robot narrator praises you with the phrase “Now you’re thinking with portals”.
This same phenomenon occurs every time I learn a new software development skill. I’m not talking about the part where you know you can fumble your way through any problem with enough time, though that is exciting as well. This is the part where your brain automatically thinks within the framework or pattern you’re using in the background, and instead you’re free to focus on the actual design or engineering problem at hand.
This over the last week, I’ve stopped spending my time figuring out how to do something on my iOS projects, but instead figuring out the best design that I should do. It’s a subtle difference, but it’s deeply satisfying to finally cross that threshold.
The beginning of learning a new skill is always daunting, but I know that, if I stick with it, eventually I’ll reach the Thinking With Portals moment and that’s one of the greatest feelings in the world.
I actually have done a bit of mobile development back in the day with Windows Phone 😂, but for the most part I’ve been up and down the web stack for my career. ↩
A couple of years ago when we set up our Christmas tree, we bought a cheap little RF light switch to plug our tree into so we didn’t have to climb underneath the tree to turn on and off the lights. In the last year, we acquired a Google Home Mini, and I decided we could try to make our Christmas tree experience a little smarter.
After a bit of experimentation, I can now say “Hey Google, It’s Christmas Time” and my tree lights up, Christmas music starts playing, and my TV turns on and starts playing a fireplace. Check it out!
To start, I want to control the lights through my Google Home, and to do that, I need something that will connect my dumb tree lights to my WiFi, and ultimately Google Assistant. There are hundreds of smart plugs on Amazon, but you want to make sure you get one that’s compatible with Google Assistant. I got this one from Gosuna, but I think the same instructions will apply with any smart plug.
To set it up, I just plugged my tree lights into the smart plug, and the smart plug into the wall. I followed the instructions that came with my plug to get it hooked up to Google Home (which included downloading their app) but ultimately you need your smart plug to show up in the Google Home app page like below (I’ve nicknamed mine “Decoration Lights”).
Now you should be able to tap the “On” / “Off” buttons in the Google Home app and see that your Christmas tree lights turn on and off correctly. You should also be able to say “Ok Google, Turn on the Decoration Lights” and it should control the lights as well.
Set Up a Routine
So you can now control the tree with your voice, but “Turn on the Decoration Lights” is pretty boring and hard to remember. So let’s make this a bit easier using something Google calls Routines.
Fair warning, Google has frequently moved things around the Google Home app, and I’m using an iPhone, so these directions might not be exactly the same for your app (let me know if not and I’ll try to update this post).
From the Google Home main page, tap on the avatar icon on the bottom right of the screen
In the “Google Assistant” section, tap on “… More Settings”
Tap on the “Assistant” Tab
Tap “Routines”
Phew, ok, so hopefully you’re now on a screen that looks something like this.
Now, let’s create a new custom routine.
Tap the blue “+” floating action button on the bottom right
Tap the “Add commands” button
This is where you pick the command you want to say to your Google Home to trigger this routine. So here you can type “It’s Christmas Time” and tap save.
NOTE: You can add multiple phrases to trigger the same routine. Simply tap the “Add commands” button again and tap the blue “+” floating action button to create another phrase.
Now, to tell your Google Home what to do when you say this command:
Tap ADD ACTION
Tap popular actions
Check the box next to “Adjust lights, plugs, and more”
Tap the settings gear next to “Adjust lights, plugs, and more”
Your smart plug should show here
Tap on your smart plug
Select “Turn on” from the popup menu
Tap back
Tap “ADD” in the top right corner (I constantly forget this one)
Now tap “Save” in the top right corner
You should now be back on the Routines page, but with your new Routine at the top of the list.
You should be able to use this on your Google Home now. Just say “Ok Google, It’s Christmas Time” and your lights should turn on.
Add Some Music
Alright, now you have a custom routine, but it’s only doing one action. Let’s make things more interesting by playing some Christmas music as well as turning on the lights.
Tap on your custom routine
Tap “ADD MEDIA”
Check the “Music” radio button
Tap the gear icon next to “Music”
And type into the text box “Christmas Radio” (or whatever command you would use to trigger a custom playlist or album)
This will use whatever music service you’ve set up as the default.
Give it a shot. Say “Ok Google, It’s Christmas Time” and your lights should turn on, and Christmas music should start playing out of your speaker.
Put a Fire on the TV
Ok, this is probably the trickiest one, and may not work for many of you. Let’s start by explaining how I have my TV setup.
I have a Chromecast (1st generation) plugged in to an HDMI port on my TV, but powered by plugging into the wall, not the TV’s usb port (this is important). My TV supports HDMI-CEC, which is a spec that allows devices like BluRay players, video game consoles, and Chromecasts control your TV over HDMI.
In my case, my TV will allow my Chromecast to turn on the TV and switch to the input my Chromecast is connected too. But it will not allow my Chromecast to turn off my TV for reasons unknown.
If your TV does not support HDMI-CEC then you will have to manually turn on your TV and switch it to the Chromecast’s input.
Alright, with that aside, here’s how I set up the fireplace within my new Routine.
Open your custom routine
Tap “ADD ACTION”
Type into the text field “Play https://www.youtube.com/watch?v=L_LUpnjgPso on TV”
Tap “ADD” on the top right
Tap “Save” on the top right
Typing into that text box let’s you arbitrarily type any command you can say to your Google Home. So you could type “Play Fireplace on TV” here and Google will search Youtube and find a fireplace to put on your TV.
But what if you want to play a specific video? Since we’re typing into this command instead of talking out loud to our Google Home, we can actually clarify a specific Youtube video URL to play instead of just doing a search.
To do that you first need to get the URL for that video by tapping “share” in the Youtube app or just copying the url from the browser. Then you can just paste that URL into the command “Play [insert-url-here] on TV”.
If you have multiple TVs in the house, you might also have to specify which TV such as “Play Fireplace on living room TV”.
Now when you say “Ok Google, It’s Christmas Time”, your tree lights should turn on, music should start playing from your speaker, and your TV should turn into a fireplace!
Keep Tinkering
So now that you have the basic building blocks, you should be able to expand on this idea quiet a bit.
You could create a new routine called “Cancel Christmas” that turns off the lights, fireplace, and music. Or you could add an action to ask Google Home to tell you how many days till Christmas.
Routines are a bit confusing, and the current Google Home app certainly doesn’t make that process easier, but it can be really powerful. Even with just a couple pieces of smart hardware you can build up some impressive workflows pretty quickly.
Hopefully this was helpful! Please let me know if any of these directions don’t work or you have any other ideas. Best place to reach me is on Twitter at @_chuckyc.