What are the building blocks of our software systems? Why does a program in an object-oriented language feel so different from an equivalent one in a functional language? How do the design decisions in one part of our code affect the other parts? What makes software well- or poorly-designed? To answer these questions, I turn to the work of Heinrich Schenker, a 19th-century-born musician who is best known for his theories of musical analysis. Those theories claim that the works of composers like Bach, Mozart, Beethoven, and Brahms could be peeled away, like the layers of an onion, to discover the Ursatz -- or fundamental structure -- that underlies all "great" (in his mind) Western art music. The process of peeling those layers reveals to the analyst how each composition manages to be written in the same "language" as the others, but feel unique on the surface. Schenker's ideas about structure and analysis are still actively studied by music scholars and even applied to musical styles that are very different from his focus. In this talk I'll briefly introduce Schenker's musical theories and then apply the layered analysis technique to some interesting software systems, going beyond surface aesthetics to discover their Ursatz. Along the way we'll discover intricate internal relationships and perhaps be able to quantify a what makes a good software design.