Our agile coach always insisted on being and not just doing, and so, we never took him seriously.
When he said a well orchestrated CD pipeline would help bake quality in code, I didn’t realise the code and its developer can seldom be separated. When he additionally said the code is the documentation, I did not also think it implied that the developer would be the code – a bug specifically. And so, when Subramania Kafka checked in a file, turned blue, pouted, threw up, transformed (or should I say metamorphosed) and finally sat on the ID card that sat on his belly until a few moments ago, we were in for a shock. The coach had left, and so we didn’t know what to do to, you know, rollback.
For all sorts of coding or technical issues, we had Guruprasad Ramanan to go to. He could fix any bug, suppress violation checks and even sneak the code into BitBucket if needed. Most of all, he was the master of the rollback script and so, we needed him more than ever.
Like a good developer, Guru came, sighed and took a long look at Kafka before shaking his head. “How did you say this happened?” he said.
“Kafka checked in his code and the next thing we knew, there was a bug.” Guru checked the unit test report and pursed his lips. “I don’t see any failed tests…”
“No, Guru. I did not mean a bug in the code. I meant this,” Poor Kafka had gone from him to this. We couldn’t let it be for long.
“And that means,” Guru said, crossing his hands in front of his chest,”an edge case. An unwritten unit test, a…” I couldn’t take any more of it and so, interrupted him.
“Guru, we have a build that will complete in 3 minutes. This will deploy the change and that means…”
“No rolling back…” Guru hit the nail on its head. “And Kafka will remain a bug forever.” Meanwhile, Kafka had flown and parked himself on an apple.
“Right. So the only way to help this guy is to run a rollback script.” Guru scanned the repository, the ALM, the WIKI and everywhere else for a link to the rollback script. While the task was marked as complete and the remaining hours were zero, no script was found. Guru sighed. If only we had made a meaningful commitment.
“Alright guys,” Guru turned towards us. “We have a minute, and the only way to prevent Kafka from becoming a bug forever is to stop the build. We can checkout the code, fix the issue and check the file in later. Think lean.”
“But what about the build that is due? Our onshore guys will be livid,” one of the team members was worried.
“Ask them to talk to Ramanujam. He has nothing better to do than to face the music. Let’s get some work done.”
Saying so, Guru turned towards the terminal and frantically keyed in. By then, the build started and the package that had the buggy code was due next. Guru sighed, turned around, pulled the network cable and in a glorious display of network errors and frozen terminals, the build was suspended. With just a file to go before the one that mattered, the team had pulled off the inevitable.
Subramania Kafka fell from the table, apple, bowl and all. He was delighted at having recovered his original form. The team celebrated wildly. Kafka joined them for a bit and then turned towards the terminal. He found the network cable unplugged and the build had been paused.
“Idiots. In all the revelry , they have forgotten the build. Who will face the music from onshore? We are offshore resources. We should always deliver on time. Thank God Guru designed the build engine to be able to resume even in the event of catastrophic failures,” muttering so to himself, Kafka walked up to the terminal and plugged the network cable in. Even as he saw Guru sprinting towards him, shouting “Noooooooooooooooooooooo,” Kafka hit the ‘Resume’ button.