Ten commandments for developers
- 📅
- 📝 1,087 words
- 🕙 5 minutes
- 📦 Development
- 💬 35 responses
In order that applications and operating systems shall not drive users insane, thou shall:
1. Allow immediate termination
I hit the wrong button. I changed my mind. I didn’t know it would take this long.
Either way, the operation needs a cancel button that causes immediate effect and quickly clean up what it can.
If it was copying or uploading a file, delete what was done. For database operations, rollback the transaction. Formatting a disk leave it half formatted and un-format the first sector but do it FAST.
If you think the consequences are too great, ask what effect forceful termination or switching off the power is going to be like in comparison.
2. Leave start-up alone
I’ll do that right now; just let me log in… Zzz… Sorry. It should be done in a minute. Sigh.
Your app might be the centre of your world developing day and night — it’s not the centre of mine.
I might use it for several hours a day if you’re lucky. That doesn’t mean I want it starting automatically unasked.
It also doesn’t mean you can install services, background tasks or other junk that prevents me from doing what I need when I’m in a hurry and running with a low battery.
If you need to check for updates, do it silently in the background when I launch the app or add something to the Windows scheduler. Don’t create an entire service.
3. Not modify existing file associations
I tried that last time, and it screwed up my associations. I’m not going to try the new version no matter what.
I might want all video files to go through your app. I might not.
Let me make that choice and reverse it. If I uninstall your program, reverse it automatically and clean up the registry.
Associating every media file on my system with your app isn’t going to wow me. It isn’t going to make the sale or make me believe my system can’t live without your software.
There may be incompatibilities. Features you don’t support or perhaps a clunky UI, and I’ll uninstall your app to go back to my old favourite.
When all my associations break, you can’t bet I won’t be coming back to see what you’ve done in version 2.
4. Not ask inappropriate questions
Do you want to move or copy files from this zone? Yes or No.
Zone? What? Err, copy please. What do you mean, Yes or No?
I just performed a non-destructive operation, and you want me to confirm it?
Do you want to remember your password?
An insanely stupid question that appears after a login box doesn’t have a password stored, either because:
- I don’t use the feature but can’t switch it off (never ask me again)
- I’m not on my own computer (shut up for 30 minutes)
- I have a new machine and haven’t typed it for months (ask me in 10 seconds when I find out if it’s right)
You rarely get useful options, but at least Firefox 3 realizes it should ask quietly at the top of the page after you can see if it worked.
5. Keep noise to a minimum
Windows has installed updates! AVG Anti-Virus updated successfully.
Business-as-normal — I DON’T CARE.
If there is a problem updating, let me know — unless it’s something simple that goes away without my involvement in a day or so.
People don’t call or message me day in and out to tell me nothing, neither should my computer.
This also goes for audio notification of trivial activities.
Don’t annoy people in their offices and homes with stupid noises just because somebody on the other side of the world has logged in.
6. Stay focused on the goal
The instant messaging crown was taken from ICQ because they overloaded the client with games and junk. People wanted simple messaging, but by the time they figured this out and delivered ICQ Lite, it was too late.
REAL repeated the same blunder where a good video player expanded to consume all available files, starting messaging me and breaking every commandment there is.
Adobe believes Acrobat should be more than a quick PDF viewer for physical page reproduction. They built a piggyback mechanism for a whole document management system. People don’t want their web browser locking up for 20 seconds while they load plug-in’s they’ll never use.
7. Make actions obvious and reversible
I don’t want a dialogue box with some sob story about why your app can’t do what I just asked or three paragraphs of text I have to scan for negatives, digest and mentally figure out what Yes and No will actually do.
Even worse is prompting a slightly different message with the same Yes and No options sending the user to the button they normally hit for a totally different message with potentially disastrous results.
If Yes is doing to delete the file label the button Delete. Dialogs in OS X do this, and you can answer them lightning fast with accurate results.
Better yet, just do it, put some text in the status bar, update the UI and learn how to write an undo mechanism.
8. Avoid restarts
If your application absolutely has to install a service, start it yourself.
If common files you are installing might be in use, check them or, better yet, put them in your own application folder.
9. Make configurations count
Adding options to your application is a choice to a certain point. Beyond that, it causes people to be unable to find the option they are looking for, becoming bewildered at the choices available before quickly heading to the close button instead.
If you absolutely must have extra options that only a small percentage of the population care about, just store them in the configuration system and forget about giving it presence on the user interface.
10. Adhere to the platform
Read user interface guidelines and only deviate when you know better than the expert team behind them. If you have to explain it, then you didn’t know better after all.
If the operating system has conventions for files, configuration and help, use them. Don’t claim that being the same across platforms is more important — people who use more than one platform know and expect them to be different already.
If you want to use an update, notification, or other commodity services, find what is already popular and a good fit and use that, don’t develop something different.
[)amien
35 responses to Ten commandments for developers
This is not advice for programmers, it is advice for designers and product managers who force us to do this.
Well, except for no 7, you could have just said: “Be UNIX-y”.
sudo rm -rf . /
anyone?/etc
and~/.something
. Or~/.config/something
if you follow newer guidelines…Usability design is what we are grasping for here. I like how typing comments show up immediately, was this custom?
Jeff Johnson’s book GUI Bloopers documented many of these by the way.
@André What has that got to do with OSS? Look at the direction GNOME is moving in…
Also you’re right that creating software that doesn’t require six million configuration options is up to the developer, however it is also a good idea to have a set of “advanced” options somewhere (like firefox’s about:config) so that people who DO know stuff about what the software is doing can change things. (Personally I think some GNOME software has too few options, eg Totem, there’s lots of things you can’t change about how it works that I’d really like to change, particularly some stuff to do with audio downmixing/level compression for DVDs, so I use smplayer or VLC), yes trying to make your software just work is the best goal, sometimes it doesn’t, and having an “advanced” tab buried somewhere is a good idea.
I think the goal should be just work as much as possible, but don’t hide everything completely, make the settings that lots of people might want to change accessible and easy to find, and put the arcane stuff somewhere else, with a label that says “This is arcane stuff you shouldn’t need to mess with”.
@MadTypist Mozilla has moved to keeping pretty much everything in SQLite so something is REALLY broken if you loose bookmarks to a restart (probably your OS or the filesystem you’re using… you aren’t using FAT are you?)
(yes I know those comments are 2 years old)
Great list! To add to it, how about apps that are ignorant of multi-monitor desktops? It can be REALLY unfun when you start an app while undocked from your normal multi-monitor setup and have to hit ALT then pick Move then hold an arrow key one way or the other until the app window creeps over from beyond the desktop.
I totally agree with you. The ones I specifically hate are:
Re (1)
a. Take Visual Studio (any version). b. Load a reallllly big solution (anything like 100k lines of code etc.) c. Use the rename feature on the name of a parameter of a public function d. Watch your VS freeze for several minutes e. Marvel at how the cancel button is completely pointless
Adhere to the platform , i hate it when firefox ignores windows settings for language and location.
Amen! The updates of updater software seem to be the newest annoyance trend.
@Jon Davis:
Not just of applications, but of actions.
When a PC is starting up who knows what the user wants to do. They might be in a hurry, with a low battery. Loading up isn’t a little overhead, it’s a lot when 5–6 of them are grinding this disk to load their files etc. whilst the OS is doing the same. Auto-updates should check silently in background on app launch or use the windows scheduler. They should absolutely not have a background task running.
Nice list. My number one is — don’t install crap I didn’t ask for and don’t try to trick me into it. Thinking of the Java install where clicking Next, Next, Next starts adding bits of OpenOffice to your system. And no, if I wanted to install the Google toolbar, I would go to google and install it!
Great list, dude. There is so much developers should aspire to. Unfortunately there are too much chaotic developers.
Regarding “inappropriate questions,” I agree with the principle, but the example is not great. “Do you want to more or copy files from this zone” appears in a potentially destructive case; it’s the prompt that sucks. I see this prompt when copying images to the hard drive, an operation that does save data from the internet onto my machine and could be dangerous in some cases. The prompt should warn me that it’s allowing drag-and-drop of internet data without future warnings this session.
Also, I assume the commenter’s complaint about no HIG for Windows was a joke. The Windows design guidelines have been freely available (and updated for new UI habits) since at least Windows 3.1. It’s people who decide that Windows users need to be “upgraded” to Gnome or Mac or OpenWin UI (or the other way--using Mainsoft and seeing Windows UI on an OpenWin Sun was as unpleasant to those users as the OpenWin widgets on Windows were to me) or designers who make up their own UI just because they want to who hurt users.
Thanks for such deep analysis. And it seems I’ve never seen so many comments for a professional post. I’ve sent the link to the intranet site of my company. Hope our project managers will pay attention.
Another one that falls under the “keep noise to a minimum” category: Splash screens..
F**k. Right. Off.. I know what the program is called.. I started it up..
I especially don’t want to see anything from programs that I asked to start with the OS.. I don’t want to see or hear a thing until I actually request that a program shows its face..
There is additional commentary on Reddit
Virtualdub has an abort button, few others have anyway to interrupt what we as mere users should know better than to fuss with. I just love the way most software keeps so many files open all the time so if anything happens you get to corrupt everything at the same time. Mozilla’s bookmarks when you install something that restarts your system without warning.
I’ll load what I want loaded when I want it loaded, amen.
I hate quicktime, real anything, WMP any version, newer Winamp Etc, there are so many that I just don’t know where to start. Oh yeah, stuffit, it breaks ALL archive associations(even cab on windows), if it wasn’t for Winrar’s useful configuration space it would have taken me hours to fix what it broke with warning or documentation.
One of the many reasons that vista is evil, I also don’t like windows romper room, I out grew that show a LONG time ago.
AVG Anti-Virus updated successfully. — At least it has a timeout. Most things don’t, there are so many there no point in listing them just the exception.
If you want to the new center of my universe, write your own OS or roll a custom linux around your software, it’s less annoying.
Ctrl-Z is your friend, or what ever the equivalent is for your system. WP6-DOS has this so it can’t be to hard. (Adobe has this down good to.)
If you have to restart after install before running then get better software, AV and Firewall can be forgiven for a restart, but not a ^%$*^ word processor(msoffice) for gosh sakes. Shame on all of you lazy bums who can’t be bothered to learn proper programming. By the way that includes those who drop a few dozen or hundred files in winroot. Uninstall should be just delete your directory, leave my user profile alone.
Can’t be emphasized enough.
Amen.
My own 11.) — Don’t scatter files in twenty or more places around the drive, it’s your install directory, use it. Detect the user profile and run with it, the more things have to be mapped by the OS from the profile the more unstable and cpu intensive it is and the more things there are to go wrong.
My own 12.) — K.I.S.S. — If you need this interpreted then go back to school or ask someone with a brain.
Nice list. My number one is — don’t install crap I didn’t ask for and don’t try to trick me into it. Thinking of the Java install where clicking Next, Next, Next starts adding bits of OpenOffice to your system. And no, if I wanted to install the Google toolbar, I would go to google and install it!
Great list, I added yours to my collection of “10 Commandments for Programmers” list. I would have to say that yours is probably the best of the bunch!
http://www.devtopics.com/10-commandments-for-programmers
@Michael again: “…Don’t like the application? Make your own”
What I forgot to say: not everybody was born to be a programmer. There are way more people out there who have no trouble using a computer, yet far less who have the ability to ever write any software…
Nope, the responsibility to write great apps with great (G)UIs lies with the programmers, not the users.
Maybe Commandment #11 should be: “Learn to think like a user.” Forget programming for a while. What would the user do? How would the user perceive this? Would my child/spouse/neighbour/friend understand and be able to use my program, and to their satisfaction?”
@Michael: “But unfortunately I don’t agree with most of your article, as a developer myself and a regular application installer. Its up to you, the computer user to make sure it’s what you want, not for the developer to fill all your needs and wants. Don’t like the application? Make your own”
What a load of rubbish: I work in an organisation where we all have to work with Win XP Pro, with some 3rd party (MS Office) and some inhouse apps installed. We all have limited accounts, do not have any development tools, and are not allowed to install anything. How on earth am I supposed to “make my own” app?!?
So it’s obvious that you are a developer and installer and not a regular user… I can’t, however, imagine you being a good developer: you obviously have no idea, nor do you seem to be interested to know, how regular users are sometimes forced to work. Did you ever use what you wrote (under a limited user account)?
@Damien: Great list!!!
Rules 1 and 2 are probably the most broken of the commandments and the things that annoy me the most. Rule 6 is also commonly broken and annoying. At least here, I can usually find light-weight alternatives.
@Michael: “Its up to you, the computer user to make sure it’s what you want, not for the developer to fill all your needs and wants. Don’t like the application? Make your own”
Spoken like a true OSS fanatic who couldn’t care less about the user’s experience.
Personally, I believe it’s up to the developer not to overload the software with so much cruft that then requires an insane number of options in the GUI. If options really are needed, and they become non-obvious, or rarely used, then yes, stick them into a separate “Advanced” tab, but otherwise, think first whether or not the feature that requires that option is even necessary.
As for the article itself — well said. I mostly agree, except for the start-up thing: some things do make more sense when installed as a service. If so, I prefer the ones that then provide a control panel extension to manage settings for the service. I hate the fact that I am basically forced into loading 18 things into the stupid tray just in order to have anti-virus, printing, phone synchronisation and messaging up and running.
And those applications that think they’re doing me a favour by loading a couple of hundred megabytes of crap at start-up “to make my life easier later on”: what if today I don’t want to use your app? What’s wrong with making your humongous, feature-bloated monstrosity modular enough that its core can load fast when I tell it to, and then load in features as needed, i.e. when I request them? Gigabytes of RAM in today’s systems created a whole generation of really lazy programmers…
Follow HIG guidelines.
Yes, I know none exist for Windows, so grab ideas from Gnome (http://library.gnome.org/devel/hig-book/stable/) or Apple (http://developer.apple.com/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/chapter_1_section_1.html) ones.
@Michael
“Its up to you, the computer user to make sure it’s what you want, not for the developer to fill all your needs and wants. Don’t like the application? Make your own”
This is plain wrong. Its up to the developer to give me good defaults and flexible enough settings. If a program wants to reboot before working, how the hell should a normal user prevent it? Write my own? Thank you, actually that is happening with the aforementioned ICQ, Real and Acrobat Reader, but there are mightier people doing that than me:)
Sorry, I don’t think I agree with all of your ten commandments list. Clearly, you have a lot of animosity towards software that gets in your way. But it is not the normal PC user’s set of frustrations. And in some cases, your suggestions are incorrect.
What I disagreed with:
Sorry, but there are isuses I have with your reasoning on this. 1) Most background tasks are time-consuming or require constant availability, but are (or should be) very low priority. Examples of these are IM clients, anti-virus, indexing services, and auto-updaters. To just load up and sleep takes up little overhead. 2) Background tasks installed as services don’t take up much if any more overhead than anything else; there is very slight overhead with it but if you have modern hardware (built within the last two or three years) and adequate memory then they usually shouldn’t affect you much. The important thing to note is that STARTUP ITEMS INSTALLED AS SERVICES ARE EASY TO CONTROL by, for example, making them “Manual” instead of “Automatic”. I would prefer that all system-related or utility-related startup iems be installed as services. Most of the things that slow start-up down significantly are entertainment and communication apps that run in the system tray; these are start-up in nature so setting up as start-up is essential, but are installed and configured by the user; most of these apps have an “Auto-start when Windows starts” option in their preferences dialogue.
In almost all cases, the user can configure the startup behavior of most anything.
What you should be asking for is that startup items are only set up as such if appropriate and only on the prompting of the user during installation, and that all startup items are easy to administer. Rather than argue “don’t run at startup”, you should argue, “Don’t run at startup unless it’s directly essential to what it is you do.” Logitech telling us “Logitech is going to check for updates” is not an example of this.
I didn’t disagree with your premise but with your story and resolution. Many software companies take a lot of pride in trimming down the configuration options to just a sane handful, but my issue with them is that, in so doing, they’ve thrown out configuration options! What should be done to “make configurations count” is, in the GUIs, non-essential options should be tucked away in an alternate interface, such as an Advanced button that opens a more detailed window that has multiple levels of depth.
What I agreed with:
This is old. Still rings true, but it’s something we all know, after a decade or two of hell with Windows 3.x, 9x, NT, and 2000 being so crappy in this regard. A lot of this is system-related; earlier builds of Windows sucked, they required restarts for most actions. But times have changed. Anti-virus software to be shamed, though, it all stinks in this matter.
GRIN I still remember the first time I installed Microsoft Office on an Apple Mac back in 1997. I’d mostly used the Mac, but I used Windows enough to know what was going on when it was installing a gajillion files that were totally out of place on the Mac: Microsoft was installing the COM subsystem and VBA runtime. More power to ’em, I guess, COM was Microsoft’s bread and butter at the time, but .. dang!!
I don’t agree it’s up to the user to decide — how many applications warn you in advance they are going to install a bunch of start-up stuff and notifications? None.
The fact is even for tools I use regularly I still don’t want them getting in the way. I mean I use iTunes now and then but I don’t want it checking for iPod’s attached, running Apple Software Update in background all the time and installing a bunch of background “helpers”.
As I was reading your list, i happened to disagree with some of your choices in this list.
For example, the startup/services, and the notifications.
Sure, some applications install non needed crap, (The old WinZip quick pick, anyone?) but in a lot its neccessary.
Point 6 and 8 are spot on though.
But unfortunately I don’t agree with most of your article, as a developer myself and a regular application installer. Its up to you, the computer user to make sure it’s what you want, not for the developer to fill all your needs and wants. Don’t like the application? Make your own
Great list, thanks! Somethings more platform dependant than others, but all can be applied no matter what situation your in.
Every one of these points are great, and annoyed me greatly at some point in time. It’s nice that you’ve pointed them all out so I can use them as a sort of checklist next time I write an app…
This a great post, Thanks!
Regarding #6:
In the old DOS days when every bit of resources counted, WordPerfect opened very fast. This was accomplished by only loading a very small subset of functionality into ram. As the user required some feature, it was then loaded into ram. When the user reopened the program only the base functionality and recently used features were loaded.
Wouldn’t it be wonderful if modern programs worked like that. Think about how long it takes for Acrobat, PhotoShop, the Gimp and OpenOffice.org to open as they load every conceivable function and extension.
Great post, totally agree with every issue.
@John: You are probably referring to the Novell PrinterTask Management Tool. A long pronounciation for a rather simple thing: displaying which printing tasks are currently initiated by you.
The reason you get this popup, is because it also gives you the tasknumber of the documents you wanted to be printed out. On schools etc, this tasknumber is needed to print out the documents; a student walks to a printing-machine, types in the tasknumber, pays with his/her paycard and voilá, the documents come rolling out.
Maybe this is not the case with your school (your school doesn’t use a paycard/taskprinter-system), but it is for most schools, so your admin probably left it on by default, which of course, is not really smart of him/her either.
Hope I didn’t make it harder to understand for you now ;)
I couldn’t agree more on the noise issue. My pet hate is the printer driver on our systems at school which produces a pop up saying “Job was sent to printer” each time you print something. How insane does the driver writer have to be to think that’s sensible?
To make matters worse, the system admin has disabled all configuration options so I don’t even know whether there is a way to turn it off. You can’t configure anything.
I mostly agree with this list, except:
Excellent Post — I’ve always thought these things but never stuck them in a list. I particularly hate the startup things. You’re right, it seems every major software developer thinks their app is the only one our computers run so why not install 5 different services and set them to automatically start.
Oh, and while I’m at it — have your software crash if the service isn’t running, rather than automatically start AND stop the service as needed. That’s a good idea, no?