What do Aristotle (a Greek philosopher who was born around 2400 years ago) and agile software development methodologies (with origins stemming from the late 1950s and early 1960s) have in common? In order to understand the link between Aristotle and agile, we need to take a step back and look at their respective earlier contemporaries—Plato and the waterfall model of software development.
Plato was a classical Greek philosopher, mathematician, student of Socrates, and a writer of philosophical dialogues. Plato, his student Aristotle, and Socrates helped to lay the foundations of Western philosophy and science. Aristotle was a Greek philosopher and polymath as well as a teacher of Alexander the Great. Aristotle's writings were the first to create a comprehensive system of Western philosophy, encompassing morality and aesthetics, logic and science, and politics and metaphysics.
In the 1970s, Dr. Winston Royce wrote an article called “Managing the Development of Large Software Systems” as part of the IEEE proceedings. Some interpreted his article to mean that a software system should be built in a sequential manner based on the assumption that the requirements first will be clearly defined and then will be executed.
This “waterfall” model is a sequential development process used in the software development life cycle, in which progress is seen as flowing steadily downwards through the phases of conception, initiation, analysis, design, construction, testing, production or implementation, and maintenance.
Agile Software Development Methodologies
Agile software development can be defined as a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development and delivery, and a time-boxed iterative approach, and it encourages rapid and flexible response to change. It promotes iterative and incremental development throughout the development cycle and helps teams react to the instability of building software through incremental, iterative work cycles
, known as iterations.
Agile software development is undertaken by teams, which are themselves complex adaptive systems. Because they work in a complex environment, they need an empirical process. People cannot decide everything—requirements, design, or any other aspect—up front. This is the core basis for agile development methodologies. Essentially, being agile means that you observe reality and respond to it in an appropriate manner.
Perfectionists and Optimalists
Tal Ben-Shahar, an Israeli teacher and writer in the areas of positive psychology and leadership, writes in his book, The Pursuit of Perfect that, unlike traditional psychology, which mostly focuses on neurosis, depression, and anxiety, positive psychology focuses on the conditions that lead people, organizations, and communities to flourish.
He also discusses two key types of individuals: the perfectionist and the optimalist. A perfectionist rejects reality, whether in the form of failure, painful emotions, or success. What this means is that he does not embrace reality and instead acts on what he believes should have happened. We cannot truly feel or know success if we embrace perfectionism, because doing so means that we will always be looking for the next goal to conquer while avoiding choices that may produce failure (which, ironically, could eventually lead to success). An optimalist on the other hand, accepts reality and failure and keeps moving forward.
Positive psychology differentiates between positive (optimal) and negative perfectionism. The perfectionist limits himself with the worry of failure, producing anxiety and procrastination. The optimalist, however, accepts failure, painful emotions, success, and reality; he lives the full scope of the human experience. Though the optimalist may fail, he accepts the reality of the situation and moves forward.
Let’s look to Plato for the intellectual roots of perfectionism.
According to Plato, the primary building blocks of reality are the forms, which are perfect archetypes and ideal models from which particular objects arise. Each object that we perceive in the illusory world is a projection of the perfect form that exists in the real world. Plato believed that it is possible to know reality only through philosophical contemplation not affected by our experiences, emotions, or what our senses tell us about the world. For Plato, the forms are primary, in that the world around us is derived from them.
The waterfall model assumes that the requirements, architecture, and design can be defined by the customer and the project team up front. For many of us, this assumption has been proven wrong over and over again. Think back to Plato who believed that it is possible to only know reality through philosophical contemplation that is not affected by our experiences; this is not possible in real life. Similarly, proponents of the waterfall model believe that it is possible to control and manage requirements by defining all the details up front. In doing so, however, they choose to ignore the reality that changes cannot be defined completely up front; we need to develop in an iterative and incremental manner to address this fact. This key aspect connects Plato’s teachings to the waterfall model of software development: ignoring and not observing reality.
Eventually, Aristotle broke away from Plato by preaching realism and became the father of optimalism. The optimalist recognizes and accepts that human nature has some constraints and believes that we need to accept the fact that we have instincts and inclinations that do not change easily. An optimalist takes into account the constraints of reality and works towards creating not the perfect life but the best possible one. This underlies the key principle that in agile, people make up the first order effect and process makes up the second order. As indicated earlier, proponents of the waterfall model favor the process over the people, whereas supporters of the agile model focus on the people. In the agile model, the process is used as an aid to the people, which is a more reality-centric point of view.
Unlike Plato, Aristotle’s view of reality is not at odds with our experience of the world. While Plato believes that there are two worlds—the perfect world of forms and the imperfect world that we perceive—Aristotle believes that there is only one world and only one reality, which is the world we perceive through our senses. Sense perceptions provide us with experiences, from which we generate forms either as mental images or words.
In the waterfall model, the perfect world of forms is the set of ideal organizational-defined processes for a typical project. The imperfect world, which can be perceived due to changes in the business reality, is addressed through process tailoring. In the agile model, the focus is on reality, which is the actual world perceived by a person working on a project.
For Plato, forms make up the primary aspect that the world around us is derived from them. Because we can only know these forms through reason that is independent of our experience, thinking precedes experience. In the case of software development, this is the predictive or waterfall model. Aristotle, however, believes that forms make up the secondary aspect that the world around us is derived from. Because we can only know these forms based on our experience, experience precedes thinking. As it relates to software development, this empirical model is akin to agile development.
This leads to an interesting analysis of how Plato and Aristotle think and how waterfall and agile software development work in the context of commercial software product development.
For Plato, our experiences—mere projections of what he considers reality—stand in the way of our knowledge of the truth, which is the world of forms. From this line of thinking, we should reject the experience that contradicts a belief we hold. For example, if experience shows that failure is necessary for success and the Platonic idea of the path to success is a straight journey, then we should reject our experience and accept our original belief. This is the way perfectionists form their worldview and is also the way waterfall model works: You must clearly define requirements up front, despite the reality of dealing with changing requirements. Because of this, you must therefore reject the reality of the situation and accept the model that postulates that requirements should be defined clearly before moving to the next phase of architecture and design.
For Aristotle, our experience of the world is fundamental for knowing the truth. Therefore, if an experience contradicts a certain idea that we hold, we should then reject the idea and not the experience. If we discover that the path to success contains repeated trial and error on our parts, then we should reject the idea—whether it is ours or other people’s—that the path to success can be free of failure. This is the way optimists form their worldview and is also the way the agile development model works. Because requirements are always changing, you need to start with a few clear requirements and then subsequently go to architecture, design, and so on. These activities are seamless without having a clear distinction of a phase as in the waterfall model. Thus, agile aligns with reality and rejects the idea that requirements can be clearly defined up front, especially in the context of commercial software product development.
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.
Agile development methodologies are not a panacea for all the problems faced in commercial software product development, but when compared to the waterfall model, the probability of successful customer delivery is higher as teams embrace reality and attempt to deliver the maximum value to the customer. Being agile is a journey where we try to deliver a successful product to the customer using a model, methodology or a framework; it is not a destination by itself.