One software developer can build whatever he wants.
Two software developer need to communicate their work over.
The code is the ultimate truth, but sometimes it is hard to understand even for the developer himself
Ideally there should be some block of information that is well defined, easy to comprehensive, effortless to communicate, and quick to search.
A software team need to digest user requirement, translate to product specification, break into workable chunk and then implement.
The absolute smallest chuck a developer understand well is a pure function, doing one thing only, ideally no more than a page long with less than 3 parameters.
How to translate it as part of human to human communication is an interesting research topic.