Law of Identity
One of the most important contributions of Aristotle to philosophy is the law of non-contradiction, a part of his constrained worldview that states that something cannot be not itself—e.g., a person cannot be “not a person.” According to Aristotle, this law is axiomatic, self-evident, and does not require proof. Following this law, the law of identity states that something is itself—e.g., a person is a person.
Without the law of non-contradiction and the law of identity, it would be impossible to have proof of anything; the process of obtaining proof would continue indefinitely while resulting in nothing being proved. In agile, tests (including unit testing, test-driven development, integration tests, system tests, and acceptance test-driven development) make up the bedrock of proof. Agile assumes that nothing can be proven without tests.
In order to maintain quality, tests are of paramount importance—especially test- driven development, which is the way we build quality software while adhering to the agile manifesto’s value of working software over comprehensive documentation. This implies that no amount of documentation will validate the quality of the software, but the tests will do so.
While waterfall and agile models both may intend to deliver successful software products to the customer, the outcome may be completely different due to how each model perceives the software product development environment. Agile embraces reality, while waterfall does not see the reality in the context of the commercial software product development environment.
While optimalism is not a panacea for all our psychological ills, the quality of life that an optimalist enjoys is far better than the perfectionist’s version of quality. This mirrors the waterfall and agile software development models. Because waterfall is focused on ensuring that the requirements are defined up front, the development of software takes a lot of time in order to ensure that everyone is meeting the fully defined requirements. Agile, on the other hand, accepts the reality that the requirements cannot be fully defined up front and, because of this, evolved a model that harnesses change and is better for delivery of software products in the commercial software product development environment.