- Don't add markup just for css if at all possible
- The class and Id attributes are not just for CSS
- If doing TDD allow your tests to drive out the semantic html
- Use libraries like behaviour.js that "bind" javascript
- Make sure your javascript completly fails