I've been a software engineer for ten years now. Software engineers build and maintain very complex systems, so complex that no single engineer can grasp the whole thing in all its details all at once. Coming from electrical engineering, I found that a humbling new experience.
Software engineering looks a particular way, because bits are much much cheaper than transistors. Software products are generally much more complex than hardware products. So software engineering has a richer set of tools for managing complexity than hardware engineering has.
Testing is hugely important. Engineers test products, and the more testing they do earlier, the fewer bugs they need to fix later. If you've got a system that's incomprehensibly complex, you can still understand how to test it.
Modularity is an example of information hiding. Designs are made up of individually comprehensible pieces or modules. Each piece has complexity inside and simplicity outside. The simple outside part, the interface, determines how that piece works with its neighbors.