Even early 2000s my experience coding was writing code, building it at my PC, copying it to a floppy, carrying it to the device I worked on In the lab, burning the NVRAM with it, rebooting it, and seeing if it worked. Debugging meant manually typing in memory addresses into the keypad to inspect (I had the address of every global var in the system).
For deeply thought intensive tasks like “why did the system crash” I printed out pages of C code and hand-executed code to find places with invalid memory access. For example a null pointer wouldn’t segfault and print a nice stack trace, it’d just overwrite the in memory code itself.
It was laborious but lots of fun. I learned a ton about C and embedded programming