Abstract
Evolving software products is a tricky business, especially when the domain is complex and changing rapidly. Like other fields of engineering, software engineering productivity advances have come about largely through abstraction, reuse, process, and automation (e.g., moving from assembly language to third generation languages offered increased productivity through better abstraction). For canonical or domain applications, model-based engineering (MBE) of software provides a systematic approach for producing software systems that leverage all of these avenues of productivity. Specifying or modeling software at higher levels of abstraction and connecting these representations with previously developed (reusable) components provides a repeatable assembly and transformation process that can often be automated. Since 2004, we have explored MBE for generating software from the high-level for sophisticated agent-based systems, low-level complexity in the details of software-defined radios, and more recently with the maturation of emergent systems found in social networking (i.e., Facebook-like systems). While productivity is a key benefit of MBE in software, there have been few studies that examine productivity. In this paper, we present our experience in these efforts and reflect on some productivity implications. Our experience shows that MBE introduces some complexities early in the product life cycle, but provides a stable basis for better productivity through systematic abstraction, reuse, process, and automation.