How can we automatically put labels (like city names) on a map in such that the labels do not overlap? How can we compute train schedules that optimally use the available tracks and trains? How can we reconstruct 3D objects from laser scans? These are just a few examples of challenging problems that require efficient algorithmic solutions and effective software implementations of those solutions. In this course you will attack such an algorithmic problem in a team of students.