We have recently moved to a new country. For those that have had the experience of moving countries, there is a stage where everything around you seems foreign.
While we are waiting for our “stuff” to arrive from South Africa we were going through this stage - to make it worse, we were staying in temporary furnished accommodation.
A few weeks into being at the new place I came home after work to a very frustrated wife. She had spent the better part of an hour dismantling the vacuum cleaner so that she could empty it out. As she explained, whoever designed it had made a fundamental design mistake. Instead of using a latch to keep the dirt container closed they had used small screws.
On needing to empty the vacuum, she first had to figure out which of the screws needed to be removed (there were other screws that were holding other parts together which made it even more complex). This seemed very impractical however at the time I didn’t think much of it other than strange country!
The other day I decided to let my wife relax while I cleaned the house. Up till then she had been doing the majority of the cleaning including all the vacuuming. Over the last few weeks since we had first spoken about the absurd cleaner she had emptied it several times, each time going through the laborious task of unscrewing the lid. Needing to empty the cleaner myself, I looked at the container and immediately realized on the other side of the container there was a lever that when pressed conveniently flipped open to be emptied. My wife had been blind to this for weeks.
Thinking of this experience and relating it to software development, we often have situations where we just don’t see the design as it was originally intended. This more than often results in us taking overly complex approaches to solving basic problems.
One of the benefits of pair and mob programming is that we get an instant second, third and sometimes fourth view on the design leading to smaller blind spots.