Could you imagine driving a car where the steering wheel wasn't very responsive? How good of a driver would you be if you had to make your steering adjustments 30 seconds in advance? Driving on a highway would be nearly impossible, as you and everyone else around you would have to plan for the actions and reactions of everyone for the next half minute. You would have all the finnese of a 7 year old kid at Disney's Tomorrowland Raceway.
More to the point - what if you had a simple programming assignment. Your job: Modify a hundreds files that are stored on a remote server using your favorite editor. The only limitation is that you can't transfer the files to your local computer. Edit them remotely you will. Put on the noise cancellation head phones, spin up your favorite playlists and you're on your way.
But what if I gave you a connectivity choice? You can go with the fancy pants T1 or an old school 56k modem. Which one would you choose? Well, duh, everyone is going to choose the T1. How could you not choose a T1? I mean, come on, a T1 vs. a modem? That's not even a fair contest.
But what if the latency of the T1 was 250ms?
I don't know about you but I *have* to go with the modem. When I type I can see that I'm doing the right thing, so I keep going. If I'm doing well and the typing is smooth, I'll type faster - rising to the challenge of keeping up. The clicks of my keyboard can match the clicks of the crisp monospaced characters that I see on the screen.
The synergy from the interaction of keyboard to screen is wonderous. It's The Flow, the zone, that moment of productivity when there are no roadblocks, only typing. The only "thing" discernible is that of forward motion. Zip zip along. No interuptions. Just you and the machine. No discrete steps. Just motion.
My fingers slip every so often, but that's ok, because the feedback is instant. I know I've typed the wrong thing. I back up, edit it, and keep going. I compensate. If the code is tricky, I slow down. It's the instant feedback that allows me to adjust. The speed of the response is what enables me to move ahead as quickly as possible.
When the latency gets worse, my personal productivity bandwidth goes down. My typing deteriorates significantly as my keyboarding no longer feels interactive. I start to stumble as my typing runs ahead of the clock of reality. I fall off the tracks and my typing runs amuck. I'm off in the weeds. My thoughts jumble together. I get lost.
We live in a world where we are inundated with the idea that more is always better. Clock cycles go up (at least they used to). Hard drives, monitors, camera megapixels, version numbers of our favorite programs... more more more up up up. Not that there's anything wrong with that. But
we're so conditioned to living this way that we short sell the kind of numbers that should go down.
I think we're so used to thinking about "bandwidth" that we overlook "latency" in all of its forms.
For example, Paul Graham and the lispnicks derive some of their smug superiority [1] from their beloved REPL because it removes the latencies inherent in the edit, compile, link, run, debug cycle. If the cycle takes too long (ie: if the latencies get too high), you stumble and lose momentum. Or better, you alt-tab away and spend time in bloglines.
Joel makes a solid case for a daily build - which lowers the latency for a developer to see their changes. Code goes in and hours later - binaries pour out. The faster it comes back at you, the faster you can put it in again. You can make adjustments in real time or close to it. Those automated mechanisms reduce the roundtrip time of thought in and product out.
And that's what software development is really about. Right? Thoughts go in which are translated into code and then "product" comes out the other side. So simple. This happens at all levels of development whether its an inhouse class framework, a project on sourceforge, or a million dollar product with 50 cooks in the kitchen.
Thoughts in. Product out. Software development is a conversation. Which leads to a curious trait about latencies - latencies change the sturcture of a conversation.
What you say, and how you say it changes based on the mode of communication. How you structure a written letter, or even a lengthy email is fundamentally different from an instant message conversation. You can express the same ideas in all mediums - but how you do it, and how quickly you can get to your end goal is heavily influenced by the latencies involved.
You can see this effect even when making a phone call to a far away place. There's just enough latency in the conversation to break up the flow - both parties move ahead with the graceful walk of a potato sack race.
For the developer working alone, it's just you and the machine. But if you working as part of a group, you'll have a set of folks surrounding all of those coders. Those folks sit at one end of the idea factory and the compiler sits at the other end. What happens in the middle is a lot of talking,
frequently too much of it in hushed mumbles. The talking becomes more focused when it can be feedback in near real time.
I think all of the hullaballo about extreme programming and its less rigid extended family - agile practices - was about lowering the latencies in the development cycle. Most of their good practices focus on just that. That's when the structure of the development conversation changes - it becomes real time and it becomes interactive.
And don't forget that long latencies are a great way to drive engineers out of an organization. I think that's another way of looking at what was bugging Marc Lucovsky at Microsoft. Engineers puts code in. Long pause. Long pause. Long undramatic pause. And then stuff goes out to the users. How completely unrewarding. What's the point? There's no payoff.
Software developers may seem like an introverted crowd with a disposition towards anti-social grooming practices, but like everyone else, they want feedback. They want a sense of impact on the world. Software is such an abstract craft that getting a real tangible payoff can be elusive.
Latencies only add to that ephemeral nature.
One great way to improve software development is to squeeze the longest latencies out of your development conversation. It's the best way to keep you zipping along the great competitive highway and avoid those nasty concrete dividers.
[1] Well, lispnicks have lots to be smug about. Market share isn't one of them though.
Update:
Originally submitted for Joel's second book of essays, but since that's been shelved - I'm curious to see how the reddit.com crowd rates it.
Funnily enough, I do a large part of my work at 250ms, and there's not much I can do about it. I work in Australia, and my servers are in New York. If I'm doing a lot of coding at once then I'll set up a bunch of fish:// URLs pointing to the files and edit them locally, but it's certainly possible.
Reading this has prompted me to think again about spending more time in a local editor with a copy of what's on the server and a good synchronisation system though.
Posted by: Bron Gondwana | August 07, 2006 at 06:28 AM
Absolute truth.
This becomes more disruptive - and less noticeable - on larger timescales. A quarter-second latency on typing is obviously a visible annoyance; but what about all those little ten-second pockets of idleness? What about ten or twenty minute build cycles that leave us surfing the web, usually until well after the build is done?
I like to think of this as the "downtime is deadly" principle:
http://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=345337&reply_id=2678039
Posted by: Apoch | August 07, 2006 at 02:32 PM
Thanks for informing us. I am at your site after a long time. Good to see you again.
Posted by: Oakley Canada | September 06, 2011 at 05:22 AM
I have read your article, I love them so much I will put your webpage is saved, they are really very good.
Posted by: juicy couture outlet | September 23, 2011 at 01:59 AM
This is my first time to your website, I send you the very distinctive, deserve me to treasure. Your article I learned a lot of things, thank you.
Posted by: Moncler | September 23, 2011 at 02:04 AM
I have been keeping track of your site for a long time I read these articles, this is an interesting reading I will continue to pay attention to it more
Posted by: moncler jacken | October 07, 2011 at 11:09 PM
Still miss your blog, I can say that they are the most worthy to see something, I will they treasured up they are my most rewarding that I would like to thank the author because of you, my life has become so colorful.
Posted by: Moncler online shop | October 07, 2011 at 11:11 PM
A feeling of your web site do too well beyond my imagination website content is very rich and I love reading each article I will slowly appreciate them
Posted by: Moncler outlet | October 07, 2011 at 11:13 PM
There are some great ideas here. I must redesign my blog sometime.
Posted by: Red High Heels | October 24, 2011 at 10:41 PM
I like how this article is written. Your points are sound, original, fresh and interesting.
Posted by: moncler jackets | November 15, 2011 at 01:23 AM
what a nice post, Really it's great job.keep it on… Post! Very informative dude. I saw this site while browsing and think it may be relevant
Posted by: cheap burberry | November 16, 2011 at 08:53 PM
. O then, my beloved brethren, repent ye, and enter in at the straight gate, and continue in the way which is narrow, until ye shall obtain eternal life.
Posted by: beats by dr dre | November 26, 2011 at 12:14 AM
cast them into the fire, that they shall not cumber the ground of my vineyard, for I have done all; what could I have done more for my vineyard?
Posted by: Christian Louboutin Outlet | November 26, 2011 at 12:18 AM
Wherefore let us take of the branches of these which I have planted in the nethermost parts of my vineyard, and let us graft them into the tree from whence
Posted by: coach online outlet | November 26, 2011 at 12:23 AM
I am sorry for it. The introduction must be unpleasant, whenever it takes place; and the sooner it could be over the better.''
Posted by: beats by dre outlet | January 10, 2012 at 08:40 PM
Yes; and every delay makes one more apprehensive of other delays. Even if this family, the Braithwaites, are put off, I am still afraid that some excuse may be found for disappointing us.
Posted by: christian louboutin discount | January 10, 2012 at 08:44 PM
I cannot bear to imagine any reluctance on his side; but I am sure there is a great wish on the Churchills to keep him to themselves. There is jealousy.
Posted by: ray ban sale | January 10, 2012 at 08:47 PM