arrow-left arrow-right brightness-2 chevron-left chevron-right circle-half-full dots-horizontal facebook-box facebook loader magnify menu-down RSS star Twitter twitter GitHub white-balance-sunny window-close
Selling software: Processing Orders
7 min read

Selling software: Processing Orders

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.

This post is part of a little series I've been writing about selling software. In this post, I want to talk about the customer experience of using resellers vs. processing orders yourself.

The Digital River experience

This morning I went to fix a bug in our Java-based TeamCity plugin, when IntelliJ IDEA (the IDE that I use) told me that my trial license had expired. I like JetBrains, and I like their products, so I went ahead and bought a license.

After entering my details, I was taken to a payment page, where I was told my payment would be processed by Element 5:

My payment will be processed by Element 5

After placing the order, I got a receipt via email. Except instead of seeing Element 5, like I expected, it said MyCommerce, with "Thank you for placing an order with MyCommerce, an authorized reseller of JetBrains s.r.o...":

Apparently I actually purchased from MyCommerce

There was an invoice attached to the email, though, and it said Element 5, not My Commerce, and it had Digital River underneath. Confused? So am I. There are so many brands and logos involved in my order that I'm left feeling pretty unsure about who I actually gave my credit card to.

The invoice from Digital River and Element 5

Now, I understand that Digital River is a large company that has a number of different brands that they use to process e-commerce payments (and I suspect that they rename these companies often because they develop not-so-positive reputations). But to me, this lack of attention and confusion about brand identity comes across as very amateurish.

I was in a hurry to get my bug fixed. So I scrolled down to find my license key in the email:

Your product will be delivered in 24 hours

At first I assumed the 24 hours was just a standard disclaimer, but as time went by and no license key came, I realized they were serious.

My license key arrived 5 and a half hours later

Eventually, 5 hours later, my license arrived. I’m not sure why it took so long to email a license key. Perhaps their license algorithm relies on the unique entropy of Hadi Hariri doing the hammerdance? Who knows.

Having to wait for something that should be automated was disappointing. But that confusing invoice from a company suffering an identity crisis did not leave me feeling like JetBrains particularly care about how I felt.

Now, the point of this post isn't to bash JetBrains (I really love their products!) or even Digital River. This experience just reminded me of why I moved away from using resellers.

While outsourcing to resellers might be attractive, and might even make commercial sense, the downside is is that you no longer own the customer experience. JetBrains have earned my trust with their brilliant products, and they have a nice website that explains the features in detail and convinces me to buy. But the buying experience was impersonal, confusing and disappointing.

How I used to do it: FastSpring

For Octopus Deploy, I previously outsourced order processing to SWREG (another Digital River company), and then quickly moved to FastSpring. I wrote about how I take orders with FastSpring previously.

But in December I made a change, and decided to process the orders myself. I figured it would allow me to save a few thousand dollars a month in processing fees. And it would make reconciling with my accounting system easier too. But the real driving force behind deciding to process orders myself?

I wanted to own the customer experience.

I hated that FastSpring couldn’t actually create quotes and I had to issue them myself on their behalf (since the order will ultimately be paid to them). I hated that FastSpring’s invoices couldn't be turned into PDF's very nicely, since many customers ask for PDF invoices (the invoice email just linked to a web page with details). I hated that while my store was branded to look like my site, the invoice had FastSpring's color scheme and logo, and couldn't be branded. I hated that when large customers asked for extra documentation or tax forms, I had to send them off to someone else, because I wasn’t actually the merchant of record for the transaction.

Now, FastSpring were great, and their support really is as good as they say. And I think at the time, they were the right choice: I didn't even know if anyone would buy my product back then, let alone have the time to implement order processing myself. And I'd recommend them to anyone else who is launching a product. But after 12 months with them, I decided it was time to grow up and begin to own the customer experience.

Current strategy

In December I launched an update to the Octopus Deploy website, and implemented a new order processing system. It is built using ASP.NET MVC and RavenDB, and hosted on EC2. It took about a week of work, but deploying it was easy :)

In our system, quotes, purchase orders and orders are all effectively the same thing:

  • A Quote is a request for pricing that doesn't represent a commitment to buy
  • A Purchase Order is a commitment to buy, that hasn't yet been paid
  • An Order has been paid

For payment methods, we accept Visa/Mastercard (through a merchant facility with NAB, and the Braintree gateway), or PayPal. PayPal also lets customers pay with credit card without registering, so we use that for AMEX and other cards.

Customers can come to the site and buy right away, or they can request a quote, turn it into a purchase order, and then eventually pay it. Here's how the order process looks at a high level (click to zoom):

Order processing system

When a customer requests a quote or places an order, a background task sends the quote/invoice to Xero, using the Xero API. We then download that invoice as a PDF, and it gets attached to the outgoing invoice email.

We use three different invoice templates in Xero because quotes, purchase orders and paid orders all look a little different. Click below to see examples:



Purchase order:

Purchase order, unpaid

Paid order:

Invoice, fully paid

The license key is also generated and sent immediately via email. But there’s more.

After purchasing/placing the order, if you stay on the confirmation page, the page will eventually refresh and show you your license key and invoice as a PDF. You don’t even need to check your email. It’s right there. We generate them in the background while you wait, but usually it’s just a few seconds.

We give you the license key immediately

What I love about doing it ourselves

Firstly, I love that our invoices and license key emails all come immediately, and that they come from us, with our logos and no third parties. It feels clean and professional. And I love that customers don’t even actually have to wait for the email to get on with things.

Processing the payments ourselves is also great for cash-flow. With a reseller like FastSpring, we could only get paid fortnightly at the most. With our own merchant account, a customer can buy today, and the funds are cleared and ready to be spent tomorrow. And did I mention we’re saving a lot of money in transaction fees? (FastSpring was 5.9%, while accepting cards ourselves is 2-3%)

Finally, I love that everything pretty much reconciles itself. In Xero, as soon as a customer places a purchase order or pays an invoice, I can see it in my profit and loss statement. A few days later when I import the transactions, I tick some boxes and the reconcile is done. Our accounting system IS the invoicing system. Reconciling accounting with FastSpring and SWREG was much harder.

The downside

The one downside to not using a reseller is that actually accepting payments is harder.

FastSpring allowed us to fix prices in a dozen different currencies, accept pretty much any credit card, and even accept checks or bank transfers as payment methods (our US customers could mail a check to FastSpring, they’d clear it, and a few days later the order gets marked as paid).

Now that we’re doing it ourselves, we’re a lot more limited. To price in different currencies you have to actually have a bank account and merchant facility in that currency (currently in Australia, only NAB can provide this). We price our product in USD, so we have a NAB multi-currency facility and a USD bank account. We can’t accept AMEX in USD because AMEX are, frankly, idiots. We have to send customers to PayPal to use their AMEX cards.

And since our bank accounts are in Australia, it’s really hard for customers overseas to pay by bank transfer. It took about 7 emails for one of our customers in France to be able to pay us via bank transfer, and we lost about $50 in processing fees by the time it arrived.

So far, though, limiting the payment methods hasn’t actually been that bad - sales have been growing despite reducing the payment options, and I’m getting emails occasionally from people about how they enjoyed the purchasing experience, which we never got with resellers before.

Is it worth it?

If a small company like ours can do it, why haven’t a 300+ person company like JetBrains done it? Your Octopus Deploy license will be ready within seconds of ordering, yet it’s been 6 hours since I ordered my IntelliJ IDEA license and I am still waiting. They have 300 employees, we have four.

When it comes to outsourcing, it’s always recommended to outsource your non-key competencies. And while processing payments might not be my core competency, I think it’s so essential for the customer experience. Purchasing is the last part of your sales funnel, and it’s too important to be left to the Digital Rivers of the world if you can help it.

Update: Sounds like JetBrains might be making some changes

Paul Stovell's Blog

Hello, I'm Paul Stovell

I'm a Brisbane-based software developer, and founder of Octopus Deploy, a DevOps automation software company. This is my personal blog where I write about my journey with Octopus and software development.

I write new blog posts about once a month. Subscribe and I'll send you an email when I publish something new.