pick implementation that maximizes functionality for a given resource, or minimizes resources for a given functionality