When I started at Artsy a few years ago, I’d never written a line of Ruby. I feel at home with JavaScript — it’s been my buddy since I started my career over 20 years ago. I’ve written enough tests in JavaScript that I sometimes feel like I can write them in my sleep (as long as they don’t involve async React events 😅).

Most of the code I write at Artsy is still JavaScript, but now I write some Ruby code too, and I’ve written enough RSpec tests that I’m starting to form opinions about what I think they should look like.

My most recent work has been JavaScript again. I’ve been writing Jest tests against one of our React apps. But rather than reaching for the testing patterns I’d become accustomed to over my years of JavaScripting, I’m finding that something’s missing in my Jest tests! My experiences with RSpec have me longing for two features in Jest:

Read on →

We have a handful of regularly scheduled meetings in place at Artsy devoted to knowledge sharing.

But what about the unstructured ways in which we share knowledge? If structured sharing time demonstrates that a team is interested in spreading knowledge, unstructured sharing time demonstrates that spreading knowledge is the default mode for the team. Instead of the team forming habits of working in isolation or hoarding expertise, they’ve formed habits of learning from and teaching each other.

Read on →

Recently, I needed to test a button that would make an analytics tracking call using react-tracking and then navigate to a new page in a callback. This presented some challenges - I wasn’t sure how to create a mocked version of react-tracking that would allow a callback to be passed.

With some help from fellow Artsy engineers Christopher Pappas and Pavlos Vinieratos, I got the tracking and testing to work. Here’s how we did it.

Read on →

I recently encountered a problem where client-side data (returned from a Relay query) became out of sync after a user interaction. How can we make sure our data is consistent while maintaining a single source of truth? This post explores why a developer might want to update client-side data locally, the basics of Relay and its store, and how to delete records in the store when you’re not using a mutation.

Relay x Artsy x Me

Relay is a GraphQL client library maintained by Facebook engineers and enables rapid client-side data fetching in React applications. Artsy’s adoption of Relay coincided with our move toward using React Native for our mobile work around 2016. I joined Artsy as an engineer in November of 2020 (after transitioning to engineering from a non-technical role at the company.) When I joined, I was about a year into React development and completely new to Relay.

Read on →

A common suggestion for improving pull requests (PRs) is to “make your PR small and focused”. I myself gave this suggestion in a recent article on this very blog about including context in PRs.

Like most internet advice, this can feel like the “draw the rest of the owl” meme. Even if we’re in agreement that I should make a PR smaller…how do I do it? How do I avoid a big PR when there’s a lot of cross-cutting changes to make? How do I create small, focused units of work when I’m building a large feature? How can I overcome my perfectionism and submit a PR that feels incomplete to me because the edges aren’t all polished?

Read on →

I know that for many developers, especially those early in their careers, asking for help can be intimidating. I often fear wasting someone’s time or exposing myself as less skilled or smart than my team initially thought.

In my first month as a software engineer at Artsy (and barely six months into life as an engineer after transitioning from a career in communications), I was struggling through a ticket assigned to me as a “good first issue.” (The team estimated the task to be straightforward enough for someone new to the team.) After a few hours stumbling between the ticket, my code, and Google, I made very little progress.

Read on →

Available now on Apple Podcasts, Spotify, and coming soon elsewhere, is Artsy Engineering Radio!

Solving problems in the world of software engineering can mean a lot of different things, and this podcast will explore what that looks like at Artsy. If you’ve followed our blog, you can expect a podcast that sounds like it. There are a ton of amazing engineers here at Artsy and we’re excited for you to hear their voices and stories. Our hope is that this podcast will make it easy for more engineers at Artsy to contribute to the public persona of Artsy Engineering.

Read on →

In, a recent blog post, I discussed a fundamental difference between web and iOS deployments. Web software is deployed to servers that are under your control, while iOS software is deployed to users’ devices that you have no control over. This distinction really changes how you think about the code that you ship, because that code could be running indefinitely on devices that never get updated.

The previous post focused on this distinction through the lens of accidentally shipping (and then fixing) a bug. This focus on bugs is important, but focusing only on bugs left me unable to articulate an important, nuanced distinction between hosting code and shipping app binaries. So let’s dive in.

Read on →

Sharing knowledge! What a concept! In my recent blog post, I discussed “Knowledge Share” meetings (also known simply as “Knowledge Shares”, or abbreviated “KS”) and I want to dive deeper into them today. Last time, I described them as follows:

Knowledge Shares are a structured time to facilitate unstructured learning. Anyone can bring a topic to Knowledge Share, from a ticket that they’re stuck on to an idea they have to a neat trick they recently learned.

These meetings were really instrumental in ramping up the Mobile Experience team, but their history goes back a bit further. Today, we’re going to discuss the origins of Knowledge Shares at Artsy, how they’ve evolved, the value they provide us as engineers, and how I’d recommend you adopt them on your team.

Let’s go!

Read on →

It was a Wednesday, mid-summer 2019. I don’t know which Wednesday specifically, but I know that it was a Wednesday because I was attending Artsy’s weekly all-hands meeting. Two hundred colleagues were also there (many dialing in remotely) and we were all listening to Artsy’s new CEO talk about the company’s direction. Mike Steib had only been around for a few months at that point, getting to know the business. He was talking about the product direction, and I was listening intently.

With Artsy’s iOS app, I knew there were only really two directions we could go. As I listened, I reflected on how we had gotten here.

Read on →