Hypertext: A Renewed Push

What was old is new again… Many things cycle over time. Coke to New Coke to New Old Coke; stairs to escalators to stair machines. Technology, and APIs specifically, are no different. We’ve gone from web services in SOAP with a description language (WSDL), to simple RESTful services just to add back in OpenAPI, RAML, […]

Efficiently Handling Deep Pagination In A Distributed Search Engine

“Hey, you told me you had 10 million results. What’s the deal!” As users, we don’t always find what we’re looking for on the first page, so we click “next page”, sometimes repeatedly. In many search engines, performance drops off quickly if a user paginates deeply into search results. Search engines commonly deal with this […]

Image search using joint embeddings (Part Two)

In Part 1, we discussed how using joint embeddings to rank images can help address the cold start problem. We showed that the joint embedding ranker exposes more new images than our existing ranker. This difference was even more pronounced for popular queries, where our existing ranker tends to favor older images that have more […]

Image search using joint embeddings (Part One)

On the Shutterstock search team, our focus is serving the best possible images for a given query. To do this, we use behavioral data from our customers such as downloads to help us rank the quality of an image for a given search. While this approach often works very well because it allows us to […]

Leading Projects with Aggressive Timelines

I’ve often dealt with many projects that require a very aggressive timeline. It’s less a concern about prioritization and more about getting the products out there as quickly as possible. I have learned that there are a right way and a wrong way to tackle this kind of projects, and here are some tips: Understand […]

5 ways to hone your production incident postmortems

I’ve messed up many times, as has everyone else on my team. There have been outages, oversaturated content, and frustrated users. We’ve put out a lot of fires. And we’ve done a lot of postmortems afterward. “What’s a postmortem?” I’m delighted you asked! Postmortems, also referred to less deathly as “root cause analysis,” are a […]

Functional Programming in JavaScript

The current state of web development is best characterized not only by the myriad of problems developers face, but also by the vast number of ways we can go about solving those problems. But are they all created equal? As the technology that powers our solutions continues to drive forward at an almost dizzying pace, […]

How to build quality into your software development workflow

Suppose you’re a startup looking to grow into a mid-sized tech company — somewhere between 30 and 100 engineers. Hiring is happening fast, and the amount of code you’re churning out is growing fast as well. At an earlier stage, your company was focused on proving the product. Everything was smaller in scale and you […]

Let’s Get Terminal: An Inside Look at Q1 CodeRage

Last week we wrapped up our first quarter CodeRage, a 24-hour hackathon dedicated to our engineers to build exciting and innovative products. The idea of CodeRage is to build something new and interesting without fear of making the idea “production-perfect”. We as engineers are encouraged to shoot for the moon and build anything that interests […]

Taking Control of Your Own Curriculum.

Throughout my career as a software engineer and technology leader, I’ve helped companies find and develop talent. The one constant: how unprepared most college grads are when entering the industry. The process of obtaining a Bachelor’s Degree exposes engineers to new ideas and most importantly, to how to learn. To gain real world skills, developers have […]