Understanding Functional and Non-functional Requirements