A QA system takes in a natural language question, analyzes it to understand the type of question and information sought, searches structured and unstructured data sources for relevant information, and generates a natural language answer. It consists of modules for question analysis, information retrieval from knowledge bases and documents, answer generation, and response formatting. The goal is to delegate more interpretation work to machines so users can get direct answers to complex questions over heterogeneous data.