I help maintain big OSS projects: from a third-party dependency manager used in most iOS apps (CocoaPods), to the most popular Objective-C testing framework and the most popular Swift networking API client. I’ve been doing this for years.

Projects with this much impact are big time-sinks. This time comes from ensuring infrastructure continues to work, support tickets need replies, new code needs reviewing and releases need coordinating.

Last September, almost a year ago, I started work on a new project, Danger. Danger fixes a problem we were seeing in the Artsy mobile team around adding “process” to our team.

As a part of discussing Danger internally, I’ve referenced that building CocoaPods has greatly influenced Danger. This blog post is about the way I’ve built Danger, knowing fully well that I cannot afford the level of time to maintain it at the scale it may get to.

Read on →

It was only three months ago that I came to the conclusion of just how much time I had wasted on code compilation cycles, once I started to play with Injection for Xcode. I still feel guilt about the time I wasted. However, I’m trying to turn that into something constructive. In order to do that, I need to have a solid understanding of the fundamentals on how Injection For Xcode works.

Ash says one of the best ways to learn is to teach. So I’m going to try take you through a guided tour of the code-base. You need some pretty reasonable Objective-C chops to get this, but anyone with an app or two under their belt should be able to grok it.

Read on →

It’s been so fun to watch the Swift developer community experiment with Swift and to experiment with what idiomatic Swift will look like. No one really knows the answer yet, but we’re starting to see some design patterns used more than others. We’re seeing some language features used in key ways that define idiomatic Swift, and other language features that are being mostly ignored.

Regrettably, one of my favourite features of Swift has not enjoyed the meteoric rise in popularity I believe it deserves: typealias.

Read on →

GraphQL is something you may have heard in passing, usually from the web team. It’s a Facebook API technology, that describes itself as a A Data Query Language and Runtime. GraphQL is a spec, and there are multiple implementations of it. As mobile engineers, we can consider it an API, where the front-end team have as much control as the backend.

This blog post covers our usage of GraphQL, and what I’ve learned in the last 3 months of using it in Eigen.

Read on →

I am a big fan of developer tooling, as spending time upfront on improving your process can pay a lot of dividends over time. I want to talk about one in particular: Paw. Paw is a native HTTP client with a bunch of features. I want to cover one that means that we can now introduce [AppName].paw files in our mobile projects, making it easy for us to discuss networking requests.

Read on →

Eigen has hit the point where testing is a chore. This is a positive sign, the app has grown in terms of size, complexity, and number of developers considerably over the last 3 years. The test suite makes us feel comfortable making changes.

On my fastest computer, we’re just under a minute - Executed 1105 tests, with 1 failure (0 unexpected) in 43.221 (48.201) seconds for the whole suite. I think I could probably live with 20 seconds max. So I studied how AppCode handles running tests, and this will be an illustrated guide as to how you can easily run the subset of tests in Xcode based on their techniques.

I have ideas on how to improve time for testing in general, based on Code Injection, but they aren’t fully fleshed out and I expect it to be time-intensive to pull off. Time I haven’t made yet.

Read on →


The Artsy Engineering Organization "Stack" in 2012
from "Sitting is Killing You? Move to New York"

Artsy has now grown past 140 team members and our Engineering organization is a nimble 25. We’ve recently performed a large organizational change (I highly recommend reading “The Secret(s) to Company Re-Orgs”), so this is a good time to describe our updated Engineering organization, starting from the top - Artsy as a company and business.

Read on →