system design skills