Two difficult classes I took together were Embedded Systems Optimization and Compilers, both taught by the same instructor and with similar concepts, so working on one helped solidify concepts in the other.
On the other hand, I took Distributed Computing during its first offering alongside Graduate Algorithms and was super overwhelmed.
I took DC alone and found it manageable if you weren't a perfectionist. Compilers was the most difficult thing I've ever done, though that was mostly due to my own poor time management during phase 3 (generating the intermediate representation). I didn't complete phase 3, so most of my time during phase 4 (emitting MIPS assembly + implementing three register allocation algorithms + optimizations) was catching up.
Also, as a note, the very difficult classes like distributed computing and compilers are completely optional (though well worth it IMO). The only very difficult class that's required is graduate algorithms.
For those not familiar with OMSCS, there are some class ratings here: https://www.omscentral.com/
It was a good life experience even though I wound up sacrificing my 4.0 by a few grade points. In hindsight, had I realized how steep the curve would be for DC, I'd have pushed a bit harder to squeeze out a few more test cases, but I was pretty mentally defeated at the time and felt like I'd exhausted all of the ideas I had on the projects multiple times over.
I found DC more difficult than compilers by a wide margin because of the nondeterminism, debugging difficulty and trying to figure out what the test harness was even doing. Compilers involved writing more lines of code, but it was manageable, synchronous greenfield application design.
https://omscs.gatech.edu/specialization-human-computer-inter...