scalable software infrastructure design