A methodology for designing systems