Apple Asked For Feedback

Apple asked for feedback from developers today in an email survey. I try to keep this blog positive and restrict most of my snark to Twitter, but I figured I might as well post it here, too.

If you can’t see that image for some reason, here’s what I wrote:

I’m a long-time, independent Mac developer. I’ve traditionally sold directly to customers and, now, with the Mac App Store, still push customers to my website first. The value Apple provides with the store is simply not even near worth the 30% cut. When selling directly to customers, after credit card fees, etc. I pay around 8%. I’d be happy to give Apple (maybe) 15% for the (limited) exposure the App Store offers. But not more than that.

Also, in general, the Mac App Store is a kafkaesque hellscape full of scam artists that erode customers’ trust in the overall system and shitty apps that are nowhere near the level of quality that long-time Mac users expect from 3rd party software.

Add to that the arbitrariness of App Review, which seems more interested in penalizing legitimate developers for the most insignificant of reasons, while big name companies get away with flaunting the rules, and fly-by-night developers actively ship malicious, misleading, predatory, and outright-broken software. I have no idea what the point of App Review is if they’re not going to enforce the rules consistently and actually vet the apps in the store.

I absolutely love developing for Apple’s platforms, but if you weren’t the 800-pound gorilla in the industry, there’s absolutely no way in hell I would put up with the shit you throw at honest, hard-working developers trying to better your platform and earn a living.

Why Many of my Apps Failed And What Comes Next

I’ve started building something new.

I’m about four weeks in and already finding it incredibly useful in my day-to-day.

I’ve built many different apps over the years, thrown them against the wall, and excitedly watched which ones developed a following and which ones failed miserably.

Most of my apps have fallen into two categories. There are the ones that solve a personal need I face, that I can inform and direct with my own experiences. And there are those where I saw a market opportunity or just thought they might be fun to build.

Almost all of the ones in that second category have failed. Incoming!, Nottingham, Highwire. They each had their share of a few passionate and engaged users, but mostly were ignored. (The jury is still out on Triage.)

But that first category of apps? Those have flourished.

I was a web developer for ten years before I started building Mac apps. I know the industry well. And working at an agency meant I was juggling many different websites at once. I needed a faster/easier way to spin up local development environments, and that led to me creating VirtualHostX. Which, in turn, led to Hostbuddy and Hobo years later.

My core set of apps, as I think of them, found a wonderful niche among solo web designers and developers and the small companies they work for. And the apps have succeeded beyond my wildest dreams. From 2012 to 2014 they were my full time and only job.

But since their heyday in 2014, sales have steadily declined. A big part of that, I think, is because the world has moved on from the LAMP-based standards of 2004 – 2012. Nginx, NodeJS, etc. have led to a sea change. If it weren’t for WordPress’s continued dominance, I’m not sure if I’d have any more sales at all.

So, I’ve seen the writing on the wall for a few years now, and have been on the lookout for ways to branch out and diversify my app portfolio.

I’ve done some freelance jobs here and there, and tried a few new things on my own, but nothing has taken off. And as I talked about earlier, I think a lot of that is due to none of those new ventures being true passion projects that I could bring my own experiences as a user with specific needs.

But four weeks ago I finally became fed-up with the awfulness of I know they’re able to provide a free service because they plaster the site with advertisements and sell my data, and I’d be ok with that if they weren’t so intrusive. But they’re taking over nearly the entire browser window now. Add to that the cumbersome Web 2.0 UI and lack of any real reporting capabilities, and I’d had enough.

What I really want is a fast, powerful, native Mac app that automatically imports my financial data and gives me the ability to slice, dice, filter, organize, and export my data in every possible way. The flexibility and power of an Excel sheet with the learning curve of iOS and the familiar paradigms of a real Mac app. Something that keeps me in control of my data, respects my privacy, and syncs to all my devices.

So I built it.


Most of it. It’s not done yet, but all the major pieces are in place, and I’m using it to track my family’s budget every day.

I’ve taken a heavy dose of inspiration from one of my favorites apps – OmniFocus – both from a UI perspective (a clean, modern, attractive Mac interface) and from the power they afford users over their data by way of custom perspectives.

My app is smart. It auto-categorizes your transactions. You can just let the app do its thing and everything will end up in the (mostly) appropriate place. Or you can categorize each transaction manually. Or you can setup smart rules to do it for you automatically. Whatever fits your workflow.

Each transaction can belong to a single category. But categories can be nested. With one click you can see all the dining out you did last month. Or just the fast food orders. Or just what you spent at McDonalds.

And then there are tags. Assign multiple tags to a transaction. Do it manually, or create a smart rule to assign them automatically. Then use the app’s powerful search feature to find any combination of AND / OR.

Take search further by combining tags with categories and date based filtering. Find every Uber ride tagged #business during the last quarter and export the results to a CSV you can send to your boss to get reimbursed. Snapped a picture of the receipt with your iPhone? Yep, you can attach files, too.

And once you’ve got that perfect search query and set of filters in place, save it as a new Report that you can recall at any time. Just like an OmniFocus perspective.

And, just for fun, why not view all of your transactions plotted on a map?


I’ve got all of this working (albeit without the necessary UI/UX polish) and it’s totally opened my eyes to some aspects of our financial situation that I’d overlooked. The last major piece is adding a budgeting component. I know the system I want to adhere to, but I’m still working through how it will fit in the interface.

Of course, I’m leaving out the iOS counterpart. But I’m saving that for later. The model layer is still a bit too much in flux. But I’ve written all the business logic to be platform agnostic. So the plan is to reimplement the appropriate features in UIKit (not everything the Mac app can do would make sense or be needed on a mobile device) and reuse as much of the existing codebase as possible.

But don’t forget syncing. As I said in my requirements, I want this app to be privacy-focused and have the user be in charge of their own data. So, no financial data will ever touch my server. Unless they enable syncing, no data will ever leave their device. But if they do want to sync, that’s all privately handled by CloudKit so I, the developer, can’t see their info even if I wanted to.

So, that’s it. That’s what I’ve built and am working towards completing. I have no idea when it will be ready. CloudKit could easily throw a big wrench into everything. And I’ve also got major updates to VirtualHostX and Hostbuddy underway and due out this Fall.

But I’m excited. It’s an app I’m passionate about and I have a clear direction and feature set in mind. It caters to a broader audience than my developer-focused products and could potentially save my tiny company if they continue to trend downwards.

Creating New GitHub Issues From

After last week’s post about how to create a GitHub issue with image attachments from an email, I thought I’d try and speed up how quickly / easily I’m able to create new issues that don’t come from customer emails – i.e., the ones that just randomly occur to me.

Drafts is my preferred way of capturing text and ideas on Mac and iOS and then doing something with it. It has tons of scripts (actions) to do just about anything, and you can write your own if you need something custom.

So, after a quick look through GitHub’s API docs, I put together this script for Drafts.

It fetches your most recently active repos, presents them in a dialog prompt to pick one, and then creates a new issue in that repo using the contents of the current draft. Simple. Fast. Awesome. And a lot easier than trying to navigate GitHub’s mobile website.

You can install the action into your own from the action directory.

Creating GitHub Issues (with image attachments!) From an Email

I’m very meticulous about logging all of the feedback I receive from my customers. Whether it’s a bug report or a feature request, I want all of that information captured in a single place where I can plan and act on it. For me, that place is the Issues section in my app’s GitHub repo.

Normally, when I get a customer email, my workflow is to reply back to them with any clarification I need, and then once we’ve finished with any back and forth, create a new GitHub issue with the relevant info from their email and a note reminding me to email them back when their issue is resolved.

This takes all of a minute to do. But it still means opening a browser, navigating to the repo, clicking on “Issues”, then “New Issue”, and copy and paste the email details. Further, if the user supplied any screenshots, I have to save those out of the email and upload them to GitHub as well. Like I said, it only takes a minute or so, but it adds unnecessary friction.

Today I decided to automate all of that.

I use the fantastic Postmark service to send all of my company‘s transactional emails. They also have an equally awesome inbound service that will parse any emails you forward to them and POST the details as a JSON blob to your web hook.

So, I created a forwarding rule in Fastmail to forward any emails sent to and to my secret Postmark inbound address.

Postmark receives the forwarded email and POSTs the data to my server, which runs a small PHP script (embedded below) that downloads any image attachments contained in the email and creates a new GitHub issue in the appropriate repo with the contents of the email and image attachments.

It all works great! What used to be a slightly annoying process to do a couple times a day, now takes all of three seconds in my email client – whether I’m at my desktop or out and about on my phone.

Maybe you’ll find this script helpful.

Making Money Outside the Mac App Store

One of the themes of this blog is how I make money selling my own Mac apps on my website rather than through the Mac App Store. I truly believe it’s the best way to go if you’re serious about earning a living. That said, not everyone has time to write their own backend sales platform like I did. For those who want to focus on development and make the actual sales process as painless as possible, I recommend using FastSpring. I’ve used them since 2009 and have never been disappointed. And getting up to speed with FastSpring couldn’t be easier than this great new book by Christian Tietze. It’s all about how to sell your apps outside the App Store. It covers everything from how to setup a storefront, to implementing serial numbers, and protecting your app against piracy. I’ve read the book, and it’s great.

If you do like the book and decide to buy, using this link will give me a small kickback. (But that hasn’t influenced my decision to post about it. The book really is good!)


Wrapping up 2015

Last year, I wrote about my final sales numbers for 2014. Now that 2015 is wrapping up, it’s time to do the same.

I had very high expectations going into 2015. I released Hobo right at the start of the new year and planned a major update to VirtualHostX for the Fall. With both of those in place, plus a renewed focus on my mailing list and website analytics, I set the seemingly impossible goal of doubling my 2014 sales this year. That meant my revenue goal for 2015 was $123,000. Audacious. Lofty. But that’s what I was aiming for.

How’d I do?

I’m sad to report that instead of doubling, sales cratered. With about two weeks to go in 2015, my current revenue sits at $35,000. Don’t get me wrong. I know there are many people out there who would love to be making that kind of money on their app business. And I’m very fortunate to earn what I do. But, still, instead of doubling my revenue I almost lost 50% year over year.


I can point to a number of reasons why 2015 was such a down year. Some were business decisions. Others were personal. Most obviously (to me) is that Hobo never really took off. Sales have been OK, but my goal of having it match VirtualHostX dollar-for-dollar seem to have been premature. I had a couple large quantity sales to businesses, which gives me hope that I could begin marketing Hobo in that direction rather than at individual developers. I positioned the commercially licensed version of the app as a boon to web dev shops with the ability to share and remotely update .hobo files. But, looking back, I haven’t made that feature prominent enough on the website. I need to do a better job at educating potential buyers.

I also never got around to properly setting up my Hobo mailing list with Drip. One of the changes I made in 2015 for VirtualHostX was requring an email address to download the software. This lets me follow up with the user after they download the app. I don’t consider it spam. I send three emails – each a day apart – that walk the new user through the major features of the app. And then if they haven’t purchased after two weeks, I follow up with a simple email asking if there’s anything the app could have done better or if they’d like more time to evaluate it. This email course has worked extrodinarily well and provided me with a lot of great feedback. I’ve had a to-do to setup the same sort of course for Hobo for nine months but never got around to it. And that’s squarely my fault.

Another major reasons for the low sales volume is I never got around to building and releasing the major update to VirtualHostX I’ve been planning. During the week of a major upgrade release, I can count on an additional $10,000 – $15,000 in sales via upgrades. Not having a major release this year definitely caused a significant dip in sales.

And here’s where things get personal.

Why didn’t I have a new, major release ready in time for El Captian in the Fall?

Two reasons. One, we had a new baby girl. And, believe it or not, taking care of two kids is way more work than dealing with just one. But, the main reason is the planning for my major Fall release typically happens early in the Summer. But during June and July of 2015, I found myself at the bottom of a deep depression. One like I hadn’t experienced since 2009. It’s hard to properly describe what it’s like being depressed, because at its core, you feel nothing. And that nothingness saps away every ounce of motivation you have. My relationships with my family and friends struggled, my app business saw virtually no attention for three months, and my nine-to-five job suffered as well. Two of those areas were forgiving. The other, not so much. But, I bounced backed, got on some better meds, and feel great now. The seventh major release of VirtualHostX is going well and should be ready this Winter.

So what did I do well this year?

I grew my mailing list considerably. That means when VirtualHostX 7.0 is ready to go, I should have a great audience to market it to. Further, earlier in the year I ran a bunch of A/B tests on my marketing website aimed at upping my conversion rate. I’m happy to report that I saw good growth in that regard – even with the change to requring email addresses to trial the app.

So that’s a summary of my year as far as business goes. I thought about listing all of the services I use and expenses I have running the business, but that hasn’t changed much since last year.

How’d you do?

I Will Not Use the Phrase “Growth Hacking”

But I will call it marketing.

It’s always something that I’ve been interested in, but it’s also something I’ve always put off until “I have more time”. Well, that time is now.

I spent two days in December and did a thorough review of my little software business. The obvious take away is that 90% of my revenue comes from one app – VirtualHostX. I’m thrilled that it’s doing so well, but that’s a scary place to be in. If the app ever fails, I’m done for. The non-obvious realization I came to is that I believe I’ve reached a point of diminishing returns with regards to adding new features to the app. It’s over seven years old at this point. I’m committed to continuing to improve it, but I’m not sure how much growth I can drive by adding new features. Instead, I think my company’s growth potential derives from two things.

  1. Releasing a new product that I can sell alongside VirtualHostX that will become, at a minimum, half as successful as VHX within one year.
  2. Becoming better at selling my products by investigating historical analytics and trying new optimizations, with data to backup the results. (Yes, yes, I’m the dumb programmer who just now “discovered” marketing.)

With those two strategies in play, my goal for 2015 is to double my revenue.

Yes, seriously.

I know it’s a stretch, but I’m optimistic.

Releasing a new product is the easy part. I took the last half of November and all of December and built and launched Hobo. It’s another app aimed at web professionals that makes using Vagrant easy. Customer reaction has been overwhelmingly positive so far. And I’m optimistic that will translate into sales before too long.

Improving my marketing is the hard part. And taking that on full-force has been something my wife (a marketer herself) has been beating me over the head with for years. I’ve finally taken the time to learn Google Analytics beyond the basic vanity metrics and have done deep dives into goals, conversion tracking, where my customers are falling off in the order process, etc.

Based on my learnings, I chose three goals (low hanging fruit, really) that I could tackle in January to see how they improved sales. And based on those learnings, pick better goals to implement each month throughout the year. Here’s what I’ve chosen to do this month.

First, for four years I’ve offered a free System Preferences pane download that allows you to turn web sharing on and off on your Mac. It just adds back the functionality that Apple removed in Mountain Lion. I knew it was fairly popular, but had never done any real tracking of it. Well, after watching downloads for a month, I was knocked-off-my-feet-blown-away to find out it has just as many downloads as VirtualHostX.

All of these people downloading my web sharing tool are perfect customers to upgrade to the more powerful VirtualHostX. I just need to figure out how to do that.

As a start, I’ve replaced the download page for the tool with a marketing page that up-sells them on the benefits of VirtualHostX and encourages them to give the full app a try. The final download link for the web sharing tool is at the bottom of the page – not hidden! – but they have to scroll past all of my other content to get to it.

Anecdotally, in the week since I’ve made this change, downloads for web sharing are down 15% and up 15% for VirtualHostX.

Next, not enough people are talking about my apps on social media. To make this simpler, I’ve added a callout to my apps’ marketing pages that offers a $5 coupon if they Tweet about one of my products. I offer three pre-written tweets they can choose from. And they have the option to write their own message instead.

The response to this has been way beyond what I was expecting. I’m seeing 20+ Twitter mentions a day, whereas before I was lucky to get two or three.

Of course, none of this matters until I can verify that those tweets are leading to increased traffic and conversions. I’ll know more in a few weeks.

Finally, I’ve always gotten basic stats from my apps’ automatic update code. Info like operating system, screen size, etc. But I never knew exactly how my users were using my apps or what features were most popular. Piggybacking on top of Google Analytics’ support for mobile app tracking, I’m now pretending that my Mac apps are mobile apps and am sending event data to Google.

All of that data is completely anonymous of course, but it will allow me to see session length, number of launches, and exactly which functions within the apps are being used the most.

So, those are my three marketing improvements for January. I’ll review all the data at the end of the month and hopefully learn something concrete I can use to improve my business. When and if I do, I’ll write about it here.

Even Panic is Having Trouble Making Money on iOS

(I hope the title of this post doesn’t misrepresent what Cabel wrote.)

The 2014 Panic Report is a wonderfully candid look into Panic’s successes and struggles throughout 2014. Continuing in line with the trend of small developers finding it difficult to make money on iOS is this nugget…

Wow! 51% of our unit sales came from iOS apps! That’s great! But now look at this revenue chart for the same month… Despite selling more than half of our total units, iOS represents just 17% of our total revenue.

I love, love, love developing for iOS. But this is exactly why, as a solo developer, I put all of my serious effort behind my Mac apps. Anything I do for iOS is at best a hobby or an experiment.

Benefits of Selling Outside the Mac App Store

Dan Counsell, founder of Realmac Software with an up-front and insightful post about the benefits of selling your software outside the Mac App Store.

Imagine if your app made $30,000 in the first month it launched. That’s great, apart from the fact that you have to give Apple $9,000 of that. Is the service they provide really worth that much? I’m not so sure it is.

My little company wouldn’t be able to survive if I had to give 30% of my revenue to Apple. While I hope to change that, Click On Tyler simply doesn’t operate at a scale where that’s sustainable.

Ember for Mac was in four different bundles in the last half of 2014. It earned an extra $80,000 (USD) in revenue, not only that it also brought in a lot of new users. If Ember was only available in the Mac App Store I wouldn’t have been able to do this and Realmac would have been worse off because of it.

I’ve participated in a few different bundles over the years. And, while they have brought in a nice bonus bit of revenue, I’ve found the ability to market to that huge base of new customers more useful.

Here’s the biggest and most important difference of all, by selling directly you get to know every single one of your customers. When building a business your customers are your most valuable asset, but yet when you sell on the Mac App Store you don’t know who they are.

Bingo. Over the years selling my apps I’ve formed many great, personal relationships with my customers. They’ve become key advisors when I experiment with new product features and services. They’re also a constant stream of ideas and improvements that I wouldn’t normally see since I’m so close to my apps. Customers on the Mac App Store rarely translate into this kind of usefulness – if you even know them at all.

All that said, one distinction worth making is that Dan doesn’t advocate not selling through the Mac App Store. He simply says that you shouldn’t limit yourself to only one sales channel.

2014 Business Yearly Review

Inspired by this article on doing a year-end review of your indie business, I took a few minutes and calculated some stats and compiled my major accomplishments from 2014. The result was eye-opening and made me feel more than a little bit proud.

I’ve made a conscious effort to be more transparent about my business dealings this year because I truly believe getting more people to share these kinds of numbers will benefit the community as a whole. So, here’s my 2014 review of Click On Tyler

  • Earned $61,500 in sales ($168/day)
  • Grew revenue by 6%
  • Gained 1,714 new customers (40% down from 2013 new customers)
  • Sold 1,961 copies of my software
  • $31.36 average sale price
  • Launched new, responsive website design
  • Launched VirtualHostX 5.0 with folders, SSL support, custom directive templates
  • Launched VirtualHostX 6.0 and reset the app’s development cycle to coincide with Apple
  • Built and launched Minion
  • Built and beta launched Hobo
  • Built Upshot
  • Built and launched Shutterbox
  • Retired Incoming!
  • Retired Traffic Advisor
  • Migrated off Rackspace to Linode
  • Integrated a FAQ/support website into
  • Introduced commercial licenses with priority support
  • Began writing regularly at
  • Wrote 56 blog posts. 35,900 words
  • Wrote half a book on my Dropbox photography workflow. 11,251 words
  • Gained 883 newsletter subscribers (42% growth)
  • Sent 11 newsletter campaigns (10,789 emails)
  • 68% newsletter open rate (19,447 opens, 7,406 unique opens) (18% industry average)
  • 15% newsletter click-through rate (2,217 clicks, 1,666 unique clicks) (2.5% industry average)

All of that, while caring for (dealing with) our first son, who was born at the start of the year. And, while working a full-time job as well.

A sincere thank-you to all of my customers and everyone who reads this blog. I can’t wait for 2015.