end to end systems design