Question answering is an intriguing NLP task, as it provides a measurement for how well the model can understand the text and perform different kinds of logical reasoning. This project aims to build a question answering system based off BiDAF model that works well on Stanford Question Answering Dataset 2.0 (SQuAD 2.0). We examine the effect of character-level embedding, self-attention mechanism, answer-pointer, and transformer blocks. After model comparison and hyperparameter search, our best model with character-level embedding, self-attention, and GRU layers achieves an F1 Score of 63.408 and a EM Score of 60.456 on CS224N internal test set of SQuAD 2.0.