A couple of weeks ago I talked about how some advice I have given to software developers in the past is no longer accurate. But as the old saying goes, "the more things change, the more things stay the same." Here are three things in software development that continue to hold true.
User experience is king
From iPhones to Facebook, the world is filled with examples of products that have deep technical and other shortcomings yet are wildly successful. And what these products have in common is that they deliver a good user experience (UX). For all of Facebook's warts, it allows users to do what they want on the site. Who needs a personal website or blog when Facebook is "good enough" for most people's needs on those fronts? Why try a BlackBerry or Windows 8 phone when you know the iPhone delivers the "it just works" experience for the most part?
When you do find counter examples to this, it is typically because of price. Windows beat Mac OS not because it was better (they both had their flaws and still do), but because it was cheaper. When you look globally, Android beats the iPhone, but in the U.S. where carrier subsidies bring the cost of iPhones down quite a bit, the iPhone handily wins. Facebook's killer advantage is its critical mass of users, which is vital to their experience and no amount of programming can replicate.
While the recent batch of consumer-driven applications and devices are starting to finally put usability and UX at the forefront, enterprise applications are still a train wreck on this topic. For new and small companies where there is little vendor lock-in, folks are choosing the better experience over and over again. Companies like Salesforce that deliver a good experience are only going to get more successful, while their competitors will need to rely on vendor lock-in and the traditional sales model to stay afloat. As developers, we no longer have the luxury (if we ever did) of writing software with a poor UX.
Get to know your users
The longer I am in this industry, the more I am struck by how many people think software can be written in a vacuum. It's not enough to talk to your users -- you need to get to know how your users do whatever it is that your application does; otherwise, you get a list of requirements that do not explain what the user is trying to do and often specifies a sub-optimal approach. Compare these two requirements:
"Screen should have a drop-down list of all of the users in the system."
"Screen should allow a user to be found and selected."
They sound the same, right? Not really. Maybe a drop-down list is the right approach, but if there are hundreds of items in that list, a search system, an auto-completing input box, or perhaps a pop-up window with an advanced search would all be better options. When you learn how users do their jobs, you can deliver great software that is a success. My favorite technique is to be a fly on the wall while they use their current systems, and then ask targeted questions afterwards to understand why they made some of their decisions.
The need for improved project management
I think the only groups of people who get things wrong more than software development teams are the weather forecasters. While there are no definitive studies (that I am aware of) proving exactly how many software development projects are failures, I consistently read numbers well above 50%. Part of the difficulty in getting a good number is what is considered failure. Over budget or late is considered a failure by some but not others, for example. Some folks are happy to eventually get a mostly working product.
A lot of the failures (regardless of how you define them) come down to basic miscommunications between development teams and the business teams. The difficulties come from differences in how they talk to each other, in expectations, baseline assumptions, and more. These are the kinds of things that software developers need to keep improving if we want to remain employed, particularly for in-house IT. I have been saying for some time that developers need to work better with the business, and it is truer now more than ever.
Related TechRepublic resources
Justin James is the Lead Architect for Conigent.