Developers must be focused, not just on writing code, but on creating value for their customers.
Let me qualify what I mean by “customer” and “value.”
A customer is a person or organization willing to pay for an item.
The term “customer” includes users of an item, but is not necessarily limited to those who directly use an item, especially in an enterprise setting where someone else is taking financial responsibility for the development of an item.
Value is a subjective assessment of an item’s worth.
Value often has both utilitarian and aesthetic dimensions: that is, an item is generally assessed based on how much it does for someone as well as how easy and pleasing it is to use.
Value is relative: it is assessed based on how much more one item delivers compared to other similar items already available.
Value is often time-sensitive: an item may be valuable today, but not be nearly so valuable a year from now (based on changing market conditions, etc.).
Value only exists when an item is complete and available for use: partially-developed items not yet ready to be used have no value at all.
Although value can be discussed without reference to monetary measures, a discussion of how much a customer might be willing to pay for an item is ultimately necessary to give a discussion of value some grounding in reality.
As mentioned above, value means more than just the ability to reliably perform a given task: the software must also be easy and reasonably pleasant to use. This is more than just a matter of “gussying up” the user interface – the developer must understand how his users think, and communicate to them using words and graphics that are consistent and effective. Most fundamentally, the software must be built around a mental model with which the user is already familiar, or that seems intuitive once learned.
Although developers need to form ideas about what will be useful to a set of users before developing software, those ideas can never be fully validated without actually developing the software and seeing what real users actually do with it. This is one reason why usability testing is so important.
For more on this topic, see the Pagan Tuna post, “Broken Field Running.”
For years, app dev pros have been told to keep their heads down — that all you need to do is follow the project plan and write your code. Wrong. Lift your head up, find your passion, understand the business and then use your technical creativity to make beautiful applications that users find useful, usable, and desirable.
In short, the software designer must learn to think like a communicator and to practice an artistic craft as well as an engineering one.
You [the software developer] will need humility to recognize that the users are always the final and most appropriate judges of your work. Even though you’re the expert in interpreting your users’ comments and meeting their needs, their judgments of your work are final and without appeal.