Friday, February 24th, 2017 was my 1999th day of employment at Twitter, and my last.
I’ve been a bit nostalgic about this, so I reread my initial thoughts on joining Twitter in 2011 to laugh at how young and naïve I was five and a half years ago. I know that when I first started I didn’t really have a great idea of what people did in fast growing companies. Did they jump around and try to work on the most critical problem at the time? Did they focus on small areas and grow them into large ones?
I was pleasantly reminded of the optimism I felt back then:
And being part of being able to build out that product, especially during a time where product features such as photos, referral tracking and analytics are happening, while the leaders are having significant discussions around monetization is an exciting time - a time when big, impressive things get done.
That was pretty accurate. Twitter has been a roller coaster of a company to work for but gave me plenty of opportunities to grow my skills and career. I think that I’ve been successful in finding a range of areas to contribute. But I wasn’t always very vocal about what I was doing, especially externally. So in the interest of reflection and because I think others may find my path interesting, here’s a review of what I can claim some soupçon of credit for during my tenure.
My first projects on the Platform Relations team were rote—answering developer questions in the forums, writing announcement blog posts and developer documentation (I’m still pretty proud of Working with Timelines). Getting up to speed.
On June 14, 2012, we launched Twitter Cards, my first big announcement. Cards felt like a huge product launch, but was underwhelming from a developer point of view. I spent months before launch herding webmasters to get the correct markup implemented on their site, manually checking hundreds of entries and pasting whitelist patterns into a barebones web form. Typos were instantly shipped into production without warning or review. Frustrated with this, I wrote my first service at Twitter, an admin system which offered a one step preview / approve / email flow for Cards submissions. Today it seems like every third Tweet has a Twitter Card in it, but back in the day we launched with only a few hundred domains enabled which were all whitelisted by (mostly my) hand.
June 2012 also heralded a big change in the way the API was treated at the company. The decision was made to rewrite the backend and add mandatory auth and rate limiting to every endpoint. Platform Relations was tasked with managing the release of this version 1.1. While we managed to clean up a couple inconsistencies in the platform, it felt bad to spend months limiting access and restricting things in new ways. It was the last time I worked (and cared to work) on Twitter’s REST API.
At some point in 2012 I became the primary point of contact for Streaming APIs. I liked them because the developers we were working with were established companies who were generally paying for access. It gave me opportunities to learn more about networking and the challenges in keeping a large stream of data flowing uninterrupted across networks. I even liked being on-call for the Firehose, so if a partner had an issue they would ping me directly and I’d get their problem resolved and feel great. As was pretty common at Twitter at the time, we didn’t have enough people to staff this adequately so I wound up being on-call pretty much continuously. I remember New Years Eve that year, sneaking out to a bar down the street and hoping that my phone didn’t start getting paged right as the countdown started happening.
In September 2012 I took advantage of Twitter’s partnership with Stanford’s Center for Professional Development to enroll in some for-credit graduate courses in their Mining Massive Data Sets certificate track. I loved the rigor of these classes even though they were difficult, and found a lot of enjoyment in learning mapreduce and other techniques for processing larger datasets. Counting things (especially lots of things) was so satisfying. Twitter has always had a great set of tools for running data collection jobs so I familiarized myself with their operation.
By February 2013 I had done some partner work with some media companies, trying to get them onto the Twitter Cards platform. Lots of the feedback I heard was concern that cards would cannibalize link clicks, since people would decide not to read an article based off of the description. I didn’t agree with that but didn’t have data to back up that opinion. I heard there was a Cards engineer trying to bootstrap a project to launch analytics for Cards publishers, so I got approval from my manager to help hack together a prototype in a part-time capacity.
We spent a few weeks building a demo to count the number of Tweets with cards for a given domain. So if you were cnn.com (for example) you could see how many people had Tweeted links back to your articles. We demoed the project at Twitter’s engineering demo hour and got approval to gather a virtual team and build a more robust version of it. By August 2013 this had become a full blown project with an Engineering Manager and Product Manager and everything. I transferred into a full-time Software Engineer role on what would eventually be launched as Twitter Cards Analytics in January 2014. Fun fact - this was the first time Twitter had surfaced any kind of public impression data. We were anxious as hell about this but it wound up being well received.
November 6th, 2013 was Twitter’s IPO. At the time I had seen the IPO as a career goal. I had worked with people who had gone through Google’s IPO and I wanted that experience. In hindsight, I think of this event as bittersweet. It was definitely a turning point, and the company didn’t feel the same in public as it did as a private entity. Not necessarily worse, but in many ways it feels like Twitter is still paying down the exuberance and hubris of that time. I think it has made me a little more cynical about the idealized Silicon Valley startup experience and the messed up incentive structures related to that. I think part of joining Twitter was so that I might go through such an experience, but now that it’s done I don’t feel the same way about wanting to go through that again.
By April 2014 we had matured as an engineering team and had relaunched analytics.twitter.com with new dashboards, eventually opening up access to anyone who wanted in. I got promoted to Senior Software Engineer. Our team was operating really well and I was very comfortable. I wanted to keep doing the same thing for years.
By February 2015 I had become Tech Lead for the analytics.twitter.com site. Half of our team developed Account Home, intended to be a simplified and easily understandable first experience for people unfamiliar with Twitter metrics. The other half built View Tweet Activity, an embedded view showing per-Tweet metrics, and Quick Promote, a product for advertisers to easily boost the reach of a single Tweet by running an auto-generated ads campaign. Both made it into our Q1 2015 earnings:
"Twitter added a new analytics homepage and a quick promote feature to make it easier for small and medium-sized businesses (SMBs) to get their best content in front of more potential customers."
Ultimately Account Home was unsuccessful. I’ve had debates about the various merits of the data we show there but the truth was that it didn’t change numbers for us in a material way. I had spent most of my engineering time on this and felt like it derailed a promotion I was working toward. It made me appreciate that having an impact was more far more important than launching a product, even if I felt the product was a good achievement on its own.
On the other hand, View Tweet Activity was a fantastic win - it let us deliver accessible per-Tweet metrics on mobile, and gave us a canvas inside of the official apps to experiment with features like Quick Promote. But Quick Promote was only available if you were already an Ads user - you’d have to have gone to ads.twitter.com and entered your credit card before seeing the option to promote a Tweet. This was a small number of users (by Twitter’s standards) so we wanted to ship the ability for anyone to sign up for ads inside of the official app.
I spent the next several months building an advertiser signup experience inside of View Tweet Activity. When it launched in June 2015 it was the first time you could sign up to become an advertiser in the official iOS, Android, and twitter.com apps. We got an initial bump in signups but ran into the next limiting factor - you had to have used analytics.twitter.com at some point to see the View Tweet Activity button. We worked to set things up so that we could enable analytics for and show View Tweet Activity to tons more users.
Eventually we were at the point where we could start whitelisting large batches of users. This wasn’t so attractive as an interesting engineering puzzle, but had a huge impact. The Q4 2015 earnings mentioned:
"We are also very pleased by the growth in active users of our Tweet Analytics dashboard, where people can measure the performance of their organic Tweets and can choose to amplify that performance with our SMB ads product. In Q4, our Tweet Analytics dashboard had over 25 million active users, up 3x compared to Q3, creating a large and fast-growing pool of potential marketers to convert into SMB advertisers. "
Making this pool larger had the intended effect on conversions. In the same earnings it was noted:
"We completed the global roll-out of our self-service advertising platform, which helped contribute to the total number of advertisers rising nearly 90% year-over-year in Q4"
The success here really made me realize how effective a small number of resources put into the correct place can be. I look for such opportunities now.
2015 was unfortunately also the point where it became obvious that Twitter’s business was more uncertain than most people (certainly more than I) had expected. Slowing user growth, Dick Costolo’s departure, uncertainty about his replacement, and a falling stock price all weighed heavily on spirits inside the company. A brutal set of leaks caused many of us to find out about an upcoming set of layoffs through the tech press. I wound up losing coworkers I respected and admired, both on my immediate team and across the company.
If anything good came out of this, it was that it was taken as a catalyst to re-evaluate the things we were working on. We needed to find bigger opportunities which would be helpful for the company. We had been thinking of small-to-medium businesses as our customers, but they wanted features like Tweet scheduling, in-app analytics, and feeds of non-mention Tweets about their business—things we were not set up to deliver. Twitter allowed us to make the biggest bet of my career, that we would work to build Twitter Dashboard, an app specifically designed for businesses containing the features which they had requested.
The Dashboard project earnestly started in December 2016, and we were able to build a fantastic team with iOS, web, and backend experience. I was initially skeptical of how we’d be able to build what we wanted. None of the existing Twitter apps were meant to be forked in such a way. But we started making so much progress that I became very excited about all the potential of the new platform. Feature planning grew into a big time sink, so our dual-classed Engineering & Product Manager asked me to step in as a full time Engineering Manager in order to help manage the growing and fast-moving team.
Much of my career to this point was structured around trying to code more, not less, so I was anxious about taking the role. I hadn’t considered managing as something I really felt was necessary in my career, but I had at least given some thought to it and wondered what it would be like. I felt like the team was good, I had good support, and it was a rare opportunity, so I borrowed as much as I could and jumped in with both feet. My focus jumped to managing the growth and development of my reports, increasing the iteration speed of the team, and making communication more effective between our five Boulder-based and seven SF-based members.
We launched Dashboard in June 2016. I was so extraordinarily proud of what we had done, both from a product / feature point of view, but also around the processes, structure and camaraderie of the team. We got to a major feature release on both web and iOS every month, and were growing (and retaining!) users on both platforms. It wasn’t a huge amount of users by Twitter standards but we really felt the potential was there. The Q2 2016 earnings reflected our optimism:
"And finally, we know it’s incredibly important to make Twitter as simple and powerful as possible for the marketers using the product. This is why we launched the Twitter Dashboard in Q2, which is a stand alone app and web interface designed to help businesses connect with their customers and community. The Twitter Dashboard gives businesses an advantage in the way they use Twitter. With an iOS app and desktop web experience, Dashboard gives business owners a clear picture of what’s being said about their businesses, lets them schedule Tweets, and offers insights about their Tweet performance."
Right after Dashboard launched, I got the advice that my next goal should be to “make it indispensable to the company”. Which was to say that things like analytics.twitter.com, View Tweet Activity, and Quick Promote either had enough users, provided valuable enough functionality, or were making enough money to warrant continued support. Dashboard wasn’t, and we knew that it would take more time to grow. We had plans which were starting to bear fruit, but we ran headlong into the second round of Twitter layoffs late in 2016. The general belt-tightening which followed resulted in fewer resources to spend on big bets and we were in the poor position of being relatively costly and relatively far from making a big impact. It’s hard to feel bad about losing your passion project if you have coworkers losing their jobs. I wasn’t happy about the decision at all, but I understood that it was a difficult one for Twitter to make. So “make it indispensable” is the lesson I took from that.
My last few months were split between retiring Twitter Dashboard, migrating analytics.twitter.com to a new team which would give it more love, and working with a great new team to make improvements to Twitter’s Machine Learning pipeline. The ML work was really satisfying. I got to work with great engineers. The project would make it easier to train new models and improve existing ones so it had a huge potential impact to the company. I got to dust off my Mining Massive Data Sets knowledge and familiarize myself with how production data science teams managed their work.
But I also had to be honest with myself and admit that it felt like my time at Twitter was up. Almost all of the people I knew when I first joined had left. There were fewer than 100 more tenured people remaining in the entire company. The entire senior management team had been replaced and some positions had rotated multiple times. We went from around seven hundred people to over four thousand. The headquarters changed locations, grew, then shrank. We moved into the Mid-market neighborhood and then it changed all around us. All the features and products I had helped build were either transitioned to new teams or turned down. It seemed like a good time to go and find opportunity elsewhere.
I felt extraordinarily conflicted about leaving Twitter at a time when things were not finished, problems like abuse, growth, revenue remained. But Twitter has never felt “done”, has never not felt like a hundred urgent things were clamoring for attention. The constant is that the people there are talented, passionate, work hard, remain confident that they can change things and know for a fact that what they do directly affects the world. I’m so proud to have been part of that.