Software Development for Cheaters 101

I recently came across this post titled “VW” by Robert C. Martin, and it’s been like a written earworm for me over the weekend.

As a summary: we all heard that VW cheated on emission tests by having their cars recognize if they were being driven in lab conditions and switching into cheat mode.

Of course people are calling for heads, preferrably on stakes, and it looks like the software developers who wrote the cheating software could be the target group for decapitation.

Now, according to Robert THE REAL ISSUE is that the software developers knew what they were doing and that they should have refused to write this piece of software.

I suppose you could make the argument that these programmers did not know what they were doing. That they were simply given some specs, and they implemented those specs, and didn’t know that they were accomplices in a case of massive fraud.

I think that argument is even more asinine than Michael Horn’s. They knew. And if they didn’t know, they should have known. They had a responsibility to know.

And this is what’s been rolling around in my head: they knew, they had a duty to refuse.

You know what: I strongly disagree.

I don’t think that the argument that the programmers didn’t know is asinine. I think it is quite possible that they didn’t know.


Let’s imagine the following scenario: my project manager — let’s call him Tim — comes to my desk and says “hey, Daniela, can you have a look at ticket VW-1234? We need a module that’s listening to several data streams and depending on a particular constellation of values, it needs to return true or false. Also, it’d be cool if the target values could be changed in a config file”.

Okay, so the ticket tells me where to find the data streams — say the current angle of the front wheel, the current external temperature, and the average speed over the last ten minutes. So, if the temperature is between foo and bar, and the angle of the wheels hasn’t changed in ten minutes, I am to return true, otherwise false.

Should this ticket make me wonder?

Anyway, I am already zoned out on my task, so I don’t notice that Tim the PM has toddled over to my colleague Jimmy and tells him “you’re doing VW-1235 next. Daniela is writing a module that will tell your module yes or no, and if you get a ‘yes’, you need to lower the thingamagic and warm up the dinglehopper”1

So Jimmy writes this module. Should this task have made him wonder…?

Somewhere in some lab, a researcher is told “hey, I know this is going to sound funny but … would it be possible to recognize from the car’s data whether it’s being driven in a test lab…?”

So, unknowingly, he’s going to identfy the data that will be entered into the config file of my module which in turn will tell Jimmy’s module to switch the car into cheat mode.

Should we have known?

Could we have known?

Hm. Maybe Jimmy and I meet at the coffee machine. “soooo, you’re writing the module that tells my module to switch on or off. Out of idle curiosity: based on what factors?” — “oh, the steering direction and the environmental temp and a few other data points…” — “oh, okay. BTW, did you see the game last night?”

Especially taking into account that the tickets VW-1234 and VW-1235 are just two out of several hundred tickets in a big project, it is very unlikely that Jimmy and I would have been concerned … and that is assuming that we weren’t lied to about the purpose of our single modules (while being kept in the dark about the purpose the whole project)


Because, let’s see, if *I* was a bigwig at VW and I needed a cheat mode in my Diesels… I’d make sure that the foot soldiers don’t know. I might even lie to them.

Maybe Jimmy was told that his module switches the car into “environment mode”. Maybe he was told my module monitored the smog levels.
Maybe my test data included sub-zero temperatures. Maybe this lead me to think that Jimmy’s module would pre-heat the oil to keep the motor from freezing if the temperatures were getting below safe values.2

What I am saying here is that it is quite possible, if not even probable that the programmers didn’t know. As far as I am concerned, it’d be downright asinine to create a papertrail saying “oh BTW, we need a cheat mode kthxbye”
It was a matter of time until this came out, and then you don’t want seventy-two programmers to come out of the fog, waving printed-out emails in which you ordered them to implement a cheat mode.

Because us programmers, we aren’t stupid. If there’s something fishy, we *will* raise concerns, and we *will* demand certain tasks in written form to cover our asses.
A long time ago in a galaxy far, far away a PM decided that the fonts rendered in the browser looked like ass, and told me to use text in an image instead because he wanted anti-aliasing. Yupp: copy text in an image m(
I told him several times that that was a lousy idea for about fifteen reasons, but he insisted. So I told him to write me an email with this task. I told him that this idea was so stupid that I wanted it on record that this was not *my* idea.
I did this over an aesthetic issue on some advertising microsite, just to put this into perspective.


My conclusion: it is quite possible to take Project Cheatmode apart to a point that the single modules are so small that their purpose is obscured and don’t raise red flags for the individual programmer. Also, it is in everybody’s best interest not to tell your programmers the truth about Project Cheatmode.

Nope, I don’t think it’s asinine to believe that the programmers didn’t know.


The questions of *who* knew and whether project managers need to be aware of their ethical responsibilities, whether a group of rogue programmers could have done this and whether programmers really need to investigate how every single bit of their code is used, that’s fodder for follow-up posts :-)



1. as you may have noticed, I don’t have the *faintest* idea about cars
2. okay: that’d be silly because then Jimmy and I would have a weird moment at the coffee machine because we’d catch them in a lie

Leave a Reply

Your email address will not be published. Required fields are marked *