Software development in scientific research environments poses many significant and conflicting challenges. Research environments (and their associated drive to publish! publish! publish!) require rapid and flexible software development that simplifies experimentation with new algorithms and data structures. Simultaneously, for our work to impact a broader community, we must create nearly production-quality software, as well as provide user support and code maintenance. With these conflicting demands (and, often, shrinking budgets), the right balance between research and software development is difficult to define. This talk will discuss these issues and suggest software design solutions that can ease the burden of software development in a research environment. Examples will be drawn from the Zoltan and Trilinos toolkits, as well as Sandia's new PDE Rapid Development effort and the SciDAC ITAPS (Interoperable Technologies for Advanced Petascale Simulations) project.