Well, I got my MX-500 a few days ago and I must say I'm impressed! This thing learned everything on the first try without any glitches (except when I accidently learned a few things to the wrong key, but that was my error - easily corrected).
I agree. I spent a lot of time pre-planning and setting up my macros so they work no matter what screwed up state my components may be in. On, off, wrong inputs, volume muted, analog input selected when I wanted optical, etc. You could call these macros "activity based" like the Harmony I guess. I want to watch an HDDVD, I push and hold HDDVD for one second. Appropriate devices are powered up, inputs changed, etc. so it's all ready to go. If for some reason things didn't turn out perfectly (maybe somebody walked in front of the remote when it was transmitting the macro?) then all you have to do is run the HDDVD macro a second time. The macro works no matter what unknown state the system may be in. It fixes it. Isn't that what the Harmony "help" button is supposed to do? (I don't have a Harmony, so I'm asking.)
The only slightly tricky thing I had to do in the macros was take in account delays in certain components. e.g., my TV takes a while to power up and will not accept further commands for a few seconds after initial power on. So you just setup you macro to turn on the TV, go off and mess with other components, and then come back to the TV later. I could have added delays in the macros to accomplish the same results, but why not make use of the TVs wait time to accomplish other tasks?
This MX-500 is really slick! I thought it was exceptionally easy and intuitive to program. It took me about two hours to edit button labels, learn every command from six different components (I didn't use preprogrammed codes because I wanted ultimate control), setup my macros and punch-throughs, test, and have it just the way I wanted it. By far, the biggest chunk of that time was pre-planning and testing the macros ... getting timings, etc., just the way I wanted them for rock-solid reliability.