Hey Web Developers: Step up!

In my career, I've been fortunate (or unfortunate depending on your point of view) to become heavily involved in the process of recruiting and hiring engineering talent for multiple companies.  I'm discouraged to say that the User Interface Engineer (which I'm defining quite differently than Jared Spool's UIE.com site) is among the most difficult positions to fill (right up there with build & release engineers). Too many people get into Web Development with no formal engineering background making them ill-equipped to solve engineering challenges that they face daily while building a User Interface. I see so many resumes for traditional web developers who can't tell me the difference between an Array and a List or how recursion can often provide a simpler solution than iteration. I can assure you as the guy who will be reviewing your resume or doing your phone screen or interview: developing these skills is no longer optional!

What is a UI(S)E?

As I said, my definition of a UIE is quite different from the common usage describing someone who designs interfaces (I generally refer to this practice as Interaction Design). My definition is a software engineer who writes the code that breathes life into what people of the former category design. It's someone who is passionate about building a great user experience. It's someone who cares about how it's built as much or more than why it's built. I'll be using the acronym UISE going forward; for User Interface Software Engineer; though these two roles need not necessarily be mutually exclusive.

Historically, these people have been referred to as "Web Developers;" a term so generic that I'm loathe to use it for it's lack of context. However, the term itself demonstrates the problem: many of these people never took the step to become software engineers; and if you're a software engineer, you understand the difference.

Why Do We Need Them (Us)?

Simple: most software engineers who came to be software engineers through the classic routes find the user interface to be uninteresting at best; or even boring at worst. The UI often gets thrown together despite it being the only aspect of the software the users will experience.  There are hundreds of examples of poor UI (both in terms of experience and the underlying code) that have been perpetrated on the world by engineering teams who just didn't care about the interface.

It's not that your work to optimize the search so it it was able to go through a million records in 1 second instead of the original 5 isn't worthy work; it's that the user doesn't know that it once took 5 seconds and doesn't care that it took 3 weeks of your time to make it palatably fast. The nature of "under-the-hood" software engineering is that users simply take it for granted. And all of it will have been time wasted if the search results don't behave as the user expects them to. Obviously this is a simple (and well-explored) example; but the crux of the discussion is that your User Interface is something you should absolutely care about. Since that UI is part of our software, let's subject it to the same level of rigor that we put into the rest of our project.  After all, we're going to have to add on and maintain the interface just like the rest of the system; so we can apply the lessons learned through all of software engineering to our UI as well.

How Did You Become a Web Developer?

I imagine you came to the "craft" much like I did: you started with some HTML pages, learned some CSS, graduated to the scripting language of the day (it was Perl when I started, PHP shortly after, and it seems Ruby and Python are currently duking it out for the title), and taught yourself enough of those to get by. You probably threw in a bit of Javascript for simple things and while you were at it, you got a (likely pirated) copy of Adobe Photoshop and taught yourself the basics of design and continued to develop in this "jack-of-all-trades" mindset to become one of the "...people who make websites."

Let me take a quick aside to say there are some truly gifted people out there who do very well in this jack-of-all-trades mindset and deliver great products for their clients. But inevitably they are better in some areas than others; some excel at visual design but their Javascript is mostly copy-paste from various tutorials. Some rely on pre-built platforms like Drupal and it's vast plugin library because they honestly wouldn't know how to build an event management system for the client. The point is: even among the gifted "jacks," there's a level of specialization. The rest of us will have to specialize even more than they do obtain their skill in their focus areas.

Time to Step Up!

If you consider yourself more of a developer than a designer, it's time to step up and become a UISE. It's time to stop copying and pasting Javascript from tutorials; it's time to stop relying on "the backend" guys to create the server side code. It's time to start thinking beyond just the HTML / Javascript sandbox! It's time to stop writing PHP code full of SQL injection vulnerabilities because you don't actually know what a SQL injection attack is. It's time to learn about data structures, algorithms, recursion, object orientation, design patterns, among other topics; each as broad on it's own as the entirety of the world you've lived in within the browser.

Start in Your Comfort Zone

If you consider yourself a web developer, you've got to have at least some experience with Javascript (and if you don't, I assure you, being the world's foremost expert on HTML & CSS with nothing else going for you isn't going to be bankable much longer). Tear into libraries like jQuery and YUI to see what makes them tick; they're all open source so you can see the code for yourself. And they're written by some very smart people who have embraced their nature as software engineers.

Become Language Agnostic

Learn Ruby. Learn Python. Learn C#. Learn *gasp Java. You don't have to like all of them (I personally can't stand writing Java; but I'm quite capable of it) but learning to write in multiple languages not only increases your knowledge of software engineering, but it broadens the scope of the job opportunities available to you. Learn object oriented programming and design patterns. There's nothing special about this advice: continue to grow beyond the confines of where you found your beginnings.

Embrace Your Inner Engineer!

If you've come as far as writing code, and you, like me, are able to accept that you aren't an artist, I encourage you to take the advice I've offered here. In the world of software engineering, you'll find great challenges and wonderful rewards. You'll go from cobbling together bits of code to create a web site to building entire application experiences and you'll become innovative about how those experiences are architected. And most importantly, you'll set yourself for wonderful career growth opportunities when your resume crosses desks like mine and doesn't get tossed to the side as "just another web developer."

* I mean no ill-will towards A List Apart, a fine publication for which I've written; I only use their tagline, "For people who make websites," as an example of how broad the concept of a "Web Developer" truly is.