Past Work

Quill

Quill was a startup building an alternative to Slack, with a different approach to threads and following up on work. I joined in March 2020 as an engineer on the iOS and Mac teams, and stayed until Twitter acquired the company in December 2021.

Visit archived website
The Quill feather and speech bubble icon on black after flying into frame.
The original Quill website header animation, 2021.

Quill took on a familiar problem with work chat. Several discussions share a channel, a question turns into a different topic, and something you meant to answer disappears into the history. Even after catching up, you still have to remember what needs a follow-up.

Quill organized chat around separate conversations. Threads could be moved or split when the subject changed, and the Activity feed brought together the discussions that needed your attention. You could pick up each one on its own. Passive mentions let people follow along without another notification.

Quill activity feed on iPhone alongside threaded conversations on Mac.
Quill on iOS and macOS.

Quill was still taking shape when I joined, about a year before the public 1.0 launch in February 2021. It was a great team to be part of, working on a problem I cared about.

I rewrote the iPhone Activity feed, which collected direct messages and team conversations in one list. You could open a thread, snooze it until you had time for it, or archive it when you were done. Reading a conversation didn't have to mean you were finished with it.

The rewrite used Combine and collection views with diffable data sources to update the list as conversations changed. The other screens here show the conversation list and social channels, where people could share photos and chat.

Quill’s iPhone Activity feed, with direct messages and team conversations in one list.
Activity brings conversations from across the app into one place.
An expanded thread in Quill’s Engineering channel on iPhone, shown in dark appearance.
A thread keeps its messages, links, and replies together.
Quill’s iPhone Social channel with shared photographs, reactions, and a camping conversation split into a thread.
Social channels leave room for casual chat and threads of their own.

I worked on onboarding, the welcome guide, and invite links. The guide introduced people to messaging and notification settings, while invitations brought them into a team. These were some of the first screens a new user would encounter, before they had any conversations to catch up on.

Welcome to Quill with cards for a profile picture, messaging basics, notification settings, and downloading apps.
The welcome guide.
An iOS team invitation screen with email fields and confirmation that a team invite link was copied.
Inviting a team by email or link.

I worked on team creation and management, including support for accent colors. Each team could choose an icon and a color that carried through the interface. These designs show the setup screen and a new team waiting for its first members.

A new Quill team with General, Design, and Engineering channels, an Add Members button, and orange accents.
A new team with its first channels.
An iOS team customization screen with a team icon and a grid of accent colors.
Choosing a team icon and accent color.

I built the channel and thread detail screens, including the places to manage members and guests. I also worked on native link previews for URLs shared in a conversation. The designs here show thread invitations, membership lists, and the different ways a link could appear alongside a message.

Quill channel editing controls for its name, structured or social conversations, location, and privacy.
Channel settings and conversation types.
Quill thread details with invitation links and a list of members and guests.
Thread links, members, and guests.
A Quill conversation with compact link cards and a larger preview containing an image, title, and source website.
Link previews inside a conversation.

I led the iOS work on group voice and video calls. I used SwiftUI and the Twilio SDK to get an early version into the app. The interface had to keep up as people joined or left a call, muted their microphones, or switched cameras.

I also worked on audio levels, using Accelerate to calculate levels from PCM samples and convert them to decibels for the interface.

A Quill group voice call with three participants and audio controls.
Group voice calls on iOS.
A Quill group video call with three participants and camera, speaker, and microphone controls.
Group video calls on iOS.

The team's call designs explored how much of the chat to keep visible during a call. One layout used a compact strip of participants so there was still room for messages. Another gave one speaker more space. These are two layouts from the original iOS Sketch files.

An iOS call design showing the written conversation above a compact strip of video participants.
Call chat with a compact participant strip.
An iOS video-call design with one large speaker tile, a smaller self-view, and paging dots.
A focused view of one speaker.

One connection bug showed up after Quill had been in the background for a while. When you came back, the backlog of events could exceed the WebSocket's frame-size limit. The app would disconnect just as it was trying to catch up. I raised the limit from 16 KB to 256 KB to handle those larger frames.

That fix came after a WebSocket rewrite. I had replaced Starscream with Apple's URLSessionWebSocketTask, then moved to WebSocketKit, built on SwiftNIO, after running into bugs with the Apple implementation.

I also added an in-app log viewer and adopted swift-log so we could send debug logs to Google Cloud Logging. Configurable alerts helped us catch problems during development and testing.

I moved the app to scenes so it could have multiple windows on iPad, and added Siri intent and Shortcuts support. Toward the end of my time at Quill, I was separating the code into smaller modules for a share extension and other extensions. That work was still in progress when Quill was about to be acquired.

Quill feather and speech bubble app icon between Messages and App Store artwork.
Quill app artwork.

Twitter acquired Quill in December 2021, and the service closed that month. The app didn't get much time beyond its first public release.

I still miss Quill every day I use Slack. I think there was something there. I still have to keep track of conversations scattered across work and remember which ones need a reply. Being able to snooze a thread and return to it without losing the discussion helped. I'd use Quill today if I could.

← All past work