Joe Armstrong, father of Erlang and programmer extraordinaire, came up with this highly accurate diagnosis of the phases in project documentation on [erlang-questions] a couple of days ago:

I think it works like this: 1) first you don't understand how the X works (X=Beam, JVM, X11, ... you name it) 2) You struggle - and think - google and have a hot bath 3) Eureka - bath flows over 4) Now you can understand it - and you can also remember why you could not understand it 5) Now it's easy you understand it 6) You see no reason to document it since it's obvious Round about 4) there is a small window of opportunity to explain to other people how it works. Once you get to 6) it's very difficult to remember what it felt like at point 2) and consequently difficult to write decent documentation. /Joe

So true!