
Relationship between simple logical specifications & intuitive user interfaces (they don't coincide often do they?) - amichail

======
acmegeek
I think that initially, it is hard to develop both clean code and good UI
simultaneously. At least in my experience, in developing a hybrid CMS/shopping
framework from scratch, I had no specs to start from, so it was a fairly
intense iterative process.

I would start with some functionality, ugly as it may be and then switch over
to work on the code for a while. I would then look for common code areas and
try to come up with functions or classes that were as general as possible.
Some might say I'm too picky about leaving things to generalized, but even
though my codebase is 90% procedural, I and others have little problems,
debugging and/or adding functionality.

I also took great care to generalize as much of the UI as possible. Even
though there aren't too many objects in play, sweeping presentation changes in
both layout and style are fairly easy.

I guess, to answer your question, an intuitive user interface takes time, as
does clean reusable code. A programmer who is disciplined to see the value in
both would most likely be able to start a new project with both in place.
Unless you have done it before, it will take time and you will mostly likely
fall towards one side.

I have done most of my coding solo, but I suspect that in a team, the most
important keys to success, aside from technical excellence, would be clear
communication and a well-defined goal.

Really short answer, you can have both, but you need relevant experience, good
communication, a clear goal, and the ever elusive time.

~~~
amichail
The point I am making does not concern the ability of the developer to write
clean code.

Rather, I am asking whether it is even possible in principle to have a clean
spec that corresponds to an intuitive UI.

~~~
acmegeek
Gotcha... missed that.

I would still say that only with lots of relevant experience could a project
manager or whomever spec it cleanly and intuitively.

So in theory, it think it is possible, but not at all easy. It would take a
lot more time than "normal".

I wonder if that much forethought might save more time than would be otherwise
spent on development and testing?

Kind of like the adage of "cut twice, measure once".

------
amichail
For example, an intuitive WYSIWYG word processor is probably full of ugly and
unnecessary special cases in the spec. Intuitive user experiences are often
not the most simple and logical ones.

I guess part of the reason for this is that you need to preserve backwards
compatibility with the user's previous experiences. And this includes some
ugliness from early software.

But there's probably also a limit in terms of what average users can
understand in terms of what's logical, consistent, and simple.

