Notes on high-level and low-level system design