Tuesday, July 2, 2013

Leaving Yahoo! for Asana

Yesterday the USCIS returned receipt of my H-1B petition, so I gave my official notice. This is my final week at Yahoo!. On Monday I start an exciting journey with Asana. They're working on task management, which is the boring part. The exciting parts are the people, the tech and the culture. I had been talking with them since long before the Yahoo! acquisition closed, so it's great to finally see this through.

So why task management? Although I said that's the boring part, it's not entirely true. It's a crowded market, and the Asana co-founders come from building task management software at Google and Facebook. They know what they're doing, and they're getting amazing feedback. Remember how Gmail felt a bit like a desktop application when it launched in 2004? As the web has progressed, it no longer feels like it. Asana does. It's their Javascript framework which makes it much easier to implement zero friction web applications. One of the Meteor co-founders came from Asana.There are so many more reasons I'm beyond excitement to join them. The last time I remember being this excited was weirdly enough restarting my masters project after my initial supervisor resigned. The people are amazing. Did I mention they were co-founded by Facebook co-founder Dustin Moskovitz? He was the first person I met there. He convinced me to interview. Their tech is amazing. I already mentioned the Luna framework. Read all the other stuff we get to play with here. And their culture? They work really hard on finding the right fit when interviewing candidates. I believe that's why they put in so much effort to get me to join. I believe that leads to a very tight group who work together amazingly well. It's hard to convey what this culture means. I just feel it every time I go there. I haven't come across a more perfect fit. That's huge for me. A few things I could touch on is how transparent they are (see their Quora answers), how much they care about their employees (a different type of caring to the Google's and Facebook's), and how they encourage people to get involved in all aspects of the business they show an interest in.

Perhaps the most import reason for me though, is that it's a far more suitable career choice that I expect will prepare me much better to found my own startup. It's also I place I can see myself staying long enough to get a green card to leave open the option of starting up here if I so decide. It complements my Loki experience. That was with a small, young, inexperienced team. They relied on me for many things. Some things which I wouldn't dare put in my hands. We were just too small. I loved it that way. We didn't really grow much though. With Asana, I'll be working with people who have founded startups before, most of them have 10+ years experience, and they're on a solid trajectory so it's a risky but less risky shot at crazy growth one expects from a startup. They're also in it for the long haul, which means no acquisition.

Yahoo! was fun. It was eye opening. It changed my perception on looking at so-called dying brands from the outside. Anyone who says Yahoo! is dying is ignorant. Look at their earnings reports. Look at their stock price since Marissa took over. She has also shown how one person can turn a company around from within. Frequently the topic of conversation would be how shit it was before, how the people who stuck it through and are still there are the true believers. The people who work there are great too. My antispam team could easily be transplanted into Google or Facebook. They'd probably do a better job.

It is terribly difficult saying goodbye. It was no easy decision, and I will never really know if it is the right one. Heck, is there even a right one? Whatever could have been at Yahoo!, I am thrilled, super excited, hell I can't describe it in this blog post how much I can't wait to get started at Asana. I looked into well over fifty companies, spoke to a couple dozen and interviewed at about a dozen (or more, definitely more if you include acquisition interviews). I sought something super special, and I found it! It's been forever. I first met Dustin in February. It's good to wrap this up and get this out there. 

Huge thanks to everyone who listened to my rambles as I tried to make a decision! There are too many of you for me to name them all, but the main helpers include Jason, Henk, Michiel and my parents - you're all awesome!

Sunday, September 30, 2012

Torn between Cape Town and SF Bay Area

The only job I have ever worked in South Africa was as a packer for Woolworths for a few weeks in high school. I have taken all the opportunities I can to combine work with travel. In the past, that was for internships. A year ago I moved to the San Francisco Bay Area "permanently". Sometimes I'm asked "why?" but more frequently I am asked when I'm moving back and why would I move back.

I came here to work for Facebook, a position one simply cannot find in South Africa. I have since moved to mobile gaming startup Loki Studios. I am learning so much. Just yesterday I was at a growth hacks conference, where I learned a huge amount about customer acquisition, a topic I doubt I would have picked up had I stayed in Cape Town. I meet awesome people all the time. Just yesterday I met a couple guys, including the CTO, of Scalr and we had amazing exchanges of stories about how they founded the company by having the project outsourced to them in Ukraine and how they want to move everyone here. I love my job. I get to work on so many different projects, working very closely with everyone in the team, learning about things I would otherwise not have dug into, but which will probably be very useful down the line. I have some great friends here. The weather is great. The beer is fantastic. I get to travel to so many exciting places nearby, although I haven't done much there yet.

So then, would I move back to Cape Town? Absolutely! I feel I am in the interesting position, where the benefits of being here and in Cape Town are roughly equal. I have quite openly stated that I want to start a startup some time soon. The local startup atmosphere and move to Loki have accelerated that plan. So I've been talking to lots of people about where I would do it. My thinking right now is that when I feel it's time to start up, I'm going to head back to Cape Town.

The way I see it, Cape Town is a pretty great place to start a startup. At least, for me. That last part's crucial. Living expenses are in Rands, while revenue is still in USD. The startup community has reached the point where you're no longer lonely. My friends and family are there (nothing against my friends here, but I've known my SA friends way longer). I don't have to worry about US immigration. Possibly the biggest factor though: I have a large network of excellent software engineers there, I'm known and trusted far more there. I know far more people in Cape Town that both I would want to work with them and they would want to work with me. The friends / friends-of-friends hiring seems crucial to early success.

Those are the biggest factors. What about funding though? It's terrible in South Africa. Lately I've been discussing ways of dealing with the problem. Local seed funding would be great, but there's not much going around so one can't rely on it. I would far prefer to be in a position (idea dependent) where I can bootstrap, at least to begin with. I'm learning of various ways to keep the option open to get funded by US investors. It seems they really want the business operations to be run in their neighborhood. That doesn't include the engineering effort though. So it might make sense to move that back here. Problem is I've heard of a couple experiences where that has turned the company from tech-driven to business-driven, which I'm not happy about. So I'm still thinking there. I've also been hearing of ways to get an L1 visa after a year, and various other possible solutions around the immigration problem if you start outside the US.

So the way things are looking, that packing job might be the only ever job I take in South Africa.

Tuesday, April 24, 2012

Cape Town Tech Communities

For the past 8 years I've been doing all sorts helping the Cape Town tech community in many ways. Lately, I've been using my experience and connections to help spur some life and energy into existing communities, getting them to do stuff. It can feel like talking to a brick wall at times, but the times when it results in new activity or reigniting an old group make it so worth it.

I often hear people say there's not enough going on in the local tech scene, and my response usually is that they're oh so wrong. I've come to realise just how fragmented the tech scene is. There are small groups that go off in a corner, and new people rarely find out about them. So here's a list of what I'm aware of going on in Cape Town. If you see a community you like, go join them. If you find a gap, don't bitch about it: form one! If you need help with that, I'm more than happy to help and I'm sure Jonathan Hitchcock will offer help too.

Architecture Meetup Facebook Group and Google Group
Cape Town iOS Meetup
NodeCPT (Google Group)
Cape Town Joomla! User Group
Drupal South Africa Community
#hackSTB (demos of what people have built in Stellenbosch)
UCT Developer Society (#breaktherules, #talkwithbeer, etc.; targeting students)
Maties Developers (Media Lab Monday talks, #HackSTB, etc.; targeting students)
codebridge (host networking events, talks, etc.)
Maties Computing Club
The SiliconCape events page and StartupDigest newsletter are good sources of events gathered from all over, with more focus on entrepreneurship and startups

I'm sure there are groups I've left out. Please tell me about them (in the comments or tweet me) and I'll add them. There are some semi-private groups I've purposefully left out: they're semi-private for good reason, so don't blabber about them.
No more bitching about the lack of activity in Cape Town, please?

Monday, May 31, 2010

Long Overdue Update

It's been a long 10 months since my last post, so an update is long overdue. So, what have I been up to all this time?

I've been actively growing our still relatively new UCT Algorithm Circle. We had our 2nd Python course with 75 kids at UCT, and about 15 each in Stellenbosch and Johannesburg. We've put together a solid funding proposal to Google, which if successful will allow us to teach 1,000 kids in Cape Town, Stellenbosch, Johannesburg and Durban as well as attempting to motivate and assist students in these regions to form their own courses.

I've obviously been working towards my MSc in Computer Science. The idea to finish within a year didn't quite work out. Turns out the area I'm working in is ridiculously competitive, so we've been getting harsh paper reviews (not to mention the two immediate rejections without review!). This has resulted in things taking longer than expected, and along with that I've lost a lot of motivation. I'm still touching up the final results and then need to churn through the thesis. I have about 75 pages already, but a lot of it needs to be reworked.

On Wednesday, I leave the country for four months. I'm starting a second internship at Google Zurich, working with my previous mentor this time on the Google Calendar backend. I have a vague idea of what I'll be working on there and I must say it excites me a lot! Once again it's going to involve some stats, which I really enjoy since it often means dealing with insane quantities of data.

Unfortunately I'll be missing the soccer, but hey what would you rather be doing? :P I'll make an effort to head across to Italy to watch some of their games with family there. My roommate so happens to be a Swiss rugby fan, which must be extremely rare. So I'll get to watch the Tri Nations with him.

While I'm up there, I'm going to attempt to finish off as much as my thesis as possible. It will be tricky not having physical meetings with my supervisor, but Skype will have to do. I'm also going to be meeting with my potential PhD supervisors while I'm up there. It's either PhD or work followed by PhD for me -- I haven't quite decided yet.

So that's a very brief update on what's been happening the past 10 months. I plan to be a bit more active here while at Google, to at least keep my friends updated with what I'm doing over there.

Sunday, August 2, 2009

Introduction to Programming Using Python

Just under a month ago I tossed the idea around of running a Saturday course to teach high school kids some programming. The idea was to take the new batch from the UCT Maths Circle and give them some exposure to programming and introduce the keen ones to our UCT Algorithm Circle. Back then I had no idea it would turn into this:

When I realised the number of new kids coming from the UCT Maths Circle might be too small, I decided to open it up for application from anyone with limited or no programming experience. All we asked for was a 100 word motivation of why they should be invited and an optional recommendation from a teacher to strengthen their application. I approached the Computer Olympiad office for a list of email addresses and postal addresses of the schools that had entered the Computer Olympiad before. We emailed about 90 schools and posted to about 60 schools with no idea of what to expect.

The advertising was sent through during the school holidays, so nothing really happened for some time. When schools started on Tuesday 28 July though, they started coming in slowly and some of the applications looked very promising. It was around this time that I started thinking of how many we could accept: I settled on 30 and asked 3 other students to help lecture/tutor. By the end of the first week of school though, applications had started flying in like mad. By the end of Monday we had received about 60 applications and they were still coming in. If we stuck at accepting 30 we would have had a shit time turning away some strong applications. Rob to the rescue as we got a fourth lecturer which allowed me to increase capacity to 40. More kept rolling in, including one application arriving on the morning of the course!

We eventually ended up inviting 46, with the expectation that at least 5 wouldn't pitch. We underestimated their enthusiasm: one fell ill, another had a last minute commitment; everyone else pitched! Even after the first day, only one kid fell ill and the rest all returned. Unfortunately a group of four girls had to leave early to catch a lift and another left as she was falling behind. Everyone else stuck it through the whole way. Not something I could possibly have expected! But it means we did something right, right? :)

We chose to run the whole course in the computer lab so that they could run short examples as we taught them things. It really worked well as we could immediately see if they were struggling on something and we never once lost them badly. We could get them to run bits of code to see for themselves what they did and then expand on how it worked.

Taking a step back a bit, on Thursday morning I got a bit of a scare. One of our lecturers had caught a bad dose of the flu, so I ran around trying to find a replacement. Fortunately some students lurking around in the Computer Science building at the time offered a hand and I split the load across three of them. I thank them all mightily for helping out at such short notice. They did a fantastic job, as did all the others that gave a helping hand. In the end it was myself and Michiel Baird doing all the admin work; the two of us, Ben Steenhuisen and Julian Kenwood doing the lecturing; then Jason Brownbridge, Bertus Labuschagne and his brother Phil and Kosie van der Merwe helped out with tutoring, answering the kids' questions; Brent Benade helped order pizza for everyone, a rather nasty job.

When the kids started arriving there was quite a lot of tension in the air, which was to be expected. We planned for this and tried to make sure that we had at least two from each school, so that there was a good chance each kid knew someone else. A number of our lecturers and tutors are great at throwing humour around, which helped ease the tension really well. By the end of the first day (3 hours) most of them had opened up and had no problem asking for help.

The topics we taught, in the order we taught them:

  1. What is programming?
  2. Using the Python interpreter
  3. Input and output
  4. Variables, operators and basic data types
  5. Boolean expressions and conditionals
  6. While loop
  7. Lists
  8. For loop
  9. Strings
  10. Writing functions
That was all covered in 9 hours. Bear in mind that these are grade 7, 8 and 9 kids (and a couple grade 10's) with mostly no prior programming experience at all! Now read the list above again. From what I can remember of my high school experience, what we taught them in 9 hours was equivalent to what is covered in the entire grade 10 and 11 IT syllabus minus files and gui's, and obviously all the theory crap.

They all did exceptionally well. Now it's time for them to write the test we gave them and we'll invite the best ones to attend weekly 90 minute classes to further teach them more on programming, especially focusing on improving their problem solving skills. What's great for them too is that they also have the opportunity of being invited to UCT Maths Circle, our partner in crime.

There is one thing we feel exceptionally guilty about. We received over 80 applications, but only had space for 46. Reading each and every one of those motivations of the kids we had to turn away makes me feel very sad. Therefore there is the possibility of us running another course like this in the near future. If you are interested in attending a future course, please contact me. We also run another class on data structures and algorithms for those who have a strong grasp of programming, are bored in class and want a challenge.

Sunday, February 1, 2009

UCT Algorithm Circle

After much grinding away, we had our first class of the UCT Algorithm Circle this past Thursday. We invited 32 of the most talented school kids we could find in the Cape Town area and invited them to some training. We're also slowly inviting kids outside of Cape Town to train online. We're teaching them from the very basics of programming right through to the advanced algorithms and data structures required for the IOI.

For the first class, we introduced the basics of Python. We were amazed at how quickly the kids caught on. After a 20 minute lecture and 60 minute practical session they were understanding operations, variables, stdio and more. The majority of these kids are in grades 9 and 10, and amazingly half are girls.

If things continue at the rate they're going now, this could provide a serious boost to our IOI results in upcoming years. We've always been welcome to the idea of training a wider audience, but finding the talented kids and getting them interested has always been a brick wall we couldn't knock down. This time though, collaboration with one of the people involved in the teaching kids for the IMO has seriously helped change all that.

To see the kids we have, just check out some of their introductions in this thread to see what they're capable of.


After completing the meat of my background chapter in December, I spent the most part of January working on a prototype for my masters project. So now I get to start showing off all my pretty pictures. :)

First of all, I should mention that I am writing an extension for VMD, so I most certainly did not develop what you see below from the ground up. In an effort to simplify the process of porting my work to other molecular visualisation applications (e.g. PyMol), I decided to do all the core computation in an application-independent C++ module which communicates with an application-specific plugin via sockets. For VMD, this plugin is written in Tcl, which I have come to hate.

When you first launch VMD, you get a simple protein. Launch my extension and it churns away, calculating conservation scores (dummy values for now) and the solvent accessible surface of the protein. The protein is then coloured based on the conservation scores, which you can see below for a sample protein.

After visualising the conservation scores, the final application will visualise its prediction of binding sites. The user will then be given the option of doing further analysis of the binding sites. We're currently considering two forms of analysis: select a residue and predict what a binding site containining this residue would look like; and select some residues and predict what the binding sites would look like if we excluded these residues from the predicted binding sites. Below is a sample of user-selected residues (in red).

Then the user can choose to visualise the solvent accessible surface. We calculate this surface using marching tetrahedra to extract an isosurface and kd-trees to calculate the isovalues. The surface is coloured by the conservation scores, just like in the previous shots. Currently I don't have residue selection working in this mode, although I plan on doing so. The meat of my computation will be using the conservation scores and the solvent accessible surface to predict the binding sites.

Then finally, VMD is a very feature-full tool and least of which you can do is rotate the protein for a view of the entire protein as you can see below. There is much more you can do with it, but I'll leave interested readers to explore themselves.

Next week I'm off to the Afrigraph Conference in Pretoria, after which I have to attend this 6 week bioinformatics course in Stellenbosch. Lectures 09:00-18:00 every day for 6 weeks. Not sure how I'm going to last.