(Note: CFL is a consequence of Conway’s Law).
Years ago, I left academia in Florida for the promised land in Colorado, and took a Senior Researcher job at a firm that specialized in Synthetic Aperture Radar (SAR) applications, including the production of digital elevation models (DEMs) derived from SAR images. I remained there for quite a while, writing lots of proposals, working on small government contracts (SBIRs and BAAs), and doing occasional consulting.
In the early 2000s, we were subcontracted by one of the large government contractors to develop a system for tidying up the large volume of digital elevation models (DEMs) that had been produced by the Shuttle Radar Topographic Mapper mission in February 2000. It was the first team software project that I or my company had ever been involved in, with (at its peak) about 12 developers working on software that would be used by production analysts in Pittsburgh to delineate, and set the elevations of, lakes and rivers.
Suddenly, our little team of SAR experts (who had never developed software in teams) was press-ganged into serious software development. One particularly introverted fellow, call him Dave, was assigned to work on a skeletonization algorithm as a part of the algorithm that would be used to step down rivers. As chief stepper-down of rivers, I needed to call his function as part of the code I wrote to set river elevations.
As requested, he had provided me with a C function to calculate the skeleton of a shape delivered as a binary image consisting of 0s and 1s. But the function didn’t take a pointer to a binary image as an argument; instead, it took the path to a system file containing the image. Dave had never done any GUI development; he wrote simple C code as executables that ran from the command line.
I went to speak to Dave about it (I confess I had never really spoken to Dave before, and was a bit frightened).
Me: Dave, I need you to change one small thing about your code.
Dave: I’m not changing anything about it. It works as requested, and I’m done with it. If you wanted it to be different, you should have said something before I wrote it.
Me: But this is GUI code. The pointer to the image needs to be passed into the function. It can’t read the image from a file system. That’s stupid*.
Dave: You should have told me that before I wrote it.
Me: Dave, if you won’t do it, I’ll have to change your function.
Dave: Don’t touch my code; I’ve debugged it, and you’ll mess it up.
(Remainder of conversation mercifully snipped).
Since we had all never heard of anything like a development manager, there was no one to appeal to; so I wrote a wrapper function that took a pointer to an image and dumped it to a temporary directory on the file system, so that Dave’s code could read it back in.
Soon afterward, we were sitting around a bar discussing the project and philosophizing about its larger meaning. Apparently at some point I said:
“Anybody looking at that stupid bit of wrapper code will wonder what was wrong with us. They won’t realize that that code is just frozen evidence of our team’s social dysfunction”. Fortunately my husband was present to remember that I said that, because in the years since, we’ve come across a lot more social dysfunction in the form of code.
He eventually dubbed it “Carolyn’s first law” in its final form: “Software is the social dysfunction of an organization in frozen form”.
* I’ve learned, since then, to never suggest to another developer that his code is stupid.