COMPSCI 307D: Software Design and Implementation