Furniture represents much more than mere mobile objects to accommodate sitting, eating or storage. In contemporary homes, where every inch of space has become premium, furniture must be functional, comfortable and a conduit of a homeowner’s personality.
Most of us are familiar with the challenges of furnishing a home; a dizzying ordeal of endless showrooms with bright lights exhibiting sofa styles, fabric swatches and a legion of fixtures. And yet, all we want is top-of-the-line furniture at the lowest price possible that will last ‘till our next move, right?
Major furniture chains like IKEA, Williams Sonoma and Ashley Furniture invest massive efforts to upgrade the in-store shopping experience for household goods- from babysitting services to gourmet restaurants. And yet, the infamous and daunting trip to the furniture store is reason enough most consumers are going digital with their home shopping sprees. In 2017, a reported 30% of global consumers preferred to purchase furniture and homeware online. Revenue from online sales are growing steadily at an average rate of 14% year over year since 2013.
The increase in sales in the online furniture market makes perfect sense if you take a deeper look into the population segment responsible for the bulk of these purchases- millennials. Completely at home with online shopping, Generation Y are now coming of age, buying their own digs and building families- thus, in need of some decent furniture. To convert them from shoppers to buyers, home e-tailers should offer an engaging shopping experience with seamless browsing and enhanced product visibility- so consumers can easily find what they’re looking for.
Enter better search.
When it comes to household furnishings, customers are selective but most of all, they are limited by space. The biggest nuisance is to buy a piece of furniture, in-store or online, only to find out it just doesn’t fit. When visiting a brick-and-mortar furniture store, there’s no way to sort by dimension. You just need to sift through all the wares in the store, find something you like and then verify the measurements. This a challenge furniture e-tailers can solve easily for their shoppers, by allowing them to shop by size.
So how do site search bars handle numerations and fractions- e.g. a couch with a width of 88.5”? And what if a shopper enters exact measurements in centimeters but the site only supports dimensions in inches?
Twiggle’s search logic understands numeric values and that these usually relate to the main subject of the search query, e.g. a couch, bed or table. We deal with fractions through canonicalization; meaning our logic will convert all comparable values to the same scale to enable a valid comparison. However, a known issue in programming is that decimal fractions cannot be presented as exact binary fractions- and we’re quite adamant about precision. So our engineers put their heads together to figure out how to represent fractional numbers in our code.
The boilerplate solution in many computing applications is to portray fractional values through the use of floating-point numbers. Floating-point numbers are features of almost all modern computing environments, represented as base 2 binary fractions. These variables represent dyadic numbers — fractions whose denominator is a two raised to an integer power, and whose numerator is an integer.
However, many useful rational numbers are not dyadic, the simplest example being ⅓ – the denominator 3 cannot be easily expressed as an integer times a power of 2. Consequently, programming languages use approximate values. For example, a common representation of ⅓ is 1501199875790165/2⁵², which differs from ⅓ by less than 10⁻¹⁵ (see Stack Overflow for bit-level analysis). But 3 x 1501199875790165/2⁵² doesn’t equal 1.
At least, it shouldn’t- if a human were to run the calculation. Alas, on some computers 3 X ⅓ will equal 1 because different CPUs will round up the decimal fractions differently- which results in subtle but nonetheless unavoidable imprecision. When testing unit conversion, our engineers even encountered differing results from two of our own computers!
In search of excellence.
A major part of the Twiggle DNA is the search for excellence. Thus, we decidedly ruled out the floating-point approach to represent fractions within queries and after quite some thought, opted to use the Python standard library Fraction data type instead. This allows us to represent fractions as a pair of arbitrary-precision integers, one for the numerator and one for the denominator. The representation of both values therefore originates directly from user queries and their canonicalized version. If necessary to make use of that data for indexing and retrieval, we simply convert these values into a floating-point form.
In our quest for high search fidelity, this solution felt like a definite triumph as it enables our software to work with exact rather than approximate dimensions for every product to ensure seamless conversion between metric measurements. Most importantly, it ensures shoppers with exact measurement in hand can find their perfect product fit and simply click to add-to-cart- a memorable shopping experience powered by better search.