Fulfillment Messaging App

Apr 29, 2011

When running a Shopify store, sometimes you want to treat your orders a little different than the normal flow allows. It can really depend on your shipping alliances, your inventory and what your customers expect for communications.

When an order is booked, the customer and shop keeper receive an email that serves as a first communication. There are quite a few other email templates that can be fired off once the initial order is dealt with. Fulfillment seems to present some issues that I have dealt with recently using custom Applications.

One scenario is that when a shop is receiving a lot of orders, it is painful to fulfill them one by one. I created an App that accepts up to 250 orders at once from the Shopify Admin, and fulfills them automatically. Although that relieves the shopkeeper from clicking on 250 separate orders, it revealed some other problems. Sometimes it is important to fulfill those orders and NOT send an email. Sometimes it is important to fulfill those orders and send a CUSTOM message. My recent App allows for that by letting the Shopkeeper create custom email messages. When they select orders for special fulfillment, each order’s customer gets the custom email. One super thing about Heroku is the easy integration with Delayed Job. Tobi from Shopify wrote this code to take on the running of background tasks. In my Apps, I now delegate all potentially long running tasks to background jobs. It is quite neat to see this in action. I watch the job queue as it fills and empties itself during normal operations of the App. The Delayed Jobs spin up their own worker force too and this helps them to work fast. Once all the work is done, they kill themselves off too.

Another scenario that cropped up was the fact that sometimes an order will need to be fulfilled more than once. That occurs when a shopkeeper accepts payment for a quantity of more than one item, while at the same time recording future delivery dates. At each delivery date, an already fulfilled order needs to be fulfilled again. Luckily one of my Apps is able to present the shopkeeper with future delivery dates so that these future fulfillments happen in an orderly and proper fashion. Along with multiple fulfillments, the shopkeeper can rely on the built-in shipping update letter to go out, or use the custom messages they store in the App.

These custom Fulfillment Apps are a great way to eliminate clicks in the day to day administration of Shopify stores that deal with fulfillments in ways just slightly different than the usual pattern.

My Fulfillment Apps are well tested at this point with many thousands of orders booked. If you have a twist on fulfillment you have to address with your Shopify store, drop me a line.

For accounting purposes there are a couple of ways of dealing with selling and purchasing of inventory and the changes in the cost of purchasing inventory over time. It is rare that a merchant will purchase items to sell in their Shopify store for the exact same price over time. It can be important to use an average cost price that takes into account these purchasing price changes over time.

The Profiteer App is meant to expose profit or margins on a sale by subtracting the cost price of goods sold from the selling price of the goods sold. A common business issue faced by many merchants is the effect currency exchange rates may have on their sales. A shop located in Canada may sell products to Canadians in Canadian currency, but the products sold may have been purchased and imported from the United States. Many merchants probably source their products from the United States, and it is considered to be one of the standard currencies by which most others are measured.

Had a real laugher/shocker at the same time. I develop so much App code where the data processing is a flow and not a stop:persist:process:continue action that sometimes you get burned by that. Everything was working fine as “hey download all that shop’s orders, parse them, deal with the contents, and move on”. Everything as working fine on MY itty, bitty, little dev shop.

As a way of welcoming in the new year of 2014 and trying to decide which way was up from down, left from right, I made a decision to be a speaker at the local Montréal Ruby group. Having attended a dozen or more meetings over the years I felt like I had 20 minutes of quality material without being too technical, or wildly off of one topic.