This is from my friend Cale Peeples. It's been passed around via email, so I decided to publish it. Looks like Cale did too. I've added to the list on the bottom. I didn't want to spoil Cale's prose.
- If you choose your technology before your application you'll need to re-invent some wheels.
- If you decide how your application will look before you decide what it will do you're not building an application for users.
- You need Personas, Workflows and Use-Cases.
- Don't let your engineering team define the features.
- Framework and Feature set can be different.
- Hire a real project manager.
- When real users can't be found, talk to Professional Services or Sales. Not marketing or Engineering.
- Nobody thinks like users - except users.
- Extra clicks aren't bad if the path is helpful.
- Wizards are good once - make sure you build a tool that can use them and turn them off.
- People like MS Office, and it works.
- Write proper contextual error messages.
- Build multiple messaging systems.
- Sometimes webapps need a training system.
- AJAX won't save you.
- AJAX won't scale.
- Hire a proper DBA.
- Fully addressable apps are better than not. (Multiple access points)
- Make sure you have someone on your team that knows about session management.
- Single Sign-on.
- If your search is broken, fix that first. Then your filtering. Then your navigation.
- Data grids are a pain in the ass. Everyone wants one and none of the pre-built ones are any good.
- Nobody wants to Drag-and-fucking-Drop except for sales guys.
- Spend as much time as you can with the team that is building you app - they will make it or break it
- Group consensus will kill you and the project.
- If anyone tells you they need an icon for something and they can't tell you what that something is - punch them in the eye.
- Feature creep will happen - this is why you need to have a good relationship with the people building your app. (see #24)
- Don't ignore your Log-in page, error pages, 404's or anything else.
- If your app takes more then 2 seconds to do something and you can't make it faster, you need to add a status message, bar, throbber etc.
- Separate From from Function in the beginning and you can work on them in parallel the whole time.
- Keyboard controls are sweet as.
- Users will want to print complex pages - let them and provide them with the right tools to do so. (I like pdfs)
- If you're going to let your users customize you app, you have to provide support to them.
- Inline help is awesome, but if you can't support it fully you're better off not having it.
- Images will need to be localized - make sure your designers have done this before. You do not want to make a "submit" button for every language.
- German has some very very long words and will ruin your carefully constructed layout.
- Vertical scrolling isn't bad - Horizontal scrolling looks like a mistake. Always.
- Your app should use the same language and abbreviations as your users.
- Business logic doesn't always make sense, but it's what your users are accustomed too.
- Don't put the "United States" at the bottom of the damn drop down list just to keep it in alphabetical order if 95% of your users will select it.
- Auto format my telephone numbers, dates and zip/province codes for me. I don't care what the database looks like.
- Metadata.
- Prototype everything you can every-time you can.
- Internal surveys will tell you nothing.
- Jacob Nielsen and the "Tog" are tools but they are occasionally correct. Although frankly, they've done more harm than good.
- The Five Hat Racks will save your ass. (Category, Time, Location, Alphabet and Continuum)
- If you can't draw it on the whiteboard then write it down. If you can't do either you're a manager not a do-er.
- You need to have a multiple phase and release plan.
- Testing in the real world is time consuming, expensive and frustrating, but ignore it at your own risk. If you're committed to doing it, hire a professional.
- Agile development is cool but it runs the risk of becoming too focused too fast and losing sight of the larger picture.
- Don't read lists. Write your own.
Here are my additions...
- Focus on one thing; the right thing, then kick that one thing's ass
- Design for the worst case scenario. This means do everything possible to break the design, then design around that.
- Bucket tests are great when you're trying to improve a feature, but for gods sake, know what you're trying to get out of it
- Take risks
- When in doubt, WWFD (What Would Flickr Do?) except when it comes to drop down navigation
- Usabilty tests can scare the shit out of you, do them early and often
- Test it on anyone you can find... even one person is better than nothing
- Not every bug is a P1
- User experience first, monetization second
- Work with as small a team as you can possibly get away with
- Don't sleep under your desk, nothing is worth not having a life


