Sunday, February 06, 2005

Confessions of an IT Consultant

I always feel a revolting twitch at the back of my neck every time I see those commercial ads in TV about these computer schools and institutions offering world class computer education never mind the fact that one of them is my alma matter. I mean what does it really mean to be world class?

Like most of us, I was a Computer Science major in college. Sure we had programming, data com, networks, and all the other computer subjects but most of what was covered, you could learn by playing around with it in a week or twos time. Dont you find it so surprising that we had several programming classes and not one class in Testing? I mean considering the fact that when you actually go into projects, about 70% of your time is spent troubleshooting, debugging and testing code! Technically, the easiest part of the job is the programming part!

And even the programming classes werent that helpful. They teach you how to easily do things, never mind if its really the proper way of doing it. And then you find out, things arent really that simple... its never enough that the system runs without error. In reality, theres a bunch of other things that you need to consider like how many users will be concurrently accessing it? What time? What platform do we need to exchange data with later on? What kind of bandwidth do we need? Or should I say.. How do we make the performance acceptable enough with the limited bandwidth that is available? Do we need to poll the middle-tier components? How often do we expect the system to change in the next 3 years? etc. etc.

Why werent all these included in the curriculum? Lets also add some more subjects that would REALLY be helpful like (1) understanding the (L)users (2) functional & technical specification writing, (3) learning to sit still and pay attention at long meetings, (3) project management (yes, everyone has to know a little bit of this), (4) figuring out what language the sales & marketing people use and what planet they came from, (5) dealing with corporate BS and politics, both internal and external (6) extracting help from vendor tech support... good luck with this! (7) accurate time and effort estimation techniques, (8) report writing and lastly my favorite (9) working on impossible and unrealistic schedules. These subjects should be very helpful dont you think?

Ive done my share of conducting interviews and assessing potential team members and the truth is, I dont really care about where somebody graduated. Ive worked with undergrad programmers who were brilliant designers and coders, and Ive worked with graduates from top schools and even guys with certifications who can't even debug their own code.

If you really love the technology, build the experience and learn the skills. Try to get work from companies that really handle interesting projects. A lot of companies will take advantage of you when you start, but a small sacrifice at the beginning of your career will prove to be very fruitful. You will be surprised that youll be worth double (maybe even more) in just a few years. Most important of all dont always wait for company sponsored trainings, have the initiative to learn about what's new!

I remember when I was finishing college, I used to do these small projects... one client asked me to develop a GL (General Ledger) for his business. Back then, I didnt really know that much about Accounting although Ive done some related modules. I came to a friend for help and asked him to teach me how a GL should work, and that I had 2 weeks to understand. He laughed and told me it took him 4 years to learn Accounting in college. How I wish I could say the same thing with my degree. This story never fails to get a smirk of agreement from colleagues coz everyone has something similar to tell. The sad truth is deep inside, we all know that whatever it is that we do to deserve this salary (being world class and all), we certainly didnt learn it from school!