Common wisdom says you should not optimise or performance tune a system until you need to. This seems like very sound advice. However this little bit of advice is missing something really important. How do you know when you need too optimise? All to often this is when a system is in production and not coping with customer load. If we are lucky major issues might be discovered during user testing right before launch. In either case we look bad in front of customers and those paying the bills. This talk explores when to start performance testing, how to avoid the common pitfalls, how to profile when the results cause your team to pull a funny face, and what you can do about that funny face. Specific issues to Java and managed runtimes in general will be explored, but if other languages are your poison, don't be put off as much of the content can be applied to any development.