There is No Lab

Much has been said about remote work lately. Yahoo! brought it to the fore when CEO Marissa Mayer completely cancelled their remote work policy a few weeks ago. It made mainstream press and quickly raised the ire of David Heinemeier Hansson, whose beliefs about remote work have shaped his life: half of his 37signals co-workers are remote and he too spends half his year working abroad.

At Icelab we don't have so much a formal policy about remote work (or about anything, really), but instead some simple guiding principles: work with good people to make good things, and as long as we can keep the business running, do whatever we can to help those people lead the lives they want.

I try to embody these principles: I spent the bulk of last year working from the Philippines and Hong Kong — and just this afternoon, I’ll fly off to Tokyo, the first leg in a trip that will see me working from five countries across three continents over the course of this year. It's allowing me to see the world in a way never before possible. Hugh's done some of this too, also checking in from Tokyo for a month at the start of last year. And in a couple of weeks, David's heading to Europe for a holiday and can extend it a little while by doing some work over there too.

Having people work from overseas has been no problem at all. In fact, 2012 was our biggest, most productive year yet.

Remote work isn't all about extending a holiday or seeing the world. It can also be about finding the right space for productivity in everyday life. Even Yahoo! recognised that you can't be chained to the office, that "occasionally [you] have to stay home for the cable guy," but this is more a sign of their failure to recognise the intrinsic value in a change of environment. As The Economist argued:

Plenty of evidence suggests that letting employees work from home is good for productivity. It allows them to use their time more efficiently and to spend more time with their families and less fuming in traffic jams or squashed on trains… You can shackle a Yahoo to his desk, but you can't make him feel the buzz.

We make our offices as comfortable and conducive to productivity as possible, but good work doesn't always happen from the same place. Good people, on the other hand, are good people everyday, regardless of their location.

Click to Edit with AngularJS

Every time I use AngularJS I love it a little more. One of my favourite things about it is how greatly it reduces ceremony and separation. When I'm writing front-end interactions, the last thing I want to be doing is jumping between files and maintaining state in two different places, especially for simple things like "click to edit" behaviour. That's what I'll show you now, done powerfully and directly in Angular:

<div ng-app>
  <div ng-controller="ClickToEditCtrl">
    <div ng-hide="editorEnabled">
      <a href="#" ng-click="editorEnabled=!editorEnabled">Edit title</a>
    <div ng-show="editorEnabled">
      <input ng-model="title">
      <a href="#" ng-click="editorEnabled=!editorEnabled">Done editing?</a>

Try this jsfiddle to see it in action. What we're doing is showing some text (an article's title in this example) and then revealing a field to edit it upon clicking an "Edit" link.

To achieve this, we use an Angular editorEnabled model (really just a flag here) that we check with ng-show and ng-hide directives to hide and show the various parts of the interface. We change this value using an ng-click directive on the hide and show links. Angular's data binding keeps everything in sync. As soon as editorEnabled flips between true and false, the interface reacts accordingly. And the best thing? Everything you need can be written directly in the markup.

The only bit of JavaScript is just the most basic setup for the Angular controller, providing an initial value for the title:

function ClickToEditCtrl($scope) {
  $scope.title = "Welcome to this demo!";

For some more sophisticated behaviour, you can put some more code in the controller. Let's change the interface to show "save" and "cancel" links when editing the title, and only update the title if the "save" link is pressed:

<div ng-app>
  <div ng-controller="ClickToEditCtrl">
    <div ng-hide="editorEnabled">
      <a href="#" ng-click="enableEditor()">Edit title</a>
    <div ng-show="editorEnabled">
      <input ng-model="editableTitle" ng-show="editorEnabled">
      <a href="#" ng-click="save()">Save</a>
      <a href="#" ng-click="disableEditor()">cancel</a>.

See it in this jsfiddle.

The code in the corresponding controller doesn't need to worry about the interface at all, it just operates on the scope, and the interface updates itself accordingly.

function ClickToEditCtrl($scope) {
  $scope.title = "Welcome to this demo!";
  $scope.editorEnabled = false;

  $scope.enableEditor = function() {
    $scope.editorEnabled = true;
    $scope.editableTitle = $scope.title;

  $scope.disableEditor = function() {
    $scope.editorEnabled = false;

  $ = function() {
    $scope.title = $scope.editableTitle;

If you wanted to extend this even further and make it a reusable component for different parts of your interface, you would make it a custom directive.

One of the other great things about AngularJS is that you can use it as much or as little as you like. We've used it for the entirety of The Thousands' admin interface, so adding bits of behaviour like this is no problem. But even if you're not already using it, you can just as easily attach an ng-app to any one of your HTML elements and get started.

Announcing Decaf Sucks 1.1


It's been a while since we've talked about Decaf Sucks on the iPhone. Our first release has run smoothly for a year and a half, helping many thousands of iPhone owners find better coffee. Thanks to our well caffeinated contributors, nearly half of our reviews are now submitted from the app.

On this note, we're very excited to announce the release of Decaf Sucks version 1.1 in the App Store. This release makes it even easier to contribute reviews with the addition of Facebook login support (now available wherever Decaf Sucks exists).

We've also added support for the iOS 6 and the larger iPhone 5 display, as well as giving the app some extra polish all around. In particular, our overseas friends can rest easy, because the distance to your favourite cafes is now reported in miles or kilometres based on the device's region format setting.

Decaf Sucks 1.1 is still free and waiting for you in the App Store. Get it now and find some great coffee near you!

Read on for a full list of all the things we've changed.

New features:

  • Login with Facebook to write reviews
  • Support for the larger iPhone 5 display
  • Distance units are localised into miles or kilometres based on the device's settings
  • iOS 6 compatibility updates

Other improvements:

  • When setting a cafe's location, show a callout above the map pin to make it clear that it can be dragged around.
  • When setting a cafe's location, ensure that the pin is actually draggable on the first tap.
  • When setting a cafe's location, always show a proper full address after dragging the pin around.
  • Show a proper non-retina image for the back button's pressed state.
  • Fix a bug that sometimes caused the map view to start very zoomed out.
  • When a review is completely empty, make sure the "Post" button stays disabled.
  • Ensure the map for a single cafe encompasses the current location, if it is nearby.
  • Fix a bug that led to some reviews being set to Hyderabad, India. Yes, this was really weird.

Decaf Sucks 1.1 is available in the App Store now.

My Boring Adventure

Austin Kleon's Steal Like An Artist, his manifesto for creativity in the digital age, is full of useful tips, with one that stands out for me:

Be boring. (It's the only way to get work done.)

While an inspired spark may be source of creative work, it's the drudgery of thorough execution that's necessary to bring it to completion. Even the smallest projects are an accumulation of many tiny details, each requiring time to get right. To do this, you need to show up and work, day after day. Being boring enables this.

But you can be boring and have adventure too. The way I've done this is to combine work and travel. Not the frenetic "I've got to squeeze as much as possible into my annual leave" kind of travel, but months at a time in a new place. This allows you the time to develop the routine needed for consistent, productive work, alongside many opportunities to explore your new home at a comfortable pace. Every lunch break affords you a chance to see something new, every outing for coffee the chance to become a regular in a new neighbourhood. Andy Warwick puts it excellently in this Quora thread: "the mundane becomes an adventure when you live in a foreign land."

And when you wrap up your work for the night or for the week, there are hours and days ahead of you for adventure and discovery, which can inform and fuel your otherwise perfectly boring working life.

Written from Adelaide, Australia, where I'm living for two months.

2012 in Review

A life abroad

This was a year marked by two new worlds: Garmisch and I spent six months living in the Philippines and two in Hong Kong. We experienced the full stretch of the urban spectrum; from the wide blue skies, leisurely pace (and mild chaos) of a provincial tropical island, through to Hong Kong's unending bustle and its dense, concrete verticality.

 Legazpi Airport

It was our first considerable stretch of time overseas. Living in the relative isolation did bring some challenges, but we overcame them, and in doing so we became a closer couple and hardier humans. And we've left the experience with a new perspective on what's important, and on how we run our lives from here (Hint: there's still a little more exploring to do!).

This wasn't the year's only travel, either. The long stretches abroad were punctuated by visits elsewhere: Wellington in February for the magnificent Webstock, Australia in April for a group hug with my workmates, Singapore in May for RedDotRubyConf, and Tasmania in November for Railscamp 12. And outside all of this, with our own place rented out, we spent some quality time staying with our parents, firstly in Canberra and now in Adelaide.

 Hong Kong buildings

A bigger, better Icelab

It was a big year for Icelab. In January, we had five people: our Canberra office and Max on his own in Melbourne. In March, we merged with Inventive Labs, welcomed Narinda, Toby and Ally to the team, and assumed their office space in The Ironmongers on Brunswick Street. In August, Melissa joined us in Melbourne as a project manager. In September, David joined us in Canberra as a developer. In December, we moved out of our (then very crowded) office in Canberra into a bigger, much more comfortable space just a few blocks away. We finished the year with nine amazing people and permanent offices in both Canberra and Melbourne. And all of this while I was mostly overseas. A distributed team can really work.

The larger team meant we put out more work than ever. Plenty to be proud of, and plenty I wish I could have been more involved in. That said, I did get to ship a few large projects this year:

  • PDF e-ticket support for Ticketscout
  • The Thousands, with Max Wheeler & Anthony Kolber
  • Youcamp, with Toby Allder and Michael Honey, along with contributions from almost everyone in the lab
 Screenshots of The Thousands &amp; Youcamp

Some other work endeavours

I had less time than usual this year to work on side-projects, but I did manage to ship in February. It sends you a daily email of your recently favourited tweets. I use it everyday and it's nice to see my friends do the same.

I also found a little time to take a look into RubyMotion for building iOS apps. I put together an introductory talk and presented at a Canberra Ruby meeting and at Railscamp 12, where I also ported the bulk of the Decaf Sucks iOS app to RubyMotion in just a day or so. I expect I'll spend a lot more time with this in the future.

Some new apps

A notable trend that emerged this year was my increased use of activity-tracking apps. Films I watched went in the lovely Letterboxd. My Decaf Sucks page continued to grow as I explored new cities café-by-café. In Hong Kong, I started using Foursquare so I could record the eateries and other interesting places I visited, and it's stuck with me since then. I tried to take note of my general activities using Day One on both the Mac and iOS. It hasn't quite become habitual yet, but anything I record there is a bonus. Finally, Rdio has become a daily source of musical wonder; my iTunes library is long since deleted.

Getting to the point

One of the freshest, foremost things in my mind about this year is a hard slog in the last six months; Icelab was growing, and there were was just a big backlog of work that had to be done. To help, I bore down and worked harder and longer than ever before. We got past it, but it came at some personal cost. I lost opportunities for spending time with my wife, for exercise, exploring my new locations, and my own creative work.

After all of that, though, I feel we've arrived in a good position to create a more sustainable workload in the future, and I haven't lost any of my passion for creating things. If I still feel like this now, I know it won't change, and I know that I'll continue to put lots of time into it. What I have learnt is how it feels to do it out of some kind of obligation, and I'll do my best to ensure I don't fall into that position again.

But the biggest story, and the story worth remembering, is that I could do all of this — the hard work included — while still sharing wildly new experiences and building a stronger relationship with Garmisch. I couldn't think of a better friend and travel companion, and I'm ever thankful for her company and support.

I've finished the year with a stronger sense than ever of empowerment and direction. 2013 will be big!

 Garmisch &amp; me in 2012

Out My Window

 The views out my windows

The view out the window in my previous and current overseas offices: Talisay City (Negros Occidental, Philippines) and Sheung Wan (Hong Kong).