Producing Software Is Not The Purpose Of Software Development
[Tl;Dr: All too often we can all get so wrapped-up in the joys and frustrations of creating software that we lose sight of the real purpose.]
I often invite my conference audiences to spend a few minutes discussing, amongst themselves, some question or other relevant to the session. One of the questions which I regularly pose is:
“What is the purpose of software development?”
This question tends to confound the audience for a few moments, prior to their entering into animated discussions on the subject. It always seems like a few minutes is nowhere near long enough to do the question justice.
I ask the question for a number of reasons, not least because of Dan Pink’s assertion that the three keys to intrinsic motivation are autonomy, mastery, and purpose. I rarely come across people and teams who can articulate their purpose.
How about you? What would you say is the purpose of software development?
So what IS the purpose of software development, as I see it?
- It’s NOT about producing software. Customers don’t want software, although sometime they may want the utility that software provides. Pure software is NEVER the Whole Product, even for apps and other “software products”.
- It’s NOT about delivering value. Despite all the information and opinion to that effect. Needs and emotions trump economic or financial value, every time.
- It’s NOT about solving “business problems” nor “business benefits” nor providing “customer value”. Even when people say that it is. These terms are a thin veneer of amtssprache hiding the needs of e.g. the Core Group – and others – from examination, and avoiding messy discussions about needs and emotions. See also: POSIWID.
- It’s NOT about “creating solutions that help people and deliver economic benefit for an organisation”.
- It IS about meeting the needs of a wide range of people. People involved in the organisation where the software development is happening. Developers. Other technical people. Managers. Executives. Customers. Buyers. Users. Suppliers. And a lot of the meeting of those needs has little or no connection with software.
- And it IS about creating “Whole Products”. Products in which software plays only a minor supporting role, in the overall scope of things.
So, my own answer to the question would be something like:
“The core purpose of software development is to create elements of complete products or services. Complete products or services which attend to – and hopefully meet – the emotional, human needs of a variety of interested people.”
If we accept the above as our core purpose in software development, it affords us some interesting implications:
- Whatever purpose we believe we are pursuing will direct our efforts and our focus. If we mistake the purpose of our work, we will likely produce results which fail to meet the real mark, which fail to address the real purpose, and which therefore fail to meet the real needs of some or all of the people involved.
Aside: This seems like a good explanation for why “software development is so broken, almost everywhere on the planet”.
- Most software methods, frameworks, etc. are predicated on an implicit or explicit purpose for software development. In most cases, this assumed purpose is at odds with our true purpose. Thus, when we choose a method or framework suited to our mistaken purpose we end up with something dysfunctional. The history of software development is stuffed full of examples of this.