Why Great Engineers Solve Problems Before Writing Code