Halloran on the Fog of Programming

We hear a lot about “cloud” computing, and imagine “fog computing”,  but Timothy J. Halloran worries about “The Fog of Software Design” [1].   His title is a conscious reference to the classic phrase “fog of war”, and with similar intent. Programmers should be humble about just how little they know.

He lists four major patches of “fog”, “understanding requirements”, “anticipating requirements”, “existing code”, and “design knowledge”.  These are all good points, all centering on the psychology of an individual programmers.  We overestimate our own understanding, and are too often blind to cognitive biases (such as motivated reasoning).

His solution, such as it is, is basically to remain calm and fight on despite the fog.

This discussion made think a bit.  It seems to me that Halloran’s list is actually pretty charitable, in that there are plenty more fog banks and smoke screens out there, especially due to other people.  The software process is not a heroic, one person effort.  It is an ugly, social process, embedded in an undocumented and poorly defined multi-player game.

I could call out other major foggy areas. 

Sociotechnical awareness. Most of us have had the experience of discovering that our design work has been irrelevant, because we didn’t know important parts of the overall human environment.  Who are the actual stakeholders and customers?  What are their real agendas.  How do the organizations really operate? 

Economic environment. Most of us have had projects die because they were designed based on a faulty business model.  The design might be perfect, but it is useless because the isn’t there.

Misunderstanding of theory. A lot of software is intended to implement specific abstract theoretical concepts.  But the theory may be misunderstood, or misapplied to the domain, which renders the software moot.  Even if it is implanted perfectly, it wont work if it implements the wrong theory.

Deliberate deception.  Finally, there is the unfortunate case where the fog is actually smoke from deliberately set fires, when our misunderstanding is due to deliberate deception.  False promises about critical dependencies, fraudulent business plans, misrepresentation of requirements, fake performance claims.  And my favorite, the ever popular bait and switch sales pitches.

How do you disperse the sociotechnical fog and smoke?  Much of this is about trust.  Trusting the people you work with, trusting the people you work for, trusting the information you get.  Establishing trust isn’t a technical issue, it is a human issue. 

But the best start for trust is to be honest and tell the truth. And when you don’t know something, admit that you don’t know.


  1. Timothy J. Halloran, The Fog of Software Design. IEEE Software, 38 (3):132-135,  2021. https://doi.ieeecomputersociety.org/10.1109/MS.2021.3056937

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.