What are Non-functional Requirements and How Do They Work?