We live in a cruel world. Our profession of software development is very young compared to other fields such as banking, hotels, or carpenters. I truly believe we have taken a couple of wrong turns in our short history. In this blog entry I try to shed some light on it by some seemingly unrelated stories.
The woman in the bus
A woman heads home from work. She has spent all day working hard – actually 10 hours straight with hardly a break in it. She needs to drive back home for 60 minutes. She waits at the bus stop for the bus to take her home.
She enters the bus. There are no free seats available to her. She goes to a restricted area of the bus, and takes a seat there. Immediately the bus driver points out that she is not allowed to sit there. Other passengers start to rally.
The woman leaves the bus, and walks home.
Outrageous story, isn’t it? How would you react if the bus driver was black, and the woman was white? Keep that thought for a minute.
Now, how would you react if the bus driver was white and the woman was black? Keep that thought for another minute.
To be frank, this one was paraphrased from the story around Rosa Parks that started off the whole movement to give blacks the same rights as whites in the USA in the 1950s and 1960s.
Rosa Parks was able to deliver passive resistance. She initiated that blacks went home from work by feet for several months. Just to indicate that they are treated differently.
Eventually they were able to change the public view on blacks and whites in America – though I think America still needs way to go on this.
Not in my contract
I heard the following story from a colleague who was coaching teams in a larger company a few years back. They talked to team members about unit testing, how to do it, and tried to motivate them to essentially apply coding practices from the 21st century, rather than the 19th.
One of the developers went to his desk, opened the drawer, pulled out his contract, and told my colleague that it didn’t state to write unit tests in the contract.
Now, observe your reactions to this story. Keep that thought for a minute before reading on.
Seriously, how can the programmer dare to refuse testing his code? Seriously, he can’t. He is not caring about quality in the code. That guy should be hung, drawn, and slaughtered – shouldn’t he?
Related, he is handing off work to his fellow testers. Thereby he is postponing feedback for the work he is doing. He will have a hard time finding out about those bugs later. It’s even worse than that, because he might start to justify his coding decisions later in order to avoid the tremendous amount of re-work later.
Of course, you scream that that guy should report to his manager – and maybe get fired. Rightly so. That guy does not care about the product, the quality, and the underlying system dynamics in play.
Here’s another story that I experienced one way or another. I consult with a development team for the first time. I notice that several of the team members have a problem with one or two others. It’s even worse. They are close to a witch hunt – of course an instance of the identified patient pattern. Everyone hates those one or two guys on the team since they are clearly not contributing, or helping the team to deliver better software.
I approach the one or two guys. I point out that they need to learn a certain skill to improve the overall team performance. I point out that they can learn from their team members. I point out that they can even teach their teammates some of their special skills.
They still refuse to do so.
Again, take a minutes to examine your reactions to this story before reading on. I will wait here for the time being.
Just a bit.
Ok, here it goes. I was speaking about several situations I faced when dealing with testers on agile teams. The skill they refuse to take on is the programming skill. They are not willing to pair up with a programmer – to learn some of that – to teach them some of their testing skill.
How do you react now to that story?
I wonder how we started to treat testers differently to programmers. The programmer that does not want to learn anything about testing is cursed, hates, and brought to the stake. The tester that refuses to learn anything about programming is promoted to test manager.
Seriously? Where does this underlying value system come from?
To me, there are two major factors involved here: history, and cognitive dissonance.
Historically our industry suffered from good people in the 1970s and 1980s. That was also when we started to automate a couple of business process. At that time that people that were eventually replaced by automation were asked to become the testers of the software they were replaced with. Maybe they liked it, and became testers themselves in the end.
Typically these testers don’t have much programming know-how since they came from a totally different background. Skip forward twenty years, and we ask them to learn programming. Unlikely to work.
Cognitive Dissonance is cited by Leeds & Weinberg in Computer Programming Fundamentals. My paraphrasing of it is that a programmer cannot test effectively his own code if he knows what he has been coding, anyways. The historical solution that our industry came up with was to separate the person, team, and even the department that tested the software compared to the one that wrote it. Nowadays this is the prevalent solution to deal with cognitive dissonance. Some call it independent testers. Others call it the four eyes principle.
The problem I have with this, is that cognitive dissonance is taken as an excuse in order avoid learning programming, while programmers are expected to learn testing on their end.
Note, that several experts in the testing field recognize that programming skills help testers to large extents. I have read about it in Basiswissen Softwaretest, a German ISTQB book, in Lessons Learned in Software Testing, the context-driven foundation. I am sure there are others out there. The bottom line is that all these experts state basic programming knowledge helps a tester to improve their testing. How come we still use that excuse to not learn basic programming skills? On face value, it would improve our testing skills even further.
One thing I learned from my father was that learning does not end after your first education, rather it starts. My father was a car mechanic. He didn’t take university courses. He didn’t study computer programming. Though he knew that he needed to learn all his life – even after finishing his apprentice years. Unfortunately some of the higher educated folks do not seem to have the same attitude when it comes to learning. Sadly so.
So, what additional skill did you learn today? Which one are you going to learn?