practice system design problems