A Scalable and Portable Structure for Conducting Successful Year-long Undergraduate Software Team Projects