A brief background about myself, I am a normal human being working in the IT field for more than 15 yrs now. I have worked with a variety of technologies starting from systems programming, C/C++ programming, entered into java programming, learning PHP, JSP, ASP, VB, VC++, MFC and so on as technologies kept coming into the market. To tell the truth I have tried all sorts of domains such as CDROM recording software, Materials management, supply chain management, order management, enterprise management and so on and so forth. I have been motivated enough to try out my hand at a few self-thought up projects also, have been motivated enough to provide innovative solutions for some of my companies. I have worked at really big MNC companies to small start up to medium companies.
My stay in the current place has been, “one big learning”!! Let me clarify, learning has nothing to do with technical or scientific learning. It has taught me how those things which we all learn about competition, collaboration, automation, versioning and all the good things we learn can make a project successful can, really be a boon or a bane based on how far it is taken.
Take “Collaboration”. How many of us in small/medium sized companies thought, “If I had only got this info a week back!!!”… or thought, “why can’t there be a forum in which project updates are posted so team members are kept in loop!!!”. Yes, I have also thought about this so many times in my previous companies.
Imagine my surprise when I first joined this company and I find there are mailing lists that inform people of just such things. There are WIKI sites where documentation is present for any and every feature of the product. I thought to myself “oh what a nice system, now this is just what we needed in my previous company”.
I was pretty naïve to the working of this company then and little did I know what it really meant!!! Oh don’t mistake me, sure it is such a nice thing, but there are also such things are information overload. Human beings can only take in so much information at any given time, overfeed them with information and it is as good as not having that information at all.
Imagine this there is one mailing for every other feature U want. There are a few hundred features in a product. Imagine every one of this features has a mailing list created. Each and every mailing list gets a few hundred emails every day. As a developer I have no clue which email is important and which not. So, I have an information overload, within a span of 10 minutes I spend on my emails in the morning I need to decide whether I have to read the email or not. Best approach, I just move it to a folder, don’t read it, but is saved. I come back to it when I want to use it. But, the problem, things such as development process changes, build tool changes etc., etc which are essential to everyday development is also posted in one of these myriad of mailing lists which I have conveniently moved and hence unless something breaks I have no clue something has changed.
So in general most of my time goes in searching mailing lists for small things such as development process changes, my day to day working framework related changes that has affected me and so on. In fact in this scenario, rather than a mailing list being a boon has in fact worked out to be a bane. A piece of work which, had developers just talked to each other, or sent out email personally, or chatted, would have taken a day to complete, takes 2 or even 3 days because they have to first know that somewhere in one of the mailing lists this data is present, search of the mailing list or WIKI site where it is present have to understand the content and be able to adapt it for the situation at hand. If cannot understand, have to find ways of contacting the developer who has created this. How does this happen, but ofcourse by sending email to the mailing list which the other person just like us all has moved the email to another folder and conveniently ignored the urgency of the issue.
So, most of the time I have found this method has prevented me from getting information I really need, but has given the other person the convenient excuse to exonerate themselves by saying that they informed everyone.
Take “Automation”. I am sure everyone in the IT field has thought “ah I forgot to run that test case, that is the reason it failed in production” or “If only I had time I could have put down a script that will run this test cases always and run them for any change in the code”. I am sure some of us atleast attribute long quality assurance period to lack of automation in test cases.
Now let you give me the other side of the story. Imagine this, I arrive into this company from one of those companies where automation exists, but to a very little extent and most testing is done manually and I find that here not only are automated test cases existing for every feature, but also is run automatically when a new code label is published. I say to myself “oh wow… now I can concentrate on my functionality”. But wait again this was within the first year of my arrival here. Now comes the best part, we need to run these test cases and show that we have not introduced any regressions when checking in code into the code base. Very good, sure it is the correct attitude. Then starts the fun, we need to run these tests before checking in code. Good, but then the product has hundreds of functionalities, do we have to run all of them. There are thousands of test cases. Which ones do we need to run? What if they are doing development in parallel, there exists bug that causes their tests to conk out, but our test cases work, should I check in, should I not? Oh it takes such a long time to run all the thousands of test cases.
So, in effect from my experience I have found a code that could have developed with 75% working code with lesser automation and more manual testing in a months time takes around 3 months to develop with the same 75% working code and full automation.
There exists lot of good things which help in the execution of a project, but “Take something to the extremes and instead of working as a boon acts as a bane”. Finding the right mix is of utmost importance.