I’d agree with the author that backwards compatibility really started between 3.0 and 3.1; there were very few popular 2.x applications, and essentially zero 1.0 applications.
The author mentioned that some fairly simple applications don’t work in new versions of Windows including Cardfile. It’s hard to know for sure without a debugger, but one thing is that the formats for various resources including icons changed each release, and code to interpret the 2.x and earlier formats was removed from NT very early. NT 3.1 RTM can read 2.x icons, but by service pack 3 it cannot. This can be observed by just looking at an executable in Explorer - did it find the icon in the executable? But it can be fatal for running a program, since one of the first things a program is likely to do is load the icon in order to associate it with its window, so if it fails when the icon doesn’t load, the program doesn’t get far.
I noticed this in the Windows for Windows 1.x source release, which is a Windows 2.x executable. Current Windows can’t run it, but all I needed to fix it was to convert the icons to 3.0 format and use a 3.0 resource compiler (ie., I changed zero lines of code to make it work.)