2008‎ > ‎01‎ > ‎15‎ > ‎

Software is Communication

What makes software commercially successful? What make the difference between software that is easy-to-use, and software that isn't? What makes the difference between maintainable software and unmaintainable software?

Would you believe that all of these questions have the same answer?

Software is a medium of communication. Software systems are often designed to replace or enhance some existing business process that uses paper or e-mail or people just telling each other things, and in this way it is a medium of communication. For example, an order fullfillment system provides information to its users about which orders are waiting fulfillment, which have been shipped, and what are the levels of inventory. The system itself does not tell its users what the inventory levels are, but when Bob fullfills an order and marks it so in the system, he is communicating to other users that a particular order has been filled, and that such and such inventory has been used. If a software system impedes Bob while trying to communicate to the other users, or if it impedes the other users while they are trying to receive Bob's communication, it will fail. The same goes for Microsoft Word, Google, or any other piece of software.

As developers we tend to lose sight of the forest for the trees. We're down deep figuring out a way to get the computer to do what we want it to do, and to give us the correct output. We lose sight of the fact that our software is successful only to the extent that it enables communication between its users. In a way, this is one thing that "social networking" software has gotten right. Creating a "social networking" application because it's cool and that's what everyone else is doing does not guarantee success (don't get me started!), but creating an application that connects its users through enhancing and encouraging their communication will provide a better chance for commercial success (not guaranteed, though, because there are other factors to commercial success such as the size of the market, execution, etc.).

Successful software is communication. Imagine a Morpheus and Neo style conversation..."You think that's code you're reading?....You think the purpose of the code is to tell the computer what to do?...Hmm." Software can be written in such a way that it excels at enhancing the communication of its users, but it may fail miserably when it seen as an act of communication between developers. Software is a manifestation of pure thought and reasoning more than anything else. Code reviews, proper engineering, writing maintainable code, etc. are all important in the construction of software, because they help the development team agree on how and what the software is communicating to them.

So we see that software is a communication medium for its users and an act of communication between developers, and successful software lies at the intersection of both.

Originally published on January 15, 2008 at 1:11 pm