Sunday, April 20, 2014

Emotions have no place in professional coding...

For the past few months I have joined different team. The effort comes form the management to increase pace of a certain product our company is building. Of course I can on my blog criticize my company on waking up almost two years later on building this product, but again that will be really against what I have learned recently.

The idea of working with a different team was initially scary. Mainly because after having become dinosaurs in building UI on a specific platform, switching to a different platform, learning new technology along with different programming languages was freaking me initially. Yet there are times challenges are right in front of me and all I have to do is stand-up. And here is the need to not think 'emotionally'. Questioning oneself with all the doubts in world - "Whether I would be able to learn this or that?" - "What if I make a fool of myself?" - "What about if I code really bad in the new languages I would learn?" -- all of this were the exact emotions bubbling to the surface. How did I overcome this, by reminding how I got selected in the first place to this company seven years back. I used to work in completely different platform (AS400/Mainframes) with a very very tiny component which was in Java. The java part was just maintenance with no new development but scope for lot of improvements. Like any service company, innovation wasn't the need of the hour but keeping customer happy was (as always). Yet as a young kid with time on his side, ventured into the unknown creating something unique (small but unique). The customer liked it and I learned Java to some extend (still learning...) So what really happened here...I was not emotional, I was fearless, I was thinking like a college kid in mood to do things, giving it a try without the fear of failure or success. 

Seven years down the line I did something same. realizing I have become dinosaur of this Java technology, I liked the idea of doing it all over again. 

To start with, I saw an example of someone really senior in the team I joined keeping his emotions in check. What the management decides in future, whether we will take over this product or will continue to contribute is debatable point, but this senior guy welcome us with open mind. His idea was simple, share the knowledge and let the product grown, right now that is the agenda and all the future thing are not. Had he gone over the range of emotions and arguments attached to that, "why should we give away our hard work?", "Is the senior management questioning our capabilities and want outside parties to work on it?", "We asked for the same thing two years back; why they waking up now?"; we (the whole team) wouldn't have reached this far. 

During the whole process of working in new team there was a different activity of people management going around. For me it is troublesome and something which I can't talk-out-loud. No, it is not about the last post on my blog, but yes everything to do with my company. The only part of it I can say out here in this public forum that it has impacted me so deeply that I have lost respect of the my company's (in India) management completely. I am not involved with this management on the day today basis and are not part of my development management group. The whole set of emotions which I am feeling (and will keep on feeling) are something which has impacted me professionally. It did cloud my judgement on one occasion in making what would be the right choice for the product. And from that I have learned, emotions are the devil which will stop you in doing what is needed and waste time, energy and lot of other resources pondering over it in-turn resulting in bad choices. 

There are two more instances for which I am proud that I prevailed over my reactive-emotions. First was when my own team poked me with useless questions about whether I am following their progress while working in different team and making remarks which had nothing to do with my questions. All I did was question which will make sure our product is delivered with the features we are promising. Very happy to say, I adapted quickly, questioned the right guy and aligned it quickly. Had I ponder over the emotions the team managed to generate, I might have been late in our promise. 

The second of situation is still in progress, it is the reason why I had started the blog in the first place. We all love the code we write; we all hate when someone points out that there is serious (or not so serious) bug in our code. But does it really matter whether hating or loving code will make our product better. There are product owners who are supposed to envision how the product evolve, there are senior architect (very very senior) who overlook the information flowing in to respective team architects for concept/design and finally there are developers who get the code rolling. Because of this long chain of information sharing, smaller things are bound to be overlooked. Some where someone will question about these smaller things and it is possible we reach state of unknown. So as a developer with few months of experience (of course the new place has new technology) questioned seasoned campaigner who in my opinion has the most brightest of ideas when implementing solutions. Why I questioned it? Because I checked the first set of emotions of 'what will he think?' or 'Am I making a rookie mistake'.... Then post his reply, which I felt strange, I checked my emotion again of 'feeling-strange'. I questioned again about the need of creating something which the framework already provides. If something isn't working by the framework's logic itself, then something might have gone wrong in the way our logic works. Or we just might have discovered bug in the framework's logic. I didn't let my emotion cloud my statement. I explained what I understood of how-to-use-the-framework and let the team's architect to make the call. If similar opportunity comes in future & I have to make a call this instance will assist me and I will have a baseline as to how others thought about the different ideas pertaining to this product. 

Lastly, how would my reaction be if the team's architect didn't like my approach and want to follow the existing behavior? I should debate without letting emotions getting better of me. And in the end let go irrespective of the outcome. Some what during the process of writing this blog, I have let it go. I learned something, I did something for making product better. I still love the code I wrote and I am still trying to keep 'emotions' & 'professional-work' in two separate chambers of my head :) 

No comments: