The history of agent development is a litany of expensive one-off solutions that are opaque to the uninitiated, difficult to maintain and impossible to re-use in novel contexts. This outcome is the unfortunate result of a tendency to apply monolithic "architectures" to agent development, which require specialists to build the models and extensive knowledge engineering and hand tuning to realize adequate performance. To address these shortcomings, we are developing methods to align agent development with best practices in software engineering. In this paper we describe an approach that promotes modularity and learning in the development and validation of intelligent agents. Specifically, our approach enables the modeler to decompose intelligent behavior as required by the problem (rather than the modeling environment), implement component behaviors using the tool best suited to those requirements and close the data loop between agent and environment early in the development process rather than as a post hoc validation step.