Showing posts with label Remote. Show all posts
Showing posts with label Remote. Show all posts

Remote Hiring and the Paradox of Choice

Oh, how I love remote work. And oh, boy, I've written a lot about the topic on this blog. We all know the reasons why remote work is amazing; there's no need to rehash at this point.

But I haven't written much about the flipside, particularly the process of being hired for a remote job. If you consider how much more awesome working from your home is compared to a typical open plan nightmare, then a similar multiplier exists in the other direction for how much more frustrating a job search is for a remote job compared to a local in-person job.

Just as the abundance of remote jobs is a dream from a job seeker's perspective, the abundance of the talent pool from a hiring company's perspective leads to some annoying behavior.

There are clear comparisons to be made to the shift to online dating from "traditional" dating. As the pool of eligible participants increases, the value of each individual participant drops. And just as the modern phenomenon of "ghosting" is common in the world of online dating, it's also common in the world of remote job hunting.

It's way more common in a remote job search to go through multiple rounds of interviews with a company and then never hear from them again, for example. Or for recruiters to hound you on LinkedIn until you agree to a phone call, gush about the perfect fit for a role, and then never contact you again about that next meeting with the hiring manager. Follow-up emails go into a black hole. If you get feedback at all, you find out you were rejected for some seemingly minor and arbitrary shortcoming. That's just how it is when the potential talent pool for a job opening expands across a country or across the globe.

Just as I mentioned earlier a multiplier for how much better a remote job is to a traditional job, you will experience general flakiness from hiring companies at a similar multiplier. There's just something about the abstraction and lack of physical proximity between the participants that amplifies this behavior.

And believe me, it's not just employers who are making this difficult, there's no end to the shenanigans that occur on the candidate's side. Both sides are enjoying the benefits while cursing the drawbacks.

So let's file this post under "Advice for a Younger Me." I write this post in the same spirit as posts I wrote years ago like The Many-Worlds Interpretation of Developer Interviews and People Hire Clones of Themselves. The hiring process for software engineers seems so bizarre and arbitrary a lot of the time that it helps to remember that there are reasons for the weirdness that have nothing to do with you, and it's like this for everybody.

It's a brave new world out there. Long live remote work. :)

Include the Thing

I suppose you could file this post in my series of remote work posts, but it's really just about effective written communication in a team setting.

Here are some tips that I would summarize simply as: Include the Thing!

Links

The humble hyperlink. Oh, how you simplify communication. Almost everything we do now is link-able.

  • You're writing a backlog item description that mentions work previously done. Include a link to the canonical backlog item that describes the previous work!
  • Someone has asked you a question in chat that you remember being answered by an article on the team's internal wiki. Hunt down the wiki article, chat them an answer that summarizes the relevant section of the article, and include a link to the article if they want a fuller answer! 
  • The build is broken. Crap! When you ask your teammates about this, include a link to the build log in GitLab that shows the error message.


Screenshots

A picture truly is worth a thousand words. There is almost always a good reason to include a screenshot. Reach for the PrtScn key as often as you reach for your glass of water.

  • Hey, I'm getting a JavaScript error when I click on that button. Include a screenshot of your browser that includes the button in question with your Chrome console open and showing the exact error you're talking about! Bonus points if you draw a circle around the button and the error text in the console. Bonus points if you capture in your screenshot the address bar showing the complete URL of the page in question.
  • Hey, I was looking at the config file and I'm wondering if that connection string is wrong? Include a screenshot of the config open in Visual Studio with a circle drawn around the line in question. Bonus points if you include several lines above and below so that the location within the file is obvious. Bonus points if you have line numbers turned on in your editor and you've captured the line numbers within the screenshot. Bonus points if you've captured the tab within the screenshot that shows the complete file path to the config file, or at least the file name.
  • Hey, I'm creating a JIRA ticket and I couldn't figure out which Project to pick. Include a screenshot of the complete new ticket form in JIRA where you've already filled out all the fields that you already know. Bonus points if you drop down the Project drop-down before taking the screenshot so the complete list of Project options is visible.


Quotes

Including a relevant portion of a previous communication in your current communication provides focus and context.

  • You're emailing a co-worker on a different team that you don't talk to that often about a problem they helped you with several months ago. Instead of composing a new email from scratch, dig up the email thread from when they helped you previously and email them this time as a reply to the previous thread so that the context of your previous conversation is appended to the email!
  • You're writing an article for your team wiki and there's a relevant article on MDN you want to link to. Copy and paste the relevant section of the MDN article as a blockquote within your Markdown!
  • You're replying to a question a teammate asked a few hours ago in your team chat, but there have been many unrelated messages in the chat since then. Use the feature your chat app has for establishing a context for your reply! Some apps have a quote feature that includes the other person's message on top of yours. Some like Slack allow you to reply as a thread to the original message.


Why?

Whether you're using links, screenshots, quotes or something else, the goal is to:

Anticipate questions

What's the next thing the person I'm communicating with is going to want to know after they read what I've written? Can I just include that information now?

Ruthlessly eliminate ambiguity

What information could I include now that could point more directly at the subject? How can I be more specific? What is potentially vague about what I'm communicating?

Reset the context

How can I depend less on this person's memory to understand what I'm communicating? Is there a chance they've forgotten our previous communication? How can I establish a context for this communication?

Include the Thing!

Showing Up for Remote Work

Remote work is awesome. I've been doing it full time for over 5 years now, and I've learned the importance of "showing up" as a remote worker.

It's really easy to feel disconnected from people when you aren't in the same physical space. I've picked up a few habits that have helped me stay visible as a remote engineer.

Show Your Face

People are instantly humanized again when you see their faces. I've found myself assuming things about someone's personality and attitude when I've only communicated with them via text.

Who would you rather leave a comment on your pull request?

  or  

By default the various services that you use at work to collaborate with people are going to give you a lifeless avatar. Do the bare minimum and upload a picture of yourself to your profile on each one.

The same goes for Zoom meetings. Every laptop these days comes with a webcam, or you can buy a cheap USB version and clip it to the top of your monitor. Even if your hair is messy and your home office is drab looking, just turn on your webcam. Don't be this guy:

Speak Up

Simply hearing someone's voice is a powerful thing when you're not in the same physical space. It doesn't take much to just say "Good morning." at the beginning of a Zoom call or "Thanks, see ya." at the end of a call. 

When I'm attending meetings remotely, I try to speak more than I probably would if everyone were in the same room. Even if I don't have anything particularly original or earth-shattering to contribute, it doesn't hurt to say "Yeah, that makes sense" or "I agree". Your silent nods aren't going to be noticed in a Zoom call with ten people.

Show Your Work

I try to take advantage of the various activity feeds that surround my work as a software engineer.

For example:

  • Instead of coding for days on a backlog item and then making one big commit-push to the team's Git repository, break your work into smaller logical chunks that you can push daily
  • If you did some research as part of a backlog item that won't be captured as code in the repository, write up an article in the team wiki summarizing your findings and link to it from the backlog item or post a link in the team chat
  • Instead of the briefest possible comment in the morning standup like "Still working on item #4567", give a few sentences description of the specific progress you made on that item
  • Tag specific people in the comments on backlog items, pull requests, etc. when you've done some work that would be of interest to them

Acknowledge Communications

It's easy to feel like you're writing into a black hole when working remote. Let people know you're paying attention.

When someone writes a message in the team chat that helped you, throw a thumbs-up on it or tag them in a reply to say thanks. Same goes for nice or constructive comments on wiki articles you wrote or pull requests you submitted.

With Great Power Comes Great Responsibility

Remote work arrangements are a great benefit for engineers, and they require a great deal of trust between employer and employee to work. Since I'm not showing up in person, I make a conscious effort to show up in other ways.

How do we do remote work across time zones?

How do we work together when our people are spread across multiple time zones? It seems like this is one of the core questions that companies ask when they're getting into remote work.

I was curious about the "best practices" that are out there right now for handling the time zone issue, and how some well-known companies are thinking about it.

It's all about meetings

I found it interesting that almost every discussion on this topic is about how to schedule meetings effectively.

  • Do we have "core hours" in which everyone must be available for meetings?
  • Do we limit which time zones we hire in so that no two time zones are too many hours apart?
  • How do we inconvenience the fewest people when scheduling meetings?

On the GitHub blog, they talk about the importance of "overlap" for scheduling meetings:

We both have team members based all over the world, so typically we try to find times that overlap for various projects. A good rule of thumb is to create teams with four hours of time zone overlap, with the bare minimum being two hours.

The Dropbox team talks about their "non-linear" workdays:

We’re embracing what we call “non-linear workdays.” We’re setting core collaboration hours with overlap between time zones, and encouraging employees to design their own schedules beyond that.

The GitLab folks want to alternate who is most inconvenienced when scheduling meetings:

Synchronous meetings should be inclusive of those who want to attend and are in different time zones. For example, a team's recurring weekly meetings, alternate between a time which is ideal for EMEA and Eastern AMER (8:00AM Pacific) and a time ideal for APAC and Western AMER (3:00PM Pacific).

Why so many meetings?

In the post I wrote on this blog in 2014 about how I work remotely, the very first section was about the importance I placed on effective asynchronous communication.

Remote work requires a paradigm shift. Instead of thinking how can we go on working the same way we always worked without these pesky distances and time zones in between us, the best companies are starting at first principles. A true time zone-agnostic organization is one that, on a basic level, does not rely on meetings for collaboration.

GitLab deserves a lot of credit here, because they have written extensively on the topic of asynchronous communication, and it's a competency at the core of their organization. As the quote I included from them above indicates, they recognize some meetings as prudent, but they operate on an asynchronous-first model, with each meeting requiring a rigorous justification as to why it necessitates an exception to their default asynchronous mode of collaboration.

The easiest way to enter into an asynchronous mindset is to ask this question: "How would I deliver this message, present this work, or move this project forward right now if no one else on my team (or in my company) were awake?"

Instead of thinking about how to schedule meetings effectively when people are in different time zones, it's way more interesting to think about how do we…kinda…not need meetings?

Is Colocation Still Relevant to Agile?

As 2020 has undoubtedly been the watershed year for remote work, I've been thinking a lot lately about colocation and its relevance to Agile.

When the principles of the Agile Manifesto were written in 2001, the authors believed in the importance of colocation:

The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

I was curious to know what Agile thought-leaders were making of the remote work phenomenon these days, and if the idea of colocation was still imperative to them.

Martin Fowler, one of the original signatories of the Agile Manifesto, makes the point that although face-to-face communication is more effective, a more important concern is to hire the best people you can and figure out how to make their collaboration more efficient later:

The first value of the agile manifesto is “Individuals and Interactions over Process and Tools”, which we should read as encouraging us to prioritize getting the best people we can on the team and helping them work well together. While we recognize face-to-face communication is more effective, that recognition cannot act to override the importance of individuals and interactions.

The fact that you can get a better team by supporting a remote working pattern has become increasingly important during my time in the software business and I expect its importance to keep growing.

It's interesting to think about this topic in the "necessity is the mother of invention" vein. When we all presupposed that a daily commute to the same physical building with your coworkers was the normal thing to do, we had best practices that presupposed that requirement.

In the current climate, we're all presupposing that work will carry on as normal with no one commuting anywhere and all communication being digital. What best practices will emerge in this world? Will the primacy of hiring good people quickly obliterate the former primacy of physical proximity in these conditions, with the world quickly moving on?

¯\_(ツ)_/¯

2020: The Watershed Year for Remote Work

As someone who's been advocating for remote work for almost a decade and working fully remote himself for half that time, I never could have guessed that the tide would turn so dramatically within the span of a few months. Due to a once-in-a-century pandemic, we're suddenly inside the greatest experiment in the history of...well...work.

When I was writing my to-this-day most popular blog post ever--But Where Do People Work in This Office?--back in 2015, Facebook was in the midst of building the world's largest open-plan office. Mark Zuckerberg had a dream of "the perfect engineering space: one giant room that fits thousands of people, all close enough to collaborate together."

And in May of this year, Facebook in an about-face announced that it will let many employees work from home permanently. Zuckerberg is quoted as saying, "We’re going to be the most forward-leaning company on remote work at our scale."

Twitter, another open-plan bandwagon company I highlighted in my aforementioned post, also announced in May their employees are now encouraged to work remotely permanently if they please.

The CEO of Shopify said about his company's COVID-initiated transition to permanent remote work, "We choose to jump in the driver’s seat, instead of being passengers to the changes ahead. We cannot go back to the way things were. This isn’t a choice; this is the future."

With all the horror of 2020, I'm hoping we can at least look back on this year as a landmark of the Information Age when the world finally woke up to the liberating force of remote work.

Conway’s Law & Remote Teams

Conway’s Law states:

organizations which design systems...are constrained to produce designs which are copies of the communication structures of these organizations.

In my last post, I wrote about how remote work tends to shine a light on areas where a software organization has been taking shortcuts and avoiding good design practices—things that are easier to workaround when everyone is within shouting distance.

If you subscribe to Conway’s Law, then it makes sense that the modularity of software designs would reflect the physical distribution of a software organization. It’s especially important that the work of remote developers can fit together across well-defined interfaces.

How much more important is self-documenting code when ad-hoc explanations are more laborious or time-shifted?

It’s fascinating to think of all the parallels that Conway’s Law implies between software design and a distributed workforce.

Even the trend of microservices

The Harsh Light of Remote Work

I came across the Remote Only manifesto recently, and while reading the points was struck by a common theme.

One of the major hurdles to remote work adoption is that it involves doing hard work in areas that people find tedious and hugely prefer to skip if they can get away with it.

Documenting things, standardizing things, careful and thorough written communication, having to examine carefully the work someone has produced to judge their performance, etc.

There are all sorts of ways to fudge these things when you all commute to the same building every day. You can see when someone is physically present in the building or not. You can get around poorly documented processes by tapping someone on the shoulder. The problem is, these things are all ephemeral and poor substitutes for actual value added.

harsh light

Effective remote work arrangements kind of force you to get your shit together as a working group and do the stuff you really should have been doing all along.

It's like when organizations get excited about open-sourcing a cool piece of their internally developed software. Suddenly when you're about to expose it to the light for general consumption, you realize all the design flaws that have left it tightly coupled to what should be isolated systems and how you don't have a reliable build process but have relied on Jerry who "sets you up" when you join the company so you can compile the damn thing. In short, it exposes all the places where you took shortcuts instead of sticking to good software design practices.

Remote work can shine a harsh light on the flaws of an organization. Walk into the light.

The private office is dead, long live the private office!

As someone who has been a vocal critic of open plan offices over the last several years, while also gleefully taking in the rise of remote work, I'm starting to wonder if it's time to give up the fight.

I find the sister phenomenon of the coworking space illuminating. An intentional open plan community for those fortunate souls privileged enough to look the quiet and privacy of a home office dead in the eye, turn their back, and instead pay a monthly fee for its near opposite.

coworking space

It's almost like the open plan and the home office represent the yin-yang of working environments.

Companies with large distributed workforces often have hot-desking arrangements in their facilities with a pleasing symmetry of a progressive work-from-home policy.

I may be giving up on the idea of employers going back to the days of private offices, and calling the whole discussion moot. Really, what are we more likely to see in the future: more companies building out private offices for their employees, or more companies unleashing their employees upon their own home offices? The answer is so obvious, that I'm not sure it's worth typing.

The private office is dead. Long live the private (home) office!

Different Strokes for (Remote) Folks

There was a recent article on the popular topic of remote work that made the rounds and generated a lot of discussion.

I cannot trust employers to provide me with an adequate work environment, and this holds me back from doing the best possible work for them.

In the case of working from home/remote work, some employees do not do their best work from home, or simply don’t like it. That is fine—but you should trust your employees and treat them like adults. Let them make the call for themselves.

- Yan Lhert

There’s nothing that engenders respect within me for a company more than when they give me autonomy over my own working conditions. And I, like most people, give the greatest effort to a company I respect. A vibe of “We trust that you know what’s best for yourself” is extremely motivating.

It’s so interesting reading through the comments on Hacker News when articles about remote work come around. I could summarize most of the back-and-forth like so:

Person A: I work best like [this], and I think it’s ridiculous you like to work like [that].

Person B: Well, I work best like [that], and I think it’s ridiculous you like to work like [this].

Jeez! It’s almost like we’re all adults who have strong preferences for the way we like to work.

The solution to this conundrum begins and ends with Autonomy.

Here are some old sayings that capture the sentiment:

One Workplace Design to Rule Them All is doomed.

I’m a believer in hybrid workplaces. The company has an office (or offices), but no one is forced to work in the office every day on a compulsory basis. And the office itself is a hybrid: sections are open plan for the people who prefer that environment, and there are quiet sections with a partitioned “cube farm” or small private rooms. Choose your own adventure.

There are two caveats I feel I must mention.

  1. The employer must actually care about having high-performing employees. There are plenty of “body shops” out there who don’t necessarily care about this, and likely can’t differentiate high performers anyway.
  2. Employees must understand the common theme throughout the working world that the highest performers get the most latitude. It’s up to the individual to take that autonomy with good grace, and kick so much ass that no one would dream of messing up your flow.

Different strokes for different folks.

Martin Fowler, Perks, and Remote Work

In my post, Remote Work Denial Is a Bad Look, I argued thusly:

You can think face-to-face, in-person communication is most efficient, and I won't argue with you, but it ultimately doesn't matter as the remote work trend will not be stopped.

Figure out how you're going to make remote work effective for your company and then shout it from the rooftops.

In a recent article, Remote versus Co-located Work, Martin Fowler presents a level-headed take on remote work in which he arrives at roughly the same conclusion:

Most groups of people will be more effective when working co-located due to the richer communications they have.

Despite the fact that I think most teams would be more productive working co-located, you will often get a more effective team by embracing some form of distributed model because it will widen the talent pool of people you can get.

The fact that you can get a better team by supporting a remote working pattern has become increasingly important during my time in the software business and I expect its importance to keep growing. I sense a growing reluctance amongst the best developers to accept the location and commuting disadvantages of single-site work. This is increasingly true as people get more experienced, and thus more valuable. You can either try to ignore this and accept the best people who will relocate for you, or you can explore how to make remote working patterns more effective. I think that organizations that are able to make remote working patterns effective will have a significant and growing competitive advantage.

Remote work is certainly not easy to get right, but it is nevertheless possible, and it represents a very desirable perk. Just as you could easily make the argument that it’s silly for employers to be responsible for the health insurance coverage of the people that work for them, try going out and hiring great people while telling them that you don’t offer health insurance (and good health insurance). How long will it be before companies have a similar difficulty hiring good knowledge workers because they don’t offer the perk of remote work?

Remote Work Denial Is a Bad Look

When out-of-state recruiters email me about their awesome tech company, my first response is always something along the lines of, “You support remote work, right? I live in Grand Rapids, Michigan.” When the response comes back as a flat denial of the possibility, suddenly that hot tech company seems very old-fashioned. And old-fashioned is not a good look in the tech industry. I always think to myself, “Really, you’re one of those? Well, that’s embarrassing.”

If “Agile” could be said to have traditional values, one of them might be colocation. I’ve come to view this emphasis as a bit naïve or idealistic in the present day.

As Keith Richards says in an article for InfoQ about distributed Agile:

Most of the agile body of knowledge that has been written is based on the utopian situation of one team, one ‘product owner’ and one location. Although this is still often the case, is it the exception or is it the rule? Having worked for well over a decade now on implementations of agile I find that multi-team, multi-location, multiple business area and even multi-time zone agile is more the norm.

If agile is to thrive over the next 10 years then it not only has to work in a distributed environment (i.e. an environment where we do not all work in the same place), but it has to work well in order to deliver the most value to an organization.

Mike Cohn, in his book Succeeding with Agile, expresses a similar thought:

A few years ago, collocated teams were the norm, and it was unusual for a team to be geographically distributed. By now, the reverse must be true. Personally, I’m now surprised when someone tells me that everyone on the team works in the same building.

Not a good look

You can think face-to-face, in-person communication is most efficient, and I won't argue with you, but it ultimately doesn't matter as the remote work trend will not be stopped.

When I see tech companies taking a hard-line stance against remote work, I can't help but think, “Imagine how dumb you're going to look in a few years.” I truly do not mean to offend anyone’s sensibilities with what I’m about to say and hope my point gets across regardless of your particular political beliefs, but remote work denial feels very much to me like people vehemently opposing the legalization of marijuana or same-sex marriage at this point--do you really think you're going to stem this tide? With all due respect to your beliefs, this is happening anyway.

Get on the boat now before your company has been too badly embarrassed in front of the people it wants to hire. Remote work is still a differentiator in this moment of time. What are you waiting for...your competitors to do it first? You want to clean up in the talent wars? Figure out how you're going to make remote work effective for your company and then shout it from the rooftops.

From the closing sentiments of Remote:

Life on the other side of the traditional office paradigm is simply too good for too many people. Progress on fundamental freedoms, like where to work, is largely cumulative. There might be setbacks here and there from poorly designed programs or misguided attempts at nostalgia, but they’ll be mere blips in the long run.

Between now and the remote work–dominated future, the debate is likely to get more intense and the battle lines more sharply drawn. Remote work has already progressed through the first two stages of Gandhi’s model for change: “First they ignore you, then they laugh at you, then they fight you, then you win.” We are squarely in the fighting stage—the toughest one—but it’s also the last one before you win.

Remote work is here, and it’s here to stay. The only question is whether you’ll be part of the early adopters, the early majority, the late majority, or the laggards. The ship carrying the innovators has already sailed, but there are still plenty of vessels for the early adopters.

Continuous Delivery and Management Pathologies

I believe continuous delivery is a foundational practice. In fact, it’s mentioned right at the top in the “Principles” section of the Agile Manifesto:

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

There’s a lack of trust that develops amongst stakeholders when the gap between “developer done” and “I can see that it’s done” is too great. In a perfect world, everyone trusts everyone, but that’s just not the case on real projects a great deal of the time.

You want to know how to cultivate trust? Deliver consistently. Perhaps, continuously.

I believe one of the greatest causes of managers behaving badly is a fear that the things that need to get done are not getting done. This is one of the great causes of micromanagement, which technical folks tend to hate (I know I do).

By reducing this fear, you can head off several management pathologies. You can prevent a hundred status meetings by sending a URL to someone and saying “see for yourself.”

I’ve come to believe that on most software projects, the speed of progress is not particularly important as much as steady progress. Optimize for steady, externally-visible progress.

CD is the ultimate progress indicator of your project. As Jenifer Tidwell says in Designing Interfaces:

Experiments show that if users see an indication that something is going on, they’re much more patient, even if they have to wait longer than they would without a Progress Indicator. Maybe it’s because they know that “the system is thinking,” and it isn’t just hung or waiting for them to do something.

Note that this is the same lack of trust that makes otherwise intelligent software organizations hesitant to embrace remote work. What if my daily work produced artifacts of working software that you can look at every day whenever you wanted? Would that assuage your concern that I’m sitting in my pajamas and watching cartoons all day?

I see CD as a sort of great equalizer. Working software in front of the people who paid for it levels all arguments.

What Would Christopher Alexander Think of Remote Work?

I was intrigued by a comment someone from Hacker News wrote in response to my post about office plans:

People tend to enjoy private alcoves with a view on the action, which is kinda best of both worlds. Christopher Alexander describes that pattern in _A Pattern Language_.

I felt an immediate connection between this idea and the feeling I get when working remotely. I think this "private alcove with a view of the action" applies in a non-physical sense as well. I wanted to see if I could make a more direct connection with Christopher Alexander's writing, and track down this pattern the HN commenter mentioned in the literature, and see if it jibed with remote work.

A Pattern Language

I bought a copy of Christopher Alexander's classic architecture book, A Pattern Language, and started hunting. And then...since the physical book ended up being ~1,200 pages in a format resembling an English dictionary in dimensions and typeface, I quickly found a nice, searchable electronic copy at the Internet Archive.

A Pattern Language

Alexander mentions workplace design in several of his patterns, and alcoves are sort of an ongoing theme throughout the book, but he never really ties them together in a way that captures the feeling I mentioned above. In fact, one of the interesting things I learned reading through dozens of patterns in the book, is that it's clearly a book that was conceived and written before remote work as we know it today was even on the horizon. In one section, he speaks of how Xerox and IBM typewriters have played a vital role in how he and his co-authors produced the book. This is an age before the Internet, when remote work meant having a personal typewriter in your home.

1970s IBM typewriter

It's frustrating to think about how the accumulated knowledge about human work activity pre-Internet is so tied to physical constraints and the built environment. A great deal of a masterpiece like A Pattern Language seems out of place, for example, when you can no longer take for granted that a company must have a central office where people gather to work together. Many of the foundational assumptions of a work published in 1977 would not exist in a work published in 2015.

The modern concept of remote work / telecommuting is so new, that the masterpieces that will describe this new world have not been conceived yet. Christopher Alexander is still alive, at 78 years old, but I couldn't find anything online about his views on modern remote work. I'm dying to know what he'd have to say about people working 100% remote for companies like 37signals Basecamp or Automattic.

So I didn’t find anything in A Pattern Language that seemed analogous to the modern remote work experience, but let me take another stab at it…

Evolutionary Aesthetics

Below is a landscape that people universally find pleasing to the eye. Why?

Gran Sabana, Venezuela

Several years ago I learned about the field of evolutionary aesthetics, which provides some fascinating insight into people’s preferences for certain landscapes over others. Here’s a quote from The Routledge Companion to Landscape Studies in a section on evolutionarily driven landscape preference:

A landscape form that affords somewhere to hide and look out from is the kind of landscape in which we feel safe.

How do you feel about the workspace pictured below? Quite a view!

Desk with city view

And here’s a picture of someone’s home office setup. Not quite the same view.

Home office setup

But, in a team that has a lively remote work culture, this setup can feel very similar to that wonderful city view. This is where you go to view the human activity of your team. To me it feels like I'm in a "private alcove with a view of the action."

Remote work tools

Going back to A Pattern Language for a moment, in the pattern called "Hierarchy of Open Space", Alexander says this:

Outdoors, people always try to find a spot where they can have their backs protected, looking out toward some larger opening, beyond the space immediately in front of them.
...
Simple as this observation is, there is almost no more basic statement to make about the way people place themselves in space. And this observation has enormous implications for the spaces in which people can feel comfortable. Essentially, it means that any place where people can feel comfortable has: 1) A back. 2) A view into a larger space.

I think remote work has psychological parallels to pleasing physical space. I know this is sort of a weird connection, but I feel like there's something there. If you've ever worked remote on a team of people that were also remote, maybe you'll know what I'm talking about. I think a person in their home office, working in a lively remote culture has the psychological equivalent of their back protected with a view into a larger space.

Am I crazy? What would Christopher Alexander think?

How I Work Remotely


With the trend of remote work on a rocket ship to the moon, I thought I’d share some things I’ve learned working in a distributed organization where remote work is common.

Remote

Asynchronous Communication


As software people, we’re familiar with the concept of asynchronous communication. When my web app needs to kick off a long-running process on the server, it doesn’t freeze up until the server finishes the work and gets back to it. When I’m working as a member of a distributed team, adopting an asynchronous style of communication with my fellow humans becomes important.

I start by getting out of the synchronous mindset where I’m blocked until I get feedback from a specific person at a specific time. Remote team members are like long-running processes on a distant server. I assume that my communication with them is mainly asynchronous. I keep other tasks in mind that I can keep making progress on while that remote process is generating a response for me.

Effective Writing


When working with distributed team members, written communication takes a front seat. Getting input from people via writing is more effective when I keep a few points in mind.

Write

Set the person up for success

Since email tends to be the dominant form of written communication in my distributed team, most of the important lessons I’ve learned relate to effective email. When I’m writing up an email to a team member, I try to set them up for success.

Since some of the folks I work with tend to have unpredictable schedules and receive a ton of email, I want to make it easy for the other person to provide a clear, unambiguous answer in one email that can unblock me.

I anticipate some of the reasonable possible responses they’re likely to give and include those in the email. It’s almost like preparing a menu of options they can pick from so they don’t have to start from scratch when they’re writing up a response for me. This becomes easier the more you work with certain people and learn how they tend to think.

Menu

Assuming as little as possible about the person’s mental context is another lesson I’ve learned. I avoid jumping in with a very specific question, assuming that the person will know exactly what I’m talking about. I’ll remind the person of the context of my question so they don’t have to rack their brain to rebuild the context. If we’ve written about the topic before, I’ll dig up our previous communications and quote them in the new one.

Include links! If I’m referencing something that has an online artifact, I link it up! Don’t make the person chase down things that I can pre-chase. For example, if we’re discussing the requirements for a particular backlog item, I grab the URL to the backlog item in TFS and include it in the email so the person doesn’t have to first dig up the backlog item before they can respond to me.

The sort of meta-point behind all these lessons is that people are more likely to respond effectively and in a timely fashion if you make it simple for them to do so. Set them up for success!

A picture is worth a thousand words

The old saying is true. When I’m discussing something that could be screenshot‘d, I include a screenshot! Windows has for several releases included the Snipping Tool, which is a simple screenshot tool I use a ton, as I work in a Microsoft shop. If you’re on OS X or Linux, I’m sure you can find similar tools for taking screenshots and marking them up.

Camera

Circle elements of the screenshot and draw arrows. When I visually draw attention to the most important aspects of a screenshot, it leaves no ambiguity as to what I’m talking about. I can’t count the number of times an email chain could have been shortened by a simple screenshot with red circles around the areas in question.

Mockups accomplish a similar purpose to screenshots, before something exists to be screenshot’d. When my team is in the stages where a new chuck of functionality for our application is coming into being, a simple mockup in a tool like Balsamiq can bring untold clarity to a design discussion and form a solid starting point for productive conversation to focus around. I’ll touch on Balsamiq again a little later.

Explain it to the duck first

Often I find that when I take care to thoroughly explain something in writing to someone, I end up not even needing to hit Send. Writing requires one to clarify one’s own understanding of a concept. Developers have a term for this process: rubber duck debugging.

Rubber ducks

State of the Project (Single Source of Truth)


When working in a distributed team, it’s important to have an online Single Source of Truth (SSOT) that people can go to to pull information from. You can’t rely on word of mouth to spread the status of work throughout the team.

State of the Union

There are about a million and one tools that will get the job done, whether it’s Pivotal Tracker, Asana, Trello, or something else. On my team, we use TFS for this purpose. Pick one and stick with it. Our whole team knows that TFS is the SSOT.

When I find some important piece of information missing from the SSOT, and I have to ask a team member for the information, I ask them kindly to answer the question by updating the SSOT. That way this new piece of information becomes available to the whole team the moment it becomes available to me.

If someone asks me for the status of something, I point them to the SSOT, because I’m always keeping the SSOT up to date with my status.

When the product owner dreams up a new requirement, right away we capture the requirement in the SSOT. Eventually you can weave into your team culture that if something doesn’t exist in the SSOT, then it doesn’t exist.

Build a Rough Version and Show It


There’s no doubt that it’s a bit more cumbersome to discuss highly visual concepts remotely. That new page in your web app that your product owner wants is tougher to design without a whiteboard in front of the two of you.

I encourage folks to get away from the idea that you have to perfectly define every aspect of some new thing before anything can be built.

I think this is a skill you develop with experience, especially if you’ve gotten used to working with a particular product owner. You can cultivate a part of your brain that can act as a sort of proxy for your product owner if they’re not immediately available to answer a question.

Taking care to understand the high-level motivation behind a feature allows me to rough in some of the details in the early stages with the confidence that they’ll only change slightly in the later stages when every little thing is being defined. For example, I won’t stop making progress on a new screen because I’m waiting for the product owner to tell me what color a button should be or the exact phrasing of a label. I use my best judgment, then keep on truckin’. Those things are easy to change later.

When finding myself in doubt about the general approach to take with some new feature, there’s no better way to get the conversation moving in a productive direction than to create a quick mockup. Again, a picture is worth a thousand words. Once you have some sort of visual artifact you can both look at independently, even if it’s wrong in many ways, then you’ve got a basis for productive conversation.

Balsamiq Mockups

Balsamiq is a fantastic tool for mockups. It’s very quick to produce a rough sketch of an idea and start getting opinions on it. Balsamiq has the awesome property that its shapes look rough and unfinished by design. The lines are a little squiggly, the font is almost Comic Sans-ish. It gets the message across that this is just an idea, it’s not intended to be a final product. Get the broad strokes of an idea across without people getting caught up in the fine details.

Once I have a mockup that shows my best understanding of the problem being solved, it’s time to send it over to the product owner (or whosever opinion I’m seeking) and get their comments on it. Once we’ve agreed on the general layout of a page, we can proceed confidently with development, knowing that we’re not wasting time and won’t have to bug each other for a while.

When You Just Have to Be Synchronous


Up to this point, all the tips I’ve discussed have been about how to work asynchronously as much as possible and how to be effective in that mode of communication. Well, there are times when I just need that real-time exchange with someone because the thing we need to discuss can’t wait. There are three main ways that I go synchronous with remote team members: screen sharing, conference calls, and instant messaging.

When we have some visual artifact that we both need to have our eyes on at the same time, screen sharing tools are the way to go. On my team we use WebEx, but there are a million other tools that can do this, including GoToMeeting, Microsoft Lync, and Google Hangouts.

Conference calls are old-school but they can be handy in some situations. For example, my team has a regularly scheduled stand-up every morning. There’s a standard con-call number everyone knows, and if you’re working remote that day, just call in and you can participate in the stand-up just like the folks at the office.

Telephone

I have conflicted feelings about instant messaging. For one-on-one conversation, it beats a phone call as it’s less intrusive and people generally understand that an immediate response is not needed. But it has the same downside of ad-hoc in-person conversations in that the content of the conversation is not preserved for later reference. For anything beyond the most trivial of exchanges, I prefer to use email as it automatically creates a record that I can search through later when weeks (or months, or years) have gone by and I can’t remember why we decided to do thing X over thing Y. Somewhere in the middle are tools like Campfire that do group chat with automatic transcripts. I’ve used tools like this in past jobs, but they haven’t found wide use at my current company yet.

Writing is Searchable, Voice Isn’t


This is a sort of meta-point that I’ve touched on above, but I’ll call it out here as a separate thought. If a team can get used to written communication as their main form of communication, they get the awesome benefit of a searchable, historical record of their decision making process. Be honest, how many times have you wasted effort trying to remember why some feature of your software works the way it does? No one can remember because it was designed via ad-hoc conversations in the hallway or over the phone and no one thought to write down the salient points that led you to do whatever it was that you did. Or when you demo a completed feature to the product owner, and a moment of panic ensues because they remember telling you to do X, but you thought they said Y, and no one knows what’s correct because no one wrote it down.

Recording

Writing is recorded, voice isn’t. Writing is searchable, voice isn’t.

I ♥ Remote Work


Some of the most blissfully productive days I’ve had are when my whole team is working remote because a winter storm has left us snowbound. There’s nothing quite like the glorious zone of productivity sans soul-crushing interruptions. I’m extremely optimistic about the global trend toward remote work, and I’m confident that more people will keep making the jump to full-time remote work (me included).

There are undoubtedly unique challenges that come with working remote. The most helpful lessons I’ve learned are to communicate asynchronous-first, express myself clearly in writing, keep my team up to date, exercise careful independent judgment, and go synchronous when asynchronous just won’t do. When my distributed team does these things well, we can kick ass together.

DHH on Hiring Remote Workers

If we were only trying to hire in Chicago, we’d never have the world-class team we have today.

. . .

Being in the same room occasionally is great, but I would much rather work with A players remotely than B players in the same office, if that's the choice.

Yes. Yes. Yes.