Abstract. In familiar design domains, expert designers are able to quickly focus on "good designs", based on constraints they have learned while exploring the design space. This ability to learn novel constraints is a key aspect in which design differs from traditional optimization; the constraints on the search are constantly re-defined based on the search experience itself. Moreover, such constraints are often implicit, i.e. the designer may find it difficult to articulate these constraints and provide reasons for them. Here, we ask if computer-aided-design systems can discover such implicit constraints in well-understood design situations, where the function can be articulated clearly enough to be quantified in terms of performance metrics. By considering function across a large number of design instances, patterns of functional feasibility may be learned as a byproduct of evaluating different designs. We show how patterns of functional infeasibility result in novel constraints that rule out certain regions of the design space. We demonstrate this process using examples from the design of simple locking mechanisms, and as in human experience, we show that the nature of the constraints learned depends on the extent of exposure in the design space, and may be widely variable in early stages. We also show how the process of design change, when the design space is modified, e.g. by adding new design variables, can build on patterns learned on past designs. In conclusion, we discuss the ramifications of this process on chunking and representational change, and also on design creativity.