The State of Play of E-Commerce

Traditionally I am a full-stack developer, focussing on PHP. I work at a development agency, and lots of our clients have e-commerce websites. In fact, much of the Internet is based around e-commerce. That’s why I find it so difficult to understand the current state of play of the e-commerce offering.

PHP is the most popular programming language on the web. Lots of people have beef with PHP, but its popularity is a fact. As such, lets look at the PHP-based e-commerce solutions available.


Magento is the most popular e-commerce platform on the web. Many e-commerce sites I build are in Magento.

Magento has a few flaws that I would consider pretty major when choosing an e-commerce platform.

  1. It’s slow. This is down to its fundamentally flawed database structure (built on EAV) and architecture (hundreds of XML files). Many major hosting providers won’t even touch a Magento website unless it is sat on a box with at least 16GB of RAM.
  2. It’s difficult to use. The clients I deal with often aren’t very technical, and many really struggle using the backend of the system.
  3. It’s time consuming to develop with. Mage, the underlying framework, isn’t particularly bad, but doesn’t extend easily. The observers and events are difficult to manage.
  4. Many of the plugins available are poorly built. It’s not uncommon to install a plugin that kills your website, or litters it with warnings/notices.


OpenCart is fully MVC, but unfortunately no HMVC. It isn’t anywhere near as popular as Magento, nor as feature rich, but it does run on low end systems.

A few points:

  1. There is no real plugin system. OpenCart makes use of a system called VqMod, which effectively runs find & replace on lines of code in the core. There are a number of issues with this that I’m sure don’t need explaining.
  2. It’s MVC, which is fantastic, but there is no hierarchy (HMVC), so managing the code gets messy.
  3. Certain aspects are poorly coded. A good example is that categories have product counts next to them, but this is done on every page with multiple queries. If you have a site with 10,000 products and hundreds of categories then page load times are massive.


PrestaShop is good in theory, but in practice falls down a little.

My thoughts:

  1. It lacks a little polish. It feels clunky
  2. A common complaint are settings – some ignored, some in weird places, some not clear
  3. Working with products is difficult. You can’t change things on mass.
  4. Plugins aren’t always reliable


WooCommerce is actually a plugin for WordPress, and I’m a big fan of both. That said, it isn’t perfect.

  1. Not standalone – this gives the feeling of instability to many, even though it’s relatively well coded
  2. Plagued by the same issues as WordPress. Expect your control panel to be under attack 24/7.
  3. It’s on top of WordPress, which is fantastic, but carries a stigma by some.
  4. WooCommerce was recently purchased by Automattic (not a typo), whose owner founded WordPress itself, and who own many WordPress-related services, including (hosted WP). This isn’t necessarily a bad thing, but it does make its future a little unknown for the time being.

So, from a PHP perspective, they are your options. There are others, but we’ll stick to the most popular for now. So what else is there?

Hosted Solutions

Hosted solutions are a great idea. They allow small businesses and individuals an opportunity to sell online. But, in my opinion, that’s where it should end.

Often, extending hosted solutions is impossible, or extremely difficult. It is totally dependant on the API available, if there even is one. You are also at their mercy; if they were to turn off a feature that you use every day because hardly any one else uses it, then it’s tough luck.

Hosted solutions can also be expensive, with charges creeping up in lots of places. Some charge per product, some a monthly fee, some a transaction fee. Most do a mixture of all 3.

Many people also feel a little put off by trusting their business completely with another business. You don’t own the store, and you can’t move to another provider if they stop providing a good service – you’re just done.

An excellent example of where this has caused a headache is the recent closure of Magento Go, Magento’s hosted solution. Customers of Go were given 12 months to get their sites set up elsewhere before they got turned off and deleted forever. Setting up a Magento site can be expensive, especially if you want it done properly, so this probably led to a few people losing their businesses, especially smaller individuals.

So, what now?

In my opinion there is a huge gap in the market here. A developer-focused, well-built, well-maintained, fully featured e-commerce platform that is pretty, easy to use and fast. We are seeing it more and more in other industries. Stripe recently (as far as payment gateways go) launched, and was completely developer focussed, making it really easy to integrate and get going.

I was recently part of a failed Kickstarter campaign to get something off the ground. Why did it fail? Poor marketing of the campaign. It did drum up some very positive feedback from some big names in the industry, and there were many agreeing that this needs to be done.

What did we have in mind?

  • Composer-based, making it a doddle to install packages and manage dependencies.
  • Event-based API. Just plug into the method ‘added-to-cart’ to do something when a cart item is added. Server-side and client-side.
  • A plugin store that was heavily moderated. We wanted developers and store owners to feel 100% confident that if they buy and install something from this plugin store that there are absolutely zero issues with it.
  • A decent CMS built in. With the exception of WooCommerce, all of the solutions above have either no CMS or a very, very basic one. You should be able to create entities and then get a CRUD for those entities.

Someone with enough time and influence really needs to jump on this and build something solid, extendible, fast, secure, solid and easy to use. The sooner the better.