Now I was just an observer at the time, so take this for what it's worth. There were two major goals.
- Figure out who issued the message. Most major components were issued a 3 character identifier by someone. Now there was some overlap, so some of this is shaky. I'll just give you a sample. I don't have it all memorized, anyway, so it's far from complete.
IEA - OS Supervisor
IEB - Data set utilities
IEH - "System" utilities
IEC - Data management
IET - An infrequently used Assembler
IEU - Assembler F
IEV - Assembler H
IEW - Linkage Editor
IEY - Fortran G
IHC - Fortran library - Combine messages so it was relatively easy to look up the message from the message code.
Now, as I said, there was some overlap. I/O errors detected by the OS supervisor, for example, got IEA messages, where I/O problems detected by data management got IEC messages.
There were several Assemblers. Similarly there were several Cobol and Fortran compilers. Usually, when you see a letter appended to something, like Fortran G, Assembler F or Assembler E, the letter referred to the storage on the smallest machine that could run the product: E 32K, F 64K, G 128K, H 256K. In OS/360 days this was very important. Storage in those days was very, very expensive.
Breaks in the scheme sometimes indicated mistakes. Fortran G, for example, was not envisioned in the original scheme. In fact, I understand IBM bought it from an outside supplier when they realized Fortran E wan't going to cut it and Fortran H was just too big for too many users. An H level Linkage Editor was in the original scheme, but they bought a Linkage Editor to supplant the E level linkage editor for the F and G users. The F level Linkage Editor was good enough they never produced the H level Linkage editor, though many would consider the Binder to be the "big" Linkage Editor even though OS/360 had been pretty much forgotten when it did finally appear.
Now, as I said there was some overlap. IEHIOSUP (long forgotten), for example was, in practice, a data set utility, though its only purpose was to be used by System Programmers to fiddle with SYS1.SVCLIB, so it got the IEH prefix.