Software Development as a Learning Process

A common story in software engineering tells about two software houses that try to develop a software artefact for the same client and how one of them outperforms the other.

The typical story follows this template. Organization O needs a software artefact with a high value for its business. Software house B spends two years trying the develop the artefact and fails miserably. Then organization O contracts software house G and they successfully do their job in less then 6 months.

Usually, this story is told to excel software house G. But is it necessarily like this? Is it crystal clear as it looks like?

Well, it would be if the only result of software development is the production of a software artefact, but actually, the software development process also creates knowledge. Although B may have failed in the production of the software artefact it is possible that during development knowledge was created within the organization. When software house G starts there is more knowledge. This knowledge can be explicit, suppose that B produces documentation about the organization and their needs, or tacit, because the organization is now more aware of what they really want in result of its the interactions with software house B.

The development of software is a learning process, where to build the software artefact it is necessary to identify and produce knowledge which is captured in the different descriptions created during the software development process. In the case of a P-system the emphasis is on the identification of knowledge, whereas in the case of a E-system knowledge is actually produced, see Software as Art and Engineering, though is not always easy to draw a line between identification and production of knowledge.