Why is it so hard to extend an existing software?

A general problem in the software industry is the difficulty to take over the software project of another person and extend or develop it further according to the customer’s needs. If I am looking at myself, I am having very hard times to understand the whole connections between data structures, the data control flow, various algorithms and the custom usage of the programming language by the programmer. If you are facing a problem, you will solve it differently than other programmers with high probability.

I like the analogy of literature. It’s very hard to finish a book started by another author. The previous author created conventions (style of writing), assumed some facts (about the hardware and setup) and created a flow the story is following (data flow). Intelligence is the ability to extract, understand and generate the whole concept out of the few basic axioms hidden in the source code.

Related to the openbookproject currently in media.

Why is it so hard to extend an existing software?