The traditional design methods, which assume that developers fully understand the user’s requirements and that the user knows what they want before seeing the product, are often flawed in the real world.
Complex systems, such as software products and their users, constantly evolve and adapt to users’ changing needs and preferences.
As users interact with a software product, they may discover new features and capabilities they did not know existed before and rely more heavily on them. They may also repurpose some software features to solve different problems. Additionally, users may develop higher expectations and request more advanced or complex features as they become more familiar with the technology.

To address these challenges, agile design practices, such as Scrum, Kanban, and Lean software delivery methodologies, allow for the creation of a software product through the cooperation of stakeholders and developers.
Feedback loops, such as sprint retrospectives and user testing, are critical for this process. Feedback changes the software and modifies the developer’s perception of business needs and their understanding of the industry.
In this way, the feedback loops allow for a complex system and its environment to interact, modifying the dynamics of the system’s evolution. This dynamic interaction between users, developers, and the software product can be observed today as social media and mass opinion constantly evolve and shape each other.