Simple Solutions
System design too often tries to solve all the potential problems an application could face during its lifetime. This is largely a waste of time, since many of the anticipated situations seldom or never arise; worse, it often makes applications so complex that many features are either not used or are used incorrectly.
Although it would be nice to have a simple, usable system that meets all future needs, these two goals are almost always mutually exclusive. Since we can’t do both, we prefer to make our applications simple. This means that they can be delivered rapidly and inexpensively.
If tomorrow requires different solutions, we will adapt the system to meet them tomorrow. In this way, we solve only the problems that need to be solved.
Bi-directional Feedback
For us, the best way to control software projects is by making continuous use of feedback from the users of the application. This feedback must be based on the users viewing the application as it is developed. Typically, we demonstrate software at weekly or bi-weekly intervals, incorporating required changes in time for the next session.
This means the users are feeding the software team with clarifications and updates, and the team is providing he users with a rapid look at what those changes mean to the application.
Embracing Change
In our view, there is only one goal for an application – to satisfy its users. We will listen to changed requirements, do our best to point out the implications of requested changes, and when the implications are clear to everyone, make the changes.
We are satisfied when you are satisfied – not before.