design problem engineering