A functional basis for engineering design: Reconciling and evolving previous efforts