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.