almost 4 years ago
For the last 2 years I lived and breathed my job at Stack Exchange, now I am moving on. It has been an awesome ride, I wanted to recap on some of the things I did and perhaps explain why I am moving on.
One day I checked my mail and got an email from Jeff Atwood saying I am in the "short list of moon people" he would like to hire, "Obviously, this would be working remotely in a distributed fashion". A few days later I was working directly with Jeff on an open source project called "Data Explorer". The goal was to provide a place for Stack Exchange users and the Internet at-large to run SQL queries against the various Stack Exchange public data dumps. It lives at http://data.stackexchange.com. I am incredibly proud of my creation (and the various community contributions)
I was hired as a contractor, my work on Data Explorer was a trial. Jeff and I were on a "date", we wanted to see if this whole thing could work out.
It worked out quite well. Working remotely was perfect for both of us.
A few months later I was anointed Stack Overflow valued associate #00008.
We have a tradition at Stack Exchange; when you start out at the core team, you can pick a random bug that bothers you and fix it. My first bug was sorting out browser history on the user page, it used to drive me mad that when you clicked the back button after paging through a few answers would reset the paging.
After that, I worked on revamping our badge system to associate reasons with badges, built the tag synonym system, created the tag wiki system, created the answer and question draft system and designed a system for internal analytics. Much of this was initiated by me, much of this was initiated by Jeff.
I also created our database migration system because I tired of running SQL directly against the DBs in true cowboy fashion.
This all happened in the first few months. I was mega productive with very little legacy to maintain.
A few months in
After a few months I really found my groove, I was busy doing lots of performance work, fixing bugs and building cool things. I introduced a few diagnostic tools to monitor server render time and SQL Server performance. I also started working on some top secret algorithms to help us deal with the slew of low quality questions at Stack Overflow, we made some drastic improvements. I also redesigned the Stack Overflow home page with Jeff.
After that I started working on the feature which got us to what Jeff believes is the v1.0 of our engine, suggested edits. This feature allows anonymous and new users to submit edits to any content on our sites. Ever since we deployed this feature we got over 250 thousand edits we would not have seen otherwise.
Throughout this time I learned much about the game mechanics that make Stack Overflow work and found my groove as a performance "expert".
I blogged about the reason we created Dapper our own micro ORM. I created it with Marc to combat some very hairy performance issues we were experiencing. These days we use Dapper for the vast majority of data access on Stack Overflow, with the caveat that some still use LINQ to SQL for write based work. It was and is an enormous success for our use case.
MiniProfiler started around around April 2011, while the entire dev team except for Marc and Jeff were at a dev conference. There was an urgent performance issue, Jeff was browsing through the site and noticed a delay. This delay really bothered him. Marc quickly ported a system he built for chat to the main site. This system shoves a comment at the bottom of the page explaining where the time went, in production. I helped improve this design by providing some richer database query information, Jarrod took this from concept to a polished product and did a smashing job. I have taken a very active part in this project recently, adding client timings, promoting it and reviewing/accepting patches. I blogged about MiniProfiler when it was released. I am incredibly proud of my contribution to the project and am delighted to hear it helps people. I am incredibly proud our humble project is on the second page at nuget.org.
A more mature product
In my second year I had a fair amount of features to maintain. Additionally, we accrued a big pile of "performance debt" we had to pay back. I spent a lot of time optimising server performance, a prime example is our tag engine, I talked about here. Further more, I spent a lot of time learning about client performance and deploying many best practices on the site. Improving something that is already extremely optimised due to work Ben put in, is very tricky and the rewards are not huge. Overall, I feel our performance story on Stack Overflow is pretty spectacular.
During this time I also refined the review section on the site, worked on improving the moderation story, improved the bounty system and built the post notice system. Recently tested every external link on our sites.
About six months ago Jeff, who lives in California, left. Additionally, Kevin moved to the NY. This left only one team member, Geoff on the west coast. Rebecca is the only other core team member slightly closer to my time zone is on CDT. In winter daylight saving time kicks in (and out); time zones move a couple of hours apart. Unfortunately, due to this, I was left with very little business hour overlap with the rest of my team. I love working remote but being 14 hours apart with the majority of the company presents some unique challenges. California is 3 hours closer, offering some business time overlap - even in winter.
Working with incredibly talented people
I feel extremely lucky to have worked with the Stack Exchange core team, everyone is incredibly committed and incredibly talented, I will sorely miss working with them. It is a rare treat to work in such a team.
Not a week passed without me learning something new and interesting from my team members, I thank them dearly for that.
What is next?
I want to be a founder or a mercenary.
I never took the job at Stack Exchange for the money. In fact, I had a small pay cut. I took the job because I was in love with the mission, I knew I could change things and make the Internet a better place. I think I did in my own little way. I love the fact that I am leaving this job with a big pile of public artefacts. This is worth much more than cold cash.
However, I am not getting any younger, I would like to have a large stake in the next project I take. The only way to have a large stake is to be a founder.
Alternatively, in the near future, I am comfortable being a mercenary; look for a few short term contracts that pay really well and use that cash to build something awesome.
I have plenty to keep me busy for the next few months, there is Community Tracker and Media Browser that need love. I would like to finish and publish MiniProfiler for Ruby. On a personal note, I miss working with Ruby.
I would like to thank all the awesome people at Stack Exchange for the amazing ride, I am sure you will continue to make the Internet a better place, keep rocking.