Challenge 3: The Crystal Ball Problem
•Clear picture at the beginning …
•But it begins to get cloudy.
Vehicle
VehicleUI
FileWriter
The third challenge is what I call the crystal ball problem.  At first, Dr. Jones can get a clear idea of the program’s structure by examining the program text.
But as the programmer makes changes, the design evolves away from the original program and it becomes more and more difficult to predict the dependency structure of the program.  This is because some refactorings can result in multiple possible dependency structures.
For example, supposed the programmer wanted to decompose the Vehicle class into Writable, an interface for objects that can be written to files.