This repository is based on the TDD tutorial in https://github.com/mjhea0/flaskr-tdd.
One of the main advantages of the TDD methodology is that it encourages modular design principles. In order to perform unit tests, the code must be modulized first which forces good architecture. TDD also serves as documentation because tests are run so frequently. In addition, TDD improves clarity during the implementation prcess, which makes the code easier to maintain and refactor. TDD also helps with collaboration between devlopers by providing constant error-tracking. In general, TDD helps developers focus on the user requirements and write code with those requirements in mind.
A disadvantage of the TDD methodology is that it slows down development in the short run, because implementation code cannot be completed before tests are written first. Previously-written tests may also need to be frequently re-evaluated depending on shifting project requirements. Being able to write good unit test is also a skill that needs to be praticed and acccepted by the entire team. Unless everyone on the team is correctly writing and maintaining tests, the system will not work as well as expected.