Shopify is an iPhone
Shopify is an iPhone, and Magento is Android.
Shopify is a Mac, WooCommerce is a PC.
You get the idea.
One of the most powerful aspects of working with Apple products is the "walled garden". The idea is that you sacrifice some horizontal freedom for vertical integration. Yes, it is a pain in the ass – and nearly impossible for some – to add RAM to a MacBook or replace an iPhone battery, but the experience of the (mostly) seamless integration between these devices is worth the price of admission for most users.
On the other hand, PCs are extremely powerful in their modularity and flexibility. You can basically make anything you want, but eventually you will be on your own if something goes wrong.
Shopify, like the Apple ecosystem, offers tight integration and ease of use through enforced constraints. Most other e-commerce solutions, like WooCommerce, still have certain constraints, but generally offer a more DIY and customizable solution.
To be clear, both have their place. Some clients really need a self-hosted solution and complete control. Others are much better served with a cloud-hosted, modern UI like Shopify.
I think Shopify has leaned into that, as well they should.
What this means for the Agency-Client relationship
A huge majority of my time as a Shopify Tech Lead is spent working with clients on defining the scope and approach to achieving some business goal.
Some people might call this "solutioning" or "architecting".
Whatever you call it, a huge part of my role in that process is knowing what Shopify can – and maybe more importantly can't – do.
"Can we apply a discount code in the cart instead of checkout?"
And then I have to say something like "not really... but it's sorta possible"?
At that moment, there is a tension between what that the Shopify platform "wants" you to do and what the client wants you to do.
Yes, technically we can create a feature that allows for a discount code input on the cart, and then updates the subtotal by pinging the checkout, but it relies on some hacky code and potentially generates some "start checkout" events in analytics, et cetera. It's not the happy path.
You are brushing up against the walls of the walled garden, and in this type of ecosystem, you are better off going with the grain than going against it.
What this boils down to for me is making decisions and introducing features that do not disrupt the ecosystem even if that means telling the client "no".
Obviously, it is their money at the end of the day and we work at their pleasure so I will not refuse. But as Shopify Teach Leads, I do think it is our responsibility to say "no" assertively and clearly when it comes to protecting the interoperability of the store with regards to the wider ecosystem – not for our benefit or peace of mind, but for the longterm health of the project.