The trouble with working for non-technical people is that they can’t see past the varnish on top of the application. I’m not blaming anyone, it’s just that it is sometimes very frustrating.
When you write a program, there is absolutely no way if you are not a specialist to differentiate between difficult and easy parts from the outside. Let’s take a few examples:
Loading/Saving documents. Hard part. You have to design a document structure that will be resilient to updates and contain enough but not too much information about what the user does. True, you can just dump memory if you are in a hurry, but elegant solutions aren’t easy to come up with. And yet everyone thinks it’s easy.
Animating the interface. Kind of easy part. It actually depends on the OS you are working with, but as of today most “eye-candy” animations come at the expense of a few lines of code. By far the easiest way people without morals fool their customers. However…
Creating a graphical interface. Hard part. This is a job by itself. You have to be good at ergonomics, have a good artistic sense, and a very good knowledge of the user’s workflow. We have all seen some pretty crappy user interfaces. I have never been good at GUI design, and I don’t pretend otherwise. When GUI is really important, I ask someone else. Some people out there should do the same.
Managing text with cool fonts, color, and symbols. Easy part. Nowadays, there is no system where you can’t load any font available on the OS, with any color and style. Yes, it looks cool. Yes, the work has already been done in the underlying libraries. It can be hard on fringe usage such as drawing text with effects or following a curved path, but plain old text-in-a-box ain’t that hard. The hard part is managing the box itself and making sure the text flows correctly.
And there are many many many other examples. It’s very hard to get people to understand that something invisible to the naked eye can turn vital in the long run, or that some “very important visual glitch” is just something that will get fixed very quickly once everything falls into place (Yes, there’s a displaying problem. It’s because there’s no real data yet. When we work with real data it’s going to work. Yes, I’m sure. Even if it doesn’t, it’s something that can’t get fixed now. Because we don’t have real data to test it with.).
I know that it can be frustrating for the customer as well, because it’s not as easily understandable as building a house (first the foundations, then the support walls, then the roof, then the other walls, and finally the varnish), but it is the exact same thing. We talk about software architecture, for Pete’s sake. And no one goes to the architect saying “say, don’t you think that brown tiles work better than red ones?” when he’s in the middle of wall-mounting…