Yeah, depends on the application. As far as code performance, first tip would be use pooled database connections. Next, if you retrieve and display a lot of data, examine what you are showing and determine if you really have to load it fresh on every page view. If you show information that typically will not change for a day or longer, consider loading it on startup and caching it. Just remember to provide a way to manually refresh it at any time (admin page) as well as a scheduled refresh as well (I like to use TimerTasks). Don't create caches that can only be refreshed by restarting the server....that's just messy.
Also, consider running a profiler against your code. If you see an inordinate amount of instances of one or more objects being created to perform repeated tasks, you may want to consider either refactoring that logic, or using object pools. Object pools can help offset performance problems when going from low load to a sudden spike of activity in object heavy code. Also look for a lot of time being spent in specific sections of code...perhaps the logic there could be improved to reduce the slowdown.
Finally, make sure you consider and address multi-threaded access to your cached data. You don't want your caches to get corrupted or invalidated because two threads try to modify at the same time.
my 2 cents.