Telecommuting Culture - What it tells me about your company
travisswicegood.com
travisswicegood.com
We allow working remotely one or two days a week, but our experiments with full telecommuting have not gone so well (though we'll probably keep trying). The level of success probably depends pretty heavily on the type of product you're trying to build and the resulting level of communication that's required. For enterprise software (or perhaps I should say "domain-specific apps" or something), you really need a customer proxy/subject matter expert on hand that you're talking to on a fairly constant basis, because the developers themselves aren't really experts in the domain; as a result, you want your development setup optimized for high-bandwidth communication. When 10 people are onsite but 1 team member is offsite, that communication just doesn't happen, and that 1 person ends up out of the loop and much less productive (at least that's what's happened with us). For other types of software, that's less of an issue.
I think it's also much less of an issue if the entire company telecommutes, or if at least a large percentage do: in that case, communication channels are optimized for that. If 5% of the staff telecommutes, the communication channels are optimized for face-to-face communication, and the people telecommuting are left out.
And on top of that, there are just different ways to go about developing: they're not necessarily better or worse, but they make different demands on physical presence. A lot of agile/XP practices work best when people are co-located in small cross-functional teams that are in constant dialog, pair-programming, etc. That doesn't mean it's the only way to develop, but it can be an effective way to develop (more so for certain domains than for others), and it doesn't mesh very well with full-time telecommuting. Other development strategies and methodologies make different trade-offs and will be more accommodating of telecommuting.
If ideas, thoughts and facts cannot be clearly captured and/or communicated in a facile fashion, any complex project is risking higher failure rates. In-person buffering is a crutch at best.
I totally agree with this. I work in this kind of environment, where I need to collaborate with about a half-dozen (non-software) engineers on the product design, and working with them when they are/I am offsite is much more difficult than when we are all in the office. I inevitably spend most of the day reading and writing e-mails and on conference calls when this is the case, and most of the day working on the product when it is not. Five minutes sitting around a whiteboard in person dissecting a problem can often replace an hour-long conference call or thousands of words of e-mail correspondence.
If people being physically present is no longer a given then some level of structure has to be put around decision making and disseminating the results of that to the rest of the company. Too many times I've lost days of work because X was changed to Y and I wasn't at my desk when people were herded together to make that decision.
Having people geographically distributed forces you to deal with communication up front. People are trained to use mailing lists, IM, bug trackers, commit messages etc. properly rather than assuming that if someone wants to know wtf just happened they can shout at you across a room. You hit problems like Mike being the only keeper of process Z early rather than on day 1 of Mike's 2 week vacation to somewhere with no cell reception...
My 1 hour daily commute took 3-4 hours total,... the entire team was tired and demoralized from sitting in traffic for so long.
Yet our CEO completely forbid telecommuting. He wanted to see asses in chairs, even if it meant wasting our energy in traffic. We were forced to work in the office, and everyone directed their grumpiness and anger to their job. It made the cultural environment toxic, and people left as soon as they could.
It demoralized me, and I had animosity towards the company. My performance suffered and I cared less about my work.
Eventually the CEO almost drove the company into the ground, until he quit before he could get sued for not completing his fiduciary duties.
He eventually fired me, and it was probably one of the best things to happen to my career.
TL;DR: anectdotally I can agree that companies that can't trust their employees to telecommute are toxic places to be avoided.
a) Why did you join in the first place?
b) Why didn't you find another job before getting fired?
b) I was trying to find another job. It just happened that I got fired before I could find one, this was also happening at the height of the recession and in my neck of the woods the opportunities were slim.
It worked out really well in the end. We had our first child that year, and I got to spend 3 months with my family before finding a much better paying job that had a healthier environment. Sometimes leaving one job is the only way to get a raise.
I wouldn't want to work for a supervisor (and a team) that needs to "see" the team members everyday to make sure they are doing their job. The military Command and Control management style doesn't work on programmers.
One comment I do have is that author shold run spell check on the atricle and correct some of the grammer. But the point is well taken.
"grammer" -> "grammar"
"everyday" -> "every day"
". Which" -> ", which"
(just to name a few)
Agreed it can be an issue, but one that a lot of Valley companies seem to be ignoring.
I still haven't come across a tool that allows telecommuters to replicate this process.
* Do you do this every day?
* If so, do you get anything done?
I only being slightly facetious. I agree that there's a lot to be said for brainstorming in person. I'd also argue that there's a lot to be said for brainstorming out of your normal environment (i.e., office). But you don't do this every day. You code every day. Why not rent out some office/conference space for an afternoon every few weeks as you ramp up on your next iteration and save the money on the office space all the while allowing your programmers to be more productive?
We work in an open work space, and I can't even count the number of times that someone has jumped into a discussion with a better idea of how to implement something. If that saves the original people a couple of hours (or days, etc) then we've immediately increased productivity.
I don't buy into the idea that being "more productive" means sitting by yourself in your home office cranking out code.
If you interrupt an office of 8 and one person has an idea that saves 2 hours, you are only breaking even.
I worked in an open space before and it drove me nuts until I finally left. It was fine when there was just a few of us but as they started adding more people, the number of interruptions started to go up exponentially until some days it seemed like I was being interrupted all the time.
I think the happy medium is some flexibility among telecommuting, private offices, group work areas (taking over a conference room, or something less formal), and informal mixing areas. There is no single office environment which is best for all tasks.
I'm at my most productive by telecommuting from home one day a week, and daily from 0600 to 1000 (not always on the main company project); then working in the office, meeting with clients outside, etc. from 1000 to 1800, and then whatever team building, client events, etc. from 1800 to 0000.
For some reason, though, this is a subject on which many people feel qualified to make pronouncements about the wisdom of what other people are doing. I have, for example, had a candidate come in for an interview, look at the office layout, lecture me for 15 minutes about how we must be idiots because we're killing our productivity with our open layout, and then leave because he'd refuse to work in a place like that. At least it saved me the other 45 minutes I would have had to spend interviewing the guy.
Incidentally, no sane software company that I know off is rigorous about enforcing all three in all circumstances. The places I've seen hailed as successes of upper-case-A Agile, on the other hand, are typically gluing together software other people have written (without modifying the software itself, unlike legitimate open source companies) with very little value being added.
Disclaimer: I have nothing against lower-case-a agile, that is developing software iteratively and ensuring a large suite of tests to allow for rapid refactoring; it's the right tool for many (but not all) problems. Upper-case-A Agile (Scrum, XP, etc...) and "TDD", on the other hand, just smell wrong.
Wow, you actually describe the place I worked pretty accurately according to what I witnessed there.
In my (somewhat limited) experience, it's actually "up to 15 minutes", depending on what I was doing. If it's something relatively mindless, I'll be back to work in maybe 30 seconds to 2 minutes; if it's more involved I'll go over my notes (some of which I wrote down immediately at the start of the interruption) and pick up about where I was after 5-10 minutes.
If it takes you 15+ minutes to swap back in after an interruption, you're trying to keep entirely too much state only in your head.
Unless of course you don't think that discussions happen everyday or that it's not ultimately saving us time.
You're optimizing for the 5% instead of the 95%. I think this is a case of a survivor bias---you remember all of the times having people in the same space saved time and forget all the ideas that went nowhere and interruptions that pulled someone out of the groove.
Most of the good engineers I know are just as adept at hashing out a solution on a whiteboard as they are doing it quietly by themselves, and, given the sample set that I've seen over the years, I've found that the collaborative solutions tends to be better.
The 'oh I need alone time to solve problems' excuse is as awful and trite a cliché as 'programmers drink Mt. Dew and live in the basement'.
Being an in-person employee does not mean you're working in an mega-corporate shackled environment damaging to your fragile hacker self -- it means you are simply able to directly and immediately converse with your coworkers. Excited hackers stammering out 'HOLY CRAP GUYS I FIGURED OUT THE CACHING PROBLEM What do you think about XYZ?' and the ensuing flurry of discussion is not something duplicated via IRC/email.
When I've tried collaborative sessions of this sort, they have become prolonged debates over some mediocre solution. Often, a superior solution starts to take shape in my mind, but I'm too distracted by the conversation to develop it. If I bring my unformed idea into the conversation, I'm bombarded with questions that I can't answer yet, and I'm still too distracted to do the actual thinking I would need to answer them. Whatever solution comes out of this, I will inevitably end up improving it dramatically when I have a chance to reflect on it in solitude.
My realtime creative thought process just does not scale to multiple brains.
However, I can certainly collaborate in non-realtime. That is, through email, or some other asynchronous medium that gives me unlimited time for solitary thought.
I don't want to seem like a megalomaniac, but this really is how it works for me, based on a decade of experience. And I don't think I'm an anomaly among programmers, at least not good ones.
:-)
This is the root of the sunlight is the best disinfectant argument; that no matter how offensive or absurd the position presented, at least it has the opportunity to be subject to peer review.
I only care about output, but I think you get significantly more output in certain situations by being in the same room and informally bouncing ideas around or asking for help.
When you hire a rookie, you're trying to create the best through mentoring, providing experience, etc. It's a great and very productive thing to do if you can afford it but it's not the sort of position he's talking about.
I would add this caveat though. If I'm hiring a rookie and I wouldn't trust them to be able to get up to speed and be able to contribute without constant supervision, I would pass. Yes, when someone's just starting out that person-to-person interaction is great, but that can be accomplished with an open Skype/iChat video window and some desktop sharing.
hga hit the nail on the head though - I'm not talking about every hire, I'm talking about bringing someone onto a team that can "hit the ground running" with a "large and evolved codebase" or any other of the number of things tech companies/recruiters talk about.
I recently talked to one fairly established company out of Chicago who was looking for a new lead dev for a re-architect they were doing of their system because their in-house guy botched it. The second I said that moving wasn't high on my list of things to do they were gone. They wanted a "rock star", so long as they set the terms.
There is information protected against willful disclosure by trusted individuals, and that information is kept inside a hardware security module and/or is never accessible to individuals. e.g. nuclear weapons have a "no lone zone" around them, such that if any person (even the commander of the base) is in that space alone, he is presumed to be doing something evil, and is supposed to be stopped (using lethal force if necessary) on sight.
That level of security just isn't warranted for most things, but "work on material in a secure room, and the information doesn't leave the room except by defined channels" is a pretty good level of security. DoD has a lot of security vulnerabilities, but security would not be improved by allowing telecommuting!
When people are in your office and they are part of your team, decisions get made much faster and everybody feels the energy.
We have done both, and our best productivity came from people being in our office.
What if the company uses an agile approach to development? Maybe they pair program. That would be a little tough for someone to participate in while telecommuting...sure, technically it can be accomplished but that's not really how pair programming is done.
But this broad brush used to paint companies that simply say they don't telecommute as "not getting it" is a little lame.
It can be done. Maybe it is more challenging, but I don't think "agile" automatically rules it out.
The only thing that's challenging about it is that you have to take some time to meet in person so people get a feeling for each others sense of humor, etc. We do this 3-4 times a year--rent a vacation home for a week and work in person for a while just to gel the team. Once you have a team that knows each other it works great.
Seriously though, that's what a lot of these arguments sound like to me.
Did we read different articles? Because I didn't see any arguments based on what language a company uses having anything to do with the ability to telecommute.
I pair program every day over voip and tmux. It works great; there's absolutely nothing about being remote that precludes pairing as long as you have a stable 'net connection.
I've tried pair programming in person, and it's almost impossible for me. I have vision problems, and I just really need my own monitor, configured how I want it, with me sitting squarely in front of it. But even beyond that issue, I'm enough of an introvert that I have a whole set up thoughts running through my head when I'm in a social situation, monitoring myself for the image I'm presenting, and the other person for how they're reacting. I can still work, but it definitely takes up some bandwidth, kind of like if I'm working while speaking a foreign language.
But the experience of remote paired work has been surprisingly good, for more than just the vision reason. I'm started recently on a completely-remote development job, with the team spread across multiple continents. No pair programming yet, but I just got off a call a few hours ago where I worked with another developer for more than an hour, troubleshooting build issues.
- Whoever is driving shares their screen, but we both still have access to our own computers, so there's no "hang on, lemme run back to my PC to double-check my notes there...".
- You're never forced to code with someone else's computer/keyboard/monitor/mouse/system setup/chair/etc.
- No awkwardly bumping knees or elbows, no worries about the other programmer having overpowering coffee breath or odd physical tics, being distractingly unattractive or attractive, etc..
So YMMV, but personally I'd rather do pair programming this way even if I was at the office.
Side note: I am simply unavailable for jobs that don't allow telecommuting; that's been the case for years now.
After a year or so of remote pairing I strongly agree. Among other things, no more dvorak/qwerty conflict is great.