Tailoring Software Infrastructures