constraints; required vs optional