functional design tips