I spent a lot of my career up to April 2023 working in e-commerce, but I was always focused on specific goals, and specific customers. Mainly Online4baby, but also David Village Lighting, and a couple of others. I worked for these guys for so long and they had such unique needs that they ended up with their own bespoke systems.

I’ve often wondered what the off the shelf systems can do, and look like. It’s felt like a bit of a hole in my knowledge. So here goes! Let’s get started on what my rudimentary googling tells me is the most popular e-commerce software, WooCommerce.

Before I get started, what things should matter here? What do I care about? Off the top of my head:

  1. How quick to get set up
  2. How easy is it to add/import products?
  3. What finance options are there?
  4. How does fulfilment work?
  5. Is the search any good?
  6. How are emails dealt with?
  7. Can it do pre-orders?
  8. Are there kits/bundles?
  9. Multi currencies?
  10. Image options
  11. Video options
  12. Reviews
  13. Mobile friendliness
  14. SEO options
  15. Deploying changes
  16. Backup / Restore
  17. Returns / Refunds
  18. Customer service queries
  19. Product filters

I’m guessing that the things that occur to me are probably the most important.

1. How quick to get set up.

Right, lets go, it’s currently (13:25:21) I’m going to dive in. I’m following the website wizard. Well, that’s taking me to a “Woo Express” store. I’ve got a wordpress.com account and a “new store” is now being created for me.

I was expecting to have to install something locally, but no, it looks like I can just do a hosted thing. I guess that will limit what plugins I can install.

I have a new test site, and despite telling it I’m building a UK site the site seems to be set to USD.

So - how quick to set up? Getting started with something is really quick. But as we’ll see shortly, what you get out of the box is only really suitable for a small ecommerce site, perhaps a business starting out.

2. How easy is it to add/import products.

I’m on an “Add Product” page and I see the following features:

  1. Product Name
  2. Product Description
  3. Short Product Description
  4. Product Image
  5. Product Gallery
  6. Category structure.
  7. Product Tags
  8. Pricing - Normal and a Sale Price with a start and end date.
  9. Brands
  10. SKU
  11. Stock management checkbox
  12. Stock status (In/Out/Backorder)
  13. Stock notifications
  14. Limit 1 per order
  15. Shipping weight and dimensions and “Class”
  16. Linked products - Upsells, Cross sells, Bundle-sells, “Bundle-sells Title”, “Bundle Sells Discount”.
  17. Attributes (Size/ Color)
  18. Purchase note
  19. Menu Order. - This is a bit opaque.
  20. Add Ons - some kind of custom field thing.
  21. Order importing / exporting

That’s pretty good I would say. Things I’ve seen in other systems include

  • Warranty Period
  • Manufacturer Part Number
  • Detailed stock history (i.e 10 units bought at £8, and 7 units bought at £9) This is helpful with pricing correctly.
  • Google Categories. They have their own taxonomy you want to fit in with.
  • Superseding products - to move Google page rank to the new version of a product.
  • Void information around spaces in boxes that allow other products to be placed inside.
  • Courier restrictions. - Sometimes a product is routinely lost or broken by a specific courier and it’s easier to just send this one product via other means.

Importing products is probably as easy as it can be for a non technical user. The method is via a CSV file. The way to think of a CSV file is as a simplified spreadsheet. So imagine a spreadsheet for importing products, one column for the product name, one for the sku, so far so good. What to do about variants though, or sizes? When you’ve got stock of the small blue one but not the large red one? How do we make sure the image of the small blue one is correct, and not the large red one when we want them all on the same page? There are ways of doing it, and what you find is that the format is then overlaid with new rules that are not really part of the CSV format, but are bespoke to the application you are using. And that’s the case here.

I think the easier approach is to add some products manually, and do an export of all the products, then using that CSV as the basis of a new one. It’s not the ideal approach, that would be to use a proper schema.

Back when XML was all the rage, it would have been XML as the file format used here, and that XML file would have come with an XML Schema, called a DTD. You could take a XML file, say “use this DTD” and then a standard program would tell you if the file format met the DTD. It was fiddly work, but a lot of programming is.

It’s worth having a look at the instructions here

As ever there is no schema to show valid data, there is an effort at one, but it’s incomplete. For example, entering a date we are told “Dates should be defined for the store’s local timezone.” So what might you think is the correct date format in the CSV for a site setup in the USA? Or the UK? Or the EU? I’m sure you didn’t guess ‘YYYY-MM-DD HH:MM:SS’ which is the actual answer to the “date” format when you look at an exported CSV file.

There is a document about the import file format, and that shows a different format to the export: https://github.com/woocommerce/woocommerce/wiki/Product-CSV-Import-Schema#csv-columns-and-formatting

So either the export format is different to the import format, or the documentation is wrong, and the field is flexible. If it is flexible it could be that’s because the underlying database is flexible.

This is lazy and can make importing and exporting error prone. So a big negative to woocommerce from my point of view, and so easily fixed too.

There are other issues with their schema.

It’s not clear if “weight” has to be an integer, the note for that field is “Parse only numbers”, which my son would argue means it should cope with complex numbers. The examples only show whole integers, which, for some couriers could be a problem, as some courier services will have weight limits that are not a whole number of kilos.

On the positive side, images can be uploaded. You just put a public URL in the CSV, and the import process will go and fetch the image. But there’s no method to export or import the Alt tags set on the image. So there’s a potential for important SEO data-loss there.

Each product can have a Parent set, defined as an ID or as a SKU. What is the likelyhood that you have to ensure that parents are loaded in the CSV before their children? The note on the schema says nothing about this. I can’t help but think that the clever thing of working through the CSV, checking all the references work after all the changes are made, but before making any changes would be too hard for someone to bother with. I think the order would matter.

I wonder if the same is true of Cross Sells. Could it be that you can’t define the cross sells until the whole catalog is uploaded? Might you need to do a 2 stage process?

I bet if you have simple products with simple relations, Importing products is an easy affair, but if things get complicated you’re going to need to have someone who understands how the system is going to deal with it.

3. What finance options are there.

Woo Payments boasts support for Klarna, and Paypal, which both offer finance. Clearpay is also there.

I’ve had some differing experiences with Finance over the years. One of the interesting things is when you can and can’t use it. If you have the stock in on the whole order then you’re on the easy path and all is well. They are interchangeable.

As soon as you’ve got a question mark over when stock is actually available you need to separately manage the finance steps. I could do a whole blog post about this. Also how the Finance companies want to manage (need to?) the messaging on various parts of the site, and how they don’t care about SEO.

I’ve not checked, but I doubt there will be any integration with stock release for the sake of claiming the funds from the finance companies. It’s probably a case of the easy path, or nothing.

4. How does fulfilment work?

In multiple ways. The basic thing has a label form so you can produce labels easily, but probably the more interesting things is how to ingtegrate into a 3pl. I worked with the guys at Whistl who were good. I see they have a woocommerce integration set up for that.

One of the issues I faced at Online4baby was doing interesting things will packing and postage. If you’re selling lots of similar sized things then an optimal strategy is usually simple, but when you’re selling items of wildly different dimensions and weights, then sometimes it’s worth putting more effort into the picking and packing and save money on the delivery charges. The couriers don’t know or care what’s in the box.

This can all be done after the order is placed, but, if those decisions make a change to what the customer is charged in the first place then we have a complex dependency. It makes returns processes difficult also.

Especially now more retailers are charging for returns, which is something I’ve dealt with before.

I know that Whistl, as of a few months ago, were not able to tell you what the postage was going to be for an order unless it was a simple calculation in the first place.

The built in shipping costs with WooCommerce are much simpler than I’ve seen that are required. The general UK courier has a “UK Mainland rate” and then charges extras for the highlands and islands. Yodel’s is particularly complex in terms of delivery dates, but it is super clear. The Scilly Islands only get deliveries 2 days a week.

Now, many companies would ignore that, but if you’re chasing the highest Trustpilot scores, then making your checkout show the correct delivery times and the correct costs is a must.

In conclusion here, Woocommerce is probably doing a basic job quite well. But there’s no £10 per parcel rules, someone manually has to figure out the postage for each item. And then the checkout will add it all up.

I’m sure there will be some plugins about this. Being clever with postage can make a big difference.

5. Is the search any good.

I can’t find it. So no. I’ve seen references to it. I think it’s tied to themes that you have to pay an extra subscription for. I would expect PostgreSQL’s advances in text search to change this in the next couple of years.

6. How are emails dealt with?

Woocommerce has email templates, and it has the concept of “Workflows” which will trigger emails to be sent in different circumstances. It looks like a good system, flexible and powerful. And it comes with presets. It’s called AutomateWoo.

7. Can it do pre-orders?

Yep, it’s called backorders. But it doesn’t seem to have management. There’s nothing in AutomateWoo to cover the change of products coming into stock. One of the important jobs at Online4baby was being able to manage a large amount of back orders, updating customers as the delivery dates change.

8. Are there kits/bundles?

Yep. Each one needs it’s own SKU and to be compiled from a mix of SKUs. It’s a bit of a straight jacket. In fact it looks a bit broken. It seems that if you have a bundle and then change the bundle then you change existing orders to show that they have that bundle.

This is a serious bug really. An order should show what was actually ordered.

9. Multi currencies?

No. Maybe with a plugin?

10. Image options

Yep, images can be uploaded. New formats are supported like .webp

11. Video options

Yep

12. Reviews

Plugins required. Trustpilot has a plugin for it.

13. Mobile friendliness.

Yep, all covered.

14. SEO options.

Yep, also all covered. You’ve got the ability to alter the URLs and the templates.

15. Deploying changes

Because it’s not code, and because it’s a single installation, actually one big missing thing is having the ability to take a version of the site, work on it, test it, check it out, and then get it live in a reproducible way.

You just make changes as you go along. I don’t think I could cope with that with a SaaS style system. I guess it would work for a small website with only a few orders a day, but if you had a large revenue going through the site then it’s valuable to be able to make changes on a test version and then push them live.

16. Backup / Restore

There is back up and restore, in that there is an export/import function. It produces a big XML file. My concern would be about how very large amounts of data would work. My guess is that it wouldn’t. It’s probably orders that would be the stumbling block.

I’ve dealt with moving sites where the number of orders and products is high, and this XML style backup and restore has multiple issues:

  1. It’s slow. Putting all the data into XML files takes time.
  2. It’s memory bound. It’s almost certainly using libxml2, which is the standard XML process on PHP, and the recommended way of doing things, but everything has to be loaded into memory into a data structure and then saved out. XML is a poor format for large amounts of data.
  3. It’s fragile. Partly because it’s memory bound, and that can change between machines and configurations, and partly because you can have a network issue and not get the whole file without knowing until you try to restore from it. I’ve also seen different versions of software complaining about the backups from other versions.
  4. According to the export page “This format … is called WordPress eXtended RSS or WXR”. That “eXtended” bit makes me think about Plugins. The list of things backed up is listed as :
 Posts
 Pages
 Products
 Variations
 Orders
 Refunds
 Coupons
 Workflows
 Engines
 Form Responses
 Posts
 Plan
 Order
 Product
 Posts
 Media

Plugins are not mentioned here, and if they have their own data how would that work?

If, for example I had a plugin that made the site multi-currency, allowing the buyer to choose which currency the product was bought in.

Sometimes manufacturers RRPs are set per currency and the current exchange rates mean you want to be careful about which RRP you use, and the orders need to have a record of what was actually chosen and why that figure was selected. So this is “Orders” information. Would that appear in an export here? If so, how does the restore know to install the plugin first? If not, would we lose that data?

Here be dragons.

17. Returns / Refunds.

There are refunds but not returns. My distinction here is that a return is a process where a return is expected and then received, and then checked, and then a decision about a refund is made. Perhaps some record of what the refund should be.

The correct refund amount is complicated by

  1. Return cost policies
  2. Vouchers
  3. Bundles
  4. Changing Sales taxes.
  5. Discounts
  6. Who bares responsibility, courier, retailer, manufacturer or customer.

18. Customer service queries

Nothing here. A little note system on an order with some image uplaods would be good.

19. Product filters

No, I guess that’s a plugin too.

Overall conclusion

My aim was to find out what the off the shelf systems can do, in this case Woocommerce, and I think I’ve done that, except for all the plugins.

I’m not sure how much I like the plugin architecture. I guess it could become a mess to manage. It’s certainly hard to find the right plugin. I’ve been looking for customer service plugins

This one seems to be favoured for tickets, but it hasn’t got a whole bunch of features I would expect it to need to cope with even a modest amount of queries. (Escalation, Hold dates, SLAs)