component-driven design