Model-driven Engineering aims to grease the wheels of complex software creation using first class artifacts called models. A modeler creates effective models, representing useful software artifacts, in a modelling domain. Can we automate effective model discovery in a modelling domain? The central challenge in discovery is the automatic generation of models. In this thesis, we present a model-driven framework to answer this question. The framework for automatic model discovery uses heterogeneous sources of knowledge to first setup a concise and relevant subset of a modelling domain specification called the effective modelling domain. Next, it transforms the effective modelling domain defined in possibly different languages to a constraint satisfaction problem. Finally, the framework invokes a solver on the satisfaction problem to generate one or more effective models. We embody the framework in two tools: Pramana for model discovery in any modelling language and Avishkar for product discovery in a software product line. We provide a validation of our framework through rigorous experiments.