I believe it is important to have a philosophy when approaching problems in all areas of life. Over the years, I've spent a good deal of time defining, ripping up and then redefining my philosophy of software development.
Software development, especially custom business software, is both exciting and extremely difficult. Two companies are never the same, nor are their software needs. The technology stack I would implement for two separate companies, even in the same industry, could be entirely different. This makes creating a solution difficult, although probably not in the way you would think.
The "software" component of software development is fairly easy, though I am surrounded by a group of some of the smartest and most talented people I’ve met. Writing code to solve a well-defined problem may take a bit of time, but it’s straightforward. The biggest challenge with software development is the well-defined problem, and the root of the challenge is you and me.
Designing something that is easy for a human to use is difficult. A device or piece of software that’s easy to use is the result of the design team having remarkable clarity in their understanding of their audience and of putting in a tremendous amount of hours.
In his book “The Design of Everyday Things,” Donald A. Norman describes design as a process of communication. Well-developed software is a process of creating something that effectively communicates with humans; how we think, and how we work.
My approach to software is that it’s simply a tool to empower humans, like a very sophisticated hammer humans use to do increasingly sophisticated things. Like a hammer, software should enhance the way people work. If your standard hammer didn’t have a handle it wouldn’t be useful. Software must not only be useful, it must always be empowering: it should help us work, think, learn; communicate faster, think smarter, be better. It must be people centric.
When I say “people centric,” the first thing that comes to mind is a good user interface, meaning it should be easy to use. Although that’s right, it’s much more than that. Taking our hammer example, a handless hammer has a rather poor user interface, and does little to empower us. But dig a bit further and we start talking about user experience. A hammer could have a brilliantly designed handle but weigh 100lbs. It’s going provide a rather poor user experience when you have a thousand nails to drive.
A brilliant user interface and intuitive user experience is still not enough. To get elegant and meaningful people-centric software, we have to start at an even more fundamental level. People-centric software design has to start by helping people achieve their goals and solve their problems. If I’m building a fence with screws, a perfectly designed hammer is still worthless for the task at hand.
The critical first step to successful software is developing a deep working knowledge of the wants, needs, goals and problems of the people involved. It’s the heart of people-centric software design. Good software enhances humans; it must solve human issues and improve human activities.
This is the key to success in the face of all the challenges of software development. It should be your required first step in any software project, and it’s the foundation of my philosophy on software development.