* Getting information and help was difficult. At best there was c.l.c and such if you had a modem, but there was so much gatekeeping going on that it was hard to get a straight answer on anything.
* Source code was hard to come by. Everyone was so damn bent on keeping their precious code secret that you could only learn best practices if you happened to be in a job with good leadership.
* Hobbyist embedded systems were all but impossible unless you rolled your own. Working on an embedded platform meant using crappy tools, expensive and clunky in-circuit-emulators, and proprietary toolchains. Otherwise it was time for a homebrew etching tank.
* Storage, backups, and code versioning were a problem. Sure, we had CVS and eventually SVN and sourcesafe, but man did they suck!
* Hardware was super expensive. Software was super expensive. Getting anything done on a tight budget required a lot of creative thinking.
* Spending all day squinting at a small monitor sucked.
* Software (especially development environments) was chock full of sharp edges and required arcane knowledge and incantations. They were called UNIX wizards for a reason.
* Data communications and interchange formats were TERRIBLE (and always proprietary)
* Multilingual support was an exercise in madness.
* Bash was one of the nastiest undead languages ever invented. Oh wait, it it still is...
* "If it was hard to write, it should be hard to read and understand" was the mantra of the day.