This study investigates the expertise differences between intermediate and expert programmers during test-driven software development. The intermediates and experts performed programming on the same problem and the process was videotaped and the data was analyzed. Differences are identified in terms of Bloom's taxonomy, design decision generation, test case generation, the hypotheses generation when debugging the program. Experts' skills are characterized as generating higher levels, more general and higher quality hypotheses. Experts seem to be more able to evaluate their hypotheses and design decisions. Experts are also better able to disregard discredited hypotheses while intermediates tend to maintain hypotheses despite contradictory evidence. Experts try to generate an overview before starting the programming task. Experts are better in using the domain knowledge as well. These differences may inform software development education.