In the days when every story about Apple still contained the word “beleaguered“, I learned this lesson vicariously through my coworker, Dave.
We worked for a small company that did contract QA. Companies would hire us to test their hardware or software and report all the bugs to them. This was before overseas outsourcing basically destroyed that niche in the US. Apple was actually one of our biggest customers at the time. Do you remember the Performa 637CD? I bet you don’t. I do.
Anyway, how it worked was, we had a large FileMaker database that contained all the bugs found in all the products we were testing. Then, we had a HyperCard stack which had a UI for entering bugs. Each tester had their own stack on a floppy disk. They’d use this to enter bugs, and at the end of the day, they’d hand their floppy to the Test Lead, who would export all the data from the stacks and import it into FileMaker, where some report would be run to get the bug reports back to the customers.
Once I became Test Lead, I decided this process could use some improvement. The HyperCard stack was written, naturally, by the company CEO. Being an aspiring young developer, I thought I could do better. I started making changes to improve it just for myself. But since it was used by all the testers, I had to get them on board using it also. Rather than simply mandating they use it, I started adding features to make it easier for them to use, and showed them what I’d done. They loved it.
This was all pretty good. But Dave, one of the testers, also fancied himself an aspiring developer. He made his own copy of the stack and also starting adding features to it. Soon we had HyperCard stack fragmentation, with half of the testers using my stack and the other half using Dave’s. But Dave and I had different philosophies. I was focused on making things simpler and easier, and Dave wanted to add as many features as possible. Dave would add a button that would automate some process. I’d make it so that process was unnecessary. At some point, I stopped messing with my stack, because it did everything I wanted and nothing I didn’t. But Dave didn’t stop.
With all his new features, Dave’s codebase soon grew rather large. In the bad old days before Mac OS X, 32K was an all-too-common limit on things. In this case, it was the limit on code size in HyperCard. HyperTalk was an interpreted language, so that was the size of the source code itself – the text.
Once he hit the 32K limit, Dave decided to reclaim space by deleting all his comments. Once that wasn’t enough, he started renaming functions and variables. “bugIndex” became “bi”. “GetNextID” might become “GNI”. You probably see where this is going. Within a couple weeks, Dave’s code became an unmaintainable mess. Not only could he not add more features, but he couldn’t even fix bugs anymore. Testers became frustrated at his lack of progress, and everybody moved over to my stack.
A lesson was learned. By me, anyway. I don’t think Dave learned anything. But now I want to thank Dave for teaching me, very early in my development career, the critical importance of naming things.