2012. I was choosing an accounting system for Vinewave, the enterprise software company I had started a year or so earlier.

The company was growing and I needed a proper accounting system to replace the Excel thing we were using.

See, until this point, I had been using everyone's favorite business app, Excel, to run the entire finance function of the company. Which seems crazy now seeing as I was selling to some of the world’s largest companies. But that's #startuplife.

Sorry I had to blur it out. And I can’t remember why those are highlighted yellow.

My Excel "finance template" had everything I needed to get going without having to set up and learn a proper accounting app.

It let me track quotes and invoices and expenses and tax and credit notes and write-offs and how many product licenses were sold to whom, and tons of other financey stuff that a technical founder didn’t know about.

The invoices themselves were done in Word and then saved to PDF on my local hard drive and emailed to customers.

This hacked together system worked brilliantly.

Then one day in April 2014 — after 3 years of using this audacious Excel-based scheme — I decided we needed to move to a real accounting system.

I had to find a good one. One that was simple to use but that also had powerful features available for the business to grow into.

During my research I distinctly remember looking at Xero and thinking, “Man, this looks like one of those non-startup friendly accounting apps that are all about debits and credits and stuff.

It looked like this back then:

So I Googled some more and happened upon Wave Accounting.

Now that's what I’m talking about!” I told myself as I admired its cheery dashboard that was clearly designed to appease those of us who did not go to college.

Wave Accounting looked fun and… disruptive. It looked like the kind of thing startups should choose, and all the cool kids were using it.

So I went with it.

It took a few days and nights to import the Excel stuff into Wave but it went smoothly and I was happy.

But 2 years later Vinewave found itself moving its entire accounting function to Xero.

Until this point I had been bootstrapping Vinewave by myself.

(While also, for some reason, attempting to build another bootstrapped startup at the same time. That didn't work out.)

Vinewave was growing and I needed to bring on another team member. It was an opportune time to reevaluate every part of the business, and our accounting system was on the agenda.

I had been using Wave Accounting for a few years and it had been good to me, but it had some limitations and irritations. Vinewave was selling software apps to large enterprises and I was dealing with purchase orders, quotes and invoices, multiple currencies, credit card payments, PayPal, forex transfers, foreign tax and many other things that a technical founder never thought existed in this world.

Maybe because Wave Accounting was "free" it didn't seem professional enough, but it felt as if there were many things that it was lacking or didn't do well enough at the time.

So I got stuck into researching accounting apps again and rediscovered Xero.

It had been improved over the years and it now looked amazing.


The new Xero was a lot more refined than when I had first checked it out. Even though it was doing the same standard double-entry accounting that it had always done, its user interface — and as I would later come to realize — its entire user experience, had been greatly improved.

UPDATE Feb 2020: We've been running on Xero for almost 3 years now and it's still working well for us.

21 Reasons Why We Switched From Wave Accounting to Xero…

Disclaimer: This is written from the perspective of an entrepreneur slash software developer slash designer slash user experience critic.

Disclaimer 2: This is based on my knowledge of Wave Accounting at the time we moved over to Xero (Sep 2016) so I’m not sure if they’ve improved things since.

Disclaimer 3: I’m not affiliated with Xero (or Wave Accounting) in any way other than being a typical paying customer, and I received nothing in return for this post (but I do love a free t-shirt…)

Disclaimer 4: I don’t hate Wave Accounting. In fact, it’s a good choice if you’re starting a small business and want a decent accounting app that’s free. But there’s certainly differences between the two apps and a clear winner, and this post represents what that winning scenario looks like to me.

Disclaimer 5: Even though Wave Accounting is a “free” app I don’t feel bad comparing it to Xero. Why? Because freemium just so happens to be the business model Wave has chosen and that shouldn’t be an indication of their product’s caliber or quality. Wave Accounting manages more than $175 billion in income and expense transactions for its customers and its Wikipedia page lists Xero as one of its major competitors. Wave does make money from a bunch of things like their payroll software and their payments platform, and in-app advertising (which I think has now been removed).

Disclaimer 6: It’s possible that I may be incorrect with some facts about the Wave or Xero platforms. Please let me know if you spot something that’s not right and I’ll correct it.

Update Jun 2019: Wave was acquired by H&R Block for $398 million USD.

Quick, grab a coffee!

1. Xero’s user interface is better

Actually, Xero’s entire user experience is better.

This is the first point in my list because a great user experience always wins in my book. Who cares how great an app is behind the scenes if that power can’t be utilized effectively by the people using it?

Of course there are many important things that make a great app, but user experience is the most important. It’s the link between your user’s brain and your web server.

Here’s (a previous version of) Wave:

Wave’s UI as I remember it. It’s been improved slightly since, but this is the basic idea.

And again, here’s Xero:

Now you may be thinking, “Ah they both look nice. Actually, I think I prefer Wave’s interface.

And it’s probably Wave’s user interface that grabs most people’s initial interest as it did mine when we first started. It looks “fun” and at first glance it looks easy to use.

But being pretty is just one of the many elements that makes up a great user experience.

After using both Wave and Xero pretty extensively I’ve discovered many individual reasons (which aren’t apparent in screenshots) why I prefer Xero’s user experience over Wave’s, and I think it’s just that Xero’s user experience is so much more refined. Xero scores 10,000 more points for attention to detail in my book.

2. Wave is too damn slow

Man, Wave Accounting needs to seriously invest in some better hardware or rewrite their app or something because damn it’s slow.

This was the biggest thing that irritated me about Wave on a daily basis. Simply verifying something on a customer invoice was a chore.

Hey can you quickly check…” NOPE. There’s no “quickly checking” anything in Wave. The lag on page loads is very noticeable.

Round and round we go, when we’ll stop, nobody knows.

I just logged in to Wave and took the screenshot above. That Income & Expenses bar chart took about 10 seconds to display.

While planning this post I did click around in Wave a bit and noticed the speed had increased since we had last used it 6 months ago, but the performance is still crap compared to Xero and virtually every other web app I use daily.

In fact, here’s tangible results from a page speed test I just did with Firebug’s Net panel:

Wave Accounting Dashboard Load Time
Xero Dashboard Load Time

And Xero’s dashboard has way more stuff on it!

Wave’s dashboard has a single bar chart, a single pie chart, and three small tables of data. I have no idea why it takes so long to load such a tiny amount of info.

So in comparison, Xero’s dashboard shows more stuff and loads 6 times faster.

It’s not just the dashboard. Every single page in Wave takes long to load, and Xero’s app is faster in every way.

Wave, don’t show me a full page loader.

The tests above were done from my dedicated 100Mbps home fibre line (with no shaping) so it’s not the connection speed.

So this was a big win for us. I breathed a sigh of happiness when logging in to Xero the first time, clicking around and noticing how quick the page loads were compared to what we had been using.

I’m sorry Wave Accounting :( If I’m missing something, please let me know.

3. Wave doesn’t have an audit history

I’m no accountant, but it seems strange to me that Wave doesn’t show an audit history of some sort, especially since you can have multiple people working in your account.

How do you check who removed and corrected the payment on that invoice? How do you see who sent that quote to the client? Who deleted the line item on that bill? I’m not sure.

You could perhaps follow the transaction trail and pull some reports to try to piece together what happened, but I want to see a detailed audit log of who changed what, per transaction. I needed this so many times.

With Xero you can see every single action and every event that occurred on an invoice, quote, bill, PO, transfer or any other transaction in the system, as one might expect from an accounting system.

The audit history for one of our invoices

This one makes no sense to me.

Wave Accounting: there must be a transaction log in the back-end right? So why not just show that as an audit trail in the app?

4. In Wave you can’t accept credit card payments via PayPal

Ok, this one has a backstory.

Vinewave is headquartered in sunny South Africa, where lion and buffalo roam free and we work under a tree in the open savanna (we have good wifi).

Before 2010, if you wanted to accept online payments via credit card in South Africa your only option was an expensive and time-consuming bank merchant account linking to your custom-coded, military-grade, SSL certificated, PCI complianced website.

But then First National Bank (South Africa) announced PayPal integration and changed the payments space in our country overnight.

So we signed up and used PayPal Merchant Services to charge corporate credit cards around the world, integrating PayPal’s instant payment notifications service with our customer portal to automatically generate and register and email software licenses upon purchase.

It worked amazingly well.

But for all our automated sales processes and super-simple product installation and licensing that our customers loved, it was such a drawn-out routine to process payments.

We would have to send the invoice to our customer from Wave Accounting and then login to PayPal separately to send them a payment request manually, and then also notify them about it via our customer support portal (in response to their original email). So our customer would get 3 emails, each with a different note and instructions (we could have probably streamlined this…)

Then it happened

In September 2012, Wave announced PayPal integration.

Introducing the new PayPal direct connect was the title of the post.

This is what we’ve been waiting for!” I told everyone who would listen. I was excited by how great it would be for customers to simply click a Pay Now button on their invoices, enter their credit card details, and have everything just magically come together in a beautiful crescendo of accounting sorcery.

Wave could already do that with their Payments by Wave service but that used Stripe behind the scenes, and Stripe wasn’t (and still isn’t) available in South Africa.

SIDE NOTE: Wave has since discontinued their Stripe services in the U.S. in favor of their own Payments by Wave service. Payments by Wave is also not available in South Africa.

“You told us you love PayPal, and now we love PayPal too!” the announcement read. I was salivating.

“Just head over to Your Account in Wave and select the option to Connect your Paypal account. Do you get paid in multiple currencies? Not to worry, Wave will handle that too!”

I was excited so I logged in to Wave and waited for it to load. I followed the instructions in the blog post to connect our PayPal account and then sent a test invoice to myself. Strangely though, I didn’t see a Pay Now button or any other link that would allow me to pay via PayPal.

I went back to the blog post and realized I had forgotten to read the last sentence. It stated: “We can pull transactions in any currency from Paypal in to your Wave account, easy peasy.”


So Wave’s big PayPal announcement was that it could import bank statements from PayPal. A nice addition but not what I was looking for, which was a way to be paid directly from the invoice.

To date, you still can’t accept payments via PayPal with Wave. But you can with Xero and it does it nicely.

WAVE  TIP: One way to achieve this is to create a PayPal button, then get its direct link and paste that into the notes field on your invoice in Wave. We never tried this because we used the PayPal API and not the button, but follow the instructions in this video if you want to give it a try.

In Xero, not only can you accept credit card payments via PayPal directly from your invoices, but the payment gets automatically created in Xero ready for you to reconcile when the transaction shows up in your bank feed.

5. You can’t add internal notes in Wave

The best you’re gonna get to adding your own internal memos in Wave is by using the notes field on quotes and invoices.

This of course means your customer is going to see your note, so there’s effectively no way in Wave to add internal commentary to any of your transactions.

So many times I needed to add a quick memo to a quote or invoice or bill and it bothered me that such a simple thing was overlooked (Wave, please point me in the right direction if I’ve been missing it).

This is all we get in Wave. A spot to enter notes for your customer.

Xero gives us this functionality.

This even extends to customer records in Wave, which strangely don’t have a notes field in them either.

You can add all the usual contact details to a customer record plus extra fields like account number, “toll free” number, fax number, shipping address complete with delivery instructions… but no notes field.

Am I the only one who thinks this is crazy? It’s as if this was purposefully left off during design decisions.

Defer to your CRM system for customer notes? In theory yes, but in reality the Finance department sometimes just needs to make an internal note on a transaction right there in the accounting system.

We often wanted to mark if a customer was a Premium Support customer, or if they were a Vinewave reseller and who their client was, or if they were entitled to a special discount for all future invoices as in the case of non-profits. How do you do this in Wave without hijacking one of the other customer fields?

Of course, you can add notes to customer records (contacts) in Xero.

6. In Wave, converting a quote/estimate to an invoice doesn’t link the two together

In  Wave there’s no real “link” created between the original quote or estimate that was used to create an invoice, and the invoice itself. You can navigate to the original estimate directly from the invoice…

…but all the estimates just sit in the “Estimates” list in the system, and regardless of whether they were converted to invoices or not their statuses eventually all just become “expired.”

There’s no indication in this list as to which estimates were converted to invoices and which weren’t, nor is there any indicator displayed on the estimate itself that it has been converted to an invoice.

This means you can’t see “won or lost” estimates, which may be important to you if you’re sending a lot of them.

7. In Wave it’s possible to create two invoices from a single quote

Not only can’t you see if any particular quote/estimate was accepted by your customer, in Wave it’s possible to click the ‘Convert to Invoice’ button again.

Now perhaps I’m missing something, or maybe there’s a use case for this that I’m unaware of, but I can’t imagine why anyone would or should generate two separate invoices from a single quote.

Surely if an invoice has been created from a quote, that quote should be “locked” going forward?

In Xero there’s an option “Unmark as Invoiced” that shows up in the Options menu of a quote once it’s been converted to an invoice. And you can’t edit it. This seems more correct.

8. Wave has 12 reports. Xero has 52.

Here’s Wave’s list of reports:


And here’s Xero’s list of reports:


Granted, there’s a lot we don’t use here, but it’s nice to know they’re there if we need them.

Plus a nice little feature in Xero is that you can ‘star’ ⭐ reports and they’ll show up in the Reports menu in your main navigation:


9. Wave’s dialog buttons are ugly

The button styling in Wave’s dialogs give me the heebie jeebies.

Wave’s dialog buttons

Why? Because there’s so many styles happening in this little space on the screen. Five colors (excluding the gradient): white text, green button, black glyph/icon, gray text, and blue link.

Why is ‘cancel’ a link and not a button? Why is ‘or’ italicized? Why is ‘cancel’ all lowercase when ‘Convert’ is not? Why is the tick icon black and not white?

And why is the text-shadow on the ‘Convert’ text opposite to the button’s shadow?

Yes these things bother me.

Xero does it much better

A small gripe with both Wave and Xero is that you can’t “click away” the dialogs in either of them (that is, clicking outside the bounds of the popup dialog performs a cancel operation and closes the dialog).

10. Wave doesn’t have an API

Ok they do have an API, but it’s not open to third-parties.

We like to automate things here at Vinewave, and we wanted to use their API for all sorts of things to streamline our processes.

11. Wave can’t do credit notes

I won’t go into this one in detail, but yeah, there’s no way to do credit notes in Wave. It thankfully didn’t happen too often but when it did it was a headache.

To solve this we’d have to create a new invoice with negative amounts, and then offset everything via a series of transactions which just ended up making everything look messy.

In Xero there’s a credit note function:


I love how they thought of making the background light red to indicate that it’s a credit note, just so you know you’re on a “dangerous” screen 😉.

12. You can’t customize invoices in Wave

In Wave you get three invoice templates to choose from. That’s not such a big deal because they look decent:

Wave’s invoice templates

But if you want to do some fancy stuff like add special formatting to the header or footer or add a picture of a snowman, you can’t.

In Xero you can modify the DOCX invoice template.

Personally I prefer Xero’s out the box template layout anyway, and it’s another reason I’m happy with the move to Xero.

Although to be honest there’s probably only a 10 to 20 percent difference between the two in terms of aesthetic appeal, and most of that has to do with typography, line spacing, horizontal separators, font consistency, and general use of whitespace that I think Xero did a better job at with their default invoice template.

Here’s Xero’s out the box online invoice:

Xero’s online invoice

13. The estimates screen is different to the invoices screen

As you know, estimates (quotes) and invoices are very similar in the way they’re created and managed. The fields are the same and it’s really only the business process and legalities around them that differ.

So it would make sense that when building an accounting system one would re-use the invoicing user interface for the quotes user interface as far as possible.

Not because it’s theoretically quicker and easier to build and theoretically simpler to maintain from a development perspective. But simply because it’s better for the users of the application. It’s more consistent.

It’s a simple concept: if for argument sake we state that quotes and invoices are “90% similar in functionality” then it makes sense that 90% of the user interface might be the same.

This is almost always the case, inferred from the simple reasoning that if Feature A and Feature B are 100% functionally identical, then their user interfaces should be 100% identical if you were striving for consistency.

This doesn’t seem to be the case with Wave Accounting.

Here’s Wave’s invoice management screen (I just signed in to our old inactive account to get this):

Average time to get paid: 5 days woohoo! (I should blog about that…)

But their estimates screen is a bit more, well, basic.

Clearly Wave’s invoices screen had a recent makeover but the quotes screen was left outside in the cold with no food and no dignity.

It’s almost as if Wave doesn’t think that estimates get used much. Maybe they don’t?

But then you wouldn’t be putting it at the very top of your navigation menu.

SIDE NOTE: Back when we were still using Wave you had to first navigate to the Invoices screen before you could get to your quotes/estimates, which was annoyingly tucked away behind a tab.

According to what appears to be up to date statistics displayed on their website (Feb 2017), 64,229 invoices get sent via Wave every day.

So I imagine quite a few thousand estimates get created every day too.

I know this is probably on Wave’s todo list, but I feel it was unfair of them to treat Estimate as the younger brother who had to settle for Invoice’s hand-me-downs. Estimate feels left out, teased on the playground for his sodden shoes and rumpled t-shirt.

14. THIS screen…

Wave’s Transactions screen gives me the willies.

What bothers me about this screen is not that it has so many functions. It’s how these functions have been presented to the user: packed together like an army of RGB sardines.

In fact, this was the first thing that popped into my head when I first saw the Transactions page:

Transaction Sardines

There’s so much going on in that little space at the top of the page. You can connect your bank account (shouldn’t this be in the app’s ‘Settings’ instead?) and upload bank statements and add income and expenses and categorize and transfer and merge and delete and verify (some scary functions right there for a system that allows multiple guest collaborators but has no audit trail).

15. Multi-currency in Xero is just better

If you’re using the multi-currency option, Xero does an automatic currency conversion (with rates from XE.com, updated every hour) and displays it wherever a currency exchange figure is relevant.

Wave also does multi-currency but the conversion rate and result never seemed to be displayed where we needed it. When viewing an existing invoice for example we could see the invoiced USD/EUR/AUD amount but had to flip to edit mode to see the ZAR (South African rand) conversion rate that was being used, and the calculated result.

We never had a problem with the calculations they were doing behind the scenes… the multi-currency reporting worked fine in both systems. It was just the user-facing aspect that made working with multiple currencies in Wave difficult. In Xero it was a breeze.

Let me break it down. I’ll start with Wave Accounting.

Here’s all the places you can see your transactional currency info in Wave:

1. When you add or edit an invoice or quote or bill etc.

2. When you view a payment that was made on an invoice

And that’s about it. As mentioned above it does calculate your forex gains and losses correctly (including unrealized gains and losses of course) in the reporting, but not much is displayed to the user in the app itself.

Here’s where you can see currency info in Xero:

1. When you add or edit an invoice or quote or bill etc.

2. When you hover over the little USD symbol on the total of an invoice, quote, bill, PO etc.

Almost anywhere you see a currency acronym/symbol you can hover over it to see detailed currency info.

3. At the bottom of an invoice, quote etc.

Showing your currency gain/loss directly on the invoice is also a nice touch.

4. At the top of the payment transaction page, if it was a multi-currency transaction

5. On the invoices listing (and quotes, bills etc.)

6. On the recent transactions list of an inventory item

7. In the foreign currency conversions summary in the “Invoices Awaiting Payment” list

8. At the bottom of the invoice preview screen

9. When overriding exchange rates

And tons of other places…

On the dashboard charts, in your account balances, and in many other places that I won’t show because it’d take all day to screenshot them all.

But you get the point. In Xero, anywhere you’d expect a currency conversion figure to be, it’s there.

16. Xero’s quick-add menu

Xero has this nifty quick-add menu (or whatever it’s called) that allows you to add transactions no matter where you are in the system. It’s displayed in the main header bar that’s present on every page.

We use this thing all the time.

In Wave there’s no such feature. There you have to first navigate to the invoice listing page in order to click a button that then loads the invoice capture page.

This is how one creates an invoice in Xero:

Login > Click the ‘+’ > Choose Invoice

This is how one creates an invoice in Wave:

Login > Expand Sales on the left > Click Invoices > (Wait for Invoices page to load…) > Click Create an Invoice

Wave Accounting: why not simply add a quick-add menu on your dashboard? Your dashboard shows immediately after login, and immediately after login is when your user probably wants to perform an action such as creating an estimate or invoice or bill.

There’s tons of room here on the dashboard — or better yet in the left hand menu — to display a small toolbar with some “create” buttons. I can’t believe it still hasn’t been added in all these years.

Wave dashboard

Update 15 Feb 2017:

Just a few hours after this post went live, an Engineering Manager at Wave Accounting tweeted me that they had just released this feature the day before.

My screenshot above was taken that same day (13 Feb 2017) so I must have missed this update by just a few hours.

Here’s what Wave’s new quick-add menu looks like:

17. Xero enforces proper controls on editing of invoices

If you try to edit an invoice in Xero that already had a payment applied, it shows you a warning and only allows you to edit certain fields.

If a payment has already been applied to an invoice in Xero you can only change the description of your line items, the account they’re coded to, and the due date and reference number for the invoice.

Xero won’t let you add new line items or change their prices or quantities. This makes sense from a legal/compliance/regulatory perspective — and many other words that auditors and lawyers might use to mean, “Don’t fiddle with your old records!

With Wave Accounting however, it’s a free for all.

In Wave you can edit invoices at will, regardless of their state. There’s no controls in place to prevent you from editing an invoice that’s already been fully paid, and you can add new line items and change existing ones.

I’ve just tested this with an old invoice in our defunct Wave account — I added a new line item to it and hit save. It simply refreshed, without any warnings, and was now sitting in an overdue and ‘not fully paid’ state.

And the fact that there’s no audit history in Wave means that these changes are not tracked.

You’ll never know who modified an invoice (or if it was modified at all), and you’ll have to deduce which line item was added (because line items can be re-ordered you can’t assume it’s the one at the bottom).

And if someone deleted a line item and re-saved the invoice? You’ll never know what was deleted without piecing this together from your customer’s original order.

18. Xero offers better filtering on the invoice listing page

On Xero’s main invoice listing page you can filter by invoice status. This gives you a quick way to see the state of your “invoice workflow.”

The same applies for bills, quotes, purchase orders etc.

It’s a bit more basic in Wave…

19. In Xero you can drill-down on almost anything

In Xero there’s contextually relevant links everywhere.

From an invoice you can click through to a payment, and from that payment you can click through to the bank reconciliation line for that payment, and from there you can click through to the original statement… and so on.

Everything in Xero is like this. The reports let you click on any number in any month column or on any contact name, or date, or account.

Xero has done a great job to ensure that anywhere you see a piece of useful info you can click through to its underlying transactions or journal entries or source data, which makes it really useful when trying to figure out what happened with something.

Contextually relevant information is a really important facet of the intelligent workplace, and is something we push heavily in our workplace platforms here at Vinewave.

Wave Accounting is a little bit more “selective” in this regard. There are links on quite a few things in Wave but it’s not as comprehensive as Xero.

For example, I can’t click through to a payment on a Wave invoice without first editing the payment. And I can click through to an estimate from a Wave invoice, but I can’t do the reverse.

It’s small things like this that make a huge difference.

20. When editing a customer in Wave, clicking the Billing tab pops up my browser’s location

Perhaps this is my browser’s fault, but every time I click the Billing tab on a customer record in Wave, my browser asks me to share my location.

This is a customer record. It needs the customer’s location, not mine. And I'm sure it doesn't need to use location services to do it.

21. Push notifications

We never saw many push notifications from the Wave mobile app.

Now this could have been because a) our bank feeds weren’t working for some reason, and b) because of the lack of a ‘Pay Now’ button. These are probably two of the main reasons why one might receive push notifications from an accounting app, hence the reason we never really experienced this feature.

So perhaps there’s nothing wrong with their notifications, but this post is about my experience so I’m including this here. Your mileage may vary.