Hello folks:
My work consists of technical analysis. I like software development, but that is not my job. However, I've developed a substantial system of executables, libraries, databases, and modules. It is not unrealistic to say that such products have made everyone's job easier. I produced a fair amount of documentation for every product.
In my line of work, being a reasonably competent software developer can actually hurt (if your original job is not software development), meaning that you can quickly be relegated to software maintenance and, worse, you can be tied to a project because "only you know the software". If you consider that in NASA a project can last 15-20 years (Voyager has lasted 32), that is not necessarily a good thing. Even though you are as good as any, others move on to the awesome flagship projects or hardcore engineering (my passion).
In order to prevent this, I've developed the following rule:
If you ask a question, I respond but you document the answer in the official manual; if you ask for a feature, I will work with you implementing it in the actual code.
What I think will happen is that users will try harder before asking questions (otherwise they will have to document the answer themselves), and more people will learn the internal workings of the software as new features are added.
Enough context.
In concrete, I would like to know what official process is followed in your software development life cycle to ensure that knowledge is transmitted across the organization.
I strongly believe this is not a subjective question, but will make it community wiki to avoid confrontation.
Thank you.