TLDR: I’ve sold 40 licenses, made some money and did it with very little monetary expense. 

I announced my experiment about three months ago and shipped my first version about a month later. After feeling burnt out on my open source project, I needed something to make it exciting again. I had always considered monetizing my project but never had taken the leap into selling software. As of this writing, I’ve made my first $1,000 selling software I author, test, market and support myself.

What are you selling?

PowerShell Tools for Visual Studio is a very popular extension that I developed over the last 7 years. I decided to build on this success and create a “pro” version of the toolset. The pro version offers a few more bells and whistles that the basic version does not. I started small with some experiments that I never finished and wrapped them up into a cohesive product. From there, I built a couple other components from scratch and am currently filling out the functionality of these components.

I charge $29.99 a license.

How are you developing it?

Visual Studio extensions are a pain to work with. Lucky for me, I have years of experience. I decided to support Visual Studio 2015 and 2017 for the pro extension. I have built in a couple hooks into the basic version so that I can add my pro features to places where the basic extension lacks.

Version Control and Continuous Integration

I’m using Visual Studio Team Services to host my source code and run my builds. For teams under 5 people, it’s free. I have a limited number of build minutes but run very few builds and they run in under two minutes. Once a master build completes, I’m creating a release inside a public GitHub project to publish the artifacts for historical purposes.

Price: Free

Testing

I’m using XUnit to run automated tests against the code base. I try to abstract as much of Visual Studio as I can because starting a debugging session takes quite a while. I typically author all my code against Visual Studio 2017 and then have to make changes to accommodate the 2015 build system and SDK. Again, this is where experience has really helped. For manual testing, I run a Hyper-V virtual machine on my laptop with various snapshots that contain particular Visual Studio configurations and installations to run manual testing. I usually only run this type of testing when attempting to reproduce an issue during installation or before a release.

Price: Free

Tracking Work

I use Visual Studio Team Services to track work internally. I publish issues that people encounter or features they request publicly on GitHub for others to see and participate on.

Price: Free

Release Management

Release management is a bit of a pain point for me at the moment. Publishing a new version requires me to manually upload the 4 different extensions (pro-2015, pro-2017, free-2015, free- 2017) to the Visual Studio Marketplace and a PowerShell module to the PowerShell Gallery. I’ve automated some of the work of creating historical GitHub releases but it still isn’t smooth. This just requires more work.

Price: Time

How are you selling it?

The actual process of selling software is harder than I thought. I couldn’t find any good services that allowed me to post a binary, charge a price and send an email with a generated license key to the purchaser. This then required me to create a bit of a manual solution.

Accepting Payment

All payment is accomplished through PoshTools.com. I pay for hosting on SiteGround.com and it costs me about 6 dollars a month. I bought my domain name through GoDaddy for around 10 dollars. I also host the documentation for both the free and paid versions of the software on the same site. Payment is done through a third party so I do not maintain or handle any credit card data on my server.

I started accepting payment using PayPal. It’s actually how I accepted payment for the last two months. PayPal has an instant notification API that can post back to a URL of your choice after a purchase is made for an item. PayPal provides the email address of the account holder so you can then send an email with a license key that I generate.

Recently, I moved over to Stripe. It offers much the same mechanism as PayPal but a boat load of other features. If I ever sell more than 20 licenses a month, I’m sure that boat will come in handy. It also allows me to accept payment from users without them having to create a PayPal account and simply entering a credit card.

Both PayPal and Stripe charge around 3% per transaction.

Once payment is confirmed by either system, the payment provider pings a URL of a ASP.NET service I host in Azure. In both cases it validates a token and triggers that charge and then sends an email to the purchaser with a license key. The Azure AppService costs 1.44 USD a day. Through the MVP program, I receive 150 dollars of Azure credits a month so this price is covered. I used the same Azure credits to purchase SSL certificates for my service and website and run an Azure storage account for log messages related to purchases.

Price: $6/month + 3% per transaction

Licensing

I used a very simple public-private key DSA256 encryption mechanism to encode and encrypt the license keys. The private key is stored on my web server so users can’t generate keys themselves. I rolled it mostly myself and it has worked well so far. Each key contains the email address of the purchaser and the date of purchase. I offer a 1-year free upgrade policy so this lets me enforce that on the client side. I could have used a hardcore licensing library for an astoundingly expensive price but I figured that if people want to hack and steal my software, there isn’t going to be too much I can do. They are jerks and I’d rather just make it easy for myself and for honest people to get my software.  If I was selling 1,000-dollar-a-license software maybe I would be more concerned.

Price: Time

How are you marketing it?

I’ve played around a bit with advertising via Google and Facebook but have paused all campaigns. I spent maybe 30 dollars experimenting with Google advertising and did not see a single conversion. Most of my marketing happens through a Visual Studio browser popup when the basic version of my tools is upgraded or installed. This webpage provides the release notes for the free and paid version and has a side banner with some information about the paid tool. I see around 25k hits a month on this page with people upgrading or installing the free tool. The bounce rate for this page is extremely high (~95%) so it’s hard to judge whether this type of marketing is successful.

Aside from that, I primarily market via social media using Twitter, Facebook, Reddit or Hacker News. This type of marketing usually has a pretty high bounce rate (~80%) as well but is still better than the webpage inside Visual Studio.

Price: $30 of experimentation

How are you deciding what to build?

Most of the features that I’ve built have been based on asks from the community. The GUI designer and packaging tools were direct requests from multiple people and led me to add them to the product. Recently, I added analytics to my project to track what people are using. Using Google’s Analytics Measurement Protocol, you can make simple POST HTTP requests to Google’s analytics service to track hits. These hits can be given all kinds of qualifiers and labels. I embedded this hit tracking in my client software. I just track when a user executes a particular feature of the product. It allows me to see which features people are using. Google requires an opt-in dialog to be presented when installing the software so my analytics have yet to be a huge success but the little data I’ve gather is better than no data being gathered. I’ll write a blog post on this in the future.

Price: Time

How are you supporting it?

I have a support email address that I respond to customer issues and questions. Anything that needs to be tracked is added to my public GitHub repo. I haven’t had too many support issues yet but I want to continue to roll out new features slowly and improve the existing ones to keep support cases low because it will become my biggest bottle neck.

How are you managing the business?

I’m taking a very lean approach to the business. I have a very simple EULA. I am currently running a sole proprietorship. I’ve applied for an LLC in the state of Wisconsin and will be using that to provide some legal protection for me and the business. This costs $130. Taxes shouldn’t be overly complicated but I am tracking all income and expenses in order to make that easy at the end of the year. I hope to do them myself.

Price: $130 or more

Total Price: $202

So far, I’ve sold around 40 licenses. I changed my price from $25.00 to $29.99 a few weeks ago. As I add features I may raise it further to continue to make it worth my time. I have over 5,500 downloads (includes upgrades) with about 500 trial licenses requested. In addition to working on the paid version, I’ve also been working on the free version. Since my paid version is built on the free version, it’s in my best interest to knock down bugs in the open source world as well. My average dollar per hour is probably really low after 7 years (and millions of downloads) but this has been a pretty exciting experiment.

If you’re interested in checking out my tool, visit PoshTools.com.