Table of Contents
Freecell Solver was designed bottom-up: first by writing functions to input cards and then to handle states and finally the algorithm itself. I find that bottom-up design (as evangelised by Paul Graham and others) - start by writing small utility functions and classes and then integrate into a grander scheme, has been a guiding principle when working on Freecell Solver.
Freecell Solver has many utility classes, and has also been coded incrementally. I also find bottom-up design more natural.