PS names have been changed.
It wasn’t a great landing. It was so hard that water started leaking out of the bathroom in the rear of the ancient Fokker 100 that LAM (Lineas Areas De Mozambique) operated on it’s route between Jo’burg and Maputo. I was a twenty year old still sporting long hair (in a 90s middle path) and a beard, a temporary passport in my pocket that I had just got a few days ago and an obvious nervousness that reflected the fact that I had just been sent out to a client site to try fix a problem with a product whose code I had never seen before.
It was late September 2000. I’d been sitting around for a few months in my new job with very little to do, while my colleagues tried to juggle getting me up to speed and fight the numerous fires that were flaring up all over the place. That is until the amount of fires had exceeded the amount of people whom they had to deal with them and the only person left available to send out to the client was little old me.
The result was that a few days later I was bouncing my way from Maputo Airport’s runway, over it’s dilapidated streets in a beat up old Mercedes 200 taxi to the hotel Rovuma in the heart of Maputo, anxious about the fact that I had no idea what I was going to do when I went to see the client.
This – I would say – was effectively how my career really started some twenty years ago now.
Much has changed in that time but mostly it’s not really different. To use the charming South Africanism: “It’s different but same, same”.
To illustrate, a few months earlier one of my work colleagues was extolling the virtues of DCOM: Microsoft’s distributed object framework for COM objects which was all the rage back in 2000 and it was quite important if you were developing in Visual Basic as it made for vital padding of your CV.
In reality DCOM was a steaming pile of dung.
Sun Microsystems and rest of the Cabal of Java acolytes would go on to take the concepts from this pile of dung and replicate it into a Java flavoured pile of dung commonly known as Enterprise Java Beans and – like it’s distant DCOM cousin was important padding on your CV if you were a Java developer.
Roughly a decade and a bit later some hipster coders would rejig these ideas by taking some code, slapping a REST interface on it and calling it “MicroServices”, the main difference is that now developers need to pad their CVs with this regardless of what tech they develop in.
None of this however mattered at the moment as I prepared to go meet my client the next. Now while the hotel Rovuma isn’t much to look at, it does stand next the beautiful Catedral de Maputo. It’s A cathedral of Gleaming white spires backed against the azure Indian ocean only a few blocks away from where I was standing.
It was quite a beautiful and and tranquil scene inside an otherwise rundown Maputo still trying to discard the trauma of a disastrous civil war that brought it to ruin.
Something to admire while I was putting on my tie the next morning.
Now here is something I can say is different.
If I look at the typical dress code of most development shops it’s quite remarkable how informal it has become. When I started working, smart casual meant no tie and no jacket to your otherwise formal work attire. However I was still required to wear a tie when visiting our clients although I was spared the torment of having to don a jacket in the hot African summers that we operated in.
I’ve often reflected on this and it’s striking how the decline in formality stands in contrast to the elevated status software developers now enjoy.
At that stage Software developers were still seen primarily as pocket protector clad awkward nerds who were just another cog in the great corporate machinery of your average company.
To be fair though, this was already starting to change a bit with advent of the Dot Com Era that was still going at full tilt back in 2000, which had for the first time turned software development in to something that was – dare I say – cool provided that you were coding HTML in Notepad.
Nevertheless we were still at least expected to dress like everyone else and certainly try look as if we were moderately professional especially when having to go work at client sites.
Now the client that we were going to see was a small bank in Maputo.
They had purchased our Middleware Application in order to integrate their tiny ATM network into the Core banking system that my company supplied.
If you know anything about ATM systems you have the ATM machines which interface into a Payment switch. The Payment switch in turn routes the transaction to the relevant bank who must then process the transaction.
Unfortunately there was a reason that my colleagues were always firefighting. The general quality of the software was dung. Furthermore is was written in Visual Basic 6 and COM which was a pile of dung. It also ran on Windows NT server 4 which was also a pile of dung.
You could say that we did full-stack dung.
This fact was not lost on my colleague; “Darren” who was accompanying me to the client. He was a consultant on the Core banking system and responsible for implementing the changes needed in the system to make the ATM transactions work. He had felt the downstream effects of our effluent orientated software numerous times and made his views on my Architect and Team in general quite clear to me on a ongoing basis.
Darren had just had a baby and was rather upset about having to ship out to Mozambique at the last minute to deal with the mess my team was producing.
For my side, I’d had been hired for my Java skills with the idea that I would start rewriting the software in Java primarily so that our clients could run the Application on the same hideously expensive Big Iron server which normally ran the Core banking system.
Back in 2000, Big Iron meant Unix and Unix meant Solaris which – in turn – meant a Sun MicroSystems Starfire 10K server with 64 individual 64-bit Ultrasparc II RISC CPUs running with up to 64GB of RAM or similar.
The base model retailed for a few million in ZAR in 2000 however if you feel nostalgic you now can pick up one of these refrigerator sized servers on Ebay for a pittance.
I was chomping at the bit to get cracking on the Java version so I could run it on a nice big Sun Box like the one I described but here I was stuck in Windows NT hell hacking apart visual basic code.
I’ve often reflected over the years on the reasons as to why the quality was so bad but it is certainly true that practices have developed since then. For one thing the idea of writing unit tests for code was considered “cutting edge” at the time, a practice that – if neglected – would earn you my ire if you were placed on my team right now.
Now normally the first thing that happens when you get to a client site in a crisis situation is a meeting. This is used by the Executive Sponsor to get all the relevant parties, ourselves and all other vendors together and make clear their displeasure at the range of issues that they are experiencing due to our lack of competence. To this we all sagely nod in agreement that we are incompetent. The Executive sponsor then re-assures all of us that we are all part of the same team and that they are confident that we will deliver despite our lack of competence. The meeting will then be adjourned with Executive sponsor patting themselves on the back for a job well done while applauding themselves for their decisive action and leadership.
Once that was done I got to meet “Adriana”. Adriana has been put in charge of administering the whole ATM integration for the bank. Her qualification for the appointment was the fact that she knew a bit about the Core banking system. Consequently she got the job of overseeing the ATM integration by being the least ignorant person, kinda like when your Mom asks you to fix her Pastel setup because “You know computers”
Her lack of understanding was greatly amplified by the fact that she knew very little English and my Portuguese was non-existent. Communication included a lot of hand waving, pointing and some impromptu charades.
To illustrate the depth of the problem, when I subsequently interacted with her over the phone I once asked her to “mail” me a screenshot of an error message that came up when starting the Application. The screenshot arrived a few weeks later via registered mail having been diligently printed and neatly folded into a crisp brown envelope. It never occurred to me that the colloquial nature of my parlance could mean anything other than sending me the screenshot by e-mail.
Ah yes e-mail. The simultaneous boon and bane of our existence as corporate animals. Not till the advent of WhatsApp groups has so much been miss-communicated to so many irrelevant people so efficiently in all of human history.
Its quite amazing how dependent we still are on e-mail in the 20 years since I started working. All that has improved over the years is our ability to get our e-mails wherever we are in the world. We can now be CC’ed on irrelevant email ping-pong matches 24 by 7 whether you’re on Edge in some backwater on your budget Android phone or at home on your nuclear powered gaming rig behind a fat fiber pipe with an array of monitors that would make a NASA flight controller envious.
Back then I could safely forget about my all the “urgent” emails I got after 5PM all the way to 8AM the next day when I got back to work after a good nights sleep. Ignorance is bliss as they say.
After all that I remember buckling down and trying to fix the problem, this is where things get blurry I actually cant remember what the exact nature of the problem was anymore.
What I do remember is having our executive sponsor breathing down my neck on the one side, threatening to publish to the world about what a bunch useless idiots we were, and Darren on the other side constantly reminding me what a bunch of useless idiots we were, all while learning the Visual Basic debugger on the fly.
Trying to piece memories together the issue was most likely to do with the way a dependent COM library entry was written to the Windows Registry during installation. I remember that this was an ongoing issue that we could never quite iron out. It also meant that going forward we couldn’t rely on our clients to do the installation themselves and that would put more pressure on us.
It’s worth stating, our Architect – who was a very smart guy – had a very particular view of how software should be written. The COM library in question gave him some paradigms he’d used in another Technology called Pick. Consequently he imported ways of working from that technology into the Visual Basic COM world where they no longer made sense causing us developers a lot of grief because he simply couldn’t change his way of thinking.
This is not first time I’ve seen this and still continue to see it all the time. One thing that was quite common in the early days of Java was for ex C++ guys to try butcher C and C++ paradigms and practices into Java for memory optimization.
Unfortunately for C++ developers life simply has no meaning if you can’t bareback your memory.
Looking at the bigger picture this happens in the technology itself as well. While the Java guys where copying DCOM, Microsoft was busy ditching COM as a whole and copying Java by creating .Net.
In many ways this reflects a sad truth about both .Net and Java. Their effort to one-up each other has ended up in many missed opportunities to truly innovate and progress the art of development beyond what came before and 20 years down the line they are best known for the “dependable” but boring platforms for companies.
They’ve become the development equivalent of a white Toyota Corolla.
After we have finished at the client we left and got back to the Airport quite early. Darren was keen to ensure that tardiness would not be the cause of not being able to re-unite with his nascent offspring.
Now Maputo Airport – back in 2000 anyway – was completely open. You could walk onto the open rooftop with only a railing separating from a climb down onto the Tarmac and Runway. This also allowed you to see directly into LAM’s workshop as they worked on plane maintenance.
Myself and Darren were flying back on Jo’burg on an SAA flight, but that was only after the departure of the earlier LAM flight to Jo’burg which used the same Fokker 100 we used to fly from Jo’burg. This Fokker 100 was now the plane that was being worked on in the maintenance shop.
There was clearly a problem with the engines because the mechanics where continuously firing it up and every time they did, the engine would hit a certain rpm and then rather ungraciously shut down making a sound reminiscent of a Disney cartoon as it did so.
This scene was being observed by the passengers who were scheduled to take the LAM flight back to Jo’burg created a rather interesting atmosphere of Fear.
I’ll never forget the expression that most of them wore, it was the look of someone who was contemplating the fact that the future was suddenly less secure than what it had been a short period before hand.
I’d see this expression again over they years, like when September 11 happened a year later, or when the 2008 financial crisis hit.
None of this mattered though as I jetted home, my future seemed pretty bright.