John D. Cook makes a very astute point about the nature of software:
Not only is DNA not source code, in a sense even source code is not source code! Source code in the technical sense, a set of computer language files used to build a program, is not source code in the colloquial sense of “everything you need to know.”
Practically speaking, it takes far more than source code to be able to maintain a program, especially if you want to come up to speed quickly. There’s always extra knowledge needed outside the code. This extra knowledge may be so widespread within a community as to be invisible. It’s still there, though it may take someone outside the community to see it.
The fact that there is “extra knowledge” that is not communicated through the source code is big deal and important to recognize. How do we capture the tribal knowledge that accumulates as a project progresses? How do we open the walled gardens of communications among the team? How do we keep track of the gotchas, tips and tricks and minutiae of working on, building, and deploying the software?
Most of the tools and processes software developers use daily attempt to address and alleviate this issue. Version control stores the history of code changes and provides the ability to annotate those changes. Bug tracking keeps track of defects and communicates what the problems and fixes are. We have daily standups, kanban boards, chats, emails, wikis, post-it notes – a huge range of forms of capturing and sharing information.