First published in 1997 by Eric S. Raymond and revised occassionally
between 1997 & 2001. This has got to be one of the finest essays I’ve come
Read about it on Wikipedia for a good introduction.
Main points listed below:
- Every good work of software starts by scratching a developer’s personal itch.
- Good programmers know what to write. Great ones know what to rewrite (and
- Plan to throw one [version] away; you will, anyhow.
- If you have the right attitude, interesting problems will find you.
- When you lose interest in a program, your last duty to it is to hand it off
to a competent successor.
- Treating your users as co-developers is your least-hassle route to rapid code
improvement and effective debugging.
- Release early. Release often. And listen to your customers.
- Given a large enough beta-tester and co-developer base, almost every problem
will be characterized quickly and the fix obvious to someone.
- Smart data structures and dumb code works a lot better than the other way
- If you treat your beta-testers as if they’re your most valuable resource,
they will respond by becoming your most valuable resource.
- The next best thing to having good ideas is recognizing good ideas from your
users. Sometimes the latter is better.
- Often, the most striking and innovative solutions come from realizing that
your concept of the problem was wrong.
- Perfection (in design) is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
- Any tool should be useful in the expected way, but a truly great tool lends
itself to uses you never expected.
- When writing gateway software of any kind, take pains to disturb the data
stream as little as possible—and never throw away information unless the
recipient forces you to!
- When your language is nowhere near Turing-complete, syntactic sugar can be
- A security system is only as secure as its secret. Beware of pseudo-secrets.
- To solve an interesting problem, start by finding a problem that is
interesting to you.
- Provided the development coordinator has a communications medium at least as
good as the Internet, and knows how to lead without coercion, many heads are
inevitably better than one.
Brilliant. Just brilliant.