Use Functional Testing in the early stages of software development to make sure that the main features work as per the requirements.
Use Non-functional Testing after functional tests are passed, to ensure that the system is fast, reliable, secure, and scalable for real-world usage.
In most cases, both types of testing should be used together because one checks correctness while the other checks quality.