It's very frustrating that they can release a POS system, however fail at, for example, complex sales reports.
I wish they'd get it together because they would blow everyone out the water.
It's very frustrating that they can release a POS system, however fail at, for example, complex sales reports.
I wish they'd get it together because they would blow everyone out the water.
hit me up here, on twitter (@orenmazor), or email: oren.mazor@shopify.com
Kimball's The Data Warehouse Toolkit is the definitive tutorial on the subject.
We found that the strategy works really well on paper but there are significant scaling issues on the querying side when you throw massive amounts of data at it. A simple sales report over cities for one of our larger shops under moderate load would could take 5-10 seconds to generate, which is pretty unacceptable. Caching would only take us so far because of how much data gets ETL'd every moment.
I definitely don't discount the dimensionally modelled strategy, but to make it proper fast, and not 1990's let-me-hit-report-and-go-get-a-coffee fast, you might need to write your own OLAP stack that's optimized for what you need[0]. I'd also do it in go or c.
Once we ship, we'll do a technical post on what worked and what didn't.
[0]I'd love to be proven wrong on this, so if you can generate fast reports with massive amounts of data ETL'd in real time, I'd love to hear from you. oren.mazor@shopify.com
You're actually at the coalface and I'm the bookworm, so I am totally prepared to be schooled on this one.
We did partition all of our dimension and facts tables, which helped a great deal. Aggregates were a problem that is specific to us, so we couldn't cheat the usual way that reporting servers do.
The other problem is that our stack is suddenly fully of things like java and olap and postgresql, which made onboarding people who wanted to help, and just debugging, a pain.
I like that comment about the coalface/bookworm, but sometimes it takes somebody on the outside to see what I'm missing.
You can do very well at much, much lower cost in the Python world: pandas, PyTables, or even just straight numpy.
Seriously, using any of these would make the report generation time basically zero, and you'd just have to make your ETL work quickly enough to feed it; how well this can be solved depends on how you store the original data ("pre-facts").
The book written by this guy http://blog.wesmckinney.com/ (and the guy himself, if you can get him) will probably advance you way more than experiments.
Ouch. Do you really feel so well acquainted with their internal design that you can use such strong language? It comes across as dogmatic.
Would you have said that if I urged him to get a hammer to hit on nails, rather than a screwdriver? It is about as dogmatic. (you can put nails into a wall with a large enough screwdriver - I've done it myself before when the nail was small enough and i had no hammer - but it's still the wrong toolkit)
We ended up with a golang solution that we use essentially like you would with a column store. It's very fast and extremely thin.
One of our early adopters was a very notable/early Shopify customer who encountered the kind of problems you describe with templates and customization. I am pleased to say they have been successful using Forward and Shopify combined in order to solve these problems, and are planning to migrate completely when the time is right.
Shopify is a great solution for small business without irregular catalog and checkout requirements. I am however surprised that they haven't done more to support businesses that grow beyond this stage.
That makes a whole lot of sense to me, and would be the only acceptable path to take in the eyes of their shareholders.
Also, checkout has a small legal nitpick here in europe, where a check has to be somewhere and in shopify is not. That means plenty of EU stores might be in a grey zone. Same with cookies in the checkout, but that's another story. I guess they will fix it but i guessed that 7 months ago.
I like Shopify in many ways, but after two (small) stores with them i have two main issues:
- EU distant. I feel US market is the main thing for them and EU is left behind using weird solutions for complex tax cases or pricing, few payment gateways, and so on. The checkout issue ilustrates this.
- Pushin new features while not fixing old ones. Shopify 2, Shopify Payments US, and now the POS are the examples. Meanwhile my app has to do crazy stuff to sync my products ids with their native ids.
Said this i will probably keep using it but Prestabox is tempting me for the next project. Any experiences with it?
Also, Shopify guys, the 15 days in advance warning for an api change in mid august was nice!
For example, the devs at my company that have had to use shopify hate it. Their systems are based on hacking javascript for everything. The deployments are very painful too. No way to see what it will look like without previewing it live on the site.
(Example: most products are free shipping but a few large products are not free; there was no control to exempt products from free shipping, nor any control to say products were not eligible for certain shipping methods. Not all merchants can overnight a 50kg box, for example.)
If that's not good enough there's apps like Better Shipping that can set up more complex shipping rules - http://apps.shopify.com/better-shipping
http://services.amazon.com/content/fulfillment-by-amazon.htm
You can opt-in their Prime program and offer free 2-days shipping to your customers.I think there was FBA integration in Shopify but they're dropping it, but an app still let you integrate with FBA.
I think in Shopify you can view how many abandoned carts there are in the orders section, and it's not filterable.
I mean how difficult would be for Shopify devs to add a reports section on stuff like this. Just tabulated data would do, I don't need any animated graphs. It's very frustrating because the data is just out of reach in Shopify.
Edit: I'm not a Magento advocate here, I really really want Shopify to get better quick so I can stop using Magento.
Once you start juggling the vast amount of data that needs to be stored, fetched, calculated and referenced to provide a report, it becomes a lot more than "why dont you just". And thats before scaling the system to the non-fail-whale standard that we run our infrastructure at.
But it is coming very soon. In fact, it's already available to PoS customers.
As I mentioned, feel free to ping me to talk more about this. I would love to have more input.
For an environment like shopify (which I've never used, so speculating), their reports are much more likely optimized database queries or views, or even created from specially stored statistics data not from querying raw db tables, with caching or pre-generation at some point. This means there's a lot of thought behind every report, and what's possible with the current db/stats schema. Adding a column to a report might mean modifying the db schema.
The final issue is that user interface complexity goes up as reporting flexibility goes up. A super powerful interface that few people take the time to use is worth less than a limited interface that provides value to more people. The task is attempting to satisfy power users and more complex needs, while providing a very useful default functionality out of the box.