Ten commandments for developers

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.


35 responses

  1. Avatar for John

    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?

    John 2 August 2008
  2. Avatar for Steve

    I mostly agree with this list, except:

    1. This is ok provided you're talking dedicated client apps. If you're looking for more of a hub-style system, where perhaps you want lightweight plugins to other apps feeding information to something else (e.g. custom search / archival system), where you don't want every app plugin including lots of fat code, or having to start the separate app every time, it's harder to avoid using a service. By all means give the user the choice between startup launch or launch-on-demand (and allow changes to that after installation), but don't assume the latter is always better.

    2. Put the advanced options in an 'Advanced' button on the options list. Separate onfiguration files I have to find in the filesystem are bad for UI-based apps, unless you also make them easy to get to (like TortoiseSVN's Edit config file button). Separate config files are fine for server-side programs or developer tools where the user is expected to be technically proficient, but if the app has a UI, then I should be able to get to all the settings via that UI. Just because a user is not a tech does not mean they won't need to tweak some settings you think are not mainstream from time to time. But by all means categorise them away from the usual settings list.

    Steve 4 August 2008
  3. Avatar for John

    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.

    John 18 August 2008
  4. Avatar for Cas

    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 ;)

    Cas 18 August 2008
  5. Avatar for Greg

    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.

    Greg 18 August 2008
  6. Avatar for Mark

    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...

    Mark 19 August 2008
  7. Avatar for Calgary Web Design

    Great list, thanks! Somethings more platform dependant than others, but all can be applied no matter what situation your in.

    Calgary Web Design 19 August 2008
  8. Avatar for Michael

    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

    Michael 19 August 2008
  9. Avatar for Damien Guard

    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".

    Damien Guard 19 August 2008
  10. Avatar for Jon Davis

    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:

    1. Leave start-up alone

    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.

    1. Make configurations count

    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:

    1. Allow immediate termination

    .. However, most console apps do this with Control+C and most Windows apps do this with Alt+F4. You probably should have emphasized that these not be be overridden and ignored.

    1. [Do] Not modify existing file associations

    QuickTime, I hate you forever.

    1. [Do] Not ask inappropriate questions

    Welcome to Windows Vista. Some of these are security questions and are only implemented to be "requirements-complete" in generic rules such as crossing potentially risky boundaries ("zones"). What should have happened in those non-destructive scenarios is a little pop-up baloon or tooltip on the side of the window you're working with should have informed you that what you're doing is a potential risk, rather than inturrupt your workflow altogether.

    1. Keep noise to a minimum

    Be glad you're not using Avast!. I have a PC running as a home theater PC (HTPC), hooked up to my surround speakers. Imagine how annoying it is at 3:00 in the morning when the whole house rumbles and I am startled out of bed and finding myself on the floor when my living room blares the robotic text-to-speech announcement, "[BLIIING!!] Virus database has been updated!!" Fortunately I was able to turn that off.

    1. Stay focused on the goal

    2. Make actions obvious and reversible

    3. Avoid restarts

    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.

    1. Adhere to the platform

    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!!

    Jon Davis 21 August 2008
  11. Avatar for Adam Maschek


    "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:)

    Adam Maschek 21 August 2008
  12. Avatar for André Fischer

    @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...

    André Fischer 22 August 2008
  13. Avatar for design

    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.

    design 28 August 2008
  14. Avatar for heeb

    @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!!!

    heeb 28 August 2008
  15. Avatar for heeb

    @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?"

    heeb 28 August 2008
  16. Avatar for DevTopics

    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!


    DevTopics 28 August 2008
  17. Avatar for BlackWasp

    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!

    BlackWasp 28 August 2008
  18. Avatar for MadTypist
    1. Allow immediate termination

    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.

    1. Leave start-up alone

    I'll load what I want loaded when I want it loaded, amen.

    1. Not modify existing file associations

    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.

    1. Not ask inappropriate questions

    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.

    1. Keep noise to a minimum

    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.

    1. Stay focused on the goal

    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.

    1. Make actions obvious and reversible

    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.)

    1. Avoid restarts

    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.

    1. Make configurations count

    Can't be emphasized enough.

    1. Adhere to the platform


    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.

    MadTypist 28 August 2008
  19. Avatar for Jonic

    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..

    Jonic 1 September 2008
  20. Avatar for BelHard

    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.

    BelHard 20 September 2008
  21. Avatar for Seth Morris

    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.

    Seth Morris 13 October 2008
  22. Avatar for Billigflug

    Great list, dude. There is so much developers should aspire to. Unfortunately there are too much chaotic developers.

    Billigflug 16 October 2008
  23. Avatar for Jagad Guru

    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!

    Jagad Guru 27 October 2008
  24. Avatar for Damien Guard

    @Jon Davis:

    1. Allow immediate termination

    Not just of applications, but of actions.

    1. Leave start-up alone

    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.

    Damien Guard 6 November 2008
  25. Avatar for Joseph Smith

    Amen! The updates of updater software seem to be the newest annoyance trend.

    Joseph Smith 2 December 2008
  26. Avatar for Ben

    Adhere to the platform , i hate it when firefox ignores windows settings for language and location.

    Ben 14 January 2009
  27. Avatar for Howard

    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

    Howard 17 September 2009
  28. Avatar for Xavier Morera

    I totally agree with you. The ones I specifically hate are:

    • Windows trying to reboot your computer all the time, or rebooting without asking and losing your files (I know you can deactivate this feature, just that I forget until I lose something meaningful and then hate Windows Vista)
    • Adobe PDF is as blotated as it can be!!!! It sucks, and it has security issues too.
    • Photoshop annoying "allow check for updates that makes vista ask for permission to elevate - I know, deactivate, just that I forget until it hits me)
    • And the king of all annoyances, HP printer software which wants to take over my ENTIRE computer. I just want to print!!!!! A lot of people ask me for help because they can't figure out how to install their hp software. That is because it is soooo god damn hard to install something that wants to take over your entire computer. Let me do a simple printer install, I don't want your suite that controls every little thing my computer does.
    • Same thing with real, bloated software sucks
    Xavier Morera 6 November 2009
  29. Avatar for Darth Continent

    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.

    Darth Continent 2 August 2010
  30. Avatar for Spudd86

    @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)

    Spudd86 26 September 2010
  31. Avatar for plus

    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.

    plus 4 November 2010
  32. Avatar for Brice

    Well, except for no 7, you could have just said: "Be UNIX-y".

    1. Allow immediate termination

    [Check!] Ctrl-C

    1. Leave start-up alone

    [Check!] Yup, there is no startup. Or, you can add stuff as a deamon using a startup script, that has to be activated by the user/admin.

    1. Not modify existing file associations

    [Check!] treat all files as text and compose applications using well built, but limited scope tools.

    1. Not ask inappropriate questions

    [check!] Perhaps even too much so. sudo rm -rf . / anyone?

    1. Keep noise to a minimum

    [check!] nuff said.

    1. Stay focused on the goal

    [check!] Simple programs that do one thing only and one thing well.

    1. Make actions obvious and reversible

    [FAIL] Oh boy, CLI mistakes are not kind to you. Well, at least, you only make a stupid mistake once: next time, you check what you're doing.

    1. Avoid restarts

    [check!] I personally ran a Linux box with Apache for nearly ten month without a single restart.

    1. Make configurations count

    [check!] /etc and ~/.something. Or ~/.config/something if you follow newer guidelines...

    1. Adhere to the platform

    that would mean stdin/stdout/stderr and text processing

    Brice 26 January 2011
  33. Avatar for Melinda Green

    This is not advice for programmers, it is advice for designers and product managers who force us to do this.

    Melinda Green 9 July 2015