Far better it is to dare mighty things, to win glorious triumphs, even though checkered by failure, than to take rank with those poor spirits who neither enjoy much nor suffer much, because they live in the gray twillight that knows neither victory nor defeat.
Theodore Roosevelt
I'd define 'design' as the process of developing an optimal solution within the bounds of a set of fixed constraints. A good designer is familiar with these constraints, and is able to produce impressive work within their bounds.
Most of the problems I see with existing websites are because the developers worked in ignorance (sometimes willful) of the natural constraints of web design.
This article touches on these constraints, but will barely mention visual design, except as it relates to the main topic. A lot of visual appeal is a matter of fashion or opinion anyway — I can explain my tastes to you, but if you don't like raw eggs in your milkshakes, you don't like raw eggs in your milkshakes (try it at least once though: eggs add body, to the flavour).
Moving stuff around is an expensive business (ask anybody who owns a car). It's also often very slow. The longer you make visitors to your website wait for something, the more of them you will chase off with boredom. This is a really obvious point, but we still see websites that average hundereds of kilobytes per page. Remember, almost everyone will have a slower connection than you do, and don't forget to run a speed test.
Much time and money is spent developing and maintaining web sites. At their best they deliver information and entertainment to very many people. Given this, it is surprising that anybody should spend time building a web site that can't even be seen by a significant proportion of visitors — unless they have a certain browser, a certain plug-in, or run a browser at a certain resolution.
Your site should work on any moderately modern browser, not just the one you are currently using. Furthermore, your site should work on the browsers of the future as well. The best way to acheive this goal is to stick to the Internet Standards we'll talk about in the next section. Check your site with HTML and CSS validators.
By all means use Java, Flash, and other Multimedia content, but when you do, it should always degrade gracefully. That is, the site should be still be completely useable if a visitor's browser does not support these technologies, or if they have been turned off (prehaps for security reasons). This does not mean just having a 'text only' version of the website. You can, and should, develop a site that doesn't make anybody feel like a second class citizen.
Your site should be accessible to everyone. People with old computers, other browsers, other operating systems, people with visual impairments, everybody. There are three really good reasons to do so too:
A easy accesibilty test is to use your site with a text-based browser, such as Lynx. It's a good lowest common denominator for client programs — if your site works on Lynx, everyone should be able to use it.
There exists an organisation, the World Wide Web Consortium (W3C) devoted to writing and publishing internet standards. They publish the HTML standard, among others. Everone wins if standards are followed, because less time is wasted trying to guess how things should be written.
The W3C standards should be the touchstone for any project that you work on. Not only do current browser writers use them as the benchmark for page rendering, but it is likely that future browser makers will as well.
It's a matter of control. I prefer to implement all the dynamic features of our websites on the server. This way you are guaranteed maximum compatibility & accessibility, as what you serve to your visitors computer can be plain, standard HTML, without needing plugins or other client side technology.