Designing a software update infrastructure