In response to 'Apart from programming languages what else to do?', I suggested that it's important to have some knowledge of interface design to work in software development.

Learn interface/interaction design. As programmers, we are notoriously bad at this and we always give the same old excuse,..."that's a designers job". I can count on one hand the number of development houses I'm aware of that hire a designer to do the front end work.

With emerging technologies allowing us to create better and more usable interfaces this is one of the biggest gaps in our knowledge as a body of professionals and something we should be actively trying to improve.

Now, I came to be a developer through graphic deign, in to web design, then web development and finally LOB desktop development. So my background in design may have made me biased but I wanted to gauge opinion on this.

In my opinion, getting the user interface right is at least as important as getting the code right and having little or no knowledge in this area is no longer acceptable for a proactive developer. Do you agree?

Update- To those who say it's okay because you might never work with the UI or very rarely, let me ask this: If I never have a need to work with databases, does that make it okay to have no understanding of them? All I'm saying is that we don't seems to value UI design as a skill in our line of work. Maybe that's because it's no so technical and there are no hard-and-fast answers.

14 accepted

IMO being aware that you are incompetent is the safest bet - I'd rather have one who says "I won't do that, I suck at this", than someone who says "sure, that's easy" even though he/she might have no actual competence in it.

The best would be to exactly know your own limits, but that's hard.


I do not agree. If what you are developing does not have a UI, you don't need to have ANY knowledge of interface design.


A good developer may not be particularly good with User Interfaces because it requires empathy on the part of the developer. Producing logical bug free code, which passes unit tests, does not require empathy.

I'd therefore conclude that it is acceptable that a developer does not have knowledge of interface design, but I would consider it a disadvantage if I was hiring, because such a developer maybe able to solve problems but might not be too great at discovering what the problems for the users actually are.


First: "UI Design" is a very broad term that encompasses a wide range of knowledge, from information design, to graphic design, to workflow theory, to psychology, and so on. It also requires a bit of aesthetic talent, and a lot of the same cognitive strengths "pure programmers" rely on. Another talent a good designer has is the ability to communicate ideas effectively to their target audience - be that a consumer demographic, or a few programmers who don't (and maybe don't care to) understand the importance of good UI/UX.

To the "my job is to make it work; your job is to make it pretty" argument: My take on it is that we write software because, at some point, in some way, it makes humans more productive than if that software did not exist. So the more productive you can make a user's experience with the software, the better a software developer you are. If your program's interface is so difficult to use that the user is less productive than they would be without it, then your program - or at least the user interface component of it - is broken.

I came up in graphic design as well. As the in-house UI designer/UX designer for our development team, I have to say that there is only so much value in a developer who "knows a little something about UI design". I think our "real programmers" would same the same about a designer who "knows a little something about code".

I think it depends a lot on the scope of your tasks. If you're a non-specialist and have a specialist on staff, then by all means, allow them to do what they do - because they likely do it better than you, if for no other reason than that they do it more than you do. That's not rocket science.

I "know a little something" about database design, but I'm fortunate to have a good full-time database designer on staff. If a project got so strapped for resources that they had to schedule my time to design a database, then I'd do the best I could. But in large part, that work goes to the guy who knows it best.

So, it's okay that I don't have much knowledge of DB design, and it's okay that I have some. By the same token, it can't hurt for a developer to know something about "UI design", but if the team has a UI/UX designer, it's probably not an issue.


Replying to the question in the title, my answer is "no". However I'm sure you mean "user interface design" instead of just "interface design", in which case knowledge is not always necessary.

In other words: You always need to think about how your software can used as well as possible. If your software happens to be used by people directly, this means a good user interface. If it's a programming library, this means a clear API.


I feel like your question is loaded - heavily. To reply to your direct question and to your analogy about databases, If you don't directly work with a particular aspect of technology the answer is and always will be "you only need to know the bare minim to interface with that technology".

As far as UI is concerned, if I'm a backend developer, all I need to know is how to get the data from the UI. From there on I can do my work. For a database the same is true - all you need to know about databases is how to get the data out - how to interface with it.

The way you worded your question with your analogy does tell me you have at least a slightly (if not heavily) biased opinion. The can of worms I think you are actually opening is "wouldn't it be nice if all developers knew everything". To that question I agree it would be nice, but it will never happen.

The most you can ever expect is that people know how to [correctly] interface with the other technologies.


Maybe for the most junior programmers, who really have no input to the overall architecture or design of an application. But for more senior folks I think it's reasonable to assume they'll be at least somewhat fluent in interface design and user interaction.


To illustrate a point: When I saw "developers" and "interface design" in the same sentence, I was immediately thinking code design patterns, and nothing at all about end user graphical interfaces.

So it seems you are, as you point out, biased in this, and we all are, and that's not really a problem. But it is a problem as soon as you start thinking every developer ought to be at least a little bit biased in your general direction ;)

And to answer your follow-up question: If you know for sure that you'll never have to work with a database, then yes, I'd say it's perfectly acceptable for you to not know anything about databases. Quite conceivably, every single minute you've spent learning about databases, could've been spent improving something you'll actualy be able to use in your daily work =)


I agree if your job is to produce user interfaces. Otherwise, remaining ignorant of UI design is OK.


It depends on the programmer's niche. An applications programmer whose niche is more on the business end than the technical end needs to know interface design. Even if they never actually design an interface, some of their design decisions might leak out into the UI by making certain UI features easier or harder to implement.

For more hardcore programmers, systems programmers and those whose niche is more in the technical end, it's much more important to be good at API design. Rather than designing a product for end users, they should be able to design a clean, easy to understand API to be used by more application/business-oriented programmers.


Almost all the code I've written for pay in the past 20 years has been server-based. There is no user interface for this type of code.


I completely agree.

A program can function well but without a good UI design it wont help anybody. Moreover, developers sometimes tend to write programs as if they are going to be used by other programmers and not non-technical end-users. I feel that dealing with UI issues helps developers understand the end-user need and experience and thus write a better program. We are programming for other people and we need to take that into account.

EDIT: Of course I'm only referring to applications that are UI based, not code libraries and such :)

EDIT 2: Bryan, you are right, which is why I added the EDIT. When I was writing code libraries there was little need to understand UI, but now that I'm programming a UI based application, I see the importance of such understanding. I have many discussions with the guy writing the server side, about how even if a certain functionality makes a lot of sense programming wise, it will make no sense to the usability of the product.

However, I think that understanding more about UI usability is the same as understanding what writing readable code means, we are still writing to other people.


Yes. Because not all developers ever have to produce something that has a user interface.


All depends on what you are developing. I spend most of my time in middleware, service design etc. I usually have the luxury of working with someone with UI development skills. Sometimes you really do need to specialise.


Yes it is very acceptable. People have different strengths, and if you want to put together a team that produces software better than your competition than you need to hire people that excel in different parts of a problem you are trying to solve.

So yes, using the MVC patter its perfectly acceptable for developers to excel at the model and controller :D.

In general I think Its better for a program to have a kick-ass MC than a V, its far easier to rip the V out and replace it than rewriting the MC.

Although in closing I must mention that any MC should be designed with the understanding as to how a View implementor is going to want to use the MC. So a good programmer will have to understand the access requirements of a V programmer.


UI design knowledge is very important atleast basic knowledge.Extensive UI Design knowledge also requires a taste for ART, something that comes naturally and cannot be learnt by hard work.


Acceptable to whom?

From the perspective of an employer, if they want to put you on a project where you don't deal directly with any kind of UI, then they wouldn't really care how much you did or didn't know about it.

From the perspective of yourself and your career, there is a high chance you will deal with this stuff sooner or later, so I think it's a good idea to learn at least the basics.


From a programmers point of view, frontend and backend have lots of things in common. You always deal with users, users of your API or users of your HMI. And in either case, it is important, that your user gets: - a well structured, consistent set of functionalities, he can use - clear feedback from his actions - consistent protocols Using formal methods for UI design for quite a time, my experience was, that use cases (brought to you by product managers), which were difficult to formalize (e.g. in State Charts or unsing a formal grammar) were, when implemented, difficult to understand for the end user too. And using a poorly designed API is frustrating in the same was, as using a poor designed user interface; you feel lost and insecure. So I think, understanding the needs of users will be beneficial, no matter if those users are end-users or programmers.


As a database developer, I technically don't need to understand user interfaces, but understanding how people use the data and how they expect to be able to interact with it dramatically improves my ability design an effective database. Sure I don't have to care particularly about the "how to make it pretty" parts, but I should understand human factors engineering, so I understand how people can best relate to the data.

If I were an application developer, I would probably need at a least a basic understanding of how to make it pretty (or at least not obnoxious) because not that many places do hire Graphic artists to design the UI. If we want our products to be successful, they need to address the concerns of the users of the products and how it looks and how easy it is to maneuver arouns inthe application and what order the data display in or is entered in are strong factors in how users see the product. They don't care what fancy tools we used underneath the hood, but they do care if the data entry forms are laid out badly or if the screen is hard to read or a bunch of other user interface issues.


In my opinion, the flash is as important as the code working, and shouldn't release code without both being there. There are too many OSS projects that look like ass and work just as poorly, making one not want to use it.

That being said, in the enterprise dev environment I work in we have people to do this for me, so knowing about interface design is less important and is very frustrating because I don't often agree with the design decisions they make, and being a "developer" have little power to change.


It is acceptable, but quite rare? You don't have to be good, but at least a command line or basic inputbox+button can be nicely produced by a programmer?