Wegner's Lemma
"An interactive system can never be fully specified, nor can it be fully tested. Any attempt to do so will either fail or result in an unmanageable system." 1
In Agile, this principle aligns with the idea that software development is inherently complex, and attempting to define all requirements upfront is impractical. Agile methodologies embrace iterative development, continuous feedback, and adaptive planning to navigate this complexity effectively.
Application to Agile Teams
- Incomplete Requirements:
- Agile teams accept that initial requirements will evolve. Instead of attempting to define everything upfront, they rely on user stories, backlog refinement, and iterative feedback to gradually shape the product.
- Unpredictability in Development:
- No matter how detailed the plan, unexpected scenarios will arise. Agile teams use Scrum events (e.g., Sprint Reviews, Retrospectives) and Kanban flow optimizations to continuously improve and adapt.
- Unbounded Testing Scope:
- Since it's impossible to test every possible interaction in a complex system, Agile teams focus on risk-based testing, test automation, and exploratory testing to achieve sufficient coverage while maintaining agility.
Scenario
A bank's Scrum team is building a new mobile banking feature.
- Initial Sprint Planning:
- The Product Owner defines key features like "Account Overview" and "Fund Transfers," but edge cases (e.g., network failures, multi-device logins) are not fully specified.
- Development & Feedback:
- During Sprint Reviews, stakeholders provide feedback on usability, leading to modifications that weren't initially considered.
- Testing Challenges:
- Despite rigorous test cases, an unexpected issue arises where the app fails for international users with specific currency settings. A new user story is created to address this.
- Inspect & Adapt:
- Instead of freezing development to fully specify and test every scenario, the team continuously refines and improves the app in subsequent sprints.
Summary
Wegner's Lemma reinforces the need for flexibility and continuous iteration in Agile. Since no interactive system can be fully specified or tested, Agile teams embrace change, prioritize feedback, and focus on delivering value incrementally. This mindset helps teams navigate complexity and build resilient, user-centric products efficiently.