Rule 3 of Software Development

Tags: rule3

The actual rule

We expect people to learn, we expect people to be on different points of their individual learning curves. Here, we take advantage of the unpopular realization that programmers are actually people and look for things, not as instances of lack of care but of mislearnings that can be adjusted.

Note that even your most senior developers (and your most pretentious authors yours truly) can fall into this trap; at higher levels of experience, this looks more like overgeneralization, or in the extreme case, generalization that should be right in a better world, but in this particular instance the details unfortunately don't fit an otherwise sensible model.

Technically rule 3 is specifically about cases where a person is considering another person's way of thinking - which isn't something we have tooling for. However, it's also worth pondering if there are ways in which tool assistance could also have caught the problem - static type analysis, better unit test automation, etc. - since that would probably have helped the developer realign their mental model earlier (in their own sandbox.) In other words, it's reasonable to apply the rule at a different level: did this problem occur because someone needed to actually think, when it could have been handled mechanically?

How To Apply This


  1. AI code is not an exception to this; it was merely misappropriated by the AI which adds no new understanding, and conceals both the provenance and any hints at the mental model of the author. 

  2. sometimes the misunderstanding isn't about how the language or environment works, but is rather a misinterpretation of the requirements (this is particularly an issue when you have unusual business rules or regulatory requirements) but the same approach works for those. 

  3. There are a number of other "Falsehoods Programmers Believe" guides - names, dates, geography - it's basically this past decade's version of the earlier "(thing) Considered Harmful" articles.)