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 began his legendary web log,, in March 2000, in order to offer insights for improving the world of programming. Spolsky based these observations on years of personal experience.

The result just a handful of years later? Spolsky's technical knowledge, caustic wit, and extraordinary writing skills have earned him status as a programming guru! His blog has become renowned throughout the programming worldnow linked to more than 600 websites and translated into over 30 languages.

Joel on Software covers every conceivable aspect of software programming—from the best way to write code, to the best way to design an office in which to write code! All programmers, all people who want to enhance their knowledge of programmers, and all who are trying to manage programmers will surely relate to Joel's musings.

Joel Spolsky

Joel Spolsky is a globally recognized expert on the software development process. His web site Joel on Software ( is popular with software developers around the world and has been translated into over 30 languages. As the founder of Fog Creek Software in New York City, he created FogBugz, a popular project management system for software teams. Joel has worked at Microsoft, where he designed Visual Basic for Applications as a member of the Excel team, and at Juno Online Services, developing an Internet client used by millions. He has written two books: User Interface Design for Programmers (Apress, 2001) and Joel on Software (Apress, 2004). Joel holds a bachelor's of science degree in computer science from Yale University. Before college, he served in the Israeli Defense Forces as a paratrooper, and he was one of the founders of Kibbutz Hanaton.

  1. Choosing a Language
  2. Back to Basics
  3. The Joel Test: 12 Steps to Better Code
  4. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
  5. Painless Functional Specifications Part 1: Why Bother?
  6. Painless Functional Specifications Part 2: What’s a Spec?
  7. Painless Functional Specifications Part 3: But . . . How?
  8. Painless Functional Specifications Part 4: Tips
  9. Painless Software Schedules
  10. Daily Builds Are Your Friend
  11. Hard-Assed Bug Fixin’
  12. Five Worlds
  13. Paper Prototyping
  14. Don’t Let Architecture Astronauts Scare You
  15. Fire and Motion
  16. Craftsmanship
  17. Three Wrong Ideas from Computer Science
  18. Biculturalism
  19. Get Crash Reports From Users—Automatically!
  20. The Guerilla Guide to Interviewing
  21. Incentive Pay Considered Harmful
  22. Top Five (Wrong) Reasons You Don’t Have Testers
  23. Human Task Switches Considered Harmful
  24. Things You Should Never Do, Part One
  25. The Iceberg Secret, Revealed
  26. The Law of Leaky Abstractions
  27. Lord Palmerston on Programming
  28. Measurement
  29. Rick Chapman Is In Search of Stupidity
  30. What Is the Work of Dogs in This Country?
  31. Getting Things Done When You’re Only a Grunt
  32. Two Stories
  33. Big Macs vs. The Naked Chef
  34. Nothing Is As Simple As It Seems
  35. In Defense of Not-Invented-Here Syndrome
  36. Strategy Letter I: Ben & Jerry’s vs. Amazon
  37. Strategy Letter II: Chicken-and-Egg Problems
  38. Strategy Letter III: Let Me Go Back!
  39. Strategy Letter IV: Bloatware and the 80/20 Myth
  40. Strategy Letter V: The Economics of Open Source
  41. A Week of Murphy’s Law Gone Wild
  42. How Microsoft Lost the API War
  43. Microsoft Goes Bonkers
  44. Our .NET Strategy
  45. Please Sir May I Have a Linker?