Shopify app development— iBorodum case study

6 min readMar 12, 2021

Product and business

The business motto is “Stop buyin’ — start boroin’”, because iBorodum provides a custom eСommerce user experience where products can be borrowed and returned as a service. This functionality was implemented with our in-house Split Payment app, which required some additional customization to fit the customer’s business needs.

Challenges and solutions

The client had some specific requirements for how the app should work, both with the website and another app in use. Specifically, the Split Payment app had to be customized so that the payment for the borrowing service would be charged from the customers in advance, and a second payment for the actual products that were borrowed would be deferred and then cancelled right after the products are returned.

The original Split Payment app allows paying for the order in multiple shares. Customers can choose the number of payments and set the required amount of money. This wasn’t suitable for our client, because they needed only two payments to be applied with a fixed amount in each:

Because the app is public and used simultaneously by a significant number of merchants, it wasn’t possible to customize it for someone privately. That’s why we deployed a copy of the app on another server and added the required customizations regarding the number of payments and their amount.

Service fee, deadlines and invoices that were no longer needed

Service fee for the first payment is created by a third-party app. When customers order something from the store, this third-party app calculates the cost of a service fee and adds it to the main order as a separate product.

This product has its own product type on Shopify, so we customized our app and added a new setting: if there is a certain product type in the cart, the payment is split into two parts, and the first payment would be this specific product type (the service fee, in our case).

This allowed customers to borrow the product after paying only commission for using it.

Also, the standard functionality of our Split Payment app implies that each deferred payment has a deadline, and when the deadline is about to expire, an invoice is sent to the customer with a reminder to pay for it. After the expiration date, the draft order that has been created in the Shopify admin panel becomes closed-it doesn’t track whether this draft order was paid or not. This did not work for our client, so we customized the app to keep draft orders open, even after the deadline had expired.

Another issue we needed to avoid was sending the customers invoices that were no longer needed. The third-party app was managing the return of products, and our app was dealing with payments and invoices. We needed to synchronize the work of the two apps, so the payment app wouldn’t send customers an invoice for the second payment if they had already returned the product after borrowing it. To do that, we customized the app and added the functionality which would track and cancel those unnecessary draft orders.

Pop-up customization: legal agreement
and discount codes

Legal Agreement

If a customer does not return the product after borrowing it, the full product cost is not charged from the account immediately-customers just receive an invoice with a reminder to pay if they’d like to keep the product. This way the business was at risk, so the way out was adding a service agreement before customers could complete the order.

This functionality wasn’t a customization, but the development of a completely new feature within the app. In the Split Payment app there is a pop-up which appears right before checkout and specifies the number of payments with the required sum.

We changed the apps’ functionality and added to this pop-up a service agreement checkbox-so customers sign an agreement with the store on service delivery upon ticking the box.

Without agreeing to it, completing the order was impossible, so our client is now legally protected in cases when customers neither return the product nor complete a second payment with the full product cost.

Adding discount codes

The client wanted the possibility to add discount codes during marketing campaigns, but this feature wasn’t available in the Split Payment app out-of-the-box.

We customized the pop-up and implemented the possibility to enter a discount code that would later be applied to their service fee and the subsequent payment.

Behind all this stands a rather complex functionality that allows us to bypass the restrictions connected with the Shopify draft order, and change the final price in accordance with the applied discount code.

Excessive page reload

When a user adds new information to the standard Shopify cart, it is reloaded to show the update. Usually that is something caused by their actions, so users can expect the reload. But in the IBorodum case, some items were added to the cart automatically by an app (including the service fee). This caused the page to be reloaded a lot, which was completely unexpected for customers because it didn’t correspond with their actions. This frequent and unexpected page reload could be very confusing, affect the user experience negatively and scare customers away.

Eliminating all reloads was technically impossible because of the Shopify restrictions, so we reconsidered the logic behind the app’s work and managed to get rid of some of them. And to let the customers know that the remaining reloads happen for a reason, we also added animation. The end of the animation would show that all background updates had ended and the page is usable again.


In the end, the client got a working solution customized to fit the needs of their business. The customized app helped them automate the process of lending products to customers as much as possible, and minimized the financial risk management associated with it. Here are a few words from the CEO about how they chose to work with us:

Originally published at




A team of Shopify professionals, sharing the insights from a decade of Shopify hands-on experience.