Functional and non-functional requirements

 "Amateurs talk about tactics, but professionals study logistics."
General Robert H. Barrow, USMC (Commandant of the Marine Corps)
Replace tactics and logistics with functional requirements and non-functional requirements and you have a "too long, didn't read" version of this post.

So, what's this about?  By way of explanation, functional requirements are WHAT a system does.  So a functional requirement may be that within a user interface a user cannot enter a negative number as a limit price for a regular bond. This then has a direct link to functional testing, so a tester would test that they cannot enter a negative number as a limit price for a regular bond.  If the functional requirement and the functional test are tightly coupled then this paradigm can be described as Test Driven Development.

Non-functional requirements are HOW the system operates. So a non-functional requirement may be to specify that if a user tries to create an order ticket from the user interface the ticket appears and is ready to use within 200 milliseconds. Or that a user can login within 500 milliseconds of clicking on the login button having populated a username, password and token value. Again, if the non-functional requirement is linked directly to a test case then this is a case of Test Driven Development.
Functional testing is complex but generally can be performed either manually or with automated testing. For trading applications there are typically a number of stages of testing, automated first to check for gross functionality followed by manual testing to check for more nuanced points and finally user acceptance testing before go-live into production.
Non-functional testing is often much more complex. If a non-functional requirement is that a trading platform must be able to support 100 concurrent users each receiving a streamed order book of 1000 instruments with full depth - how do you test that? Do you set up 100 virtual machines and one operator or do you have 100 testers?

Functional testing will get a system delivered to production. Non-functional testing is what gets you live and operating day-in and day-out.  Combine a stringent non-functional requirements set with a high quality implementation of DevOps and your chances of success are greatly increased....