This is the first post -out of many more- talking about how we have faced the development of our first product.
I say it is the first one because we intend to post more articles of this kind, so as to tell you how we’ve done during this adventure and the problems/solutions we have been able to apply in each moment.
Let’s start with a little story, one of those that hook you, to shape the events.
When we started Mushdesk, we knew, from the beginning, that we wanted to develop applications for the Shopify ecosystem. Not only was it a matter of curiosity, but also a matter of opportunity. The world was giving us the chance to tell something, so we got down to business creating the first application matrix, to be able to filter all those ideas that we kept noting down as “possible apps”.
One of the merchants’ big issues is that they need better tools in order to internationalise themselves. In that sense, Shopify is developing what they call Shopify Markets, which is, basically, the capacity to configure zones (countries) with different prices, different languages, etc. on your own shop, so that you can offer a more personalised experience to your clients, based on their geographical area. They also have an application for offering a model window to merchants, which enables asking the clients which version of the shop (by country) they want to access. Nevertheless, this is not enough to provide merchants with the necessary technology to carry out their internationalization successfully, since the app is not good enough to make the most of Markets and, basically, stays halfway.
It is at this point that we make our way in with ORBE, the geolocation app for Shopify. Why ORBE? Because merchants need the best technology so as to carry out their internationalisation. ORBE is an app which allows you to geolocalise the client in your shop (even if the client accesses the store with a VPN), and to offer them the best experience with a non-intrusive modal window, totally personalisable and compatible with Shopify Markets.
We get going
We already have the idea, the unresolved necessity and the market opportunity. We begin with the development. I have to say that, previously, we had never developed an app for Shopify, but we were inside the ecosystem as developers for third parties on a personalisation level and theme development, mainly. So we started:
- The development started on the first week of February, more concretely, on the 7th of February of 2022.
- The technological stack was simple:
- Backend: PHP with direct integrations to the API REST and API on Shopify’s GraphQL. We did it this way because it was the language that we had more experience with.
- In regards to timing, we worked part-time while we still developed for clients.
First bumps in the road
By the end of February, we had an obstacle in our path:
- We couldn’t keep up with developments for clients and developing our product at the same time. Since we are two people, we had to make the decision to split the work, one of us dedicating his full time to the product, and the other one dedicating it to clients. This way, we wouldn’t die trying to do both things.
- After achieving an attractive Figma and building part of the base code, we found out that Shopify just launched what they call Theme App Extensions. Basically, it is an application system (section-format) for Shopify that you can configure easily, which they take care of afterwards, rendering the front/back of the CRUD of your app. In other words, you can tell it that you want a form with 10 options, and Shopify generates it all automatically, native-like, inside their back office. Obviously, this made us dedicate the last week of the month to studying how we could take advantage of Shopify’s potential, regardless of the fact that we had to throw away part of the project. It may look like a step backwards, but actually, it was such a big step forward.
Let’s make an aside before we go on.
It sounds strange, but we are here to disembowel the whole process and I’m going to explain how curious the functioning of such an -apparently- simple app as ORBE is in Shopify. It was at this moment, approximately in March, when we discovered how to build the application, so we put this together.
ORBE is based on 3 legs:
- App Embed (the back-office)
- Theme App Extension (the modal that can be seen on the front)
- Geolocation API and Webhooks
Theme App Extension
Geolocation API and Webhooks
We need a good, fast geolocation system. We do this with our own API, which we call from the JS of the modal script and it is the one that enables us to obtain the client’s geolocation as well as additional information that we can save in the database through the back-office, and which we have no way of sending to the front end.
As for Webhooks, which are SO important to implement, there are two types: obligatory to comply with the GDPR and optional to control events inside the store or the application. It is curious that the only way of controlling the installation state in your own database is through an optional Webhook that you receive when the user uninstalls the application. That is to say, it is, by no means, optional. But you will realise this when you get rejected during the revision process (which I will explain our experience with now).
On the 25th of March, we uploaded the app to the App Store through the form that sends you to the queue for the revision of the app. The process itself is not too complex, as long as you meet the criteria they detail in the documentation. There are two parts to get successfully validated so the app can be available in the App Store: the functional part and the logical business part.
The functional part is basically whether the app works properly, that is to say, it can be installed, it can be accessed with Oauth, it can be uninstalled, etc. This process is checked by a bot with a series of tests done to the app. I have to say that, in our case, the first time we uploaded the app, we had it withdrawn within the first hour, because we needed to implement the optional webhook (again, nothing optional in it) that allows us to know if a shop has uninstalled the application to be able to carry out the process of reinstallation properly.
The logical business part is revised by someone once you have passed the bot test. I also have to say that we had tried twice with the bot before we reached the human checking because Shopify simply doesn’t have an area to try processes such as installation and uninstallation in a controlled way, as if you were a merchant. This being said, once we got to the human revision, it was all done via email. They try the app and see if everything is correct, if the payments work, etc.
It was at this point that we got rejected. We had different inspectors for one month. We tried like 6 or 7 times and each time the errors kept downsizing. On many occasions, those issues were very simple. For example, we forgot to add a “/” at the end of a URL or we wrote nothing on the price box of the tier free when we should have written “0”. I won’t lie to you, there were mistakes that they found -since they play beta testers- that were highly beneficial for us to be able to improve the application.
In short, they may be too scrupulous during the revision, but once you see the final result, you can see the quality of the app has improved too. Actually, the revision process as such was two months long, and one more for the constant testing process. Meaning that we started in February and, finally, in April, we launched the application.
We have launched our first application, ORBE, within -almost- three months, working on the App Store. We are preparing the next version and growing up on users and positions in the App Store. In the next articles, we will tell you how we are developing the product and the numbers.