Caching framwork form Sitecore in great, BUT don't rely too much on it. My first checklist:
- Quality, Quality, Quality. Setup sonarqube and remove duplicated Code and all critical and blocker issues, if there are some. See more how to setup sonarqube here.
- Zero warning policy.
- Check code for expensive sitecore item Iteration.
- Don't use axis, xpath or Sitecore Query at all. Use lucene search instead if possible.
- Use sc_debug=1 in the URL to show expensive layouts.
- Check google speed insights. Optimize Images and shink html with this code. Check JS with the frontend guys. Visual Studio Ultimate has built-in load testing capability. You can easily build out and run your load tests on a remote server and simulate traffic to your website to see how it reacts.
- Use a CDN and as last resort Varnish cache.
- Check SQL server for slow queries here.