CS350 Software Design