The massive project that I referred to a few weeks ago is what we’re referring to internally as “customer self service” because it allows customers to instantly resolve a variety of issues without needing to contact our customer support team. It’s been live now for a few weeks and we can already see the huge impact that it’s going to have on our business.
What It Does
There aren’t very many online retailers with functionality like this, and I’m sure one of the reasons why is the massive amount of systems that need to interact seamlessly to make it work.
Customers can add to their order, remove items from their order, or cancel their order before it ships. After it’s shipped, they can report missing, damaged, and incorrect items in their shipment by selecting the affected items, uploading photos, and selecting whether they want a reshipment, refund, or store credit. There are a bunch of ways to access these features, but the most common way is within a customer’s My Account page as the image below illustrates.
This was as challenging of a programming problem as I’ve tackled in a long time. We literally spent years talking through these features because they open up a pandora’s box of crazy scenarios. For instance, if a customer is adding to their order and we ship the order, what happens? Should we hold the order until they finish? What if they start adding to it and forget? If we do hold it, how long should we hold it for? Will customers be upset if they get their order late because they were mid-add when we would have shipped it? And so on.
(In this situation we came up with what I think is a pretty elegant solution. When a customer adds to their order (which can only be started before the order ships), they’re effectively placing an entirely new order with free shipping, the same shipping service as the original order, and the same shipping address. From their standpoint there are only a few clicks and we do a pretty good job of walking them through the process in a reasonably fool proof fashion. We already had a “merge order” system in place for orders going to the same address with the same shipping service. This allows our warehouse team to combine packages to save us on shipping. In these cases, we’ll merge the orders if we can, but if something happens – like a product in either order goes out of stock or we ship the original order while they’re checking out – we just send a second shipment. But I digress…)
There were dozens of similar scenarios that took a long time to plan out before launching. I could go on and on. However, an entire post about the programming challenges is less interesting I think than the reasons why we’d build such a system and what it means for us moving forward.
Why We Built It
This is an awesome feature for our customers, especially our power-users. By our estimates customers can take care of ~95% of the edits to their order on their own now instantly. Convenience aside, we hope there is a measurable ROI on this project by making it dead simple to add to an existing order.
There are also some HUGE wins for us internally:
- We have less pressure to cover customer service during nights, weekends, and holidays because most customers can resolve most urgent issues on their own
- We’ll receive less customer service email, which will delay hiring another full-time customer support employee
- When we do hire, it will be much easier to train a new person
- If someone is on vacation or out due to an emergency, there’s a lot less urgent customer service to cover
- We’ll have better data for reporting purposes, in particular for the missing/damaged/incorrect items
Essentially, we’re scaling by automating.
The 6 Week Version
I could have easily spent several months developing this, if not longer. We had scoped out complex variations that went much further and would have taken much longer. Ultimately though, that’s not a good business decision. I was able to release the 6-week version that covers most situations a few weeks before Thanksgiving. The system got used a ton during our busy holiday stretch, and subsequently I’ve spent the past few weeks tweaking things and fixing bugs. As I write this about a month after launch, the system is much much better than it would have been if I had spent another month refining it before releasing it. There is no substitute for the real world stress test.
Just as we were releasing this system David Heinemeier Hansson wrote a timely post entitled Constraints only work if they hurt. I think the 37Signals/Basecamp 6-week development cycle makes a ton of sense:
This might make it sound easy to ship great software on time, but of course it’s not. Because like any good constraint, it hurts when its working. We have to kill our darlings all the time. Features, settings, considerations that we really think are important have to be cut constantly. When something you believe to be important doesn’t make it, it hurts.
But it’s also the right thing to do. We’ve proven that time and time again. Things we thought were terribly important in the heat of the argument frequently turns out not to matter at all. And above all, the discipline and the habit of shipping software every six weeks (or thereabouts) is worth some real sacrifice.
So Far, So Good
The very first customer to use the system put a big smile on my face. They were a new customer who spent around $100 on their first order with us. A few hours later they added an applicator pad to their order. We combined the applicator pad into the original package and shipped it out. The only Detailed Image that customer knows is one where it is super simple to edit or cancel your order.
The feedback we have received has been almost universally positive. I’ve seen several variations of “thanks for making it so easy to do this!” With all of the usage we have had, we haven’t heard from a single customer who couldn’t figure out how to use the system.
As far as trends go, there have been a lot of people adding to their order, especially during the big sales. When people have removed or canceled, most of the time they’ve placed another order shortly thereafter. Even if they don’t, I think we still win by making it so easy for them. They’ll hopefully remember that next time they shop for detailing supplies.
This is one of those projects that I’m really proud of for so many reasons. It was very challenging, and therefore very rewarding to see come to fruition. I’m excited to see how it impacts the business during the busy season this Spring, as well as how it changes things internally as we continue to grow our team.
- Coupon Code Strategy Ramblings
- Making Shipping Estimates a Little More Obvious
- Breaking Down the New Detailed Image – Part 2 of 3
- Apple Pay and Google Pay Now Live – Step 2 of Our Braintree Integration
- We Recently Migrated Detailed Image to Braintree Payments: The Good & Bad From This Large, Unplanned Project