Other-Miscellaneous

Customer Expectations Versus Reality - bridging the gap

Know what your customer's want

Delivering what customers want. It’s a top-of-mind concern for businesses of all types. But how do you know what customers want? How do you think your business is doing in delivering? A gap exists between how businesses perceive they are doing and how the customer sees it. To succeed, businesses need to find effective ways to close this gap in order to strengthen the brand/customer connection, improve retention, and increase brand loyalty.

Learn more by reading the informative article - Bridging The Gap Between Customer Expectations And Reality - from one of our technology partners, Annex Cloud.

Deciphering a Magento Website's Delivery Times Dilemma

Delivery On Time banner image

Introduction

In building an eCommerce site, it is easy to overlook and dismiss some of the physical connections a website has to the real world. However, as a software engineer responsible for the site’s success, it is extremely important to do so. Every catalog page should account for actual inventory on hand. Every order requires items to be packed and shipped. Every customer notification should be triggered by and reflect real world actions. Consumers and buyers do not care about the software abstractions of the real world and the challenges that come with them. They just want to browse, purchase, and receive their items. Central to that equation is providing customers with realistic expectations regarding delivery times. While the expectation as to what is a reasonable shipping time has changed over the years, the necessity of generating and communicating accurate estimates has been around since the days of mail-in catalogs. Failing to meet shipping expectations leads to unhappy and anxious customers. This was the problem Doheny.com found itself in. There was a disconnect between their digital and physical existence which sometimes caused their delivery times to be wrong.

Doheny's Website Homepage Apr2021

The solution that never worked

Doheny’s sells pool supplies. This market is highly seasonal and customers are occasionally in frantic need of their ordered parts or chemicals. Incorrect delivery times are not an option if the Doheny’s website is to generate exceptional customer experiences that lead to happy customers. When Doheny’s chose Kadro as its new business and technology partner in late 2019, their Magento 2 site was already up and running. At the time, the website even had incorporated an attempt at a solution to the delivery time issue. The solution’s process went something like this. Each product on the site had a flag attribute that designated it as a Next Day Delivery product and those products received special messaging on the site. Tying the messaging to a product attribute required a product update which had to come from the system that managed all product data - Doheny’s Product Information Manager (PIM) system - which in turn had to wait for inventory data to be compiled in another system from Doheny’s various warehouses. By the time the data managed to make it into Magento, it was already out of date and had a reasonable chance of upsetting a customer with misinformation about their order. The solution had obvious and inevitable problems. That is why before Kadro even began working on the project a number of conversations around improving the delivery times feature occurred.

The solution that would never be

Warehouse and data image

When the Kadro team was given the task for improving the delivery times feature of Doheny.com that project came with a built-in plan. The original plan was for Magento to be given access to zip code warehouse delivery estimates and stock data for each warehouse. This data would be periodically synchronized to Magento and used for determining what delivery time estimates should be shown to the customer. It will come as a surprise to no one, but that plan did not last a day before requirements changed. The inevitable question was, ‘Where do we get this data?’ The response was unexpected. Kadro was told that the data would not be made available directly, but instead an API would be created that would take a zip code and collection of products and return the delivery times for each zip code and product combination. A delta file would also be made available that would include the cross product of zip codes and products that had stock changes.This was not going to work with the original plan and project scope. Our team had to come up with a new solution.

And the solution that isAPI image

A naive approach to these new requirements would have involved querying the provided API for delivery times as they’re needed. That would have meant each product listing page, each product detail page, and each checkout page showing the shopping cart would be required to call the API. This approach would have ensured a deluge of similar requests against an API endpoint whose tolerance we did not know. Sometimes though, a terribly naive approach can be turned into a professional enterprise-level solution by simply adding a cache in front.  

Unfortunately, we couldn’t just throw in a cache and call it a day. The first problem was the actual decision space involved. Doheny’s has a catalog of a little over 20,000 skus and there are about 41,000 zip codes in the United States. Since our decision space is the cross product of those two variables, we had about 820 million data points to worry about. On top of that, after getting a few sample delta files, we discovered that they had on average 100,000 – 500,000 data points that would need to be processed and updated every hour. Throwing that amount of data into Magento’s MySQL database is a recipe for a crispy fried server, and even then it’s not the right tool for the job. Therefore, as an alternative, our team decided to use Redis.

Magento has native support for Redis and Doheny’s was already using it for data and session caching. Magento even makes creating a new data cache pretty simple. However, we were concerned about shoving so much data into Magento’s existing caches. Also, Magento’s Redis adaptor code is written and optimized for how Magento plans to use it. Our usage was decidedly non-standard, so we made two key decisions: 1.We were going to set up a separate Redis service and 2. Write our own small Redis wrapper.

Setting up the service was actually the easiest part. Since our team could fall back on the API for missing data, the cache’s main goal was dealing with repeated calls and taking stress off the API. This is a classic case for a cache using the Least Recently Used (LRU) strategy. It works how the name implies. If data needs to be ejected, the data that hasn’t been used for the longest period of time gets the boot. With this tactic, we didn’t need to worry about how to store 820 million data points. We only need to store enough data to take the majority of the heat off the API. Our team talked over the requirements with Doheny’s hosting company who had a new service set up in QA and production within the day.

The Redis wrapper itself wasn’t too much of a problem either. We decided to build it on top of Zend_Cache which did most of the heavy lifting. After piecing together the code to make a SOAP call against the API, we had a working proof of concept taking data from the API, putting it into the cache, and then using the cache for subsequent calls. Things were going too well and were bound to come to a screeching halt. The delta files made sure of it.

While the code we’d written so far worked great for the smaller requests, it could not process the large delta files in anything close to a reasonable amount of time. While the file processing happened fast enough, Zend_Cache didn’t include support for a Redis mass insert and attempting to add the data one line at a time was too slow. With no other options readily available, digging into the Redis documentation led to the right answer. Redis does have an answer for this problem. You can convert the data into a specialized Redis protocol and pipe that in directly. After a few false starts as we failed to create properly formatted Redis protocol, our team wrote up something that we believed would work. We took the delta file and created a Redis protocol version before piping that into Redis. Once we had finished testing on a collection of smaller delta files, we decided to go for broke and threw the largest file we had at it. The test completed so quickly our team assumed something had gone wrong. Instead we were delighted to find out that things had worked great and for our purposes the Redis protocol was lightning fast.

With the data workflows humming along we could finally turn our attention to the frontend. While we don’t want to diminish our own efforts, the frontend part was straightforward. A little JavaScript here, a view model there, a dash of AJAX and wrap it all up with some LESS. You know, frontend stuff.

Going live

For us, every production build comes with at least some degree of nervousness. We can be supremely confident in both the code and the process, but we’ve been doing this too long not to expect all manner of the unexpected. Combine that with a build using a new Redis service, custom Redis code, and a dash of Redis protocol and we were a bit on edge. Doheny’s was still a new partner and this feature had a lot of eyes on it. Kadro wanted to impress. So as we put out the new code and made the final connections, our team checked and double checked. The site came up, the first delta file was processed, and customers started ordering again. The dedicated Redis instance started to fill up. 10% no issues, 30% going well, 50% over the hump, 70% we clenched our teeth, and finally 100% full. The cache reached capacity without issue and happily tossed old unrequested data. The API calls stayed at a reasonable rate and the delivery messaging loaded quickly on the frontend. As if blessed by the god of programmers herself, everything worked and our nerves subsided. The new version of the old feature was live and improved. Good thing too, because Kadro already had new problems waiting to be solved. Which is what we do, overcome business and technical challenges and make merchant’s visions for selling online a reality.

Learn more about the Doheny's project by visiting the Doheny's Portfolio page on the Kadro website.

For the Love of Pets

Picture of woman and dog overlooking the view from a mountain top

Saturday February 20, 2021 is National Love Your Pet Day or simply Love Your Pet Day depending upon which website you visit. As a long-time pet lover, my thoughts naturally gravitate to the matter of how and why I got my pets and to the fellowship experience.


WHAT CONSTITUTES A PET?

A variety of different pets - dogs, cats, birds, snakes and more

Depends who you ask. According the ASPCA, the category of companion animals (aka pets) includes dogs, cats, horses, rabbits, ferrets, birds, guinea pigs and select other small mammals, small reptiles and fish. Yet other sources show that, for example, horses are classified as livestock. Based on the many horse owners I know, their horses would definitely fall under the ASPCA classification.

US Pet Ownership percentages Regardless of which source and definition you choose to use, 67% of U.S.households, or about 85 million families, own a pet, according to the 2019-2020 National Pet Owners Survey conducted by the American Pet Products Association (APPA).

Pets come in all shapes and sizes by land, water and air. Some have fur, others feathers, and some even have scales. They are labeled with scientific names like Canis lupus familiaris or Felis catus. But to us they are just Fido, Rover, Mittens or Boots. They are our pets. They’re our steadfast friends, companions and protectors who are there with us each day bringing a mixture of unconditional love, comfort and playful fun. Well at least that’s the case for dogs and many cats.

James Cromwell is credited with saying, “Pets are humanizing. They remind us we have an obligation and responsibility to preserve and nurture and care for all life.” Well spoken!

I’ll get back to the personal side of pets later in this post, but for now let’s turn your attention to the business side of things.



WHAT DO 85 MILLION FAMILIES OWNING A PET TRANSLATE INTO?

Short answer, a thriving multi-faceted industry! The U.S. pet industry is estimated to have reached $99 billion in 2020. It’s an industry that spans the gamut from large corporations that manufacture and offer an array of goods and services to small local retailers and services on-the-go providers that deliver pet related goods and servicesImage of the inside of a pet store in your local community.

The commerce aspects of pets are diverse and undeniable. What started out from a retail perspective as small local brick & mortar retailers has evolved into a plethora of those same retailers plus large national pet products chains, big box retailers, grocery stores and more. And what once was the sole domain of brick & mortar locations, has quickly moved into both omni-channel and an expanding universe of eCommerce direct retailing to both businesses and consumers, as well as a significant pet products and services presence on marketplaces.


KADRO CAN HELP YOU ACHIEVE RETAIL SUCCESS IN THE PETS ARENA

As a U.S. based company that specializes in eCommerce and helping companies to realize their visions for selling online, Kadro has its roots in both the commerce and personal sides of pets which I’ll get back to shortly. As a technology and commerce partner of pet industry leaders like Boss PetEdge, we help pet supplies distributors and retailers reach pet lovers throughout the U.S. via their websites. And for those who wish to participate via 3rd party marketplaces or may be thinking about starting a pets-related products and services marketplace of their own, our expertise allows us to help there too.

You can learn more about our work with Boss PetEdge by visiting the Boss PetEdge Portfolio page on our website. While you are at it, look at some of our other clients in the Portfolio area. Should you wish to discuss how we can help you to establish your own eCommerce pet’s products and services website or assist you in selling via marketplaces, please contact us at (877) 435-3453, sales@kadro.com or via our Contact Us web page.

Now as promised back to the personal side of pets.


MEET THE PETS OF KADRO

While the people at Kadro are training and certified business and technology professionals who deliver commerce solutions on Magento Commerce, many are also pet lovers. So here we present a few of those prized companions and friends we call our pets.

ArielM pets Karen A cats

Kahlua – Zoe (Goldendoodle) – Romeo 

Pet Lover: Ariel M.

Big Cat and Little Cat  touching each other for warmth,

while Karen works hard on the computer.

Pet Lover: Karen A.
Frito Lay Donovan

Frito Lay - He is a very chatty and munchy boy.

Pet Lover: Jacob W.

Donovan - 4-year-old Irish Setter who enjoys potty humor

and being pranked by his hoomans.

Pet Lover: Kevin R.

Hayes and Bentley - dogs Gigi - cat

Hayes and Bentley - Hayes is a Yellow Lab and Bentley is a

Brittany Spaniel. They love to hunt birds, moles,

rabbits, butterflies, and bees.

Pet Lover: Malcolm A.

Gigi, the Chameleon Cat

Pet Lover(s): Rick J. and Karen J.
Golden Retriever - KimP Tucker and Percy - dogs

Cooper - 2 year old Golden Retriever

who enjoys long walks and even longer naps.

He specializes in barking during zoom meetings.

Pet Lover: Kim P.

Tucker and Percy - 2 year old brother Shih Tzus Tucker

is active and loves to play ball. Percy just loves

attention and wants to be wherever we are.

Pet Lover: Allison H.
Denver - dog Pisco - dog

Denver - She wanted to give her best smile for everyone!

She is a high energy Border Collie who loves

to play and cuddle.

Pet Lover: Joanna S.

Pisco - a 10 week old Golden Retriever!

He loves biting ankles, fingers,

and leaves, but still learning to love baths.

Pet Lover(s): Evan G. family
hope and sookie - dogs Hope - dog

Hope and Sookie – German Shephard Dog & Shiba Inu

Vigilantly monitoring the front yard and street.

Key members of the Neighborhood Watch!

Pet Lover: Chris C.

Hope - Connor C.'s fur-baby, is always looking

for adventure. She loves swimming, opening gifts,

chasing balloons, and bubbles.

Pet Lover: Connor C.

Alice - dog Rocky - racoon

Alice - 1 year old Mini Australian Shepherd

who loves to go on walks and to the local dog park.

Pet Lover: Robert G.

Rocky - the racoon and her two cubs or kits

live under the deck. She likes to have staredown

matches with Gigi, the Chameleon Cat above.

Pet Lover(s) – Rick J. and Karen J.
Rooney - dog

Rooney - Turn off Zoom, I am attempting to sleep.

Pet Lover(s): Chris D. and family

NATIONAL LOVE YOUR PET DAY – Saturday 02/20/21

In closing, let all the pet lovers out there celebrate with your pet(s) on this special day. Although really shouldn’t every day be your pet’s special day?