In this tutorial we will discuss a method of teaching a variety of software engineering topics in an integrated and experiential manner. Topics covered include agile processes, software modeling, open source development tools and processes, code generation and testing. Our approach involves using a textual modeling language called Umple that enables agile, model-driven, test-driven development. Students are introduced to this tool in an introduction to software engineering course, where they learn the basics of the above topics. Then in their capstone course they are able to actually contribute to the tool itself.