Selling software: quotes, purchase orders and resellers

This is an old post and doesn't necessarily reflect my current thinking on a topic, and some links or images may not work. The text is preserved here for posterity.

When I first started selling Octopus Deploy licenses, the initial orders came directly from small-medium companies, and most were paid using a credit card. Now, approximately a fifth of our orders are coming as purchase orders, and many of those now come from resellers buying software on behalf of corporate clients.

I didn't have any experience dealing with this before going into business for myself, so I've been making it up as I go along. It was all new to me, so perhaps some of it will be new to you, too. In this post, I'll share my current strategy for dealing with purchase orders and resellers. I'd also love your thoughts on how it could be improved.

Background

Octopus Deploy Pty. Ltd. is an Australian company. Licenses for our software are sold online through FastSpring, a Californian company. Approximately half or our sales are to US customers, then the UK, then Australia, then other countries.

Quotes

Usually the first step in the process is that an email comes to our sales email address, asking for a quote. Someone has heard of the product, tried it, decided to buy it, but before they can begin the process of purchasing a license, they need the price written on a quote that they can record in their system.

Our pricing model is simple and on the website, so there's usually no surprise in the price. We do provide discounts to some resellers (which I'll go into shortly) but overall there's nothing complex here.

What does the quote look like? We'll, it's just an invoice, except it says quote at the top instead. Here's an example.

Quote PDF

I use Xero for accounting (a service I can't recommend enough, it truly makes bookkeeping fun), and initially I also used Xero to create the quotes. But each time I needed to set the customer up as a contact, then create the quote, and so on. Now, I just use a Word document template, and save it as a PDF.

Each quote has a unique quote number at the top. This number is generated by a very sophisticated algorithm:

  1. I type "ODQ", which is short for "Octopus Deploy Quote"
  2. Then I mash the numbers on my keyboard
  3. There's no step 3

I don't currently keep track of the quote numbers, since they don't really matter from my perspective.

W9 forms

The IRS require (some? all?) American companies to record information about companies they purchase software from, which is usually supplied as a W9 form. Customers will occasionally email me to fill in such a form before they can place an order.

The Form W-9, Request for Taxpayer Identification Number and Certification, serves two purposes. First, it is used by third parties to collect identifying information to help file information returns with the IRS. It requests the name, address, and taxpayer identification information of a taxpayer (in the form of a Social Security Number or Employer Identification Number). The form is never actually sent to the IRS, but is maintained by the person who files the information return for verification purposes.

Since the company is actually buying the software from our reseller (FastSpring), it's FastSpring's W9 form that they need. Sometimes I've been asked to provide a W8 form (which is used when purchasing from a non-US company), but this is because the customer assumes they are buying from us directly.

Purchase orders

Once the customer has a quote, they'll create a purchase order in their system. This usually gets emailed to us as a PDF. I manually enter those order details into FastSpring, and the customer gets an email to let them know the order is ready to be paid. I usually also save the invoice as a PDF and email it to the customer.

The invoice is created by FastSpring and usually looks like this:

Invoice example

Finally, while FastSpring do provide an option to enter purchase orders online (so there's no need for me to be involved) I find it's usually easier to just ask customers to email the purchase order to me, especially where resellers are involved.

Deliver before or after payment

Normally, when an order is placed, we don't send the license key until payment has actually been received. Most people pay by credit card, so their license key is generated and delivered within a few minutes of ordering. But customers using a purchase order normally expect to be able to wait 30 days or so before making payment, and they like to pay using check/money order.

When a purchase order arrived, I used to generate a 45-day trial license key to send to the customer manually. That way they could use the product in full, and by the time the trial expired, they would have their real license key because the order should have been paid.

This actually caused a lot of problems for large customers, because the need to record the fact that they're using a trial license of software for production deployments in their configuration management system. And if resellers are involved (more on that later), there might be confusion as to the terms of payment, so the payment process can drag on.

Then I found out that FastSpring provide an option to deliver the license key before payment is received:

Purchase order delivery options in FastSpring

So now, my process is to accept the purchase order and deliver the license key right away, trusting that customers big enough to use a purchase order will eventually pay. I haven't had any problems with this so far, and the customer is usually happier as a result.

Resellers

A reseller is usually engaged to purchase software on behalf of a customer.

In an ideal world, resellers know about your product and are out there advertising it and promoting it to their customers. When they make the sale, they keep the difference between what you sell it to them for, and what they sell it to their customer for. Usually you might give them a discount to do this.

In reality, all of the resellers I've had have gotten in touch this way:

  • Bob is a developer lead, he learns how wonderful Octopus is for ASP.NET deployment, uses it, and wants his company to buy a license
  • The organization where Bob works has a policy that they only buy software through approved resellers
  • Bob asks his reseller to buy the license for him
  • Bob's reseller contacts me to ask for reseller pricing

Why does Bob's company have a reseller? It seems to be down to accounting: Bob's company would prefer to pay a handful of invoices for software purchases a month rather than hundreds (and I can't fault that). Resellers probably provide value to Bob's company beyond that when it comes to bulk purchases of more mainstream software, but for a small business like ours, that seems to be the extent of it.

When asked to provide reseller pricing, I point them to this page on partners and bulk licenses, which has a table of discounts:

Licenses Discount
1 licenseNo discount
2-9 licenses10%
10-14 licenses15%
15+ licenses20%

We do offer discounts to anyone who buys multiple licenses. But for one-off licenses (even from resellers), we don't provide any discount. As explained in this Business of Software thread:

When a reseller is contacting you it is because a customer has requested your product. They are buying from you no matter what and there is no reason to offer a discount. This is particularly true for the larger resellers: they are not promoting your product, they just handle the order for the client.

So far we haven't had anyone decide not to go through with an order through a reseller because they didn't get discounted pricing. I don't know if the reseller is charging anything on top or not (making it more expensive to use the reseller than to just buy direct), but I suspect that for small purchases like us they probably don't.

TL;DR

I've learned that quotes, W9 forms, purchase orders and resellers are all part of the business of selling software. They're all pretty simple at the end of the day, though they can be somewhat time consuming to deal with. As my business grows I'll no doubt need to find more streamlined ways to handle them, but for now my current process seems to be working OK.

Do you have a suggestion on how the above could be improved, or a tip to share? Leave a comment in the box below.