> Could you tell something about the level of documentation? For instance,
> do you have to write a paragraph of documentation for every function that
> you add to the system? How about adding preconditions and postconditions,
> and other invariants?
It varies a lot by project and by how widely used the code is.
There are few (if any) strictly enforced rules for documentation or invariant checking. You basically have to convince at least one other engineer that what you have is sufficient.
The documentation is _generally_ pretty decent for core libraries, but sometimes you just have to read the code.