A tool should be easy to use, meeting the user at his or her point-of-view rather than requiring the user to gain expertise about the tool itself.
A tool should be open-ended, allowing any possible output.
A tool should make the user’s iterative process visible and navigable.
A tool should expand rather than limit or corral the user’s thinking.
A tool should help the user to develop an intuition for the problem space, its inherent constraints and the relationships between properties.
A tool should help the user to break the problem down and work through its components while keeping the whole in mind.
A tool should be adaptable to the user, capable of being transformed by its own design process.