Do you create your own User Interfaces?

If you’re creating an application with a user interface, what tools do you use — and when do you use them?

There’s different stages in design — from conception to implementation.

There’s some discussion around a 37signals post a few days ago. The discussion was about how they don’t use Photoshop as part of the design process. I can see it working well for them.

image

Their user interfaces are plain and simple. Not hard to mock up quickly using any basic editors.

Robby suggested that it’s the opposite of his experience (generally). By using Photoshop (or similar)…

I also end up pushing things further (visually or even at the interaction level) because the tool gets me there quicker.

I totally agree — if 37signals had richer designs and user interface requirements, I bet they’d finding themselves using some other tools to create their user interfaces. (and they recently had a job posting advertising the need for a killer designer with virtual free reign … I bet they don’t stick to a syntax highlight text editor …. :) ).

Personally, I use a wide mix of tools — whatever seems right and wouldn’t want to set artificial boundaries.

I try to start out with some sketches on paper or a whiteboard.

The next step depends a lot on the scale and challenges of the specific project. If I really want to concentrate on the user interface and the overall experience, I’ll use a tool like Photoshop or Illustrator. It allows me to make quick changes to the user interface without a lot of fuss (and create lots of different versions). If I have a bit more time, and a prototype implementation would be reasonable, I’ll often break out a development tool and mock it up and experiment. For less important projects, I’ll proceed directly to end game and work on the final user interface directly in the actual project (if I’m able to do that).

There’s definitely no right answer for everyone. It makes sense to use the right tool for the job. However, I’m sure some of my readers work with companies or on jobs where there are rules in place regarding the tools, steps, etc. If you’d care to summarize and share, I’d love to hear them!

What’s the perfect API?

I was skimming a rant by someone on arstechnica about how badly messed up Win32 APIs are and how superior everything else is, when this paragraph grabbed my attention:

The reason must be that no one in Microsoft actually gives a damn. Each group develops their own UI widgets in their own style and they simply don’t care that it’s a total mess. They don’t care that I have to learn new ways of doing the same task just because they couldn’t be bothered to do things the same way as other applications. I’m not saying, for example, that they shouldn’t have introduced the ribbon concept in Office 2007, because it seems to work pretty well, and I can believe that it really is a better UI model. But they should have taken stock of what they were doing and made it a system-wide UI device. New widgets and UI models do crop up from time to time, but they should be rare, and when they do appear, Microsoft should make them general so that everyone can use them.

The article/post contained a lot of conjecture and fact-less information up to that point, and had strayed into the Vista-bashing camp that so many love when that paragraph smacked me. It’s where I went from having very little respect for the author to near zero. I mean seriously — how could you honestly write that no one cares at Microsoft? Not a single person? Right. There are some misguided teams and products at Microsoft from time to time (and some great products that are canceled), and maybe some products that he or I don’t agree with, but come on — there’s plenty of people who want to produce a product that others will use and enjoy (or at least find useful)! Does the author of that article honestly think, Microsoft employees get up in the morning, and think to themselves, I couldn’t care less about my future or any of my customers — I’ll go do the least amount of work I can to get my job done — and produce something barely adequate.

I frequently see someone posting, “I’m joining Microsoft … so that I can not make a difference and not care!”

A few other zingers from the post…

If you develop software for a living, and were to say something to me in an interview like this:

Another example; Win32 has a function for getting the size of a file. File sizes on Windows are limited to 2^64 bytes, and so they need a 64-bit integer to be expressed easily. But the API call to get the size of a file doesn’t give you a 64-bit value. Instead, it gives you a pair of 32-bit values that have to be combined in a particular way. For 32-bit Windows, that’s sort of understandable; 32-bit Windows is, well, 32-bit, so you might not expect to be able to use 64-bit integers. But if you use the same API in 64-bit Windows, it still gives you the pair of numbers, rather than just a nice simple 64-bit number. While this made some kind of sense on 32-bit Windows, it makes no sense at all on 64-bit Windows, since 64-bit Windows can, by definition, use 64-bit numbers.

It shows such an immaturity of what it takes to do long term programming (not just one-off programming for hobbies) and API maintenance that you’d be a “no-hire.” Dude, do you seriously want to conditionalize all of your code just so you can recompile on 64 bit Windows? Do you want a new API just for that? Seriously, what’s the gain?

So clearly, …

So Windows is just a disaster to write programs for. It’s miserable. It’s quite nice if you want to use the same techniques you learned 15 years ago and not bother to change how you do, well, anything, but for anyone else it’s all pain. I thought before that Microsoft cared about people like me. But it doesn’t. And it makes programming on Windows painful. Microsoft is great at backwards compatibility—you can take really old programs and compile and run them on a brand new Windows—but terrible at design and terrible at providing a good experience.

He applauds OSX at some point — coming to the conclusion that the Mac OSX APIs are genius … never mind the fact that Apple had to start over from scratch and every application needed to be rewritten (and the fact that the whole thing was inspired by the NeXT OpenStep). Maybe they are wonderful — I’ve only dabbled (but seriously, Objective C??!?). Microsoft could have done that too — but when you have the market share Microsoft has — can you truly afford to do that? No way. Hundreds of millions of people every day use legacy software on modern Windows operating systems because Microsoft made the difficult choice to keep supporting them.

As the author goes on to say, it causes the internals of Windows to be less than completely desirable as it is forced to maintain a level of compatibility with old APIs and peculiarities of older versions of Windows. Are there people working at Microsoft right now who would love to just start fresh with a clean slate? Abso-freakin-lutely. But, business needs often come first in the world of making money. Microsoft was able to keep existing products running because of the design of their OS and APIs made it possible. Apple couldn’t with OS 9 and earlier when upgrading. When they can completely virtualize a Win32 process seamlessly — then they can start fresh.

Taken alone, these are all fairly minor things. Put together, the interface is just completely shambolic. It looks amateurish. The quirks of each new interface have to be learned anew. This slap-dash approach to look-and-feel gives the impression of a platform that no one really cares about.

The author seems to believe that everyone at Microsoft should just work together and produce products at the same time on the same ship schedules — as every one should contribute the “whole” and produce things that are only good for the masses. They aren’t allowed to innovate on their own or produce something unique or better than another team. “Just stick the widget into the OS … we’ll ship when you’re ready … and we’ll happily adapt to any changes that any other team needs to make.”

If the author had chosen to research and provide facts, better understand the development environments, platform capabilities, and stick to a point, it might have been a mildly interesting read — but alas, he did not. It got my blood boiling …, hence my post. Maybe Microsoft, who couldn’t care less according the author, will nonetheless contact him to get feedback on how to build the perfect API. Clearly it can’t ever have a backwards-compatibility layer or object model … so it just has to be perfect right out the door. :-P

What is the perfect API? For rich or a reach application? Give it a little thought right now. What comes to your mind right away?