Software development and engineering practices in industry do not always scale down to be accessible and successful in an academic setting. At Duke, we develop assignments and approaches that leverage the experiences of alumni to help ensure that those graduates who continue in software can succeed immediately when they leave Duke. These approaches are based on design considerations that include efficiency, user experience, portability, scale, and ethics.