When Microsoft came up with its Heroes Happen {Here} campaign as part of Launch {2008}, I found the campaign name cheesy. “Hero” is something you reserve for people who do truly great things, and hardly fits into the portrait of a software developer — someone like me. A flawed person who makes mistakes, writes bugs, and tries his best to go home early to the family every night even as QA bug reports come pouring in for immediate repair.
Deep inside of me, however, I knew the kind of power, and consequently, the kind of responsibility, software developers had in our hands.
Four years ago I joined the IT department of Philippine National Bank, and was assigned under the ATM unit — that small team (3 of us actually) who maintains the software for the various ATM models (which span three decades of ATM development!) the bank uses. Many days were boring drudgery, but there were some days wherein we are up on our toes all because of some error on the system, some bug that was found, some COBOL report that crashed, or some cases of fraud that required investigation, or your new software was being QAed not by your usual QA staff but by the meticulous, devil-in-the-details ladies of the Audit Department.
Whenever those days ended I always find myself spewing out a huge sigh of relief.
But beyond relief, the experience whenever I step outside of the PNB offices and use its public ATMs is quite exhilarating. It sounds weird, sure, but it was dogfooding (for the laypeople — dogfooding is when a developer using his own software for real world purposes) at its finest. Whenever I line up for PNB ATMs and everything works as intended for everyone, I’d be happy. Whenever I line up for PNB ATMs and something doesn’t work right — the machine is down, very slow transactions, unresponsive networks, I’d personally pull out my cellphone and call my colleagues over at operations to inform them of the problem. Sometimes, just seeing PNB ATMs in far-off backwater towns with the card receptor light blinking happily green makes me smile.
Sure, it sounds shallow. But there is an immense satisfaction to be gained from the knowledge that you’ve got a software working that genuinely helps people — the power that a public facing software application (which an ATM essentially is, tightly coupled with hardware as it is) holds.
I wasn’t able to internalize it at the time, but it was very clear to me that my very own actions as a software developer directly affected the lives of the people using my products. As both a software developer and consumer, I tried as often as I can to exert the effort to write software that, when ordinary consumers use, will satisfy them — even make them smile, because (borrowing from our Mac loving friends), it just works.
I have long moved on from that bank, but the lessons learned from my stint there remain: your software affects the everyday lives of people, especially if it’s a public facing software. When you make public-facing software you treat it extra carefully because a whole bunch of people — from the youngest to the oldest, the ubergeek and the barely computer literate, from the most patient saint to the loudest whiner — will be using your software.
The challenge will be to please all of them.
They will be using your software in ways that would boggle your mind, especially if they can’t easily find their way around it. They will expect your software to work in ways you would never have imagined. They will do things to it that will make it crumble like cheap cookies even if you thought that your software was bulletproof.
The thing is — when your software craps itself when facing users, it’s usually your fault, not theirs. It’s your fault if your software doesn’t have a nice UI that hardly requires a user manual. It’s your fault when your software allows users to do things that they’re not supposed to do, because you let them. It’s your fault when users refuse to buy your software because it’s too difficult to use.
Software developers have a bad habit of distancing themselves from users, treating such people as computer illiterate idiots simply because users can’t figure their software out, but the bottomline is it’s their fault, as software developers, if a user cannot use their software effectively.
Therein lies the power and responsibility of the software developer. Knowing how to make software is power — knowing how to make software easy-to-use, and highly effective, is a responsibility. By knowing and executing that responsibility, a software developer becomes a true hero. By ignoring it, they become a villain.
I am deeply saddened by what had transpired last week wherein some software developers failed to see the importance of their roles and saw themselves as mere 8-5 workers who try to make a living. If you are a software developer — you are NOT supposed to be “just trying to make a living.” You are supposed to be studying everyday to improve your craft. You should be trying out development tools, concepts and methodologies outside of what you’ve learned in school, or is required at work; outside of your comfort zones. You are supposed to converse with everyday users of your software to find out how they can be made easier to use. You are supposed to converse with other software developers and learn how to make good software. You should be receptive of criticisms and take them as opportunities and lessons learned so that you would learn how to make really really great software that solves everyday, real-world problems.
How do you know you made really great software? When, after your software is used by a person who is barely computer illiterate, they smile to themselves and think “that was easy.”
Then — then you could call yourself a hero.