January 2, 2018

...Learn TDD with Codemanship

It's ALL User Experience

Inspire by this tweet that appeared on the @codemanship timeline:

I wanted to take a moment to spitball some thoughts about user experience and how it fits within the software development process.

I've always believed that UX is a central pillar of software design and development. When you think about it, it's all about the user's experience.

You might ask "What has Clean code got to do with user experience?" Well, I can think of many examples of software I was relying on that had very infrequent updates. In fact, in some cases, the updates never came. I got very heavily into a software app for recording guitar-based music, for example, and was forced to abandon it after a long-promised major release - with critical enhancements and bug fixes I was counting on - never materialised.

In an indirect - but no less frustrating way - end users feel the effects of code smells, poor automated test support, lack of CI, and all that kind of gnarly business.

Just as we feel the effects of architectures that don't scale. Exact same company had a website for users to post their music on via the app. Often unresponsive. Frequently unavailable. Eventually pulled altogether. LinkedIn is another application I can think of where I've experienced quite frequent unavailability. And Twitter, of course. (You can't substitute good scalable architecture with an 'Oops, something went wrong' message, much as you might like to.)

And millions of unlucky end users have felt the effects of unsecured code on their bank and credit card accounts.

As developers, pretty much everything we do - every decision we make - can be felt by our end users. It may be a direct visible effect, like an unhandled exception, or an indirect effect like rising prices to cover ballooning development costs. But, one way or another, they feel it. Just as surely as you can feel the effects of a decision not to invest in those better ovens or to use frozen pasta instead of making it fresh in your dining experience at a restaurant.

And then there's planned UX: the stuff we intended our end users to experience. The user's journey, as they navigate the features of our applications through the visual languages (GUIs) we establish for them, is the Alpha and Omega of good software design. It all starts and ends there.

The best software is designed from the user's perspective (just as the best APIs are designed from client code). Put the user at the heart of the process, and track them all the way through from conception to delivery and beyond.

This is why I firmly believe that UX should be a key component of any development team's activities, and why it should not be a shared or outsourced function. UX is part of the team.

And, yes, I believe this too about security, about architecture, about testing, about operations, and all the other key activities that go into delivering good working software. Vertical roles just don't cut it in software development. But it's especially true of UX, because - ultimately - all of these things contribute to the user's experience.

Posted 2 years, 7 months ago on January 2, 2018