2016 Cape Epic

What is this Cape Epic thing, anyway? 

In short, it’s a multi-day mountain bike race. Quoting freely from the relevant Wikipedia article, “The Absa Cape Epic is an annual mountain bike stage race held in the Western Cape, South Africa. It has been accredited as hors categorie (beyond categorisation) by the Union Cycliste Internationale. Among other events in world cycling which enjoy this status are the Tour de France, Giro d’Italia and Vuelta a España. […] The Absa Cape Epic was described by Bart Brentjens, 1996 Olympic gold medallist in mountain biking and a former Absa Cape Epic winner, as the “Tour de France of mountain biking””

So, yeah, it’s a hard race.

Sounds un-fun. Why did you do it? 

It started, as have so many of my questionable endeavors over the past 20 years, with a suggestion from Brandon. In this case, it was him saying “Hey, while you’re living in South Africa, we should do the Cape Epic”, in early 2015. At this point, my definition of a long mountain-bike ride was anything over 40km, so my reply was pretty much unprintable, and there the matter rested.

However, since the Prologue stage of the 2015 Epic went pretty much right by my front door, and there had been a bunch of hoopla on TV about it, I decided to go watch the Prologue and see what sort of insane people signed up for something like the Epic. As I watched the non-pro riders go by, and saw that they didn’t all look like aliens from Planet Bicycle, I started to think “…. wait a minute, these look like the type of riders I see out every day …” … and thus were the seeds of madness planted.

Once I started actually considering it, I talked to Coach Ben to see how long he thought it’d take to get ready, secretly hoping he’d tell me it would take me 5 years, 2 million hours of training, and losing 50% of my body weight. Unfortunately, he figured I could get ready in a year, and so I couldn’t use that as an escape. Next came one of those awkward conversation with our significant others, the ones where you start off with “Hey, honey, so I’ve been thinking about …”, in the hope that the casual tone will lull them into saying yes without really paying attention. Thankfully, being the awesome, super-understanding wives they are, they gave Brandon and me permission to undertake this latest bit of shared insanity.

After that, the last hurdle was actually getting an entry, because the Epic sells out pretty much instantaneously every year. and we were lucky enough to get one of the 100 early-bird entries that sold out in 9 seconds. (Suspiciously, the 100 early-bird entries for next year’s race also sold out in 9 seconds, which makes me think their online system is only capable of handling 11 transactions per second.) Once all that was out of the way, it was time to get down to the business of actually doing the necessary training.


I trained via a combination of rides outside and indoors on a Wahoo Kickr. In general, my training sessions during the week started between 4-4:30am and were done by 6 am; weekend rides started between 4-5am and were done by 10:30am at the latest.

Training stats, from 4/1/2015 – 3/12/2016:
– 338 hours total (both on the trainer and riding outside)
– 120 trainer sessions
– 58 rides outside
– Total distance ridden outside: 3668km (2292 miles)
– Total distance climbed: 83,270m (~275,000 feet)
– Average distance per ride: 63km (~40 miles)
– Average climbing per ride: 1435m (~4700 feet)

I was primarily worried about the climbing, and so I made sure that I climbed as much as possible during my long weekend rides, trying to get in at least 1800m (~6000 feet) of climbing each time. Most of my rides were around Table Mountain, with a typical ride looking like this.

The above numbers also include the 3 races I did as preparation: the Berg and Bush 3-day stage race (stage 1, stage 2, stage 3); the Attakwas single-day race; and the DuToit Tankwa Trek 3-day stage race (stage 1, stage 2, stage 3).

When I started the Epic, I weighed about 85kg (~187 lbs), and had an FTP of 300W (measured Dec 4th, via a 60-minute test). On the morning after the Epic was over, I weighed 80kg.


Per the advice of my friend Max, we made life as easy for ourselves as possible: we rented a motor home so we didn’t have to sleep in a tent, we got a personal massage therapist who also drove the motor home from stage to stage, and we arranged for the good folks at Trail and Tar to sort out our bikes after every stage. It wasn’t cheap, but it contributed immeasurably to our peace of mind and ability to recover after each stage to not have to worry about any of that sort of logistical stuff. After each stage, we just dropped off our bikes with the mechanics, took a shower, got a massage, went for dinner, and were generally in bed by 9:30pm.

The Race 

By using the super-sophisticated tactic of simply asking for it, Brandon also managed to get us the ideal team number.

By using the super-sophisticated tactic of simply asking for it, Brandon also managed to get us the ideal team number.


The official course description for the 2016 Epic claimed the race would cover 654km (408 miles), with 15000 meters (49500 feet) of climbing. Per my bike computer, we did 661km (413 miles), and climbed 15855 meters (52300 feet), so overall the actual route came pretty close to the official description.


Ready to roll on the Prologue.

Ready to roll on the Prologue.

Before the Prologue.

Before the Prologue.


It was pretty windy out at Meerendal during the Prologue, which was Brandon’s first introduction to the crazy Western Cape wind. He wasn’t enthusiastic about the conditions, but it was a very short stage, so at least it was over quickly. (Total stage time: 1h 42min)


Stage 1: A long stage, but none of the terrain was particularly demanding (eg loose or sandy), so I got through it without too much trouble. It was very hot, though, around 32/33C (+90F). (Total stage time: 8h 9min)

Stage 2: This was the 100th stage in the overall history of the Epic, so there was a bunch of hoopla about it during the previous evening’s stage briefing. However, I found it pretty uninspiring. There was a big climb very early on which was basically just everybody pushing their bikes up the entire way because people kept stopping and getting off at even the slightest hint of a rock bigger than a pebble. Then, on the way back, we went down the same way we came up and again had to stop a bunch because once again people couldn’t ride over (small!) rocks, even downhill. Overall that made for a pretty long day, and all the hike-a-bike totally trashed my legs. It was also another very hot day, so I felt fairly tired after this stage. (Total stage time: 8h 8min)

Stage 3: I knew I was in trouble 10 minutes after we’d started pedaling – my legs were just not having it, and even the smallest climb required enormous effort. Brandon, meanwhile, was feeling pretty good, so I just hung on to his rear wheel for dear life, and made it to the first water point. That was when life really started to suck, because what had been euphemistically described during the stage briefing as “a little bit of sand” turned out to be 30km of sand between water point 1 and water point 2. Riding through sand is the most soul-sapping experience imaginable, more so when you’re already feeling weak, so by the time we got to the second water point I just wanted to lie down and cry. And we were still only half-way through the stage …

Next came the climb on the road up Bain’s Kloof, which was beautiful scenery but for me was the deepest I’ve ever been in the pain cave. At one point, I had to get off and just drape myself over my top tube for a few minutes with steam coming out of my ears while trying to recover some semblance of composure. Brandon was the ideal team-mate through this, patiently waiting for me and encouraging me along. Thankfully, I somehow recovered a bit once we hit the single-track section of the stage, even though it included a fair bit more climbing, and we managed to nurse it home 35 minutes before the stage cut-off time.  This was another very hot stage, so hot that the organizers set up 3(!) extra water points. I was totally shattered after this stage – I barely had the energy to go shower, and was too tired to really eat dinner. (Total stage time: 8h 41min)

Stage 3 did not go as planned

Stage 3 did not go as planned.


Stage 4

Beginning of Stage 4.

Beginning of Stage 4.


Given how the previous day had gone, and the fact that I still felt pretty wrecked, I  started the stage with a fair amount of trepidation. Thankfully, while I was still in bad shape, it wasn’t nearly as bad as the day before. Once again, Brandon was feeling good and pulled us through the stage, and we made it with over an hour to spare before the cut-off. (Total stage time: 5h 54 min)

It was all rather dusty.

It was all rather dusty.

Stage 5: This was billed as the “Queen Stage” of the race, because it had the most climbing, and was the one Brandon and I had been most worried about. I realized fairly early on that I was actually feeling pretty good, but then it became clear that it was Brandon’s turn to meet The Man with the Hammer. I matched his speed, walked with him when necessary, and he pushed himself super-hard, but by the time we got to water point 3, it was clear that he was in serious trouble. The medics came over to look at him, poked him a bit, asked him a few questions, and then diagnosed him with extreme dehydration and in urgent need of an IV. And, given that we still had 30km to ride, including a big climb, and only 2 hours in which to do it, it was clear that he wasn’t going to finish the stage. So I was given a choice: stay with him, or try to finish the stage in time myself. I wanted to stay, he told me to go, so we cried a bit, hugged it out, and then I rode off. I ended up making it with 15 minutes to spare, but it was an awful feeling to cross that finish line without him. (Total stage time: 8h 16 min)

A little souvenir I picked up on the designated technical section of Stage 5, trying to make it home before the cut-off.

A little souvenir I picked up on the designated technical section of Stage 5, trying to make it home before the cut-off.


By the time I got back to the camper, he was back as well, having received a couple of IV bags, but still feeling like crap. We talked a little bit, but it was clear he was still very much running on fumes, and he fell asleep around 5pm.

Stage 6

Boschendal race village.

Boschendal race village.

View from the race village in Boschendal.

View from the race village in Boschendal.

Judging by the fact that he’d shown no signs of waking up anytime soon while I was getting ready in the morning, I figured Brandon was still out of commission, and lined up to ride the stage on my own. It was a bummer to ride alone, because it was the most fun stage so far – lots of flowing single track, both climbing and descending. I felt pretty good, but given the previous couple of days, didn’t want to push very hard, and so I just focused on enjoying it. (Total stage time: 5h 38min)

When I got back, I found out that Brandon had slept till 9am ie he’d slept 17 hours, but he was looking and feeling a lot better. Based on a discussion Brandon had with the medics the previous day, we were under the impression that we’d be able to ride the last stage together. Unfortunately, that turned out to be against the rules and, despite lodging all sorts of appeals (including getting the medics to talk to the race director), he wasn’t cleared to ride the last stage. That was of course hugely disappointing, and took the wind out of my sails for the last day.

Stage 7: At this point, I was very much in a “Let’s just get this over with” mindset, so it didn’t help my mood that 2-3 hours of this stage involved grinding along flat dirt roads, into a head wind, with nothing pretty or interesting to look at. I tried riding in a pack, but couldn’t find one that had the right speed – they were either going too fast or too slow, so mostly I ended up just riding by myself. By the time I crossed the timing mat for the last time, I was very much ready to be done. Christina, Helena, Xander and Brandon met me at the finish line, I choked back some tears, and suddenly it was all over. (Total stage time: 5h 22 min)

Finish at Meerendal.

Finish at Meerendal.


Overall, about 630 teams started the race, and 483 teams finished. Per my final stats, it took me 51 hours and 52 minutes to finish, which put me in 100th place out of the 134 individual finishers (ie people whose partner had also withdrawn). Not exactly a spectacular result, but given that my primary goal was to finish, I’ll take it.

I rode uphill a lot for 8 days and all I got was this bit of hardware.

I rode uphill a lot for 8 days and all I got was this bit of hardware.

General musings

Logistically, the Epic is extremely impressive: registration was very efficient, the port-a-potties and showers were always clean, the food was decent and plentiful, each stage started on time, the courses were well-marked, the water points had lots of choices of food and drink etc. Making that happen flawlessly, with over 1200 riders, over 8 days, in 3 different locations, takes a lot of work. About the only thing I think they could have done better was to have cold water and ice at the water points, rather than the sort-of-cool water that was available – it’s not very much fun to drink lukewarm water when you’re already overheating.

The stage routes: meh. Although this year’s race was billed as having the most singletrack ever, we still spent a lot of time riding through vineyards and on dirt roads.

Overall, I feel like I was well-prepared for the race. All the climbing I did on my training rides certainly paid off – I wasn’t intimidated by the climbing required and was generally one of the stronger climbers in the groups we rode with. Brandon and I were also among the better descenders and technical riders – we spent lots of time fuming about people ahead of us slowly picking their way through anything that had rocks bigger than a fist. The bits of riding that actually hurt me the most (relative to what should have been required) were the flat grinds along dirt roads – I didn’t do very much flat riding during training and so didn’t have the muscle memory to efficiently cruise along those sections. Luckily, that sort of riding is Brandon’s forte, so I generally tucked in behind him and let him pull us through those parts.

Would I do it again? Probably not. While it was awesome to hang out with Brandon, I just didn’t enjoy it enough relative to what was required, both in terms of training time and the attendant sacrifices, as well as financial cost. It also felt like the organizers went out of their way each day to throw in a little unnecessary pain, to make sure they maintained the Epic’s reputation as the hardest MTB stage race in the world. For example, at the last water point on Stage 6, we were told that the stage was actually 3km longer than we’d been told the night before, and then it turned out that those extra 3km consisted of some ridiculously rocky singletrack that just took all the joy out of what had been a great stage. My running joke was that the hashtag for the Epic shouldn’t be #8DaysOfCourage, but rather #ItsAlwaysOneMoreFuckingThing. And, last but not least, an 8-day race is just really long.

I couldn’t have done this without a ton of support and help, so I owe a huge debt to all the folks who helped make this happen:

  • Christina and the kids, for putting up with my long weekend rides and me being tired a lot, and being super-supportive and attentive during the race, including calling the Epic race office when they thought we were stuck in a field [which we weren’t, but it looked that way because our tracker was malfunctioning :-)]
  • Brandon, for suggesting we do this in the first place, and giving us yet another set of awesome memories
  • Ben, for getting me ready from half a world away
  • Thomas, Victor, Jessica, Janaina and my mum for all the supportive messages throughout the race
  • Christian, for designing our riding kit
  • The 529 crew for introducing me and Brandon to mountain biking, and all the support before and during the race
  • Iulian, Walter, and Danian for all the training rides and races, and putting up with me whinging about having to stay in a particular heart-rate zone
  • Max and Dirk, for giving me solid advice about logistics around the race
  • Grant and the crew at Trail and Tar for taking such good care of our bikes that we didn’t have single mechanical issue throughout the race. (We both rode Santa Cruz Tallboy Carbons, with SRAM drivetrains and wheels, and Maxxis Ikon tires)
  • Kurt for being an awesome massage therapist and generally a cool guy to hang out with

What’s next? Well, I hear the Swiss Epic has a lot of singletrack, goes through incredible scenery, is shorter, and isn’t as hot …

Deep Work

I just finished reading “Deep Work”.  The underlying premise of the book is that to be very successful in the future, you need to be able to learn difficult things quickly, and produce at an elite level, in terms of quality and speed. Further, doing so requires the ability to do “deep work”, defined as “professional activities performed in a state of distraction-free concentration that push your cognitive capabilities to their limit. These efforts create new value, improve your skill, and are hard to replicate.” This is contrasted with “shallow work: non-cognitively demanding, logistical-style tasks, often performed while distracted. These efforts tend to not create much new value in the world and are easy to replicate.”  While I’d already come across most of the ideas advocated for how to get better at deep work, and do more of it, I thought the book did a good job pulling the ideas together into a coherent package, with concrete advice for how to do the things being advocated.

That said, in terms of applying the advice in the book to my own work, it immediately triggers the question: what qualifies as deep work for a software engineering manager? My current take on this is that doing deep work for a software engineering manager means:

  • Learning about (new) technology, thinking about its potential applicability, and evaluating it – does it solve a (technical) problem the team currently has? does it address a customer need? does it enable an entirely new scenario?
  • Thinking about ways to improve their team’s software (making it faster/more scalable/more stable and easier to operate/faster to produce), and then making those improvements happen
  • Building and successfully advocating for a compelling and ambitious road map for the team, that takes into account customer and business needs and trends, as well as technology evolution
  • Finding and hiring great talent for their team
  • Growing the skillsets of their team members, and keeping them happy
  • Thinking about whether their organization is structured correctly – does each team own the right services/components? Are there new teams that should be formed? Are there teams that no longer make sense?
  • Improving the efficiency/effectiveness of how their team operates
  • Driving delivery of high-quality software: planning a delivery schedule, staying on top of progress, thinking ahead about possible upcoming issues and developing mitigation plans, continuously verifying that what’s being built matches the requirements etc

The value produced by these tasks is high-quality software that continuously evolves to meet customer and business needs, and an ever-improving team.

Each of these tasks is cognitively demanding and difficult to replicate, because they require one or more of

  • The ability to understand deeply technical topics
  • A lot of context about the current state of technology, business, or people, plus where things are heading in the future
  • Effective project management, including the ability to make creative trade-offs, remove roadblocks, and motivate teams
  • Rapid assimilation and analysis of large amounts of data
  • Creative and ambitious thinking about how to improve software and processes
  • The ability to recognize, recruit, grow, and motivate talented individuals
  • The ability to convince others of the merits of an idea being advocated (and incorporate their feedback to improve the idea)

In addition, continuously working on these areas improves your skill by virtue of the feedback cycle: have an idea, try to make it happen, determine whether you got the effect you wanted, learn from the outcome, and start all over again.

Breaking “deep work” down into specific items like the ones listed above has allowed me to explicitly schedule time to focus on each of these areas, to make sure I’m spending time on each of them, and not just dealing with the endless stream of incoming emails and requests (ie “shallow work”). We’ll see how it goes.

The 2015 Argus, or how I learned to like road biking

When I moved to Cape Town, almost the first thing everybody said to me after learning that I like to mountain bike is “Oh, but you must do the Argus”. The Argus [now renamed to the Cape Town Cycle Tour] is the largest timed cycling event in the world, attracting 30,000+ riders every year.  My initial response to this was “It’s a road race, and I only ride a road bike when I absolutely have to”, but after repeatedly hearing about it, I figured it couldn’t hurt to cross it off my Cape Town bucket list, and I signed up for it.

Now there was only the small matter of training for it, because the most I’d ever ridden at one time on a road bike was 27 miles, and the Argus is a solid 68 miles. Since I was also training for the Cycle Tour MTB Challenge, I figured I’d stick with doing the MTB training and then just hop on the road bike when it was time for the Argus. Thankfully, I was rescued from this foolish plan by dint of my friend Iulian, who ramped up my road riding pretty aggressively: our first ride was billed as “just a gentle spin around the Peninsula” and ended up being 53 miles [albeit with a coffee break in the middle]; our second ride, which was supposed to be “only about 10k [6 miles] more than last week”, was 70 miles, into a headwind the entire time. In other words: Iulian is a damn liar, and now I don’t trust anything he says about length/intensity of rides 🙂 But what made these rides hurt less was the sheer scenic beauty of the routes we rode, which mimicked the Argus route, and wound along the coast for a large part of it, with views like this:


(Photographic credit goes here, here, and one other page I can’t find anymore.)

That sort of scenery, coupled with the speed you can get up to with a tailwind at your back made me realize that there might be something to this road biking thing after all. So, after putting in more road miles than I originally anticipated, I was ready to tackle the Argus. Unfortunately, disaster intervened: there was a huge wildfire that burned for several days along large parts of the Argus route, which was barely contained before the race. The fire resulted in some parts of the race course being unsafe, and closed off, and so the race was shortened from 69 miles of beautiful scenery with a route map like so:


to a 29 mile out-and-back along the freeway, with a route map like so:

In other words, it changed from a reasonably long race, with a fair bit of climbing, to a sprint race with very little climbing.

That must have been a very tough call for the organizers, given the number of participants, many of whom were international entrants, but I give them credit for making the call. I initially had my doubts about whether I should even ride the shortened version, because I was concerned about the mayhem that would result from 30,000+ people doing what had essentially become a sprint race. But then I figured it was a unique experience either way, and something I shouldn’t miss, and that the shorter route would actually play more to my strengths, because I’ve always been better at sprints than long distances. It also meant that my race strategy was pretty simple: pedal to the metal.

Race day dawned and I made my way down to the start. I’d been wondering what 35,000 cyclists converging on a single point would look like and now I had my answer: at 6am, there were cyclists swarming out of every nook and cranny of the city, on road bikes, mountain bikes, tandems, some in costume etc. It was sort of like a cyclist flash mob, albeit with a higher average fitness level than your usual flash mob.

2015 Argus start

Given the number of entrants, the Argus does staggered starts, with a number of seeding events that can help entrants get better start times – faster riders get earlier starts, which in turn generally leads to faster times overall, because a pack can travel faster than a single rider. Since I hadn’t done any seeding races, I’d been placed in group 5C, which was shorthand for “International entrants that we have no clue about, so let’s throw them into a big pile and give them a start time that’s in the middle of the window” – our start time was 8:14am, whereas the first/fastest group of riders had started out at 6:15am, and the last group of riders left at 10am. An 8:14am start meant that my group entered our start chute at 7:49am, and then stood around for 25 minutes, so there was no way to warm up.

2015 Argus staging area

… and then we were off. The course started out with a climb into a strong headwind, which was a bit of a rough intro, especially with no prior warmup.. The first 20 minutes were spent sorting out what was going on – how people were distributing themselves over the road, the best way to get past, the extent to which everybody was holding their line etc, and trying to get  into a rhythm of some sort. By the time we got to the biggest climb on the outbound leg of the trip [Edinburgh Drive in the route profile above], I’d found a pack that had a significantly higher pace than the majority of the rest of the riders, so I glommed onto the back of this pack, and we started to slice our way through the throng of people on the course. I hung with this pack for basically the entire middle third of the race, from Edinburgh Drive outbound back to Edinburgh Drive inbound. When we hit the Edinburgh Drive climb on the way back, the entire pack faded but I was still feeling pretty good, so I was able to break away from them on the climb, and didn’t see them again for the rest of the race. After that, it was just a question of holding on through the other 2 small climbs that remained and then going flat-out to the finish.

The end result was a 1:26:40 finish time, which put me 11th out of 533 in my start group, 552/3460 in my age group, and 3537/31966 overall. All in all, given that my goal before the race was to do sub 1:30, I’ve only been “seriously” riding a road bike for 3 months, and that this was my first road race, that’s a result I’m pretty happy with. [And, once again, a big thanks to Coach Ben for getting me ready for this.]

Hopefully next year I’ll get to do the full Argus and aim for the Holy Grail [for non-pro riders] of a sub 3-hr time. Lots of miles, sweat, and time to be spent in the Pain Cave between now and then, though.

Internet of Biology Lab Things

Part of the reason I dropped out of my PhD program was that though synthetic biology was fascinating, I just hated the vagaries of the associated bench work, like once wasting an entire week trying to get a PCR amplification to work because I consistently happened to pick a tube of polymerase that simply didn’t work. Things might have turned out very differently if I’d been able to write code to control robots to do this sort of stuff for me. Super cool idea.

Race report: 2015 Cape Town Cycle Tour MTB Challenge

Yesterday, I rode the Cape Town Cycle Tour MTB Challenge, a 55km mountain bike race that kicks off a week of bike-related stuff leading up to the Cape Town Cycle Tour aka “The Argus”,  which is the biggest bike race in  the world (30,000 participants). I’d mostly signed up for it on a whim as my first race in South Africa, because I knew nothing about any of the other races on the calendar and this one at least had a name I’d heard of before.

My first inkling that it was a fairly big race was when I got an email telling me what my seeding, and start group was – group AG, 8:00am start time. A bit of research later, I realized that this put me into the last group to start, with the AA group starting at 7:00am. Given that it was supposed to be hot on race day, I figured it was worth seeing whether I could get my start time changed to be earlier, so when I picked up my registration a couple of days before the race, I took along a printout of my NW Epic Stottlemeyer 30-miler race results, to show that I’d done a similar race before. After squinting at it for a bit, the nice lady at registration changed me to start with the AC group, at 7:20am.

Race day started early for me, at 4am, because Coach Ben wanted me to eat an ungodly amount of food before the race, with a couple of hours for digestion. Also, the race site was 45 minutes’ drive away, and I wanted to give myself a fair bit of time to get set up before the race, so I woke up, shoved food down my gullet as fast as I could, and then headed out the door. The drive itself was enlivened a bit by having to take a detour through a sketchy part of town because of a road closure, but I still got to the site around 5:30am, and so had a bunch of time to hang out.

After a quick warm up, I went to see the AA group start, which was a stacked group this year, including names like Christoph Sauser, Conrad Stoltz, Erik Kleinhans, and Arianne Kleinhans. Pretty insane to think that I was nominally racing “with” them. A few minutes later, it was time to get into the start chute for my group; there were about 200 people in my start group, with a total of about 1200 people racing the 55km race (there was also a 38km race), so my start chute looked something like this:

2015 MTB Challenge start chute 2

While in my start chute, I also ran into an acquaintance, Danian, I’d seen riding a mountain bike around our neighborhood soon after we moved and with whom I’d meant to go riding, but then never got around to organizing a ride with. We chatted a bit and then he said the following words: “Yeah, I haven’t been riding much, so I’m just going to take it easy”. 90% of the time when somebody says that, they are a damn liar – it means they’re pretty damn fast and have only two settings: “stop” and “go!”. Which turned out to be the case here as well: I didn’t see him again after the start and he beat me by 40 minutes.

The race started out relatively tamely, with mostly flat and rolling terrain, but then got progressively tougher, so my race plan was to stay in Z2 as much as possible on the downhills and flats, and then ride the hills reasonably hard, but still stay below 170bpm heart rate.

Cycle Tour MTB Challenge route

… and so off we went. Things were going pretty well for the first 2.5 hours of the race; I was sticking to the race strategy, eating and drinking appropriately, and even had time to notice a few of the riders that I kept seeing over and over again:

“Toolbox guy”: I kept playing leapfrog with one rider who sounded like he’d packed a bunch of wrenches into his backpack; every time we went over bumps, there was a bunch of metallic clanging.
“Annoying race-you-up-the-hill guy”: this gentleman would blow by me on the uphills and then get to the top of the hill and be totally spent, I’d pass him, and then on the next hill he would come by again, huffing and puffing.
“Chicken Chainring tattoo guy”: wearing a helmet with a big yellow chicken crest, with a big tattoo of a chainring on the back of his calf. Decoding the unspoken lingo, this meant: I ride bikes a lot, but I’m not really taking this seriously.

Also, for the first time in a race, I got passed by a few riders and was actually happy about it: 4 black teenagers, on hardtail bikes, some on flat pedals and wearing sneakers, passed me. Given the overall demographic make-up of the race participants (mostly 30+ years old, and I saw only one other person of color in my start chute), and the general socioeconomic climate in SA, that made me happy because it meant these kids were getting a chance to do something that was probably utterly foreign to most of their peers, and were kicking ass at it.

And then, 37km in, a Bad Thing happened: my rear tire went flat. I’d had inklings it might be low earlier on when the bike didn’t quite track the way I expected in some tight stuff, but hadn’t taken the time to check it. However, as we were grinding up a hill, one of the other racers told me that my tire was almost flat, and so I figured there was enough of the race left that I should try to fix it. So, off the bike, dig out the pump and try to pump up the rear. Argh, it’s one of those damn pumps where you have to muck around with the valve on the pump to accommodate either Schrader or Presta valves and I have no idea which of the pump configurations fits my valve. Try it one way, doesn’t work, try the other way, doesn’t seem to work either. Hrrmm. Maybe I need this doohicky screwed on ? Ok, that seems to sort of work … pump, pump, pump, tire is not getting any harder. Take off the pump and realize that it’s now pulled the entire valve head out of the tube. $^%$W^%W#@!. Dig the spare tube out of my backpack, spend time struggling with getting rear wheel off the bike, put in new tube, start pumping again. No dice, tire stays flat. Double $^%$W^%W#@!

At this point, one of the guys riding by offered me a Co2 cartridge, which I gladly accepted and it got the tire back up to what seemed like a reasonable pressure, so I hurriedly got the wheel back on the bike (in record time, for me – it usually takes me at least 15 minutes and lots of swearing and jammed fingers to get a back wheel back on), and started riding again. 50 meters up the hill it was clear there was still not enough pressure in the tire, so I got off and started the whole try-to-get-the-pump-to-work rigmarole again. And, after a few minutes of frantic pumping, I got the same result: the $#%$@# pump pulled the valve head right out of the tube. Luckily, there was still enough of the valve left that the tube retained the air it had in it. At this point I didn’t have another tube, my pump was clearly not cooperating, and I still had 18km to go. In retrospect, I should maybe have tried to beg another Co2 canister off somebody, but I was so flustered that I didn’t really consider that option. So I decided to just ride the rest of the race, about 18km, with a half-inflated tire.

The net result of this was predictable: my pedalling efficiency was pretty impaired, and I took a few tumbles in places where rear tire grip was important, Combined with the fatigue that was setting in, and the 600m of climbing that still remained, that meant that I started to cramp – after my last fall, which was only 1-2km from the finish line, I got such painful cramps in both legs that all I could do was stand there on legs that refused to bend and yell swearwords for a couple of minutes, much to the amusement of the riders coming by. After that final episode, I nursed it across the finish line with no more incidents, and was pretty happy when it was done:

2015 MTB Challenge finish

At the finish, I ran into Danian again, and hung out with him for a bit. And it turned out that “Chicken Chainring tattoo guy” was actually a friend of his, Max, who was indeed a pretty serious biker, doing tons of stage races all over the place, but primarily for fun.They gave me some ideas for fun stage races to think about, like Wines2Whales, with a view to maybe working up to something insane like the Cape Epic.

As far as the trails themselves went, they were a mix between gravel roads, dirt roads  primarily winding through vineyards, and some (not very technical) singletrack, including some cool segments that had us basically riding inside a tunnel of trees. Overall, it was pretty warm as well, with the temperatures going up to 28/29C, so the bits of shade were very much appreciated.

My goal for the race had been a sub 4-hour finish, and while my official finish time was 4:18, I’m going to claim I achieved my goal, because my total moving time was 3:56 (per Strava), and the only times I stopped were to deal with my tire. I also felt like I rode about as well as I could, so, all in all, I’m pretty happy with how the race went.

And so, in keeping with “sponsored racer” post-race press conferences, I’d like to say that the Project 529 team worked really hard to put together a good package for me for this event: my Santa Cruz Tallboy worked very well, allowing me to finish the race even on a semi-flat tire, my Maxxis tires were hooking up about as well as they could, my SRAM drivetrain gave me the necessary gearing to get up even the toughest hills, and my Project 529 clothing kept me comfortable, and I just put my head down and tried to get a good result for the team. It’s unfortunate that we couldn’t challenge for the win, but I’m sure next time I’ll be right up there at the sharp end of the field, mixing it up with the winners and fighting for a podium spot 😉

Mallets in Cape Town: the beginning

After packing 11,000 pounds (according to Graebel) of our life into a truck, and a bit of error-correction necessitated by Graebel thinking our stuff should be sent to Pointe Noire, Congo, we left left Seattle on Tuesday, July 8th  and flew from Seattle to Dubai, on Emirates Airlines.

We left Seattle on the day of the history-making Germany-Brazil World Cup semi-final game (so historic it even has its own Wikipedia page already!), so I couldn’t watch that game. I did check the score on my phone just before we took off, when it was half-time, and at first thought the 5-0 score was a mistake.

The entertainment selection on Emirates is truly staggering. They have recent  movies, TV shows, music, and even video games. Christina and I had already decided that our primary goal for the trip was to get through it with as little kid-related stress as possible, so Xander spent pretty much the entire 14-hour flight from Seattle to Dubai watching movies and playing video games (he got pretty good at the equivalent of Galaga). I watched “The Winter Soldier” and “Snowpiercer” and got to see two very different sides of Chris Evans – turns out that in addition to having very accurate aim when throwing around his shield of vibranium/adamantium/whatever-ium, he’s actually a decent actor – “Snowpiercer” is a great movie.

Dubai was a trip. The DXB airport has ridiculously large halls, almost entirely empty, with 100-foot ceilings, random water features, and a talking hologram welcoming us to Dubai.

When we first stepped out of the airport, I thought we’d accidentally wandered into an exhaust of some sort, and then I realized that, no, it’s actually that ridiculously hot and humid outside (and I say this having grown up a mere 5 degrees north of the Equator) –  I broke a sweat in the 30 seconds it took us to load our bags into a taxi. Our hotel was about a 30-minute drive from the airport, so along the way we got to see some of Dubai’s crazy skyscraper architecture all lit up, which made for an entertaining drive.

Our hotel was ridiculously ornate, but it was actually very tastefully done. It did make me wonder how many interior decorators had worked on it, because the designs were so elaborate as to be practically fractal – curlicue upon curlicue upon curlicue. (Random side musing: maybe they used a variation of the Mandelbrot generator to come up with a design pattern for each surface and then used a 3d-printer to print it? I think I just found my startup idea …)

In an attempt to make the trip easier on the kids, we spent 2 nights and an entire day in Dubai. Practically, this meant that we got up the next day, had breakfast, went to the pool for a bit, and then everybody except me fell asleep for 4 hours in the middle of the afternoon. After several attempts, I finally got everybody up (which involved having to physically prop up Xander and pour water on him to wake him up) and out the door, and we went to check out the Dubai Mall, which houses the world’s (supposedly) largest candy store, boasting 10,000 square feet devoted to candy. You’d think that with that much space, they’d have a decent selection, like, say, the entire line of Haribo products, but, no, it was actually quite disappointing. On the way to the Dubai Mall, we also saw the Burj Khalifa, and Helena showed us what it feels like when you’re “balling out of control” in a Lambo.

On Friday, we made the Dubai -> Durban -> Cape Town trip, which was relatively uneventful. I did have one interesting encounter on the flight from Dubai to Durban while trying to rearrange some baggage in the overhead compartment to fit in a bag, when one of the other passengers abruptly stood up, shouldered me aside, grabbed one of the bags I was moving and growled at me not to touch his bag because it had his sunglasses in them and he didn’t want them crushed. I was a little taken aback by the aggressiveness of his approach, so the only response I could muster was to tell him that if he wanted me to be careful with his bag, all he had to do was say so, and that there was no reason to get aggro about it. This same role model of restraint and courtesy also got into a shouting match with another passenger when we got to Durban, so, drawing a straight line through my two data points, I will go out on a limb, extrapolate, and posit that he was just an asshole.

… and after one more night in a hotel, we finally moved into our house, in the Oranjezicht neighborhood of Cape Town.

A few observations after 3 weeks of being here:

The good:

– It’s fun to go to an entirely new grocery store and buy pretty much one of everything, both because your house is absolutely empty, and also because you want to try it out and see whether you like it. And sometimes you also discover gems of product naming, like:

– We’re spoiled for choice when it comes to beaches (although they’re not necessarily swimming beaches) nearby, as evidenced by the few that we’ve made it to so far, all less than a 30 minute drive away.



Hout Bay

– I’d heard many horror stories about the travails of dealing with Telkom, the local telco providing land-lines as well as Internet access via ADSL, but the two Telkom engineers who showed up to install our land line and ADSL were great. They spent several hours  the first day dealing with a screwy wiring situation, and then came back early the next day to finish the job.

– There’s lots of nature all around: we’ve been to a “bird of prey” rehabilitation center, where we got to have various birds of prey (mostly owls) sit on our hands and pet them; hung out with cheetahs; and watched baboons make a mess.

– Judging from the number of people I’ve seen riding around in our neighborhood on mountain bikes, looking like they’re either starting or finishing a ride, I’m pretty sure there are trailheads for Table Mountain trails very close to our house, which makes me very happy. Now that (fingers crossed!) most of the initial settling-in and setting-up is done, we’ll hopefully get a chance to rent bikes in the next couple of weeks (since our bikes don’t get here until September) and go exploring soon.

Uber has made it to Cape Town, works pretty damn well, and is ridiculously cheap. After never using it in the US, Christina and I have used it a bunch since we’ve been here, and are big fans.

The unexpected:
– The whole notion of staying in Dubai for an entire day to help the kids cope better with the trip didn’t really pan out. This was further illustrated when we tried to go watch the World Cup final a couple of days after we got here. We didn’t yet have TV set up, so we drove around to a few restaurants to see whether we could watch the game there. Alas, every place we checked out was totally full, so we ended up just going back home; that said, it was probably just as well we did, because Helena was so jet-lagged that she fell asleep on the way home, after having taken a 3-hour nap in the afternoon … on top of sleeping 14 hours the night before. Another discovery: if you’re the only person in the family who isn’t jet-lagged, you’re still not going to get a decent night’s sleep because everybody else in your family will be up at 3am. Lesson learned.

– Before we got here, we pooh-pooh’ed the notion of a “winter” where it never gets below ~50F during the day. Turns out that when there’s no indoor heating, 50F is pretty damn cold, and you end up dressing warmly and trying (somewhat futilely, so far) to make a rip-roaring fire.

– The paperwork required to get anything set up is quite …. voluminous, including such fun things as needing a police-certified copy of my passport in order to get a phone installed, and 3 months of bank statements in order to get a cell-phone contract (that latter part being a little tricky when you’ve just arrived in the country and don’t have a bank account yet). At this point, I’ve filled out my passport number on so many forms in the last 2 weeks that I have it memorized.

– Hipster Farmer’s Markets have made their way to Africa: we’ve been to two of them, including one that’s a 5-minute walk from our house, and it blows my mind that I can find something as first-world-y as this so nearby. At the same time, since I’m also of the general opinion that the “artisanal, organic, shade-grown, hand-crafted-by-shimmering-elves-living-in-harmony-with-the-land blah-blah-blah” rhetoric that normally comes with a Farmer’s Market is a ridiculous affectation, it bugs me that such a thing exists nearby, especially given that the demographic that frequents it is so entirely unrepresentative of the majority of the country. (Which is, I suppose, true in the US as well)

The bad:
– We’re experiencing the joys of being the first residents of a house after an extensive remodel, and nobody living in it for a while. So far, we, or more accurately, Christina, have had to deal with the water heater not working, the stove not working (twice), a sewer filled with overgrown tree roots and not draining, a non-functional dishwasher, a non-functional dishwasher hookup, and all the associated visits by people coming to fix stuff.

– Lots of people in our neighborhood have dogs. Unfortunately, it appears that some of them have a somewhat cavalier attitude about cleaning up after their pets, so one has to continuously be on the lookout for squishy landmines while walking down the street.

– The neighborhood we live in is a bit of a bubble, in that it seems to be populated primarily by old, rich people; we’ve seen very few families with kids and pretty much the only non-white people we see are the ones walking to their job as domestics in the morning. That’s a pretty sharp contrast with our Seattle neighborhood, which was very diverse and had lots of families with kids – pretty ironic that we move to South Africa to show our kids what it looks like outside a first-world country and end up in an even more tightly-insulated bubble. So while it’s convenient for me that I can walk to work in 20 minutes, and the views from the house are pretty amazing, it’s entirely possible that we’ll move when our lease is up. In the meantime, we’ve been at pains to point out to the kids all the shantytowns that surround Cape Town, so that the lesson is not totally lost on them.

– In that vein, we also had an encounter that further illustrated the social complexities in South African society: we went into a stationery store to buy some paper, pencils etc because the kids wanted to write letters. I went to look at pencils/pens and Christina went off somewhere else; I hadn’t been in the store for more than 30 seconds when a (black) employee came up to me and asked me whether she could help me. I told her I was just looking around and went back to what I was doing, but then noticed that she was sort of lingering in the aisle I was in. I thought it was a bit odd, but didn’t really give it any deeper thought, until Christina came over to me and said something to the effect of “You realize she’s watching you to make sure you don’t steal anything, right ?” … and that’s when the penny dropped. I, frankly, didn’t really know what to do, but Christina, bless her heart, went up to the store manager and gave her an earful that I’m sure she won’t soon forget. And I, for my part, am now certainly more conscious of possible racial overtones in my interactions with people here.

So far, my take is that Cape Town is a unique blend of the first and third world, and I like most of the bits I’ve seen. That said, I also think we’ve spent enough time in the “first-world bubble” parts of it, and need to get out and start seeing the rest of the country.

Everything happens a lot more often than you think

I sometimes wonder about the frequency of random events, like “How many people in Seattle are currently on their first date ?”, or “How many bags of Haribo gummy bears are being sold in the US right now ?”. In that vein, here’s a thought-provoking image illustrating the frequency of a number of different events. Who knew there’s apparently a star that rotates 1000 times every couple of seconds , that people in Phoenix are so “safety”-minded , or that being a little leaguer is so stressful ? Looking at this, I suspect just about all my previous seat-of-the-pants guesstimates of the frequency of events were too low by a couple orders of magnitude.

Data structures and algorithms: it’s complicated

In keeping with my previous post, I’ve been going back to basics, by brushing up on one of the most fundamental parts of computer science, namely algorithms and data structures. My primary guide through this is “The Algorithm Design Manual”, which I find to be a more pragmatic/useful-to-the-practicing-engineer treatment of the subject than the famed “CLR” tome. I’ve also been working my way through “Cracking the coding interview”, which is even more focused on nuts-and-bolts, industry-type questions and techniques of data structure and algorithm construction.

In general, after a couple of years of being out of college, software engineers tend to have a somewhat complicated relationship with algorithms and data structures. We remember that there are smart/efficient ways of solving various kinds of computational problems, and think they’re pretty neat, but since 99% of the time we spend working on production software has nothing to do with solving those sorts of problems, our knowledge of the details gradually fades. This makes it somewhat discomfiting when a situation arises where you need to know the details of how to, say, implement a priority queue, because then you have to reacquire all that knowledge (and, in the process, realize how much you forgot). Maybe one way of avoiding this cycle is to always keep the knowledge fresh, by participating in things like the TopCoder programming competitions, or continuously working through books like “Elements of Programming Interviews”, the aforementioned “Cracking the coding interview” etc.

Diving back in … maybe

As I ponder the pros and cons of going back to being an individual contributor (aka “Somebody who writes code”), a few things that I’ve found thought provoking are: