<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Rock Hymas</title><description>The blog of Rock Hymas.</description><link>https://rockhymas.com/</link><item><title>Hello, World!</title><link>https://rockhymas.com/blog/hello-world/</link><guid isPermaLink="true">https://rockhymas.com/blog/hello-world/</guid><description>It&apos;s a classic programmer exercise. The point is to build a working development environment and a minimal program that does one thing: print out the words &quot;Hello, World!&quot; Over the last 20 years, there&apos;s been a shift.</description><pubDate>Wed, 12 Aug 2026 15:00:00 GMT</pubDate><content:encoded>*Originally posted at [Cue](https://cueplan.com/blog/hello-world).*

It&apos;s a classic programmer exercise. The point is to build a working development environment and a minimal program that does one thing: print out the words &quot;Hello, World!&quot; 

Over the last 20 years, there&apos;s been a shift.

Now the beginning exercise is often a todo list, because a simple, CRUD-based todo app is a step up from the &quot;Hello, World!&quot; exercise.

And frankly, in a world with LLM agent tooling, it&apos;s something you can literally have built in less than an hour. 

And yet, here I am, having spent years working on a simple todo app.

**Why?**

Building a simple product can be a surprisingly good way to practice complex skills. 

Getting some working code isn&apos;t where the complexity lies - it&apos;s in building the right product.

I call it [Cue](/blog/what-is-cue). I use it every day, and have for years, so it clearly has value. It&apos;s more than a toy, or an exercise. It&apos;s much more than an AI agent would build in an hour. 

In an ideal world, it would do all the things I want. But a clear product vision clarifies what problems it solves and doesn&apos;t: Cue makes it easy for you to [exercise judgement](/blog/healthy-friction-wait-what), plan, and execute, but [does not make plans or decide for you](/blog/dead-wrong). The vision also has lays out core concepts: early on, I decided [side-by-side lists](/blog/planning-a-la-mode) would be a defining model for using Cue. 

Vision clarifies what problems will be solved; product management, design, and engineering are all about solving those with the proper tradeoffs. They make up the complex skill set that I get to learn and practice while building Cue. 

I have to exercise product management, even though so far it only has [one customer - me](/blog/eating-the-dogfood). But I experience the same challenge any product manager does - building something to solve the customer&apos;s problem, even though the customer doesn&apos;t always know the right way to do that. 

Recently, I built out features for doing time block planning. It turned out to be an over-engineered disaster that made planning my days harder without adding any value. So I ripped it out and found I&apos;m completely happy with a simple way to select multiple todos and drag and drop them. 

I&apos;ve learned to iterate until I figure it out. I built an implementation of the vision, with side by side lists. Then used it for a while to see what works, but also what gets on my nerves or confuses me. One early frustration was side by side lists on my phone, because they had to be scrolled horizontally. That&apos;s fine, but it forced me to rethink how the sidebars worked (or didn&apos;t). That cascaded into changes to how to [initiate planning, finish planning](/blog/daily-planning-workflow-in-cue), etc. 

Those product decisions naturally led to design work and tradeoffs. Although this screenshot is showing [pinned tasks](/blog/cue-tip-pinning-tasks), it&apos;s fun to see all the other things that have changed. 

![Pinned tasks in Cue](../../assets/media/pinned-tasks.gif)

Repeated daily use led to little changes that improved usability: the drag handle for todos has moved to the right, though you can also use the checkbox itself to drag them. The pinned state is now hidden behind a flyout menu, because it didn&apos;t deserve to take up precious screen real estate (hint: click on the drag handle). I&apos;ve gotten rid of a lot of the wasted border space. And I fixed that hideous green color. 

![Side-by-side lists in Cue](../../assets/media/hello-side-by-side.png)

Under the covers, I&apos;ve also experimented with the underlying architecture. My first pass at Cue was built on Blockstack, back when everyone thought blockchains would be useful outside of finance. Then I rebuilt it using Google&apos;s Firebase. Turns out it&apos;s still around (I had to look it up). A while back, I switched to Ruby on Rails with Hotwire. More recently, it&apos;s been fun to experiment with agents to build out new features, like dark mode, and see where they succeed, fail, or just need some extra hand-holding. Because Cue is both modest and useful, it&apos;s a great way to experiment with different engineering approaches. 

Now, having spent years on it so far, I know I&apos;m going to keep plugging away at it. How? Well, next steps include:

- The public Cue code repository, with a proper open source license, and documentation
- More discussions of the [vision](/blog/cue-up-a-vision), product, design and engineering behind Cue
- And of course, design updates and new features

Along the way, I&apos;ve made product, design, and engineering decisions that took into account the user base - me - and may not work well for new users. Remember that flyout menu that&apos;s shown when clicking the drag handle? Not exactly discoverable. But I am opening Cue up to anyone who wants to use it, for free. If you try it out, I&apos;d love to hear what works, what&apos;s confusing, and why you&apos;re going back to your old system. 

You see, I&apos;ve been around the block when it comes to personal planning systems: [Superself](/blog/in-the-beginning-there-was-super-self), [Seven Habits](/blog/win-win-win), [Getting Things Done](/blog/how-to-really-get-things-done), Timeblocking. 

I firmly believe that personal planning systems always become &quot;personal&quot;: [unique to you](/blog/241). 

As I&apos;m building Cue, I&apos;m learning, and sharing what I learn and what I build. I hope it helps you build your own personal planning system. 

And so, &quot;Hello, World!&quot;

_Feel free to email me at [rock@cueplan.com](mailto:rock@cueplan.com), if you want to say &quot;Hello&quot; back._</content:encoded></item><item><title>Blockstack: Windows Toolbox</title><link>https://rockhymas.com/blog/blockstack-windows-toolbox/</link><guid isPermaLink="true">https://rockhymas.com/blog/blockstack-windows-toolbox/</guid><description>It’s a good thing I got on the Blockstack Slack, because the approach I was taking was not sustainable. Sure, you can use windows subsystem for Linux and get pretty far along. I feel like I did. But once I ran into troubles the Slack team, Aaron specifically, helped me out by pointing to the …</description><pubDate>Fri, 22 Sep 2017 23:26:57 GMT</pubDate><content:encoded>It’s a good thing I got on the [Blockstack Slack](/blog/blockstack-getting-on-slack/), because the approach I was taking was not sustainable. Sure, you can use windows subsystem for Linux and get pretty far along. I feel like I did. But once I ran into troubles the Slack team, [Aaron](https://github.com/kantai) specifically, helped me out by pointing to the just recently created Windows installer. It sets up a set of docker containers that run the Blockstack core, the browser, and a proxy service to allow you to use the browser on your windows machine without any problems*.

So I went through the setup of that and now have a fully functioning Blockstack browser on my windows box. I’m not sure if the windows installer is really ready for prime time, but I got the impression that the team would appreciate help tracking down issues with it. I’m sure if you join the Blockstack Slack and want to check it out, they’ll make it happen.

* I did have one problem as I tried to get it working, and it actually turned into an addressable [issue](https://github.com/blockstack/packaging/issues/10) that I filed against their packaging repository. The browser and the core communicate with each other using a password to keep things secure. But because of how that password is passed, there are certain characters that are not allowed. After we tracked down that that was keeping my browser and core from communicating with each other, I got things working fine and filed the issue to have that documented, so it doesn’t trip others up in the future.</content:encoded></item><item><title>Blockstack: Buying My First Bitcoin</title><link>https://rockhymas.com/blog/blockstack-buying-my-first-bitcoin/</link><guid isPermaLink="true">https://rockhymas.com/blog/blockstack-buying-my-first-bitcoin/</guid><description>I’m going to need funds to participate in the Blockstack ecosystem, and right now, it’s built on Bitcoin. So it’s time to buy myself some Bitcoin. I decided to go with Coinbase, mostly due to name recognition. As it turns out, setup is pretty easy. Just pick a username/password and a way to fund your …</description><pubDate>Wed, 20 Sep 2017 23:06:34 GMT</pubDate><content:encoded>I’m going to need funds to participate in the [Blockstack](https://blockstack.org/) ecosystem, and right now, it’s built on [Bitcoin](https://bitcoin.org/en/). So it’s time to buy myself some Bitcoin.

I decided to go with [Coinbase](https://www.coinbase.com/), mostly due to name recognition. As it turns out, setup is pretty easy. Just pick a username/password and a way to fund your account. I went with linking a debit card, because it’s faster. Giving them bank routing info would be cheaper and slower. So I will set that up for future transactions.

Coinbase has two factor authentication built in, and has you link your phone number to the account before you even setup payment information, so they can enforce that security.

Once it was all arranged, I bought quite a small amount of bitcoin. In other words, it’s really not worth trying to crack into my account. Now, I should be able to transfer some of those bitcoin over to my Blockstack account in order to handle the transactions that will need to occur as I setup my development environment and flesh out an actual application.</content:encoded></item><item><title>Blockstack: Getting on Slack</title><link>https://rockhymas.com/blog/blockstack-getting-on-slack/</link><guid isPermaLink="true">https://rockhymas.com/blog/blockstack-getting-on-slack/</guid><description>The Blockstack team has a Slack instance set up for communicating. I know I’m going to need help getting my onename registered name transferred into my personal wallet, so I can do development. So I decided to jump on so that I could ask my questions, and be a part of the conversation. To do …</description><pubDate>Mon, 18 Sep 2017 23:10:51 GMT</pubDate><content:encoded>The Blockstack team has a [Slack](https://blockstack.slack.com) instance set up for communicating. I know I’m going to need help getting my onename registered name transferred into my personal wallet, so I can do development. So I decided to jump on so that I could ask my questions, and be a part of the conversation. To do that you just have to give them an email address and an explanation of why you want to join their Slack. Once again, the response was nice and quick.

Besides getting support, it’s also cool to see that Blockstack is fully transparent about their day to day work. You can see their daily scrum notes, design discussions, engineering decisions, and work on Blockstack apps in the various public channels.</content:encoded></item><item><title>Blockstack: Registering a Name</title><link>https://rockhymas.com/blog/blockstack-registering-a-name/</link><guid isPermaLink="true">https://rockhymas.com/blog/blockstack-registering-a-name/</guid><description>Time to get ourselves a name. As we learned yesterday, we could get a name by registering one ourselves, using our own Bitcoin wallet. But I don’t have one yet, and besides, the Blockstack team has built Onename.com to make it free to register a named id. The price to register the name still must …</description><pubDate>Fri, 15 Sep 2017 23:01:54 GMT</pubDate><content:encoded>Time to get ourselves a name. As we learned yesterday, we could get a name by registering one ourselves, using our own Bitcoin wallet. But I don’t have one yet, and besides, the [Blockstack](https://blockstack.org/) team has built [Onename.com](https://onename.com) to make it free to register a named id. The price to register the name still must be paid in btc, but Onename is sponsoring names to help bootstrap the Blockstack ecosystem. So we’ll do that, and then work through how to transfer that name for use in the Blockstack CLI later.

Obviously, we’ll start at [onename.com](https://onename.com).

The UI is very simple and clean. I just signed up for an account, entering my email address and a password.

I was then immediately prompted to choose a name. As I already know I want rockhymas.id, I chose that.

At this point, Onename gave me the option to save my Onename backup file to Dropbox, or to download it. I went with Dropbox, to make my life easier.

Next I set up my Onename profile, with an image, name, location, and website.

Finally, Onename lets you verify your identity on Twitter, Facebook, and Github. The process here is pretty straightforward. You claim ownership by posting public statuses provided by Onename in each service using your account. Then point Onename at those statuses, so it can verify that you posted the status they provided and then you’re all verified.

Finally, the name registration has to go through. Onename tells you it will take about 12 hours for that to happen. After waiting 24 hours, I contacted support to see if I could find out why it was taking so long. Support was really responsive, and got back to me within half an hour to let me know that registrations can take longer and to give it another couple days. After waiting over the weekend, still no luck. Contacted support again, they escalated to the dev team and within a day the registration had gone through. It sounded like other registrations may have gotten backed up as well. Yay for bleeding edge software!

So, at this point, I have rockhymas.id registered in Blockstack. Whew! The picture above comes from the [Blockstack Explorer](https://explorer.blockstack.org/), which is a little tool that makes it easy to see blocks on the Blockstack virtual chain, and any associated names, including their history. You can check mine out at [https://explorer.blockstack.org/name/rockhymas.id](https://explorer.blockstack.org/name/rockhymas.id).</content:encoded></item><item><title>Blockstack: Exploring the CLI</title><link>https://rockhymas.com/blog/blockstack-exploring-the-cli/</link><guid isPermaLink="true">https://rockhymas.com/blog/blockstack-exploring-the-cli/</guid><description>Ok, it’s day two. Time to play around with the tools we installed. We’ll be using the command line interface to lookup names, price names, find our deposit key, see which names we own, and get more information on names registered in Blockstack. I don’t have my own name yet, but we can lookup other …</description><pubDate>Wed, 13 Sep 2017 23:01:51 GMT</pubDate><content:encoded>Ok, it’s day two. Time to play around with the tools we installed.

We’ll be using the command line interface to lookup names, price names, find our deposit key, see which names we own, and get more information on names registered in Blockstack.

I don’t have my own name yet, but we can lookup other names registered with Blockstack, like so:

```
$ blockstack lookup fredwilson.id
{
    &quot;profile&quot;: {
        &quot;@type&quot;: &quot;Person&quot;,
        &quot;account&quot;: [
            {
                &quot;@type&quot;: &quot;Account&quot;,
                &quot;identifier&quot;: &quot;fredwilson&quot;,
                &quot;proofType&quot;: &quot;http&quot;,
                &quot;service&quot;: &quot;twitter&quot;
            },
            {
                &quot;@type&quot;: &quot;Account&quot;,
                &quot;identifier&quot;: &quot;fred.wilson.963871&quot;,
                &quot;proofType&quot;: &quot;http&quot;,
                &quot;service&quot;: &quot;facebook&quot;
            },
            {
                &quot;@type&quot;: &quot;Account&quot;,
                &quot;identifier&quot;: &quot;1Fbi3WDPEK6FxKppCXReCPFTgr9KhWhNB7&quot;,
                &quot;role&quot;: &quot;payment&quot;,
                &quot;service&quot;: &quot;bitcoin&quot;
            }
        ],
        &quot;address&quot;: {
            &quot;@type&quot;: &quot;PostalAddress&quot;,
            &quot;addressLocality&quot;: &quot;New York City&quot;
        },
        &quot;description&quot;: &quot;I am a VC&quot;,
        &quot;image&quot;: [
            {
                &quot;@type&quot;: &quot;ImageObject&quot;,
                &quot;contentUrl&quot;: &quot;https://s3.amazonaws.com/kd4/fredwilson1&quot;,
                &quot;name&quot;: &quot;avatar&quot;
            },
            {
                &quot;@type&quot;: &quot;ImageObject&quot;,
                &quot;contentUrl&quot;: &quot;https://s3.amazonaws.com/dx3/fredwilson&quot;,
                &quot;name&quot;: &quot;cover&quot;
            }
        ],
        &quot;name&quot;: &quot;Fred Wilson&quot;,
        &quot;website&quot;: [
            {
                &quot;@type&quot;: &quot;WebSite&quot;,
                &quot;url&quot;: &quot;http://avc.com&quot;
            }
        ]
    },
    &quot;zonefile&quot;: &quot;{\&quot;avatar\&quot;: {\&quot;url\&quot;: \&quot;https://s3.amazonaws.com/kd4/fredwilson1\&quot;}, \&quot;bio\&quot;: \&quot;I am a VC\&quot;, \&quot;bitcoin\&quot;: {\&quot;address\&quot;: \&quot;1Fbi3WDPEK6FxKppCXReCPFTgr9KhWhNB7\&quot;}, \&quot;cover\&quot;: {\&quot;url\&quot;: \&quot;https://s3.amazonaws.com/dx3/fredwilson\&quot;}, \&quot;facebook\&quot;: {\&quot;proof\&quot;: {\&quot;url\&quot;: \&quot;https://facebook.com/fred.wilson.963871/posts/10100401430876108\&quot;}, \&quot;username\&quot;: \&quot;fred.wilson.963871\&quot;}, \&quot;graph\&quot;: {\&quot;url\&quot;: \&quot;https://s3.amazonaws.com/grph/fredwilson\&quot;}, \&quot;location\&quot;: {\&quot;formatted\&quot;: \&quot;New York City\&quot;}, \&quot;name\&quot;: {\&quot;formatted\&quot;: \&quot;Fred Wilson\&quot;}, \&quot;twitter\&quot;: {\&quot;proof\&quot;: {\&quot;url\&quot;: \&quot;https://twitter.com/fredwilson/status/533040726146162689\&quot;}, \&quot;username\&quot;: \&quot;fredwilson\&quot;}, \&quot;v\&quot;: \&quot;0.2\&quot;, \&quot;website\&quot;: \&quot;http://avc.com\&quot;}&quot;
}
```

I want a name, so I can see how much it would cost by using the price command (at the time of this writing, registering rockhymas.id would cost me about $40 in btc):

```
$ blockstack price rockhymas.id
{                                                       
    &quot;name_price&quot;: {                                     
        &quot;btc&quot;: 0.00025,                                 
        &quot;satoshis&quot;: 25000                               
    },                                                  
    &quot;preorder_tx_fee&quot;: {                                
        &quot;btc&quot;: 0.0028148,                               
        &quot;satoshis&quot;: 281480                              
    },                                                  
    &quot;register_tx_fee&quot;: {                                
        &quot;btc&quot;: 0.0028148,                               
        &quot;satoshis&quot;: 281480                              
    },                                                  
    &quot;total_estimated_cost&quot;: {                           
        &quot;btc&quot;: 0.0115092,                               
        &quot;satoshis&quot;: 1150920                             
    },                                                  
    &quot;total_tx_fees&quot;: 1125920,                           
    &quot;update_tx_fee&quot;: {                                  
        &quot;btc&quot;: 0.0056296,                               
        &quot;satoshis&quot;: 562960                              
    },                                                  
    &quot;warnings&quot;: [                                       
        &quot;Insufficient funds; fees are rough estimates.&quot; 
    ]                                                   
}                                                       
```

If I wanted to buy it, I would need some btc in my account. To see which account the btc would be withdrawn from, I can use the deposit command:

```
$ blockstack deposit
{
    &quot;address&quot;: &quot;38FDVrfrexyoG3JNTCQkh8dpJbHT44YFuQ&quot;,
    &quot;message&quot;: &quot;Send bitcoins to the address specified.&quot;
}
```

The names command lets me see which names I currently have registered to this wallet (none, of course):

```
$ blockstack names
{
    &quot;addresses&quot;: [
        {
            &quot;address&quot;: &quot;3MhaGGag9bKUM1yekMh24WGcteg3qAvgyo&quot;,
            &quot;names_owned&quot;: []
        }
    ],
    &quot;names_owned&quot;: []
}
```

And I can see more info about a given name’s registration using whois:

```
$ blockstack whois fredwilson.id
{
    &quot;block_preordered_at&quot;: 374084,
    &quot;block_renewed_at&quot;: 374084,
    &quot;expire_block&quot;: 489247,
    &quot;has_zonefile&quot;: true,
    &quot;last_transaction_height&quot;: 374084,
    &quot;last_transaction_id&quot;: &quot;2986ec31ec957692d7f5bc58a3b02d2ac2d1a60039e9163365fc954ff51aeb5a&quot;,
    &quot;owner_address&quot;: &quot;1F2nHEDLRJ39XxAvSxwQhJsaVzvS5RHDRM&quot;,
    &quot;owner_script&quot;: &quot;76a91499e7f97f5d2c77b4f32b4ed9ae0f0385c45aa5c788ac&quot;,
    &quot;zonefile_hash&quot;: &quot;1a587366368aaf8477d5ddcea2557dcbcc67073e&quot;
}
```

There is much more to the command line interface, right now we’re just dipping our toes in the water, figuring out the basics. Next up, let’s register a Blockstack name in the .id namespace.</content:encoded></item><item><title>Blockstack: First Steps</title><link>https://rockhymas.com/blog/blockstack-first-steps/</link><guid isPermaLink="true">https://rockhymas.com/blog/blockstack-first-steps/</guid><description>So I’m diving headfirst into Blockstack, because, well, why not? The idea here is that Blockstack is building a new operating system on top of the blockchain technology, which was first and most famously used as part of Bitcoin. A blockchain is a secure, open ledger of records updated via distributed consensus that removes the …</description><pubDate>Mon, 11 Sep 2017 23:00:02 GMT</pubDate><content:encoded>So I’m diving headfirst into [Blockstack](https://blockstack.org/), because, well, why not?

The idea here is that Blockstack is building a new operating system on top of the [blockchain](https://en.wikipedia.org/wiki/Blockchain) technology, which was first and most famously used as part of [Bitcoin](https://bitcoin.org/en/).

A blockchain is a secure, open ledger of records updated via distributed consensus that removes the need for a centralized (i.e. “single point of failure”) authority. Bitcoin uses the blockchain to record transactions.

Blockstack is extending the blockchain in a few key ways. First, it introduces the idea of a virtual blockchain that sits on top of an existing blockchain. This allows changing the underlying blockchain, making Blockstack resistant to blockchain failure. Second, the blockchain tracks pointers to the actual data being tracked, rather than the data itself. This keeps the chain relatively small, while expanding the potential uses to large, internet scale applications. Third, like NameCoin before it, Blockstack uses the blockchain to assign human readable names to computer addressable locations. This provides secure identity and ownership of digital assets.

Ok, that was my best entry level summary of a new technology and company that I admittedly barely understand. How did I do?

Well, even if I botched that up, I still think it’s cool, so I’m going to document how I’m getting started with Blockstack. This is day one. Day one is all about installing the tools. Here are the steps I followed:

1. Install the [Windows Subsystem for Linux](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide)
  - Enable-WindowsOptionalFeature

```
$ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```
  - restart Windows
  - run bash, which installs Ubuntu on Windows
  - Create root username and password
2. Install Blockstack

```
$ wget -qO - https://raw.githubusercontent.com/blockstack/packaging/master/repo-key.pub | sudo apt-key add -
$ echo &quot;echo &apos;deb http://packages.blockstack.com/repositories/ubuntu/ xenial main&apos; &gt; /etc/apt/sources.list.d/blockstack.list&quot; | sudo -E bash -
$ sudo apt update
$ sudo apt install blockstack
```
3. Install [node.js](https://nodejs.org/en/)

```
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y nodejs
```
4. Install the Blockstack browser

```
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt install blockstack-browser
```
5. Install regtest environment and integration test dependencies

```
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt update
$ sudo apt install sqlite3 bitcoind
```
6. Test blockstack install

```
$ blockstack info 
```

This command failed with the error: “Failed to contact blockstack daemon. Please ensure that it is running with the ‘api’ command.” My next attempt was to start the blockstack daemon:

```
$ blockstack api start
```

This command also failed, with the error: “Wallet does not exist. Please create one with blockstack setup”. So I need to setup a wallet. Turns out there is a command for that as well:

```
$ blockstack setup
```

In doing this, it needs a password to protect your wallet. I saved that to my password manager, and also saved off new wallet information generated by this command. Now I could run

```
$ blockstack api start
Enter wallet password:
{
    &quot;status&quot;: true
}
```

And it works! And finally, I could run

```
$ blockstack info
{
    &quot;cli_version&quot;: &quot;0.14.4.2&quot;,
    &quot;consensus_hash&quot;: &quot;bc799939a8de6f258a55ea3ef9c32953&quot;,
    &quot;last_block_processed&quot;: 482868,
    &quot;last_block_seen&quot;: 482874,
    &quot;queues&quot;: {},
    &quot;server_alive&quot;: true,
    &quot;server_host&quot;: &quot;node.blockstack.org&quot;,
    &quot;server_port&quot;: 6264,
    &quot;server_version&quot;: &quot;0.14.4.2&quot;
}
```

And it works too!

So there you have it. We’re up and running with Blockstack. Next up, exploring the command line interface.</content:encoded></item><item><title>A Professional’s Home Office: 6 Keys to the Castle</title><link>https://rockhymas.com/blog/a-professionals-home-office-6-keys-to-the-castle/</link><guid isPermaLink="true">https://rockhymas.com/blog/a-professionals-home-office-6-keys-to-the-castle/</guid><description>My dad was the first remote worker I knew. It began for him when I was just a kid. He started bringing home a portable computer that he could use to do work while he was a manager at Boise Cascade. This portable computer weighed more than today’s desktops do, and he carried it like a …</description><pubDate>Wed, 19 Oct 2016 15:20:18 GMT</pubDate><content:encoded>My dad was the first remote worker I knew.

It began for him when I was just a kid. He started bringing home a portable computer that he could use to do work while he was a manager at Boise Cascade. This portable computer weighed more than today’s desktops do, and he carried it like a briefcase. The display was smaller than on a typical phablet, and only showed 80×25 characters. All in green.

It was the most amazing thing I had ever seen.

[![Castle Adventure title screen with a pixelated grey castle on black](../../assets/media/Title-CastleAdventure.png)](../../assets/media/Title-CastleAdventure.png)He installed [Castle Adventure](http://www.thealmightyguru.com/Reviews/CastleAdventure/CA-TheGame.html), and I played as often as I could. You’re trapped in a castle, and you need to find the keys that will let you out. It was my first introduction to computer games, and it was awesome.

A few years later, he started his own business, and built a home office where half of our deck had been, put nice bookshelves in, got a great desk, and a door to shut out the kids. I was only ten or twelve years old. From then until now he’s been working from home whenever he wasn’t traveling to teach courses.

So, no surprise, after a few years as a software developer at both large and small companies, I made the switch to remote work. As with most things, I’m still trying to catch up with my dad.

As a kid, I remember it being a really special experience to be invited into Dad’s office, where it felt so professional. I took myself more seriously there. And I felt like Dad took me more seriously too.

### An environment for a professional

A professional home office is where a professional works.

Not an amateur.

A professional musician has the best instrument, but also plays in an excellent concert hall. The amateur plays on a street corner, or for friends at home.

As such, a professional who works at home must make his/her office a place where real work can be done. This is done by controlling the environment both outside and inside your office. It starts by recognizing that, when working from home, you are also [your own office manager](/blog/be-your-own-office-manager/).

Let’s go over 6 keys that will get you out of a crappy home office and into your castle: a professional’s home office.

#### **1. Outside**

#### **Control what is outside your office to be more productive inside your office**

The first thing to look at is what is outside the office. Why does the outside matter?

What is just outside your office will affect your work life significantly. The outside is what you see through the windows. It’s where you go for a break from work. It’s where any noise may come from that will distract you. The outside is also where you keep the rest of your life, or at least try to. When there is no clear outside, it’s hard to keep your personal life from invading work, and vice versa.

A professional must separate his work from his personal life. Sure, it’s fun to share pictures of your cute kid, your new cat, or even your latest backyard project with your coworkers. But when it’s time to get work done, you want an “outside” for a crying baby, or a barking dog, or a messy room.

[![A bend in the hallway, or in other words, my home office](../../assets/media/First-Home-Office.png)](../../assets/media/First-Home-Office.png)

*No outside, no inside. Pitiful.*

My first little “[bend in the hallway](/blog/a-bend-in-the-hallway/)” didn’t even have an outside, unless you counted the kids bedrooms and bathroom that opened into the hallway. My more recent home offices were bedrooms, and so outside of them was the hallway and other living spaces in the house. Outside of my current office is a the backyard on two sides, and garage on a third.

Maybe your home is a small apartment. This can make it tough to have an “outside” to your office, especially if it has to just fit into a corner of your bedroom, or the kitchen nook. If you’re living alone, that may be workable, but even then your own mind will know that your workspace is not separated from your life, and that will make both work and life harder.

Some are driven to coworking spaces or even coffee shops. Why? Despite the noise, the commute, and the cost, the separation is still of greater benefit.

#### 2. Boundaries

#### The boundary keeps work inside, life outside, and helps you transition between them

You need boundaries to keep the outside outside. Before you worked from home you had a natural boundary between your work life and your personal life: miles and miles of commute, and a completely separate building dedicated to work.

[![Give it up!](../../assets/media/traffic.jpg)](../../assets/media/traffic.jpg)

*One way to have a boundary. (c) epSos.de*

You need to keep a boundary there, or the your work and personal life will invade each other, making you less productive at both.

The hardest part of remote work is having your whole home as a constant source of distraction. A boundary reduces or even eliminates that distraction while you’re working.

In the early days of remote work, or telecommuting, or working from home, some held up the lack of a boundary between your office and your home as a good thing.

“Work from home, and you can take care of the kids while raking in the dough!”

“Telecommute to be able to multitask!”

“Mix and match your work and your personal life!”

While those ideals can be true in some senses, the fact is that to be a professional, you need a separate work space, free from interruptions, where your mind and your body can get into “work mode”. And that separation must be enforced with a boundary.

Without a boundary at home, you’ve just recreated the core problems of open offices in your own remote work office. And you took a remote work job in large part to escape the open office work style. By now everyone should know that cubicles are a [death](http://www.joelonsoftware.com/articles/fog0000000050.html) [knell](http://www.amazon.com/exec/obidos/ASIN/0932633439/ref=nosim/joelonsoftware/) for [productivity](http://qz.com/806583/programmers-hate-open-floor-plans/).

Nevertheless, it is all too easy to bring your job home and completely forget this principle, setting up a work area in the bedroom you share with your spouse, or taking a corner of the basement or family room.

Obviously the boundary will be different for a home office than one you drive to. The boundary in my first home workspace was just a long hallway. I asked my wife to keep our two toddlers at the other end of the house while I worked. Fortunately, I only used it at most once a month. It was not the ideal boundary.

Currently, my boundary is a fully walled off office that is part of my garage. The wall between me and the house is insulated, which greatly helps with the noise from the kids. The walls to the outside are too. The door to the garage can be locked, when I need to enforce the boundary.

Dmitry Dragilev called out the importance of separation between your work space and your home space in a great article on remote work productivity. In the [section on separate spaces](https://zapier.com/blog/productive-remote-work/#space), he points out the value of a mini-commute that helps you transition to and from work.

Because I have to walk through my garage I get a little mental segue as I go both to work and come home from work. That transition is really helpful in keeping work and personal life separate, mentally. When I have to work after the kids go down, just going out to my office puts me back in work mode, even though I don’t normally work evenings.

[![Window View](../../assets/media/window-view.jpeg)](../../assets/media/window-view.jpeg)In addition to keeping the outside outside, a boundary can also let some in.

On one wall I have a window, which lets me look into our backyard and see the grass grow, the leaves fall, the snow pile up, and the rare Idaho rainstorm.

It’s wonderful to be able to enjoy a window office without having to worry about seniority.

#### 3. Inside

#### The inside of your office should put your mind in work mode

The inside of your professional office needs to be all about getting work done, and getting it done well. Just like you want to keep outside stuff outside, you want to keep work stuff inside. Entering your work environment should immediately trigger work related thoughts because of the things you see, the smells you smell, the textures you feel, the sounds you hear (or don’t hear); even the temperature of the air can contribute to the mood.

All of those elements that tell you that you’re in a work environment also signal to your family or living partners the same thing. When they interrupt they will know they are entering a place of work, and will be more respectful of what you are doing. Remember how I felt entering my dad’s office?

In addition, some things should stay inside your office and not leave. Since I don’t have ops responsibilities, Slack largely stays inside the office. Sure, the team can get me if I’m away, but I just don’t respond unless I’m in the office or it’s urgent. My work computers stay in the office. My newest machine is a pretty sweet laptop, which is great for when I’m traveling. But when I’m not, it stays in the office. I don’t bring work into the house.

The inside of your home office is what your coworkers will see when you are on video calls. And you should be on video calls. And you should be sharing the video from your side. When others can see your face it increases trust, easing communication.

[![Desk Setup](../../assets/media/desk-2.jpeg)](../../assets/media/desk-2.jpeg)

*Progress!*

A professional isn’t ashamed of their work environment or their personal appearance because it is up to par. Sure, you can be relaxed while you work, I’m not saying you wear a suit and tie to your home office.

But remote work is also not an excuse for hiding, being lazy, or avoiding others.

The best remote workers are those who can master the social conventions of remote communication, and video calls are one of the most important types of communication you will engage in.

I’ve made vast improvements to the inside of my office over time, but I also recognize that I’ve got some room to improve. The remaining principles of a professional home office all apply to the inside of it.

#### 4. Space

#### Space gives your body room to move, and your mind room to think

Inside your office, you need space. My second home office was ridiculously tight, to the point that it affected my productivity. The room was a storage room, filled to the brim with boxes of stuff. I had a small desk, a big (at the time) 17″ CRT monitor, and the door would hit my chair when it opened if I wasn’t careful. Plus, no windows. It really was horrible, looking back on it now.

That said, for most remote workers, they start by just taking over a room, or half a room, in their own home or apartment. This is usually more than enough space, even if half of the room is being used for something else. Of course, if it really is being used for something else, it may be worth revisiting the concepts of boundaries, inside and outside. Maybe you can split the room in half with a permanent or temporary wall?

For the last year or so, my office has been our overflow storage area. And honestly, it was a mess. Half of the area was floor to ceiling boxes, buckets, and random junk. The other half was my work area. The work area half was not cramped, but to get through it I had to squeeze between the boxes in the other half.

A couple months ago, I took just ten minutes a day to declutter, throw stuff out, and reorganize. Within a few weeks, the space in the room really opened up. I now have a big open area where I plan to put a home gym. Thanks to the cleanup my office, while not overly spacious, feels plenty big enough.

I can stand up and pace if I need to think something through.

I can move around while on a call, to keep the creative juices flowing.

In a pinch, I can let my daughter sit on the couch and play games on the iPad.

Harking back to boundaries for a second, let’s talk about windows. A window can really open up the space in a room, even if the actual square footage remains unchanged.

A big part of having space in your office is mental. How much space do you feel you have? Do you feel cramped? A window on one wall (or on two) can remove that cramped feeling completely, and as long as the boundary to the outside still blocks out distractions, this will be a huge improvement over not having a window.

If possible, make it face in a direction where you won’t get direct sunlight. It’s also best if it is to the side. Right in front of you or behind you makes it harder to see your computer screen, makes video calls ugly, and can create more distractions.

#### 5. Working Comfort

#### Working comfort is baby bear’s porridge: not too hot, not too cold

One thing I love about my office is walking into it in the middle of winter. I walk through the garage, which is freezing cold. When I do, I’m usually wearing my wool socks and slippers. I open my office door and step into a cool room.

It’s not warm, because I don’t need it to be. But it’s also not cold. It’s the perfect temperature for what I’m wearing – a long sleeved shirt or sweater, jeans, and of course the wool socks and slippers.

Because we live in Boise at the very edge of a time zone, it’s often dark when I start work in the winter. So I flip on the lights, sit down in my chair, and start cranking out the code. As I do, I’ll occasionally glance out the window and enjoy watching the sun rise behind the trees of our backyard. If I’m lucky, I’ll get to watch snowfall pile up, but just slowly enough that I don’t need to go shovel the driveway.

[![Slippers](../../assets/media/slippers-2.jpeg)](../../assets/media/slippers-2.jpeg)

*The king of my castle*

For some reason, in the winter, I’m comfortable in a way that’s sometimes hard to achieve during the other seasons. During the summer, my office always feels a little too cold, because I’m right under the AC vent, and I also happen to enjoy the dry heat in Boise. Fall and spring are nice, but tend to be louder, with kids outside. Plus when I look outside I’m reminded of all the yard work I need to get to. But in the winter, there is something wonderful about hitting the perfect temperature, sitting in a comfortable chair, and being able to completely focus on work.

Having a comfortable office is a pretty basic thing. But it can be hard to do when you commute to an office, where you might be in an uncomfortable chair, with a desk the wrong height, and fighting with your coworkers over the thermostat. Now that you’re at home, make the effort to get to a “working comfort” level.

Working comfort means you’re comfortable enough to not be distracted, but not so comfortable that you’re distracted from work. So get the temperature warm enough to not be freezing, but not so warm that you’re tempted to fall asleep. Make the office clean, but not so antiseptic that you won’t use a whiteboard because it’ll mess up the “look” of your office. Everyone has a different ideal level of decoration. If a busy set of walls helps fire up your creativity, great, decorate away. If it just distracts you from work, then tone it down.

Your office should not be a place you avoid because it’s uncomfortable. Of course, you also don’t want it to be so much nicer than the rest of your home that you hide out there just to enjoy it.

#### 6. Simplify

#### Make work easier by making everything else easy

Simplify, automate, minimalize.

Whatever you call it, the key here is to eliminate stuff that keeps you from getting work done.

If you’re working from home, you’ve already eliminated a huge time suck: your commute. My brother Mason recently did that, and it made a measurable difference.

&gt; [@rockhymas](https://twitter.com/rockhymas) Today is my first day working from home and my life is now 83% better. Fits my brain and personality WAAAAAY Better
&gt;
&gt; https://twitter.com/MasonHymas/status/788402387459334145

Congratulations! But don’t rest on your laurels by stopping there. There is more you can do. Find ways to automate manual tasks that make it harder to get work done.

Consider having a cleaning service come in, so you don’t have to worry about cleaning your office.

Get a [motion detecting light switch](https://www.amazon.com/Lutron-Maestro-required-Single-Pole-MS-OPS2-WH/dp/B005WM3ALC/ref=sr_1_3?ie=UTF8), so you don’t even have to think about turning the lights on or off.

If you have a separate entrance for your office, you might consider adding one of those fancy new wireless locks, so you don’t have to remember to lock it when you’re done for the day. Oh, and let me know which one you use, and if it’s any good.

Eating and drinking are common interruptions of a workday. Though they have to be done, if you regularly spend time or mental energy figuring out whether to get a drink, or what to eat, it will sap your focus on productivity.

That’s why offices often offer free drinks, sometimes even free meals. More important than whether its free is whether the choice requires mental energy. It’s way easier to take a lunch break if you already know what you’re going to have because you prepared your lunches at the start of the week or before work that day. Staying hydrated is less disruptive if you’ve got plenty to drink in your office, and it’s the right temperature.

[Develop a routine](/blog/remote-work-routine/) for the stuff you can’t eliminate, automate, or outsource. A routine simplifies your workday by reducing the number of choices you have to make, and freeing up your mind to solve the real problems your job throws at you.

#### Now what?

So, given these principles, what is left for me to do? Plenty. Though I’ve made a lot of progress, writing these thoughts down has given me all kinds of ideas for improvement. I want to get some nice light fixtures, add blinds to my window, get a better lock for the door, finish cleaning out the storage from my office, actually get the squat rack I keep promising myself I’ll install, brainstorm ways to increase comfort in the summer, put up some decorations on the walls, reorganize my desk area to better use the space, and get into a better habit of keeping the office clean, mostly by sweeping the floor regularly.

That’s my list. What’s yours?

[![A cluttered student homework desk photographed for a study-skills class](../../assets/media/homework-e1476802244753.jpeg)](../../assets/media/homework-e1476802244753.jpeg)Somewhat coincidentally, while writing this article, my 14 year old son had an assignment in his study skills class to take a picture of his workspace at home. The class then looked over everyone’s pictures and discussed how to make it better for getting homework done. As you can see, his workspace is a mess. That’s because he spends more time and effort building castles in Minecraft than he does cleaning up his desk.

And so we come full circle. Here I am, working from home, while my son plays video games with castles. He’s just a kid, not a professional. But I’m a professional. This [series on remote work](/remote-work/) has covered a few different things; one was the story of how I built a professional home office.

How is your home office? Send me a picture on [twitter](https://twitter.com/rockhymas), I’d love to see what others have done to create an awesome work environment at home. And I’ll share every picture I get.</content:encoded></item><item><title>Office Update</title><link>https://rockhymas.com/blog/office-update/</link><guid isPermaLink="true">https://rockhymas.com/blog/office-update/</guid><description>My home office has come a long way from the bend in the hallway where I used to work. And now it’s time to take the next step. Why build my own home office, when I’ve got a perfectly good bedroom in the house that will do? Well, there are a few reasons. But they …</description><pubDate>Mon, 19 May 2014 15:25:19 GMT</pubDate><content:encoded>My home office has come a long way from the [bend in the hallway](/blog/a-bend-in-the-hallway/) where I used to work. And now it’s time to take the next step.

Why build my own home office, when I’ve got a perfectly good bedroom in the house that will do? Well, there are a few reasons. But they might all boil down to one reason: we home school our four kids. That means that a) we have kids and b) they’re home all day. To drive the point home, the oldest three are boys and if not kept completely occupied they will yell and scream, either while playing together or fighting together.

So yeah, it’s loud in the house. A bedroom upstairs just doesn’t block out the sound. Sure, I [use background noise](/blog/crying-children-crackling-campfires/), listen to music, and keep the door shut.

It’s not enough.

So I’ve tested the sound qualities of the new office. It’s a garage bay separated from the house by an insulated wall. In addition, on the home side, the wall has built-in shelving and a fireplace, providing additional sound protection. I’ve had the kids sit in our family room and yell while I listened from the garage bay. I can hear them, barely. It’s ten times better than the bedroom I work from now.

So what’s left to do?

Well, I’ve had four contractors come by to give me bids for the work to turn our garage bay into a home office. Three of the four eliminated themselves pretty easily. One emailed me before getting a bid back to say that he was bowing out. One wouldn’t give me an estimate – he works primarily in commercial, but does residential only on recommendation by family and friends. A third sent me an excuse for not getting an estimate within the week, and now, two weeks later, hasn’t communicated since. But my first estimate was from a guy I’d helped move a year ago, and he’s been responsive to my questions and ideas. He’s busy, so he hasn’t been able to start yet, but I feel confident that he’ll do a good job.

The process of getting multiple bids from different contractors was good. I was able to discuss the unknowns with four different people who all approached them from different perspectives. One big unknown for me was how to handle heating and AC. We live in Boise, ID, where it’s hot in the summer and cold in the winter. Of the four different contractors, I got three different approaches to the AC/heating problem. One recommended a window AC unit and baseboard heating. Two recommended pulling a duct from the home system. Another recommended a mini-split system. Each approach had its pros and cons: initial cost, efficiency, control. I actually liked all three ideas well enough, so this wasn’t a deciding factor. I could probably convince the contractor I have to go with any of the three, but I’m sticking with his recommendation of a mini-split system. Though the up-front cost will be a little higher, it should be the most efficient, won’t put extra load on our home AC/furnace, and it will give me more control over the office temperature, independent of the home. The fact that we can crowd the whole family into the office when our home AC inevitably goes out is also a nice benefit.

So, having picked a contractor and worked out the HVAC plan, the next step was clearing the garage bay. It was still full of random stuff from our move last summer, as it became the default storage room for the house. Actually, the process started before the contractors came. I began by moving stuff piecemeal over a few weeks. Once it was clear enough for the contractors to come in, move around, and look things over, I did that, and continued the piecemeal clear out. Then, last Saturday, I spent a few hours moving all the rest, taking down wall mounted shelving, etc. The only thing remaining to do is sweep it out before actual work begins.

[![Cleared Garage Bay](../../assets/media/clearedbay.jpg)](../../assets/media/clearedbay.jpg)

*Cleared Garage Bay*

And that’s where I’m at now.</content:encoded></item><item><title>Remote Work vs Work From Home</title><link>https://rockhymas.com/blog/remote-work-vs-work-from-home/</link><guid isPermaLink="true">https://rockhymas.com/blog/remote-work-vs-work-from-home/</guid><description>Do you work from home? Or are you a remote worker? The answer may surprise you. I got interested in the different terms we use to discuss remote work/ distributed work/ telecommuting/ working from home while watching Office Optional. Sarah Milstein kicked things off and in her opening remarks she pointed out that we don’t …</description><pubDate>Thu, 08 May 2014 19:02:48 GMT</pubDate><content:encoded>Do you work from home? Or are you a remote worker? The answer may surprise you. I got interested in the different terms we use to discuss remote work/ distributed work/ telecommuting/ working from home while watching Office Optional. Sarah Milstein kicked things off and in her opening remarks she pointed out that we don’t have a common language for discussing the “office-less” work that so many people do.

&gt; Can we all just agree to call it “Remote Work”? [#officeoptional](https://twitter.com/search?q=%23officeoptional&amp;src=hash)
&gt;
&gt; https://twitter.com/rockhymas/statuses/458663215657148416

I shared my initial opinion on twitter during the Office Optional livestream. But I realized that in order to come up with some scientific answers, research was required. Let’s turn to that source of all modern knowledge: Google.
Note: All searches were done in an incognito session, in an attempt to get less biased results.

First up, image search. Here’s the first page of image results for “remote work”:

[![Remote Work Image Search](../../assets/media/remote-work.png)](../../assets/media/remote-work.png)

*Remote Work Image Search*

And here’s the first page of image results for “work from home”:

[![Work From Home Image Search](../../assets/media/work-from-home.jpg)](../../assets/media/work-from-home.jpg)

*Work From Home Image Search*

At a glance, it should be obvious that people who work from home are mostly women. Remote workers are primarily men. Google said so.

But let’s dig in a little further. On the “work from home” search, we get the following statistics:

&lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Women&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Men&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Women w/children&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Men w/children&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

And on the “remote work” search we see this:

&lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Women&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Men&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Women w/children&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Men w/children&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

As you can see, remote workers don’t have kids. People who work from home do, but only if they’re women. That must mean I’m neither a remote worker nor a work-from-home-er.

Maybe I do “distributed work”?

[![Distributed Work Image Search](../../assets/media/distributed-work.png)](../../assets/media/distributed-work.png)

*Distributed Work Image Search*

Well, if so, then I’m a 3D model that vaguely resembles a human, and may be differentiated from other 3D quasi-humans only by color. We communicate via 3D arrows.

Aha, maybe I’m a telecommuter?

[![Telecommute Image Search](../../assets/media/telecommute.png)](../../assets/media/telecommute.png)

*Telecommute Image Search*

No, telecommuters are primarily cartoon characters, often from Dilbert. At least here, men and women, the real ones, not the cartoons, seem equally represented. Also, they’re all dressed, whereas the cartoon characters have about a 33% chance of being in some state of undress. Thinking back on the last week, that ratio sounds about right.

I also noticed that [The Oatmeal](http://theoatmeal.com/) got itself a cartoon on the first page of image links for both the “work from home” and “remote work” searches. Though the “worker” in both cases is a man, it’s shouldn’t be surprising that the cartoon with a woman showed up on the “work from home” search.

![The Oatmeal on ](https://s3.amazonaws.com/theoatmeal-img/comics/working_home/8.png)

*The Oatmeal on “Work From Home”*

[![The Oatmeal on &quot;Remote Work&quot;](../../assets/media/remote-oatmeal.png)](../../assets/media/remote-oatmeal.png)

*The Oatmeal on “Remote Work”*

Both are from [this The Oatmeal post](http://theoatmeal.com/comics/working_home). Warning: The Oatmeal is crass, crude, and vulgar, in case it wasn’t obvious.

Ok, next up, trendlines.

From the chart, it’s clear that “work from home” is the most popular term. But it’s popularity has been waning over the last ten years. “Remote work” is the upstart, and seems to have replace “telecommute” over the last ten years, with definite gains since 2008. It appears that at the same time each year “work from home” searches drop and “remote work” searches surge. Not sure what’s going on there, but it would be interesting to study further.

Finally, we can look at the regular web results for each search. Here, both searches include links to job listings: career builder, indeed, etc. “Remote work” points to some other smaller sites like weworkremotely.com and skipthedrive.com. The [weworkremotely.com](http://weworkremotely.com) link isn’t suprising, because the first link on that page is to the 37 signals book, Remote. “Work from home” has more big-name job search engines: Simply Hired, etc. It also has how-to type articles, one at womenforhire.com, and another at bankrate.com, of all places. The “remote work” search includes a link to the Wikipedia article on telecommuting, while the “work from home” search has the Wikipedia article on work-at-home get rich quick schemes.

### Conclusions

Hm, I’m not sure I have any conclusions. Solving this problem by adding a new term seems like a horrible idea. But none of the existing terms are all that useful. Yeah, I “work from home”, but not everybody who doesn’t have an office to go to does. I’ve talked to testers who use cell data plans and roam the country in RVs. And while I like the term “remote work”, the fact is that at a company like Articulate, where everybody is “remote”, then you have to ask what are we remote from? Not a central office. Telecommute might make sense if I spent my days on the phone. I’m more of a ‘net commuter. I commute to our team “office”, i.e. the Storyline HipChat lobby, via my internet connection. I share my work via the net, I talk with my team via the net, my work is organized on the net. But seriously, let’s all stick with “remote work”.

*So, now that you know the science, what are you? A remote worker? A telecommuter? Or do you work from home?*</content:encoded></item><item><title>A Biased, Incomplete, Opinionated Summary of Office Optional</title><link>https://rockhymas.com/blog/summary-of-office-optional-1/</link><guid isPermaLink="true">https://rockhymas.com/blog/summary-of-office-optional-1/</guid><description>Many others have offered up their summary reports on Office Optional, the new conference on distributed work put on by the Lean Startup guys. This is going to be my biased, incomplete, and opinionated summary. It’s biased because I’m coming at it from a certain angle – that of a remote worker trying to get …</description><pubDate>Sat, 03 May 2014 03:13:25 GMT</pubDate><content:encoded>Many others have offered up their summary reports on [Office Optional](http://officeoptional.co/), the new conference on distributed work put on by the [Lean Startup](http://leanstartup.co/) guys. This is going to be my biased, incomplete, and opinionated summary. It’s biased because I’m coming at it from a certain angle – that of a remote worker trying to get better at what I do. So I’ll go light on some of the HR stuff and “big ideas” talks that were outside the scope of what I face on a day to day basis. It’s incomplete because, even after just covering the stuff I’m biased to cover, I’m still going to have to leave stuff out. I’m not going to go super deep in this post, but will do that later in other blog posts on particular talks or themes that came out of the conference. And finally, it’s opinionated. My first opinion is that it was a great conference, and I hope the Lean Startup Foundation keeps it going. I’ll also be offering some suggestions on what could be improved, and feedback on some of the talks themselves.

[![Office Optional](../../assets/media/officeoptional_175.png)](http://officeoptional.co/)

So let’s dive right in and look at the themes of the conference. The themes I cared about and tuned into were Collaboration, Communication, Tools, Self-Management, and Human Resources.

### Collaboration

The conference kicked off, after [Sarah Milstein](https://twitter.com/SarahM)‘s initial remarks, with an awesome talk about the [modes of collaboration](http://www.slideshare.net/LeanStartupConf/the-three-modes-of-collaborationand-what-they-mean-for-distributed-teams) by Teryn Rikert. She outlined three, increasingly complex modes of collaboration: informative, evaluative, and generative. Each mode involves some primary activities. For example, the informative mode is about asking, telling, showing, and responding. For livestream participants in Office Optional like me, this was the primary mode of the entire conference. I was learning, sharing what I learned and asking questions. The evaluative mode is all about challenging, defining, commenting, revising. This mode tends to be iterative and is about taking something and improving it. The most complex, and most valuable mode of collaboration is generative. In this mode, people are brainstorming, building, synthesizing, and capturing creation.

Tools exist for enabling the different activities that make up these modes of collaboration, both for remote workers and for those in traditional offices. Teryn could have easily gone on to discuss these tools, and what they should look like for remote workers, and the talk would have been excellent. Instead, she went deeper by examining what actually makes collaboration work: trust. The activities of collaboration become much more powerful when the participants have high trust. And certain behaviors embody and build trust in each mode of collaboration.

Tools can solve the problems of letting remote workers see, hear, and talk to one another. But for true collaboration, they need trust. And trust is built up by certain behaviors. In the informative mode, trust is built by revealing, pausing regularly, so participants can ask, checking on progress, and inquiring. You trust the professor who does those things more than the one who just lectures. In the evaluative mode, trust is built by reiterating others ideas, clarifying, focusing in, and eliciting feedback and input. In the generative mode, trust is built by aligning participants, facilitating involvement and creation, summarizing ideas and progress, and highlighting everyone’s contributions.

And so, rather than looking at the tools with respect to how they enable the activities of each collaboration mode, we can look at how well they enable the activities that build trust in each mode. Building trust in those modes is important when you’re in person, but absolutely vital for distributed, remote teams.

Joe Moore followed Teryn up by talking about one of the most intense forms of generative collaboration, [remote pair programming](http://remotepairprogramming.com/). He emphasized using both screen sharing and video chat to build trust and ensure communication is as high bandwidth as possible. It made me miss the great pair programming I did at TrackAbout a little bit. One thing I’ve learned over time is that certain tasks lend themselves very well to pair programming, while others are just not a good fit. The Storyline team has been working on a lot of UI heavy stuff recently, and it doesn’t feel like a task well suited to pairing. Other features we’ve done for our upcoming release could have really benefited (and in some cases did) by pairing on the code.

A little later in the day [William Donnell](https://twitter.com/sodiumhalogen) walked us through how they do brainstorming at Sodium Halogen using video chat. Although the discussion was tools focused, it was in the service of generative collaboration. The key, in his mind, was to provide as much video as possible, giving remote participants a full view into each other’s workspaces and whiteboards.

Both [Cheryl Contee](http://fissionstrategy.com/team/member/Cheryl%20Contee/0) and [Chris Byers](https://twitter.com/rchrisbyers) discussed the value of culture, trust, context, and purpose over tools as well. For remote organizations to work well together, they need good culture, a context of shared purpose guiding them, and trust among team members. Without those, the best tools are not going to make the work any easier. There will be confusion, frustration, and lack of trust limiting all of the collaborative work they are attempting. With those, the productive work can get done even with suboptimal tools. Chris focused on the value of a shared purpose that everyone knows. This common shared purpose and mission gives employees the ability to work independently and autonomously to achieve it, which is a necessity when they’re working independently and autonomously through remote work. Cheryl discussed a variety of important cultural behaviors that build trust and establish a culture. Things like hiring slow and firing fast, celebrating birthdays, allowing flexibility for remote workers schedules, a yearly team retreat, always assuming good intentions of your coworkers and employees, etc. None of these behaviors are specifically about collaboration, but they grease the skids, making collaborative work more productive and possible.

### Communication

For me, the highlight of the discussions around communication was [David Yee](https://twitter.com/tangentialism)‘s talk on group chat. He first pointed out that a shared group chat room is the “office” for remote workers. It provides a common area for us to talk, shoot the breeze, discuss both work and personal stuff, kick off deeper conversations, and create a common culture. Group chat is the solution to many of the standard problems of remote teams: having group conversations, limited shared time together, employees feeling isolated, a lack of “benevolent eavesdropping” that leads to serendipitous collaboration. He pointed out that group chat is your office, it’s the common area at the heart of your company or team. Everyone has their own office, and group chat is the common areas, the water cooler, the hallways connecting them all.

He then went on to discuss ways to use it more effectively. First, show up. That means logging in to your chat app, whether it’s HipChat, or Slack, or Campfire. Second, use it. If you need to talk with coworkers, put it in your chat room. There are advantages to persisted searchable chat that you give up when you pick up the phone. Conversations can go on and be picked up by people who weren’t at work when they started. Others can read through past conversations to know what’s going on, even if they don’t have anything to add. Next, say hello. When people say “hello” upon starting their work day, and say “goodbye” when they leave, it sparks conversations, it shares your work rhythms, and creates a shared team or company rhythm, just like in person offices have. Fourth, use chatbots. They can make chat more fun, easier to use, and inspire discussion based on automatic events, like tweets about the company. Finally, start with the lobby. If you’re not using group chat, just create one room, a lobby, for common use by the team. If you do have group chat up, default to having conversations in the lobby. The transparency that provides is healthy for a team, and allows for the benevolent eavesdropping that more easily happens in co-located offices.

The next session on communication that really struck me was [Sieva Kozinsky](https://twitter.com/SievaKozinsky)‘s talk about how daily meetings can transform a distributed team. This struck a chord with me because on the Storyline team we’ve been experimenting with our daily status meeting to try to improve things. Over time it had become challenging. It lasted too long, had too many people in it, and became something I zoned out in. After some discussions, we agreed to only have it when there were people who had something to share. That’s presented its own set of problems, and I’m not really happy with the result there either. Sieva’s talk emphasized that a good daily meeting should be like a good habit, rather than a chore. A good habit, like brushing your teeth, is something you do daily, and it leaves you feeling good. A daily meeting can become a good habit if you make it quick, easy to participate in, and relevant to the whole team. I think our biggest challenge on storyline is just how big the team is. With a smaller team size (maybe do the daily meetings at a smaller granularity), they would be shorter, everyone could update each other on what they were doing and would do, and because the team is primarily composed of people you work closely with, the updates people share are more relevant to you. One other key part of the habit for Sieva’s team was that someone would share their screen during the meeting with notepad open and just type in a summary for each person of what they had done during the last day and what they would do in the next day. This pressured people to be realistic about their plans because there was a little accountability to the team in what they said.

As an alternative to, or in addition to, daily meetings [Sadie Honey](https://twitter.com/Sadiehoney) and [Aaron Pava](https://twitter.com/pava) outlined their weekly meeting agenda. These lasted longer than a typical daily meeting and were at a higher level. The first step, which only takes a few seconds, is to have everyone share their “balance score”, which is a score from 1 (life) to 10 (work) indicating whether their work/life balance was tipped more towards work or life. This was then tracked so team and company leadership could keep an eye on things, while expecting natural fluctuations. The next step is to have each team share a 30 second updates on what the team is doing with the company. Then everyone who wants to can share something they are excited about, wondering about, or worried about. Finally, they wrap up with a 10-15 minute talk on some topic. These topics are chosen in a quarterly meeting where everyone brainstorms different topics they’d like to hear discussed. They could be anything from how/why the company is run the way it is, to technical talks. All of these components of the weekly meeting seemed like interesting ideas worth trying out on my own team. The continued to discuss other cultural aspects of their company that sounded fun. I hope to share more of those in another blog post.

### Tools

In the category of tools, one discussion stood out, despite the taste of salesmanship that came across. Though [Patti Chan](https://twitter.com/pattichan)‘s talk eventually became a pitch for Houston, an open source project created by her company, Intridea, it began with some intriguing thoughts about the evolution of tools for distributed work. After beginning with a review of the tools that her team uses, she went on to categorize them broadly as either tools for storing and disseminating information, or tools for talking to each other. She imagined an uber-tool in each category. For storing and disseminating information, a Frankenstein-ian hybrid of GitHub, Dropbox, and Google Docs. For talking with each other, a similar hybrid of Skype, Hipchat, GotoMeeting, and Yammer.

Though my initial thoughts were that single purpose tools will win out, and big complex apps like she imagines are ripe for disruption by smaller, quicker competitors, it’s not surprising that we see the tools actually moving in the direction she laid out. Skype just added free group video calls, Hipchat recently added video/audio calling to its chat app. GitHub is constantly building out new and interesting ways for storing and presenting the data that people keep in Git. And Dropbox definitely has the vision that could make it the sole repository of information for companies and individuals in the future. Whether or not it’s possible for a single app to become the communication or information hub for a distributed company, many apps are definitely trying to achieve that goal.

And I know that having less tools to deal with feels good to me, as a remote worker. I’ve been arguing for a while that our team needs to track its bugs and its feature work in the same tool. And the disconnect of communicating on Skype one minute, HipChat another, and GotoMeeting later in the day is frustrating. I’d love to have a single experience.

It also seems reasonable to assume that all of the disruption that has been occurring due to internet technologies over the last couple decades will have to taper off in time. It causes a certain amount of learning fatigue, and there is definitely value in being able to concentrate on getting work done, and not living on the hamster wheel of learning new tools only to discard them and move to the next shiny thing that comes along. It may take years, or even another couple decades, but I believe that our cost/benefit analyses will lead us increasingly to keep the tools that we have over switching to others for minor gains, especially as those tools fill in the gaps in their feature sets.

Honestly, I’d rather have HipChat add Sqwiggle as a feature, so that people’s avatars just update with webcam shots every few minutes, rather than having to use both HipChat and Sqwiggle. I’d also love to be able to handle screen sharing, audio calls, and video calls al through the same app, and, for company related business, have all of those recorded and archived, just like chat is.

Besides Patti’s thought-provoking talk, much of the focus on tools was on individual tools that people could use. Some tips and tricks came out of that, as well as some new tools I hadn’t previously heard of, like [Murally](https://mural.ly/) and [Popplet](http://popplet.com/), which both seemed interesting and useful within their domains, even though I don’t often work in those domains.

### Self-Management

Honestly, this was the weakest theme of the conference in my mind. I doubt the conference organizers even considered it to be a theme, though the one panel discussion of the conference was focused on this: how individuals manage their own remote work. And it was one of my favorite parts of the day. I had just hoped there would be more discussed in this category. Here’s to expanding this theme in the next Office Optional

[Lynne Johnson](http://www.lynnedjohnson.com/) began by asking the four panel members (herself included), what their daily rituals consisted of. Each person had a different schedule, with different challenges. Three of them spent time with their kids in some significant way each day, which is a recurrent theme among those I’ve talked to and worked with who love remote work. That said, [Elisa Batista](https://twitter.com/ElisaBatista) mentioned the challenge of being fully present with the kids, since when you’re at home you’re in your work environment, and it’s hard to turn that off without the reset that comes from a commute home at the end of the day. Because of this she mentioned the importance of having a separate workspace within your home. That separation can help you be more focused on work when you’re working and more focused on family when you’re not.

Two of the four admitted to regularly working in their pajamas. I regularly work in my gym clothes after a morning weights or running session, so I can relate. For [Keith Fahlgren](https://twitter.com/abdelazer), daily habits are a key to his productivity, and one of those is his morning shower, so no PJs for him. He also mentioned the importance of checking in on the company chat room by saying good morning when he started work, which was impressive since he got up at 5 am and did a couple hours of work before getting his kids off to school each day. Lynne also avoided pajama work because she almost always worked away from home, at coffee shops, co-working spaces, etc. She liked the regular change that came from working in different places, but did admit to missing a workspace that was all her own, set up just the way she wanted it. She had one, but worked out and about enough that she missed it.

Each of them also had little tips to be more productive. [Raina Kumra](https://twitter.com/rainakumra) offered a fun tip for those who were one of the only remote workers in their company: have a mole in group meetings who could text you about nonverbal reactions and other things you miss by not being there in person. Keith encouraged remote workers to expect their company to pay for the tools needed to do company work productively (I’m really grateful that Articulate encourages us to expense everything we need to work effectively). Elisa and Raina both mentioned the importance of time trackers, not just when doing billable work, but also to keep productive. RescueTime and Harvest were mentioned.

All of that was great, but, as I said, I would have loved to have more talks and discussion on the topic of self-management.

### Human Resources

A final theme for the conference was a focus on human resources: issues around interviewing, recruiting, onboarding, management, and the overhead of processes and team organization. It would be unjust not to kick off my review of this section by starting with anyone other than [Articulate](https://www.articulate.com/)‘s own COO, [Frazier Miller](https://twitter.com/fraziermiller). He began by looking at the “psychographics” required for remote work. In other words, how to find people with the right mindset, personality, and approach to work for doing remote work. At the level of hiring and onboarding people, you need to find employees who can motivate themselves, stay focused, and work without the human interaction that an office provides. Articulate has learned that sometimes that means letting employees find you and your company, rather than going out and trying to find them. Too many people are recruited by distributed companies and get the wrong impression of remote work. It’s not a day on the beach, it’s a messy home office with family interruptions to deal with.

Once you’ve found the right people, having an onboarding process is important, especially as the company grows. Part of that onboarding process at Articulate includes the annual company retreat and also team inception get-togethers. We’ve still got work to do there, as I’ve been at the company more than a year and never been to a team inception face to face. I’d really like to see these happening 1-2 times a year, in addition to the annual company retreat, which we had back in October and was awesome. Some other improvements that Frazier wished we could make as a company was to use more video when doing calls and chats, both individually and in groups, and an Apple Pie as a Service. It would be nice to more easily recognize and appreciate employees, from something as simple as a pie on their birthday, to more formal rewards. In an office that can be easier, but it’s not always easy to do with a remote workforce. Not only does everyone live and work in different places, but because of that, we don’t really have an office admin (there’s no office to administer. Administrate?), who would typically handle things like that. It certainly seems like something that an enterprising person/company could turn into a business for distributed teams.

Before Frazier spoke, the [Automattic](http://automattic.com/) team had a couple people talk about some of the lessons they had learned on an even larger distributed workforce. The most interesting idea from that discussion, for me, was that they hire everyone on contract to do a 4-6 week project in their free time as part of the interview process. I’ve heard many say they like this idea in the past, so it was cool to hear how it’s actually working at a good sized company. This helps them not only find people who can do good work, but who can do good remote work. Because it’s a paid project, the potential employee gets something out of it, even if they ultimately decide working from home is not for them.

Although there were other talks about HR, the last point that really struck was from the day’s closing discussion with [Bob Sutton](http://bobsutton.typepad.com/) and [Eric Ries](http://theleanstartup.com/). When talking about the need for process and hierarchy as an organization grows, Bob talked about a small company, Pulse, that started to fall apart when they got to 11 employees. They had been productive up to that point, but at that point nothing was getting done, there was fighting going on. They solved the problem by dividing into 4 different teams, of two or three people each, with a simple coordination process. Each evening, before leaving work, each team would share what they had accomplished that day, and any questions they had or blocking issues. This simple organization and process allowed them to work much more quickly, and stopped the politics from happening. This resonated with me, because something I’ve seen at both remote companies I’ve been at is that teams need to be smaller. Teams of 2-5 people seem like the sweet spot for remote work. I think co-located teams can grow a little larger, maybe up to 10 or so, before they start to get unwieldy. But remote teams of more than 6 or 8 leave people feeling disconnected, hidden, or able to hide, in large group calls, and less accountable to one another in their shared goals.

### Next Time

As the day wrapped up, my mind began to turn to the next Office Optional conference. I fully expect that the caliber of speakers will be even better than this year. I called out some of my favorite talks above, and many others were good, but not necessarily applicable to me. There were some disappointments as well, talks that I felt could have been better with the right presenter, or where the subject matter was just unhelpful, or where a simple idea was spun out into a talk that ultimately had a low signal to noise ratio.

If at all possible, I’d love to attend in person. Though I was able to share tips and questions as a livestream participant, the fact is that none of my tips or questions got shared or asked during the conference. My primary participation, outside of watching it, was by tweeting quotes I liked. It would have been fun to be there, to chat with fellow attendees and speakers during the breaks and at lunch. There is definitely a time and place for in person meetings, and Office Optional is one of those times and places.</content:encoded></item><item><title>Crying Children and Crackling Campfires</title><link>https://rockhymas.com/blog/crying-children-crackling-campfires/</link><guid isPermaLink="true">https://rockhymas.com/blog/crying-children-crackling-campfires/</guid><description>One of the common benefits listed for remote work is that you can have some peace and quiet and therefore be more productive without the interruptions and background noise of the office environment. But it wasn’t happening for me. Why not? Sure, I had more time without the long commutes into New York. But I felt …</description><pubDate>Thu, 24 Apr 2014 15:09:22 GMT</pubDate><content:encoded>One of the common benefits listed for remote work is that you can have some peace and quiet and therefore be more productive without the interruptions and background noise of the office environment.

But it wasn’t happening for me. Why not? Sure, I had more time without the long commutes into New York. But I felt like there were more distractions, more interruptions, more noise. Why was that? At Fog Creek, my office had been right next to the open area where the sales team worked. They spent the whole day on the phone, talking to customers. And honestly, though I had a door that could close, I often left it open. Their noise didn’t bother me much at all, and it would sometimes get loud.

Now that I worked from home, it seemed like the smallest noises from my wife or kids, who were often at the other end of the house, would disrupt my concentration. What was going on?

I didn’t have a satisfactory answer for months, and it took learning some new things before this pattern (which continued for a while), began to make sense. I learned that background noise is healthy and can help us be more creative. There are now many websites and apps that will recreate the casual background noise of coffee shops or nature in an attempt to stimulate greater creativity.

Once I understood that, I started using it occasionally. My current favorite background noise website is [Noisli](http://www.noisli.com/). One thing that’s nice about it is that I can pick the background noises I like – I usually go with an even mix of rain and a crackling fire.

I was just reminded of the second realization that made this all clear. As I started writing this blog post this morning, the kids began to wake up. Thus, background noise. My three year old daughter began crying, not loudly or annoyingly, more like a little whimper coming from her room. Normally, I’d let my wife deal with it. But it went on for a little bit. And so I jumped up to check on her. After giving her a hug and calming her down a bit, I found out that Mom had walked in on her getting dressed. She was crying because she had wanted to finish before Mom came in to surprise her by being all ready for the day. This so disturbed her that she sent Mom away and proceeded to console herself by crying about it.

Cute? Yeah. Distracting? Yeah.

But the point for me wasn’t that it was cute. The point for me was that it was background noise that I couldn’t ignore. The noise of my daughter crying means something more to me than the sales guys at Fog Creek chattering away on the phone. It means more than a rainstorm or fire in the background. It means more than the bustling sounds of a busy coffee shop. And because of that I can’t ignore it.

There are just some types of background noise that my brain tunes into. It could be my daughter crying, or my sons playing and laughing together, or my wife trying to round up the kids to go to their home school co-op. I care about my family deeply. Anything they do is important to me. And that means that their background noise is never in the background of my mind.

It’s easy to think of background noises that would immediately make you sit up and take note. The sound of rushing water and a crackling fire are the peaceful sounds of camping on a summer night. But a snapped branch and the rustling of a large animal in the background, even if it’s quieter than the fire, would immediately take you out of your reverie.

[![Campfire](../../assets/media/fire.jpg)](../../assets/media/fire.jpg)

*Campfire (c) [kennymatic](https://www.flickr.com/photos/kwl/2918157336/sizes/l/)*

It’s pretty easy to ignore the background noises at a coffee shop. But if someone across the way starts talking on the phone about their friend with the same name as you, it would get really distracting really fast. You’d need to make an effort to ignore the conversation in which your name kept being repeated.

I’ve realized that when I’m working I need to find ways of eliminating the background noises that distract me. That’s one reason we’re building a new office in the garage. The extra insulation will make things quieter, eliminating the distracting background noise of my kids being homeschooled each day.

Until that’s complete, [Noisli](http://www.noisli.com/) is my go-to source for overpowering the distracting noises of my family. I also like to listen to music, especially music I found and loved back in college. I know the words by heart, and its so familiar that I’ll sometimes get into the coding flow and only realize 10 minutes after it’s stopped that I didn’t pay attention to a single song on the whole album. And I probably sang along with half of them.

*What tools do you use to eliminate distracting background noise? To ensure healthy background noise?*</content:encoded></item><item><title>Make Your Remote Work Routine Stick</title><link>https://rockhymas.com/blog/remote-work-routine/</link><guid isPermaLink="true">https://rockhymas.com/blog/remote-work-routine/</guid><description>What is your routine? Heck, what is a routine? What I’m calling a routine, some might call a ritual, or a schedule, or a checklist. At its heart, a routine is a series of steps that you follow to get a result. Think about a routine in a computer program. It’s just a set of …</description><pubDate>Sat, 19 Apr 2014 22:47:11 GMT</pubDate><content:encoded>What is your routine? Heck, what is a routine? What I’m calling a routine, some might call a ritual, or a schedule, or a checklist. At its heart, a routine is a series of steps that you follow to get a result. Think about a routine in a computer program. It’s just a set of instructions, executed in order, to get a certain result.

When you work remotely, you need a routine. You already have some routines. You probably have a morning routine, and probably have an evening routine. They might not be ideal, and they might be a little random, but they’re there. You may also have a lunchtime routine, or a starting work routine.

When you worked at an office (or if you still do), you probably had a routine when arriving at work and one when getting home. Though they probably weren’t explicit or super consistent, the habitual nature of those routines gave structure to your day and helped you get certain things done. Those routines often pressured you to create other routines, like a productive morning routine, or an end-of-the-workday routine.

But when you start working remotely, all of that seems to go out the window. You don’t stop having a routine, but you probably noticed that it degraded over time. Your morning bled into work time, which later bled into the evening. Your routine became more random, less ordered, less productive, less routine-y.

Has that happened to you? I know it’s happened to me. It happened when I first started working remotely. It happened after I moved six months later. It almost happened again last week. But I’m slowly getting better at making the routines stick. Here are a few ideas that keep me from descending into a pit of unorganized, randomly ordered life choices that leave me weak and unproductive…

**First, make your routine sustainable.** Honestly, this take regular adjustment. I’ve found that I can usually go 6-8 weeks with a new or adjusted routine before the routine gets routine, and therefore boring and hard to sustain. Whenever I start to feel that, I know it’s time to change something. Partly, that change is just for the sake of change. Our minds need a sense of newness to stay interested in something. But more importantly, I aim for changes that will make the routine easier to stick with, while still being productive.

**Second, include slack time in your routine.** If you’re morning routine is scheduled down to the minute, the smallest disturbance can throw you off your game. Make sure you’ve set aside more time for each activity than it will take.

With the slack time, you need some simple tasks to fill it. Slack time has it’s own pitfalls. The main one is that you don’t need it, and so you pull up your phone and check twitter, and before you know it the slack time is gone, and you’ve already missed the next thing you’re supposed to do. If its not twitter on your phone, its surfing in your browser, or checking Facebook, or picking up the book you recently got sucked into. Make sure you’ve got small things, that will only take a couple minutes to do, to fill the slack. Some ideas: brush your teeth, floss your teeth, de-clutter a room in your home. One that’s been working well for me is that I’m slowly clearing the garage bay where my new office will be built. Just walk in, carry one thing out and find a new place for it. Doesn’t take long, doesn’t get me distracted.

**Third, flow.** When I say flow, I don’t mean the state of flow that you can get into when you’re deep in a task that you love, that is at just the right line between challenging and too hard. I mean, instead, that the tasks in your routine should flow into each other. It should be easy to move from one to another. My morning routine includes exercise, breakfast, and a shower. And if I do them in that order, it flows pretty well. If I tried shower, breakfast, exercise, it would be a disaster. That’s the simple, obvious example. Another one is to recognize that a few tasks in your routine require a computer – doing them all at the same time helps your routine flow, making it easier to stick to and quicker to do.

At this point, you may be thinking that it’s time to fix your routines. But you’re probably also wondering how to do it. Without the forced structure of a commute, a required time to be at the office, a family or nightlife to pull you away from work in the evening. How do you impose some structure on your own life, while still remaining flexible? How do you keep that structure in place? How do you improve it, so that your routines are helping you be more productive, be happier, get you all those benefits you had hoped for from a remote work job?

Whew! That’s a lot of questions. I’ve put together a short email course on building, maintaining, and perfecting the daily routines you need for productive remote work. Sign up below and I’ll send you a new email once a week to help you build your routines.

[mc4wp_form id=”91″]</content:encoded></item><item><title>Give Up Your Commute</title><link>https://rockhymas.com/blog/give-up-your-commute/</link><guid isPermaLink="true">https://rockhymas.com/blog/give-up-your-commute/</guid><description>Giving up your commute may be the biggest benefit of working remotely. Commutes take a toll on your happiness, your wallet, and the environment. When you first start working remotely, either because you got a new job or because your employer approved your request to work remotely, the lack of a commute will immediately make …</description><pubDate>Tue, 08 Apr 2014 13:59:11 GMT</pubDate><content:encoded>Giving up your commute may be the biggest benefit of working remotely. Commutes take a toll on your happiness, your wallet, and the environment. When you first start working remotely, either because you got a new job or because your employer approved your request to work remotely, the lack of a commute will immediately make you happier.

Because of that immediate personal benefit, I strongly encourage you to give your commute to your employer. The first days and weeks working from home – or a coffee shop or library – are full of learning new things about what works and what doesn’t for remote work.

[![Give it up!](../../assets/media/traffic.jpg)](../../assets/media/traffic.jpg)

*Give it up! (c) [epSos.de](https://www.flickr.com/photos/epsos/)*

You’ll be dealing with a family or roommates that aren’t used to having you around, and you’ll need to work out the rules around that. You’ll have a whole new set of possible interruptions and distractions to challenge you. Honestly, your office setup will probably not be ideal. It takes time to build a comfortable, productive home office. Or, alternatively, it takes time to learn the ins and outs of productive work at a coffee shop or library.

For all of these reasons and more, you may not be as productive initially as you were at the office. If you’re additionally starting a new job, you’ll have all the challenges of learning the ins and outs of a new company, a new boss, new ways of working, new tools, etc. If you’re anything like me, all that newness will leave you feeling slow, kind of stupid, and just unproductive.

Because of that, I highly recommend taking the time you save by not commuting and giving it to your employer. If you would leave at 8 in the morning, and get home at 6, go ahead and plan to work that whole time. You won’t succeed of course, for all the reasons I listed above. And even if you do, you probably won’t get as much done as you’d like to.

That’s ok, don’t worry. The new job will eventually become a comfortable place to work. You’ll build out a workable home office. Though it may take years to perfect that home office, you can make it comfortable and productive relatively quickly. Your family or roommates will learn how to deal with you being in the house, but unavailable. They’ll learn when it’s ok to interrupt you, and you’ll learn how to balance your work with the possibility of doing other things during the day. You’ll get used to the new tools of remote work, and make them part of your regular workflow.

In the long run, you’ll get your commute back. But in the short run, giving it to your employer will increase your chances of success at remote work. And whether it’s a new job or not, you’re selling your ability to work remotely. You want to be a success at it. If you’re at a distributed company, they want you to be a success as well. If you’re trying out remote work without changing jobs, your manager and coworkers will be watching carefully to see how well it works for you. Your peers will probably be fervently hoping you succeed. So will your team lead, as he or she thinks about the cost savings and opportunities remote work will open up for the company.

By giving up your commute you’ll be happier. By giving it up to your employer, they’ll also be happier, and you’ll increase your chances of long term success as a remote worker.

*For you remote workers out there, how do you use the time that used to be spent commuting?*</content:encoded></item><item><title>What Makes You Happy?</title><link>https://rockhymas.com/blog/what-makes-you-happy/</link><guid isPermaLink="true">https://rockhymas.com/blog/what-makes-you-happy/</guid><description>I didn’t know myself, even though I thought I did. For years I thought I knew what would make me happy. I thought the right job, using the right technologies, working on the right products, would do the trick. When I left Microsoft, I was sure I needed to work on improving developer productivity. That’s …</description><pubDate>Thu, 03 Apr 2014 23:43:23 GMT</pubDate><content:encoded>I didn’t know myself, even though I thought I did. For years I thought I knew what would make me happy. I thought the right job, using the right technologies, working on the right products, would do the trick. When I left Microsoft, I was sure I needed to work on improving developer productivity. That’s one reason I went to Fog Creek, to help build FogBugz and Kiln. At another point in my career I was sure I needed to work on using technology in education. I felt the fire in my belly, or so I thought. If only I could do that, I would be happy, satisfied, fulfilled.

[![Which path will make you happy?](../../assets/media/2715460542_cece9cc076_o.jpg)](../../assets/media/2715460542_cece9cc076_o.jpg)

*Which path will make you happy? (c) [Paro_for_Peace](https://www.flickr.com/photos/paro_for_peace/2715460542/in/photolist-58XrPd-eNhy4j-cJhJmL-6hVpzp-59JYSg-7wbwhd-cYJJzs-gGrwZ-dT3PdN-f81vqE-bv8gY1-bJ33PV-bv8gBJ-bJ34cz-bv8gJw-bJ344g-bJ33Ga-bJ33XM-bv8gQh-5pjoeg-59JZ6B-59JZca-59PcWu-7wxxfP-6nJHPi-4RZKLv-8FKzwR-7LriMC-28efYF-mJHkx-34NgrU-bJ34oF-4Xo3Ph-91kjmz-812BJZ-hUsmMx-egEYmg-6jEcV7-4XuhEz-9Bu8fQ-irEhSt-9tgo83-9uRwyG-9tgnXf-9v4UeJ-9uQuGN-9v4Vaq-9v4Vvq-9v1VvK-9tgo1d)*

But as I look back, I realize that my choices tell a different story. They tell me what I really value. I’m sure I’ll keep learning what that is, as I keep making choices that defy what I claim will make me happy. Admittedly, sometimes those choices are hard. If I’m honest with myself, I passed up a chance to work at Khan Academy because I valued working remotely more than building tech for education. I left Fog Creek (before they [encouraged remote work](http://blog.fogcreek.com/remote-developer-happiness/)) because I valued working remotely more than building productivity tools for developers and information workers. Plus, I wasn’t the rockstar developer that either company would change policies to accommodate. I’m still working on that …

It’s got me wondering a bit about why I value remote work, and all the associated benefits, so much. Does it really make me happier? Or am I committed to it, only because I haven’t found the real thing I’m passionate enough about? The thing that would pull me away from home and into an office?

That may be. My life is definitely a work in progress. But I’ve since learned that my reasons for working remotely are borne out by research. The Guardian, in its[report on what makes a city happy](http://www.theguardian.com/society/2013/nov/01/secrets-worlds-happiest-cities-commute-property-prices), revealed some important facts: “[Stutzer and Frey](http://ideas.repec.org/p/zur/iewwpx/151.html) found that a person with a one-hour commute has to earn 40% more money to be as satisfied with life as someone who walks to the office.” Additionally, “A [Swedish study](http://www.samfak.umu.se/english/about-the-faculty/news/newsdetailpage/long-distance-commuters-get-divorced-more-often.cid160978) found that people who endure more than a 45-minute commute were 40% more likely to divorce.”

The Guardian report is interesting, because it makes the case that urban life can lead to more happiness in many cases. If you’re surrounded by people and walk around town you have better relationships with others, you’re more trusting of others, and you’re healthier. The problem is for people like me, a husband and father with four kids. To afford to house my family near enough to New York to work there, I had to deal with a 90 minute commute. So, while New York was great, the commute was miserable. And so was my life. Sure, I could have traded one expensive city with a bad commute, for another by going to the Bay Area to work at Khan Academy. But I made a different choice.

And I’m happier for it. I fully expect that by the time I retire most companies that primarily do information work (like software development companies) will be fully or mostly remote. And the sooner they make the switch, the better off they will be. As that happens, it will become easier for people like me to pursue our technology and product passions, having made the hard decisions first.

Since I started working remotely, I’ve already been able to join a fully remote company, [Articulate](http://www.articulate.com/), that is focused on improving e-learning, allowing me to be a part of the ongoing education revolution. And before that, I worked with an awesome team at [TrackAbout](http://corp.trackabout.com/), where we put together [SpecEasy](https://github.com/trackabout/speceasy), an easier way to write unit tests that are very readable. There are lots of ways to pursue your passions. Don’t think you have to do it at the expense of your personal life, your family, your marriage, or your happiness.

*How have you combined personal and professional happiness? Have you passed up great opportunities because you valued something else more?*</content:encoded></item><item><title>Be Your Own Office Manager</title><link>https://rockhymas.com/blog/be-your-own-office-manager/</link><guid isPermaLink="true">https://rockhymas.com/blog/be-your-own-office-manager/</guid><description>Mark Suster took up the challenges that come with scaling a small, scrappy startup office culture into a decent-place-to-work culture here. In my last post I reflected on my first, “scrappy” remote office and the challenges it presented. Just like a seed stage startup, for me the scrappiness was charming, exciting, fun. The novelty of …</description><pubDate>Sat, 29 Mar 2014 14:42:35 GMT</pubDate><content:encoded>Mark Suster took up the challenges that come with scaling a small, scrappy startup office culture into a decent-place-to-work culture [here](http://www.bothsidesofthetable.com/2014/03/18/when-does-establishing-a-good-startup-culture-outweigh-being-cheap/). In my last post I reflected on my first, “scrappy” remote office and the challenges it presented. Just like a seed stage startup, for me the scrappiness was charming, exciting, fun. The novelty of working from home, the freedom of not having a commute, and even the challenges of working in a significantly worse environment were all new and interesting. That newness made it possible to put up with the pain and still do some [really great work](/blog/a-bend-in-the-hallway/).

But over the years, as I increased the amount of remote work that I do until now, where it’s my full time job, I had to scale up my office, just like those scrappy startups have to when they start to encounter a bit of success. Suster pointed out that for a startup making the transition, one of the most important investments they can make is to hire a great office manager / admin person. Just that phrase reminds me of two very impressive admin’s I’ve known.

At Microsoft, Amy was the admin for the Outlook team and she was awesome! For any question you had, she would find an answer. In a big company, political environment, she knew just who to talk to to get things done, but she also always had time to just shoot the breeze. For me, the team was never the same after she left to work at a smaller branch office.

During my time at Fog Creek, if Joel was the head of the company, Liz was the heart. She was just like Amy in so many ways, but at a small company she handled logistics more than politics, and made sure everything ran perfectly. She impressed me from our first conversations in the hiring process, she helped convince my wife that New York would be a great adventure for our family (and it was), and she’s still teaching me great stuff on her new blog: check out [Cupcakes in Paradise](http://behindthescenesrecruiter.com/post/80582217185/cupcakes-in-paradise).

Since leaving Fog Creek, I haven’t had an awesome office manager for one simple reason. I am my own office manager. Remote work is the future of work, and I’m sure that in time, as an industry, we’ll build up a really nice infrastructure around remote work that will handle most home “office management”. But the fact is that it’s still a ways out there. For now, every remote worker is their own office manager.

Doing that job well is not easy. What is easy is waking up to work on Monday and realizing your home office hasn’t been cleaned in a couple weeks. A thin layer of dust covers any surface area not in regular use. I don’t have someone refilling the candy jar or keeping the free drinks stocked. I’m not getting the standard issue laptop, desk, chair, speakers, keyboard, etc. I have to pick all that stuff out, which might be a bad idea for an OCD perfectionist. And don’t even think about the extra stuff, like fresh flowers in the restroom each week, catered lunches, funky artwork on the office walls, etc.

[![A corner of my office that needs &quot;management&quot;](../../assets/media/Cluttered-Office.jpg)](../../assets/media/Cluttered-Office.jpg)

*A corner of my office that needs “management”*

If I were a good office manager, I would do all the stuff that Suster recommends at the end of his post. I would have a comfortable chair, clean bathrooms, and a stocked kitchen. I would put up pictures, and make things comfortable. I spend 8+ hours a day in my home office, and sometimes I feel like it loses out to the rest of my home in terms of maintenance and upkeep. It’s time to change that.

*How do you manage your home office? What do you miss about having an office manager?*</content:encoded></item><item><title>A Bend in the Hallway</title><link>https://rockhymas.com/blog/a-bend-in-the-hallway/</link><guid isPermaLink="true">https://rockhymas.com/blog/a-bend-in-the-hallway/</guid><description>The first home office I remember having, and actually using occasionally as an office, was a bend in the hallway of our home when I worked at Microsoft. Yep, that’s right, just a bend in the hallway. I would work from home on rare occasions when I needed to stay home for some reason (e.g. …</description><pubDate>Thu, 27 Mar 2014 02:06:42 GMT</pubDate><content:encoded>The first home office I remember having, and actually using occasionally as an office, was a bend in the hallway of our home when I worked at Microsoft. Yep, that’s right, just a bend in the hallway. I would work from home on rare occasions when I needed to stay home for some reason (e.g. contractors coming). I had a dinky little desk, a horrible chair that couldn’t roll on the carpeted floor very well, and a small monitor. This bend in the hallway had three doorways within reaching distance, opening into two kids bedrooms and their common bathroom.

[![A bend in the hallway, or in other words, my home office](../../assets/media/First-Home-Office.png)](../../assets/media/First-Home-Office.png)

*A bend in the hallway, or in other words, my home office*

Despite all of the negatives of such a ridiculous home office, I have a distinct memory of one very productive day when I worked from home. I can’t even remember why I couldn’t go into work that day. But we were close to shipping Office 2007, and I had a ton of bugs on my plate. I sat down at the desk, my wife helped keep our two boys under the age of five at the other end of the house, and I cranked through more bug fixes than I had in the previous week. It really opened my eyes to the possibilities that remote work opens up.

That little home office eventually moved into half of an undersized room, and I still only used it occasionally, maybe once a month, for my day job. But I had a door that I could shut. Whew!

Over the next few years, my home office was part of our homeschooling room, a commandeered child’s bedroom, a corner of the master bedroom (that didn’t work out very well), and back to a bedroom sandwiched between kids rooms. I went from working only rarely at home to having a fully remote job, first at [TrackAbout](http://corp.trackabout.com/) , and now at [Articulate](http://www.articulate.com/) .

Through the process I’ve learned a lot about what works in a home office, what doesn’t work, and what is up to personal preference. So, now it’s time to build my own. We’ve got an extra bay in our garage and last week a contractor came in to give us an estimate for the work it will take to turn it into a real home office.

[![My awesome future office](../../assets/media/Future-Office.jpg)](../../assets/media/Future-Office.jpg)

*My awesome future office*

I’ll be documenting the process here, along with other tips for doing successful remote work.

*What was your worst home office? What is your ideal home office? I’d love to hear your ideas in the comments.*</content:encoded></item><item><title>Introducing SpecEasy</title><link>https://rockhymas.com/blog/introducing-speceasy/</link><guid isPermaLink="true">https://rockhymas.com/blog/introducing-speceasy/</guid><description>Last week, TrackAbout pushed SpecEasy, its first open source project, up to GitHub. I thought I’d give a little history and introduction to the project.</description><pubDate>Thu, 28 Mar 2013 13:00:07 GMT</pubDate><content:encoded>Last week, TrackAbout pushed SpecEasy, its first open source project, up to GitHub. I thought I’d give a little history and introduction to the project.

For a good chunk of last year Jeff Sternal and I did remote pair programming, and we both wanted to practice strict TDD/BDD to further develop our thoughts on the practice. We’d both done enough to feel the benefits it gave us in forcing us to think about the design of the code. But we wanted a better feel for how, and if, it changed our speed and code quality.

Our biggest challenge was the large amount of friction that came when trying to follow Red/Green/Refactor. First, our builds were slow, so we worked to speed them up. After that, the in-house BDD framework we were using, which was almost identical to [SpecsFor](http://specsfor.com), was way too verbose. If you check out the first example on the SpecsFor home page you’ll see that it takes 40 lines to make three assertions, and if they wanted to add any more, it would be at least 6 additional lines per assertion. This is not the readability increasing whitespace you’re looking for.

In looking at other possibilities we found [NSpec](http://nspec.org) and admired the general approach, but we wanted to avoid using a new test runner. We also didn’t really click with the terminology used, because it felt like it made the tests harder to read, and therefore harder to understand.

We felt that if we could make the test/spec writing much smoother, the whole process of TDD/BDD would be more productive and start to give us the gains we hoped for. So over the course of a few sprints we developed SpecEasy1 and used it in developing our assigned backlogs with a BDD approach.

Now would be a good time to check out the readme’s for [SpecsFor](http://specsfor.com), [NSpec](http://nspec.org), and [SpecEasy](https://github.com/trackabout/speceasy).

Our main goal in writing it was to reduce the friction. We wanted the tests be both terse and as readable as possible. We also wanted to eliminate or reduce the duplication that our SpecsFor approach led to. NSpec pointed the way to making things more terse, though we did change quite a few minor things (terminology, syntax) to make it read easier for Jeff and I. We also wanted it to work seamlessly with NUnit, since we already had thousands of NUnit tests in both our website and mobile app solutions. At the time, our code made heavy use of Ninject for resolving dependencies and newing up objects, so we also wanted a solution that (like our previous one) could use a RhinoMocks Ninject mock repository in the test code.

Two things came out of this work that we weren’t really shooting for but that are really nice. Both are side effects of building up tests using strings that describe what’s going on. One of our goals was to reduce how much typing our old SpecsFor-like BDD framework required. In SpecsFor, to reuse test setup required inheritance to build up contexts for tests, or just copying the setup code around. If we used inheritance we were required to repeat aspects of a context in the inheritance syntax, so either way, duplication of information in the tests. But by building up tests using the simple Given/When/Then of BDD, nested contexts, and strings to explain what was going on, we eliminated a lot of the duplication of test descriptions.

The first aspect of this is that by putting those strings at the front of each line of code, they become a syntax-highlighted description of the test code. Check out this picture of a simple set of tests for an on-screen keyboard:

![Machine generated alternative text: public void ProcessRequest() Keyboardkequest request = null; ServiceResult response = null; When(”processing the request”, () =&gt; response = SUT.ProcessRequest(request)); Given(() =&gt; request = new KeyboardRequest).Verify(() =&gt; \{ Given(”the request uses required validation”, () =&gt; request.ValidationType = Valic Given(”the user enters an invalid value”, () =&gt; TypelnvalidValueAndOk(request. Then(”it shows the expected message”, () =&gt; AssertWascalled request.ValidationType = Given(”the user enters an invalid value”, () =&gt; TypelnvalidValueAndOk(request. \{ Given(”the validation message includes a string format token”, () =&gt; reqw ThenltuisplaysTheExpectedConfirmationScreen(Resources .WarningCaption, ThenltDisplaysTheExpectedConfirmationScreen(Resources .Warningcaption, req Then(”it does not show an error message”, () =&gt; AssertWasNotCalled Get response.Status.ShouldEquali Then(”it returns the invalid value”, () =&gt; response.Data.ShouldEqual(’ )); Given(”the user does not accept the invalid value”, () =&gt; Get&amp;lt;IApplicatior Then(”it returns a cancel result”, () n response.Status.ShouldEqual( ); ));](../../assets/media/tumblr_inline_mkdcrfQNmV1qz4rgp.png)

By reading through the red strings, you can get a pretty good feel for what the test is checking, without trying to decipher the actual code performing the test. Because the tests are self-documenting, it’s easy to read the code and add new tests, which is a common thing to do in large codebases.

The second benefit is closely related, but comes in the authoring stage. When writing each statement of a test, we’d start by writing the description of what it would do. This let us think about the test in everyday language. But then we’d immediately translate that description into a closure that actually did the work. The flow that came from doing that worked surprisingly well. And while SpecsFor can be used in a similar way, the additional work required by its more verbose syntax eliminated that flow that we sought, which is so important for effective BDD/TDD.

Once we got things to a point that we really liked using it, we shared it with the TrackAbout team, and others on the team have since made further contributions, including its current name and a sweet logo (thanks, Mike!). We released it on GitHub last week as the first open source project TrackAbout has developed. In addition to sharing it with the world, part of the reason we’re making it public is because there are further changes we’d like to see happen. SpecEasy is far from perfect.

The use of closures to capture variables that are then used while the tests are run leads to some weird quirks. You need to declare variables in your method itself (not within the anonymous delegates that get assembled into actual tests), but you need to initialize the variables in those anonymous delegates, so they get reset when running through different assertions. I’m not really sure how we can improve this aspect of the experience, but it’s something I’d like to spend more time thinking on, and get ideas from the community.

Because we’re using nested Given calls to build up contexts for running tests, and asserting different things, different (but related) contexts have been built up, it can occasionally be hard to get the right parentheses and bracket nesting. Mike Mertsock recently made a great change to reduce the nesting in one way, but I believe there is more we could do to clean up the syntax, further reducing the friction of writing tests.

There are lots of smaller issues as well. Right now, SpecEasy uses Nunit, Ninject, and RhinoMocks. It would be nice to make the usage of those tools optional, so that you can use your favorite test runner and mocking framework. We should make a public NuGet package. We could use an NUnit extension to make each assertion into separate test. In practice, it would be nice to have an easier way to specify multiple Given clauses. And the list goes on.

Anyway, if TDD is your thing, try it out. And if you want to help us solve the remaining issues, just [fork the code](https://github.com/trackabout/speceasy).

Notes

1. SpecEasy was originally called NuSpec internally</content:encoded></item><item><title>TrackAbout Tweaks: Windows CE Emulator Images </title><link>https://rockhymas.com/blog/trackabout-tweaks-windows-ce-emulator-images/</link><guid isPermaLink="true">https://rockhymas.com/blog/trackabout-tweaks-windows-ce-emulator-images/</guid><description>So, in my attempts to get rid of the gaps in the DataGrids, QA discovered that when TrackAbout was installed on a Windows CE device (as opposed to Windows Mobile) the behavior was slightly different. First of all, with my initial changes, horizontal scrollbars always showed up. When going back and looking at older versions of TrackAbout, they often still appeared.</description><pubDate>Fri, 10 Aug 2012 13:09:28 GMT</pubDate><content:encoded>So, in my attempts to get rid of the gaps in the DataGrids, QA discovered that when TrackAbout was installed on a Windows CE device (as opposed to Windows Mobile) the behavior was slightly different. First of all, with my initial changes, horizontal scrollbars always showed up. When going back and looking at older versions of TrackAbout, they often still appeared.

The big challenge in getting these issues fixed was that I did not have an actual Windows CE device. Actually, I don’t have any device, and do all of my development and debugging on either the device emulator or using our simulator. Our simulator is a regular windows program that displays the same screens that you see on the device, but it runs much faster. It’s a better way to quickly test things during development, even though the fidelity to the actual end-user experience is sometimes low. When we’re ready to hand off our code to QA, we make sure to test it in the device emulator, since it’s a much higher fidelity testing experience.

Unfortunately, in addition to not having a Windows CE device, I did not have a Windows CE device emulator image. I asked around of the devs on the team, and it turned out no one had an image. We all used Windows Mobile device images, which are pretty easy to get online. Some said it was impossible to get a Windows CE image.

But if I couldn’t get a Windows CE image then I only had two options. Either have a new device bought so I could more easily test and figure out what was going on. Or do the slow cycle that involved me making a change (through educated guesswork), handing off to QA, having them show me (via screen sharing) the results, and then making a new educated-guesswork change. Not fun. Not really even worth trying. So instead, I decided to do the “impossible” and find out how I could get a Windows CE device image.

And what I found out is that Microsoft does not make it easy to do. Neither do the device manufacturers. I figured I could find a download on the support page of one of the device manufacturers that would let me do the testing I wanted. But after much fruitless searching I gave up on that. I suppose I could have pushed harder by calling the support departments, but I was doing this in my free time. I also figured Microsoft would have a pack of different Windows CE emulator images that I could downlad. But no. They only make images for Windows Mobile/PocketPC available. It turns out that if you want a Windows CE emulator image, you have to make it yourself.

So here are the rough steps that I followed:

1. Make sure you have Visual Studio 2005
2. Download and install Windows CE
3. Create a Windows CE project?
4. Run Platform Builder from within Visual Studio 2005
5. Choose an emulator image
6. Choose a handheld device
7. Add the features you need in your image
8. Build the image
9. Find where it got built
10. Create a Device Emulator config file that points to the image
11. Run it in the emulator
12. Turn on DMA connections

I had to download the Windows CE trial edition so that I could create a Windows CE runtime. These are typically used to build images for actual hardware that manufacturers are testing before they release a new product. Windows CE has a “platform builder”, which is a plugin to Visual Studio 2005 (yes, 2005!), that makes it possible to create a Windows CE “platform” with certain features turned on or off. Once you have a platform defined, you can build an image. It took quite a few trial runs to get the image just made in a way that it could actually be used in the Device Emulator. Once there, it was very much a barebones install of Windows CE, and I got to track down odd tips like how to turn on DMA sync so ActiveSync would work, and how to get the .NET CF installed. But in the end, I had a working Windows CE emulator image running our software.

What is nice is that, once I had the emulator, it was simple work to figure out what the right metrics were to make the DataGrid gaps disappear. Since then, it also helped me track down another Windows CE-specific bug that cropped up.</content:encoded></item><item><title>TrackAbout Tweaks: Building Faster</title><link>https://rockhymas.com/blog/trackaboutbuildingfast/</link><guid isPermaLink="true">https://rockhymas.com/blog/trackaboutbuildingfast/</guid><description>One of the challenges we face at TrackAbout is the speed of our builds. TrackAbout Mobile, our compact framework app that runs on rugged Windows CE devices, would take between one and two minutes to do an incremental build. If you add on the time to run unit tests, or deploy to an emulator and start testing manually, the development cycle really starts to slow down. Since Jeff and I have been experimenting with doing “TDD like you mean it”, this was really a pain.</description><pubDate>Tue, 17 Jul 2012 23:14:15 GMT</pubDate><content:encoded>One of the challenges we face at TrackAbout is the speed of our builds. TrackAbout Mobile, our compact framework app that runs on rugged Windows CE devices, would take between one and two minutes to do an incremental build. If you add on the time to run unit tests, or deploy to an emulator and start testing manually, the development cycle really starts to slow down. Since Jeff and I have been experimenting with doing “[TDD like you mean it](http://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/)”, this was really a pain.

As it turns out, there is an easy way to speed up builds that use the compact framework. One of the “features” that Microsoft provides for compact development is a platform verification check. This check verifies that all of the features of the .NET framework that you use are available on the platform you are targeting with your code. That’s so you don’t deploy some code to a device that just explodes when it tries to access a non-existent property in the compact framework, which actually exists in the full .NET framework.

And this little step takes the majority of our build times. Although it’s definitely something we want to have run, it’s not something we need to have run on each build of our app. So to speed up our builds we made it a conditional step and made it possible for the developers to turn it off on their debug builds. First, we checked in a change to our project files that set a new property (SkipPlatformVerification) to true in debug builds. Then, when an individual developer gets sick and tired of slow builds, they can go to their MSBuild targets file and change a single line to make the PlatformVerificationTask conditional on that variable.

To enable slower builds, they just need to modify one line in the C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.Common.targets file.

The line:

```
Name=&quot;PlatformVerificationTask&quot;&gt;
```

Should become

```
Name=&quot;PlatformVerificationTask&quot; Condition=&quot;&apos;$(SkipPlatformVerification)&apos; != &apos;true&apos;&quot; &gt;
```

By making the suppression of that task dependent on action by developers, it means all our official builds (from our jenkins server) still do the task. By making it only happen in debug builds, its still easy for developers to make sure their code will run on the compact framework. And by making it possible to skip the step in daily development, we sped up our normal build times from 1-2 minutes down to 5-25 seconds.

The other day I was on the phone with another developer as he made the change to his targets file and rebuilt. He kicked off the build, leaned back in his chair, then freaked out because his build was already done.

It made my day.</content:encoded></item></channel></rss>