Recently at Redbubble we have encountered a very interesting colour matching problem: Given a “target” colour and a set of colours, we have to determine which colour in the set is the closest one to the target colour. In order to understand why such a solution is needed, let’s analyse a scenario that actually happens on the website: An artist creates a work which he wants to sell on a t-shirt, and chooses the colour white as the default background for his work. A user browsing the website sees this work and wants to buy it as a hoodie, so the user chooses ‘Hoodie’ as the clothing style in the work page. Unfortunately we cannot print white hoodies, so we display the
Redbubble is not unique in expecting interview candidates to be able to analyze and design a model for a complicated problem on the fly. It’s a useful and interesting mental exercise for developers, and it gives us an amazing insight into how candidates go about solving problems. But it can also be stressful for candidates who aren’t used to it. The interview will begin like this: We will give you some ‘business rules’ for a system we would like designed, maybe also a few constraints, and then we will ask you to design it for us. The final design you come up with will be different for every problem-person combination, so I can’t tell you what the answer will be.
Most of us have come across goal setting in one way or another, be that at work when your boss comes over and tells you that you have to reach a certain sales target this quarter, or when we make a new year’s resolution to learn a new language. But why do we constantly set goals? Does it even work? Can’t we just all try our best and be much happier? Turns out that setting effective and meaningful goals can have a tremendous effect, not only on your performance, but also on other aspects of your (work-)life. Why set Goals? Research on the topic of goal setting has been done for more than 50 years and a lot of it
It started with some dates. An important aspect of the online shopping experience is that you cannot immediately receive your purchase. In Redbubble’s case it has to be both manufactured and shipped before reaching the buyer. Our customer service department frequently handles requests regarding arrival dates and possible late items. As such, we felt we could give customers a clearer understanding of the delivery time frame by providing this information (previously only on the shipping & delivery page) in more places. We decided we would build a new application that would take an item, shipping time and delivery location and return an estimated delivery date based on that data. Why build a new application? As part of the work page (where
There are some tasks in a programmer’s life that come up again and again. Creating classes in an often-repeated pattern. Adding entries to some boring but important list defined in code. Those tasks that make you think “This is so tedious! I do this over and over! There has to be a better way!” Fortunately, there is.
I have a love and hate relationship with Cucumber. I’m not talking about cucumbers we see on a dining table, but the one that we see when we’re talking about software testing! I’ve worked with Cucumber on a number of projects since I started working as a full-time Ruby developer back in 2009. It could be a very useful tool when we needed a tool to aid us in keeping our written requirements (that are also executable) to make sure the software behaves the way business intended. This kind of testing is often called User Acceptance Testing. We asked ourselves, is this the best approach?
Every programmer knows that when you meet a problem that you don’t know how to solve, you just search for the answer online. And this works 99% of the time. But occasionally you don’t find a solution, and you have to figure it out yourself. Hopefully this blog post means some other programmer doesn’t have to do the hard yards we have done. Our problem was simple. We wanted to show artwork on a hoodie where the drawstrings hang over the artwork.
It is well-known that it’s a poor idea to store your application secrets in plaintext files, especially if they get committed to version control. So what should you do instead? Previously, we have attempted to solve this problem by having a file that only exists on the live environments, but that is tricky to support. In this post, we describe how we use Amazon’s Key Management Service to safely encrypt our precious secrets…
Previously, when artists uploaded an artwork to Redbubble, we used the same image for all of the clothing styles and the sticker style. Both worked best with a PNG with transparency, and stickers don’t offer any options for editing, so it seemed an obvious choice. But artists have long been asking for these to be split out. And we’ve focused on adding more clothing styles lately, so we decided now was a good time to separate the sticker upload. The problem was that in the uploader we wanted to show the artist a preview of what the sticker would look like after we add the white border to it, and we wanted to do this in the browser in HTML5
The keyboard navigation order (commonly called the “tab order”) is important for users who can’t necessarily use a mouse or control a pointer to navigate a website. However, the tab order is traditionally defined by the order in which elements appear in the HTML document, which can become quite different to the order in which the elements visually appear when a site is built using Responsive Web Design principles.