We proudly present

Andrew Nesbitt

Developer at Github

Published on

In this occasion we sat down with Andrew Nesbitt, software Developer at Github. We spoke about how he ended up there, why he considers Github his dream company, what his regular day looks like and how to balance coding, playing with nodecopters and taking care of his rabbits.

You can follow Andrew on twitter as @teabass or check his Github account

Photo of Andrew Nesbitt

Photo by Drew McLellan

What is that you do?

I make websites :) At the moment I work on the main Rails app of github.com. My main focus is on the 'Explore' section that helps people find interesting repositories and projects they could potentially collaborate on.

What is your job title?

Well, I just call myself a developer. I don't try to add any extra spice to it, I just build stuff so I didn't need any specific title. You can choose whatever you like in Github. There was talk of giving me some crazy titles related to rabbits, robots or something to do with nodecopters, but I like developer.

You mention the "no extra spice". There's sometimes talk about "developers" and "software engineers". In your mind, are those just different "fashion" terms for the same or do you see any differentiation?

I don't know. I don't really see much difference there. It's more what you do than what you call it. I think it depends on the context sometimes. I recently had to get some car insurance and I had to say "software engineer" as that was more specific to the insurance company, whereas if I'm talking to another programmer or if I'm at a conference it may be different.

And as a developer in Github, what is that you tend to do on a normal day in your job?

I tend towards doing more server-side stuff, usually in Ruby or sometimes, for fun, in node or whatever is interesting at the time. I'm very comfortable doing front-end stuff as well but tend to find myself being more effective working with a front-end developer or design person to get something done.

For those collaborations, how do you usually work with other people in the organization? how many people are there in your team?

The team I'm on at the moment is two of us working full time on the "Explore" area of Github and there's 4 or 5 people that dip in and out, they're interested but they don't work on it all the time. They throw their opinions in and help fix some bugs, but for the most part it's me with the server-side piece and Jon Rohan doing more the front-end. It's not any official agreement, just that he tends towards making the front-end look really nice and I tend towards things like speeding up the page loads or improving the database queries that we're doing.

So people can just choose what they want to get their hands into?

Pretty much. It's called Open Allocation and means that within Github people will tend to do things they find interesting or important, things that they can help out with their skill set. In our case, Jon Rohan is the lead guy on the "Explore" section. He's what we call the PRP, “primarily responsible person”, who is the one that picks up the pieces if things are not working out. So I'm helping him with that. The other people in the team would kind of think "I find this interesting and would like to know what's going on but I'm not going to work on it full time", so sometimes they will come and do more or sometimes they'll disappear for a few weeks so they can work on something else. There's a lot of other groups inside Github: github.com, api, database, enterprise, office managers, community, operations,...

So how do you decide which features are a priority?

Well, the broad structure is set by the CEO and the Founders and it is pretty high level. Something in the lines of "make awesome sh*t!" or "try to make enterprise even better". From there, individual ideas and features are shared internally in the company, normally hashed out in discussions or issues within Github. Or someone could just have an idea, email some interesting people, talk around some code and then it may or may not get shipped.

And for that sharing of ideas, can you look at every team's code? maybe do pull requests?

Yes, everyone at Github is on the owners team. So you can see any repo inside the Github organization and send pull requests. We generally try to keep master as the deployable state so you cannot just merge something there without talking to the people that are taking responsibility for that piece. You generally focus on one or two repos most of the time. Github uses the public github.com internally although we have our own enterprise install as well.

You're working for Github which is a US-based company but you're located in the UK. How is that working for you?

I work from home. Around 75% of the current Github staff is not in San Francisco but working remotely. Even people in San Francisco will often work from home or a coffee shop. So most of the time people aren't in the office.

And for those 75% remote people, do you have any other offices? or do they mostly work from home, at coworking spaces or wherever they choose?

Pretty much wherever they choose, whenever they choose. All of the communication is done either via Github itself, in the chat room or via email. So it's pretty asynchronous, also because people are offset by timezone. For example I'm 8 hours before San Francisco, so I get some hours of work before they wake up, but I have to be able to work and communicate with people even though they might not be around right now. We're working very much like in a very big Open Source project where you don't know when people are going to be dipping in or out, so you try to remove the blockers and move along and work autonomously. Which is quite nice, but it's also quite different to work in any other office environment.

In my case, I have been working from home for around a year and a half now, which I really like because I don't get disruptions from people at all. Just occasionally the rabbits will try to interrupt me. But it's a little bit weird working time-shifted away from a lot of other people. That's what for me was a bit hard to get the hang of. Sometimes you need to sit and wait because you need to hear from some person who is not awake right now. So I just go and find something else to do or try to work out through the problem and leave some notes for when they wake up and there's usually a couple hours of cross-over

How do you manage to keep the hours sane? Some people experience that working from home and with the US sometimes makes them do more hours than they should or timeshift slightly to US timezones

I haven't shifted to US time yet, mainly because my fiance is very strict on when she gets in from work then I finish work because we have dinner together. I have an office that is a separate room, I only get in here when I'm working. I also try to ensure that I'm decently dressed and all those kinds of steps that you would do if you were working in an office, kind of getting your mind in the right frame.

Also, because there's other projects and conferences that I do work on, I sometimes just have to be able to turn off all this work things and ignore email for a while otherwise I'd just go insane.

And apart from the remote work, do people ever get together to work? are there any in-person meetings?

Yes, we have 3 or 4 meetups a year where each of the main "teams" like github.com or enterprise or any other gets together on a city, generally San Francisco, to hang out for a week, work together and talk about what they're working on. Also, the whole company gets together for a summit, I think once a year but it might be twice, where everyone flies to the main office for a week for basically a big party and talking about the future. Also, people tend to go to conferences together quite a lot. If you go to a conference to speak or as a sponsor you're usually allowed to bring somebody along as a buddy so you don’t go on your own to some foreign country, which is nice because you get to hang out with another githubber or more. On the last conference I went to, in Florida, there were five of us so that was a good time to hang out in person. Its not always about work but also other programming kind of things.

Inside my own team, we are always in the chat room while we are working, but on that I usually get only 2 hours crossover with the US, from around 16:00 to 18:00 UK time. We also have a weekly Google Hangout with other people in the team as well.

Could you tell us more about how you got there?

I met a githubber called Coby at a conference and we got chatting about how Github works internally. I was running a nodecopter event at the conference and he came to that. Then a couple of weeks later he got in touch and he was like "would you be interested in working at Github on the Explore section? because we got a role opened up and we think it'll be a good fit for you". And then basically the interview process went on from there.

Andrew flying a quadcopter in Full Frontal conference. Photo by Dan Govan.

And how was the interview process like?

There were a number of different Skype calls with people who I would end up working with: people from the Community team, people from the Explore team and the github.com team and after like four Skype interviews they invited me over to San Francisco for an interview. I flew in a few days before to get over the jetlag and then spent a whole day in the office, hanging out with people, doing some pair programming. After that they contacted me in a week or so to make me an offer.

It sounds like the process is slightly different from the typical software companies involving technical interviews and then coding questions in a whiteboard

Yes, they didn't do any quizzy or whiteboard coding questions at all. Basically they had already stalked most of my open source code and projects that I had done, so they were happy with the quality of code that I had produced. From there we also did some pairing on the code of github.com where we were working through adding a feature, which ended up being just an investigation on the codebase and looking at some interesting stuff. But it wasn't like they were trying to catch me out, by the time they flew me over they were just interested to see if I was a good cultural fit for the people that I had to work with rather than if I was right for the job. I don't think they would have flown me over if they didn't think I would be a good fit.

I thought the most interesting part of the interview process was the pairing session, which lasted like 4 hours. I was working with another guy called Matt Todd, who is awesome and started playing the guitar half-way through the session. I was like "wow! this is crazy!" I was poking around the codebase of a website that I've been using for years, looking at all the internal stuff, finding out about some features that were upcoming that haven't shipped yet and just kind of being blown away by the whole thing.

You mention the company checked out some of your repos before you got there. Did they comment anything about your projects?

Not so much about the code of the project itself but more about the ideas behind that. They were interested in how we could get the idea of 24pullrequests, which was about how can we get more people interested in contributing to open source projects, and how could that be added to github. I also had a tumblr called cherrypick for sharing a daily repo that I found interesting and actually I've ended up working on something similar internally for sharing repos that you like, which can be partly seen in the new Explore section in github.com.

Would you then recommend people to have some of their projects in Github or other publicly visible repositories? even small experiments or hacks?

Oh yes, definitely! It's more the concept and the drive that you put behind the project than the pretty bits of code. Sometimes you have to do some horrible hacks to get something to work but if it works and someone can actually check it out and use it and benefit from it, then that's some really good thing. If you only published code that is perfect you would probably publish very little code and we wouldn't have anywhere near the number of open source repos available to the world. So as long as it solves a problem, then yes, publish it and get it out to the world so that other people can use it or help improve this thing.

I myself have some horrible projects on Github. There's this one called brewdler which is like bundler for homebrew. It essentially has a README saying "you probably shouldn't use this", but people will still use it because it solves a problem for them, but code is horrendous! Its basically stripping a file that looks a bit like a Ruby file but it's not really Ruby so it just uses a bunch of regular expression. It's probably not even the most shaming piece of code I have, but it is certainly up there. I see it pop up on twitter sometimes and I'm like "oh god! please don't continue to use this!"

How did you get started into programming?

I started programming basically in university. The only thing I had done before then was trying to program some BASIC on an interpreter that came in my Playstation 2. That was using the controller and it went horribly wrong. It took me hours to copy a piece of code and it didn't work, so that put me off for a number of years. I then really didn't do anything until I was 18 or 19 while I was doing a degree in Robotics, which is not anywhere near as exotic as it sounds. It's basically maths wrapped up in more maths. So I was kind of getting frustrated with all the maths and found the programming module was a little bit more interesting so kind of started doing a bit on the side, trying to build a website, then getting into know Wordpress, then finding out about Ruby on Rails, then playing out with that and it kind of went from there.

You weren't doing master programming projects at the age of 15 nor anything of the sort?

Not at all. I sometimes played video games but was never interested in programming them. Also, when I started programming at university I was horrendous, really terrible. I mean, it did work but it was copy-paste everywhere and thousand-line files. I didn't understand how to make functions so I just copy-pasted procedural code over and over again tweaking numbers instead of actually putting it into functions.

And how did you end up into working as a developer after you left university?

So I had some modules regarding C and C++ programming, but I had to kind of teach myself HTML and CSS and then a little bit of PHP, but quickly ditched that for Ruby when I discovered it via Ruby on Rails. So I taught myself Ruby over a number of years and then Javascript on top of that so I was able to do more things. I don't have any formal qualifications other than the Robotics that is a Bachelor of Engineering.

I went to work as web designer in a small startup in London. It was a pretty horrendous job because they didn't really know what they wanted and they didn't understand the web but it was a foot on the door and gave me enough money to continue to learn on the job.

What were you doing before joining GitHub?

I was working as a freelancer for some years when I started help organise different events and also I moved to Bath so it felt a little bit more flexible to work as freelancer and Bath is also a bit cheaper than London, so it reduced the financial pressure as well.

When did you start getting involved in open source, communities and attending events?

I started with open source in a RailsConf, maybe 2011, releasing a gem called split. I got frustrated with the A/B testing projects for ruby so I did my own and then people started suggesting features.

I started running the London node user group a little over 2 years ago. We had a great space in one of the offices I was working in, in Camden, that wasn't being used in the evenings and I thought 'this would be great for a meetup'. I had gone to meetings of the London Ruby User Group a lot of times before just as an attendee. By then nodejs seemed to be trending and there wasn’t any meetup about it in London so I thought about starting that, with the side effect that it may help hire some interesting developers to the company... and that user group has been running for 2 years now and became quite large, I think around 150 people turned up for the last event that we did.

It has been quite interesting because you end up meeting a lot more people than you normally would working at a regular job and it helps you build up a reputation within the community. As long as you're doing good for the community then people respect you for that.

Organising these events got you to work in GitHub. Didn’t it?

Yeah! That was thanks to the nodecopter event! Actually nodecopter helped me to start speaking at events and conferences because everyone wants to come and see a flying robot. Its kind of an easy way to get your foot in the door. And also once we got enough sponsorship via the London Node User Group I could essentially take the drones to a venue and do an event for free. And that's where I met Coby from Github which was what started the interview process.

If that hadn't happened and you weren't in Github, what kind of company would you be looking for?

At that time I was still a freelancer and doing lots of smaller mainly Ruby projects and I was quite happy doing that. I had a lot of flexibility and could work on a varied amount of projects and work with people that I know that are doing good stuff. I would probably still be doing that. But of course Github was the dream job so when they came to me I was like "yes! I'll just drop everything and join Github!"

Why is this your dream job?

It's a combination of things. It is Github, and I've been pretty much using it every day since it launched. I spent more time on their site than any other site already even before I started working here. And now I just literally spend ALL the time on Github. They do a load of things that I think are really important for the community, they've changed the face of open source software, which is how I kind of got my jobs in the first place by using Ruby on Rails, a piece of open source software. So it feels like my career so far is hinged off the use of stuff around Github, so to actually be able to improve it and potentially help other people do a similar thing is very inspiring to me.

What would you say is the part you love the most about your job?

The people. There's like a hundred of the best developers in the world working on all different features of Github and its like pouring knowledge into my brain so I have to keep up with all this stuff that they're working on and learning faster that I ever learned in anything before.

What tip would you could give to somebody who wants to get a cool job like yours?

If you have any free time, plan to attend a meetup or conference that is interesting to you or potentially even outside your comfort zone, maybe something you'd like to get into but don't really know much about, and try to get out and speak to some other people that are in that area. Or contribute to an existing open source project, even if its just documentation or testing or trying to start your own one. It can be quite time consuming to get it going but its very rewarding and if it goes well and people check you online and they see some actual code they can actually get an idea about what things are you interested in and how you work without even having to speak to you. It seems you always end up getting way more interest from that than you would expect.

How does GitHub recruit people? Can people find job offers for GitHub?

I think any jobs that are open are posted in the Github job board and they're also sent around internally. There is an app called Hire that we have internally that is a recommendation engine for people that employees have suggested would be good for hiring and then people would reach out and contact them.