hn-classics/_stories/2002/14836749.md

14 KiB
Raw Blame History

Source

Fire And Motion Joel on Software

Skip to content

Joel on Software

Your host

I'm Joel Spolsky, a software developer in New York City. More about me.

Search

Read the archives in dead-tree format! Many of these articles have been collected into four books, available at your favorite bookstore. It's an excellent way to read the site in the bath, or throw it at your boss.

Careers

Ready to level up? Stack Overflow Jobs is the job site that puts the needs of developers first. Whether you want to take control of your search or let employers discover you, we're on a mission to help every developer find a job they love.

Looking to hire smart programmers who get things done? Stack Overflow Talent is a fully-customized sourcing solution that helps you understand, reach, and attract developers on the platform they trust most. Find the right candidates for your jobs. Learn more.

For my day job, I'm the co-founder and CEO of Stack Overflow, the largest online community for programmers to learn, share their knowledge, and level up. Each month, more than 40 million professional and aspiring programmers visit Stack Overflow to ask and answer questions and find better jobs. Stack Overflow is also the flagship site of the Stack Exchange network, 160+ question and answer sites dedicated to all kinds of topics from cooking to gaming. According to Quantcast, Stack Overflow is the 30th largest web property in the United States and in the top 100 in the world.

profile for Joel Spolsky on Stack Exchange, a network of free, community-driven Q&A sites


I also founded Fog Creek Software, one of the most influential small tech companies in the world. As an independent, privately-owned company, we've been making customers happy since the turn of the century. We share what we've learned about how to make great software, both by writing about our ideas and by creating products, like FogBugz, Trello and Gomix, that help others make great technology. As a result, Fog Creek's impact on the world of developers rivals companies a thousand times our size.

Twitter! Twitter!

My Tweets

January 6, 2002December 5, 2016 by Joel Spolsky

Fire And Motion

Sometimes I just cant get anything done.

Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesnt happen.

TetrisThese bouts of unproductiveness usually last for a day or two. But there have been times in my career as a developer when I went for weeks at a time without being able to get anything done. As they say, Im not in flow. Im not in the zone. Im not anywhere.

Everybody has mood swings; for some people they are mild, for others, they can be more pronounced or even dysfunctional. And the unproductive periods do seem to correlate somewhat with gloomier moods.

It makes me think of those researchers who say that basically people _cant _control what they eat, so any attempt to diet is bound to be short term and they will always yoyo back to their natural weight. Maybe as a software developer I really cant control when Im productive, and I just have to take the slow times with the fast times and hope that they average out to enough lines of code to make me employable.

 

  Go read The Onion for a while.
   

What drives me crazy is that ever since my first job Ive realized that as a developer, I usually average about two or three hours a day of productive coding. When I had a summer internship at Microsoft, a fellow intern told me he was actually only going into work from 12 to 5 every day. Five hours, minus lunch, and his team loved him because he still managed to get a lot more done than average. Ive found the same thing to be true. I feel a little bit guilty when I see how hard everybody else seems to be working, and I get about two or three quality hours in a day, and still Ive always been one of the most productive members of the team. Thats probably why when Peopleware and XP insist on eliminating overtime and working strictly 40 hour weeks, they do so secure in the knowledge that this wont reduce a teams output.

But its not the days when I “only” get two hours of work done that worry me. Its the days when I cant do anything.

Ive thought about this a lot. I tried to remember the time when I got the most work done in my career. It was probably when Microsoft moved me into a beautiful, plush new office with large picture windows overlooking a pretty stone courtyard full of cherry trees in bloom. Everything was clicking. For months I worked nonstop grinding out the detailed specification for Excel Basic — a monumental ream of paper going into incredible detail covering a gigantic object model and programming environment. I literally never stopped. When I had to go to Boston for MacWorld I took a laptop with me, and documented the Window class sitting on a pleasant terrace at HBS.

Once you get into flow its not too hard to keep going. Many of my days go like this: (1) get into work (2) check email, read the web, etc. (3) decide that I might as well have lunch before getting to work (4) get back from lunch (5) check email, read the web, etc. (6) finally decide that Ive got to get started (7) check email, read the web, etc. (8) decide again that I really have to get started (9) launch the damn editor and (10) write code nonstop until I dont realize that its already 7:30 pm.

Somewhere between step 8 and step 9 there seems to be a bug, because I cant always make it across that chasm.bike trip For me, just getting started is the _only _hard thing. An object at rest tends to remain at rest. Theres something incredible heavy in my brain that is extremely hard to get up to speed, but once its rolling at full speed, it takes no effort to keep it going. Like a bicycle decked out for a cross-country, self-supported bike trip — when you first start riding a bike with all that gear, its hard to believe how much work it takes to get rolling, but once you are rolling, it feels just as easy as riding a bike without any gear.

Maybe this is the key to productivity: just getting started. Maybe when pair programming works it works because when you schedule a pair programming session with your buddy, you force each other to get started.

Joel in the Army

When I was an Israeli paratrooper a general stopped by to give us a little speech about strategy. In infantry battles, he told us, there is only one strategy: Fire and Motion. You move towards the enemy while firing your weapon. The firing forces him to keep his head down so he cant fire at you. (Thats what the soldiers mean when they shout “cover me.” It means, “fire at our enemy so he has to duck and cant fire at me while I run across this street, here.” It works.)  The motion allows you to conquer territory and get closer to your enemy, where your shots are much more likely to hit their target. If youre not moving, the enemy gets to decide what happens, which is not a good thing. If youre not firing, the enemy will fire at you, pinning you down.

I remembered this for a long time. I noticed how almost every kind of military strategy, from air force dogfights to large scale naval maneuvers, is based on the idea of Fire and Motion. It took me another fifteen years to realize that the principle of Fire and Motion is how you get things done in life. You have to move forward a little bit, every day. It doesnt matter if your code is lame and buggy and nobody wants it. If you are moving forward, writing code and fixing bugs constantly, time is on your side. Watch out when your competition fires at you. Do they just want to force you to keep busy reacting to their volleys, so you cant move forward?

Think of the history of data access strategies to come out of Microsoft. ODBC, RDO, DAO, ADO, OLEDB, now ADO.NET All New! Are these technological imperatives? The result of an incompetent design group that needs to reinvent data access every goddamn year? (Thats probably it, actually.) But the end result is just cover fire. The competition has no choice but to spend all their time porting and keeping up, time that they cant spend writing new features. Look closely at the software landscape. The companies that do well are the ones who rely least on big companies and dont have to spend all their cycles catching up and reimplementing and fixing bugs that crop up only on Windows XP. The companies who stumble are the ones who spend too much time reading tea leaves to figure out the future direction of Microsoft. People get worried about .NET and decide to rewrite their whole architecture for .NET because they think they have to. Microsoft is shooting at you, and its just cover fire so that they can move forward and you cant, because this is how the game is played, Bubby. Are you going to support Hailstorm? SOAP? RDF? Are you supporting it because your customers need it, or because someone is firing at you and you feel like you have to respond? The sales teams of the big companies understand cover fire. They go into their customers and say, “OK, you dont have to buy from us. Buy from the best vendor. But make sure that you get a product that supports (XML / SOAP / CDE / J2EE) because otherwise youll be Locked In The Trunk.” Then when the little companies try to sell into that account, all they hear is obedient CTOs parrotting “Do you have J2EE?” And they have to waste all their time building in J2EE even if it doesnt really make any sales, and gives them no opportunity to distinguish themselves. Its a checkbox feature — you do it because you need the checkbox saying you have it, but nobody will use it or needs it. And its cover fire.

Fire and Motion, for small companies like mine, means two things. You have to have time on your side, and you have to move forward every day. Sooner or later you will win. All I managed to do yesterday is improve the color scheme in FogBUGZ just a little bit. Thats OK. Its getting better all the time. Every day our software is better and better and we have more and more customers and thats all that matters. Until were a company the size of Oracle, we dont have to think about grand strategies. We just have to come in every morning and somehow, launch the editor.

It's getting better all the time... o/~
Discuss

Want to know more?

You're reading Joel on Software, stuffed with years and years of completely raving mad articles about software development, managing software teams, designing user interfaces, running successful software companies, and rubber duckies.

About the author.

I'm Joel Spolsky, co-founder of Trello and Fog Creek Software, and CEO of [Stack Overflow. More about me.

Post navigation

Previous Post 2002/01/06

Next Post → 2002/01/08

Proudly powered by WordPress