Software development is the process of enabling users to
communicate instructions to a machine and have it perform those instructions as
expected. More generically, software development is the action of building a communication
channel between a user and a machine.
This communication between user and machine closely follows the Berlo SMCR model of communication as explained through the following example:
a. Source – The user has an intention to have the machine perform an action.
b. Message – The instruction which the user wish the machine to perform.
c. Channel – The software accepts the message through a user interface and translates the message into the relevant format for the machine.
d. Receiver – The machine receives the translated message and acts on it.
a. Source – The machine has succeeded or failed to perform the instruction.
b. Message – The feedback on the execution of the instruction.
c. Channel – The software translates the feedback and presents it to the user through a user interface.
d. Receiver – The user understands the feedback presented.
Note: Software systems may consist of a chain of channels, each being a receiver of a message and a source for the next link in the chain. As long as instructions originate from a user and gets executed by a machine, the above process holds for each link in the chain as well as the chain as a whole.
Software development is responsible for making this communication as effective as possible by limiting the translation failures (noise) at every step. To accomplish this, a software developer must optimize the following variables:
1. Understanding of the user's intentions and expectations
2. Understanding of the machines capabilities and language
3. Translation of the message into the machine's language
An enterprise system has many thousands of users and many hundreds of machines combined into one software system. This makes it near impossible for one person to optimize all 3 variables.