There are (at least) two kinds of useful experiments: '''Out Of Context''': Using trivial objects like arrays and dictionaries, implement what you are thinking about, just to get the feel of how it might work. This will lead to how it should work. '''In Context''': Now try an experiment inside your real system. Don't work for beauty, precision, efficiency. You're still trying to learn how it might be done. Don't be afraid to do it multiple times. Plan to throw it all away. Relish the joy of doing good work and throwing it away, knowing that the next time you type it in it will be even better. ---- And then there is the merged strategy.. using trivial objects ''in'' your system to implement what you are thinking about to the point that you've achieved the functionality that you want. Then ReFactor until the elegant solution exists in parallel with the kludge. Then dismantle the kludge. (Ward calls this process ArchitecturalSubstitution.) The only downside here is that you have to do CruftBudgeting. -- MichaelFeathers ''Of course in the real system you always DoTheSimplestThingThatCouldPossiblyWork, and that includes using the simplest objects ...''