Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity
Copyright 2004 by Joel Spolsky
Lead Editor: Gary Cornell
Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, Jason Gilmore, Chris Mills, Steve Rycroft, Dominic Shakeshaft, Jim Sumser, Gavin Wray
Project Manager: Beth Christmas
Copy Edit Manager: Nicole LeClerc
Copy Editor: Scott Carter
Production Manager: Kari Brooks
Proofreader: Liz Welch
Compositor: Molly Sharp, ContentWorks
Indexer: Ted Laux
Cover Designer: Kurt Krames
Manufacturing Manager: Tom Debolski
Library of Congress Cataloging-in-Publication Data
Spolsky, Joel.
Joel on software : and on diverse and occasionally related matters that will prove of interest to software developers, designers, and managers, and to those who, whether by good fortune or ill luck, work with them in some capacity / Joel Spolsky.
p. cm.
Includes index.
ISBN 1-59059-389-8 (pbk. : alk. paper)
1. Computer software--Development. I. Title.
QA76.76.D47S693 2004
005.1--dc22
2004015941
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher.
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
Distributed to the book trade in the United States by Springer-Verlag New York, Inc., 175 Fifth Avenue, New York, NY 10010 and outside the United States by Springer-Verlag GmbH & Co. KG, Tiergartenstr. 17, 69112 Heidelberg, Germany.
In the United States: phone 1-800-SPRINGER, e-mail .
For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail .
The information in this book is distributed on an "as is" basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work.
Most of the material in this book appeared previously on the Web on www.joelonsoftware.com.
To my parents, who raised me thinking
that all adults wrote books.
CONTENTS
Bits and Bytes: The Practice of Programming |
Managing Developers |
Being Joel: Random Thoughts on Not-So-Random Topics |
A Little Bit Too Much Commentary on .NET |
|
ABOUT THE AUTHOR
Joel Spolsky, a software industry veteran, writes a weblog called Joel on Software (www.joelonsoftware.com) that is one of the most popular independent websites for programmers. His site has been described as the "anti-Dilbert manifesto." Spolsky has designed and developed software used by millions of people and has worked on a variety of products, from Microsoft Excel to the Juno user interface. He is the founder of Fog Creek Software in New York City.
ACKNOWLEDGMENTS
I'd like to thank my publisher, editor, and friend Gary Cornell for making this book possible. The staff at Apress has always been helpful and gracious. Apress is a rare computer book publisher devoted to putting the author first, and I'm thrilled to have them as a publisher.
Even before the book, there was a website, and the website would not have happened without the inspiration, free hosting, and publicity provided by Dave Winer of UserLand Software. I also owe a debt of gratitude to Philip Greenspun, who taught me that if you know something, you need to publish it on the Web for others to learn from. And to Noah Tratt, for the inspiration that came when he told me off-the-cuff one day that I should write down some of my rants.
I'd like to thank my colleagues on the Microsoft Excel team who, at the beginning of my career, taught me how to develop commercial software.
Over the years, millions of people have visited the website, and about 10,000 of them took the time to send me a nice email. These messages of encouragement are the only reason I kept writing for all these years, and though space does not permit listing you all by name, I greatly appreciate these notes.
INTRODUCTION
You never asked to be a manager. Like most software developers I know, you would have been much, much happier if they would just let you sit and code quietly. But you're the best developer, and when Nigel, the old team lead, had that unfortunate accident with the bungee cord and the laptop computer, it seemed natural to promote you, the team star.
So now, you have your own office (instead of sharing a cubicle with The Summer Intern Who Never Left), and you have to fill out those biannual performance reviews (instead of ruining your eyesight staring happily into a CRT all day), that is, when you're not wasting time dealing with the bizarre demands of prima donna programmers, back-slapping sales guys, those creative "UI designers" (who were hired as graphic designers, for Pete's sake) who want shiny OK/Cancel buttons that reflect, I mean, what's the RGB value for "reflective?" And dealing with inane questions from the senior VP who learned everything he knows about software from an article in Delta Airlines In-flight Magazine. "Why don't we use Java instead of Oracle? I heard it's more unified."
Welcome to management! Guess what? Managing software projects has nothing at all to do with programming. If all you've done so far is write code, you're probably starting to discover that human beings are perhaps a smidgen less predictable than your garden-variety Intel CPU.
The old team lead, Nigel, had never been particularly good at it, anyway. "I don't want to be one of those managers who spend all their time in pointless meetings," he would say with more than a little bravado. "I think I can still spend about 85 percent of my time coding, and only a little bit of my time managing."
What Nigel really wanted to say was, "I have no bloody idea whatsoever how to manage this project and hopefully if I just keep coding like I did before I was put in charge, somehow everything will work itself out." It didn't, of course, which goes quite a long way to explaining exactly why Nigel was bungee-jumping with an IBM ThinkPad on that fateful day.
Anyway, Nigel has really made a surprising recovery, considering, and is now working as the CTO of a small company he started with his bungee buddies, WhatTimeIsIt.com, and he's only got six months to deliver an entirely new system from scratch, and he can't fake it any more either.
Managing software projects is not a well-known art. Nobody has a degree in Managing Software Projects, and there are very few books on the subject. A lot of the very few people who have worked on really successful software projects got rich and retired to trout farms before they had a chance to pass on their accumulated experience to the next generation, and many others just burned out and got less stressful jobs teaching remedial English to inner-city gangsters.
Next page