Showing posts with label software development. Show all posts
Showing posts with label software development. Show all posts

Saturday, February 19, 2011

Jack in the box


“You are lacking out of the box thinking?”, the statement very common in our white collar profession. The statement mostly used when politicized situation or performance review. Actually what exactly is “out of the box thinking”, as per Wikipedia

“Thinking outside the box is to think differently, unconventionally or from a new perspective. This phrase often refers to novel or creative thinking.”

There are several engineers, developers’ gets this feedback regularly but honestly they don’t know what exactly the reviewer meant. Based on my opinion, “out of the box thinking” is something innate ability or one has to go through elite schooling to get that, so who ever lucky to born with that are the best? I think there is something wrong with this notion, we are pushing people who are not really lacking “out of the box”. But there is something they are missing too. What is that? I think the answer is, most of them are “above average but narrow minded”. Narrow minded is not a bad thing; it is just a trait which can be easily changed.

Even a law written by several top-notch lawmakers and reviewed by several pundits, we have loop holes here and there. So are they missing “out of the box thinking”? I don’t think so, law should cover all possible permutation and combination but most of the law lacking this, which is, mainly because some “narrow minded” compromise and some "narrow minded" people genuinely missing to see some big picture. The same applies to software development also, developers miss to big picture due to narrow minded not because “out of the box thinking”. What we need is training to change that character not unnecessary overloaded labels which are unable to change.    

Sunday, January 30, 2011

Above & Beyond

Last decade’s most successful NFL organization is without a doubt New England Patriots (Pats). Even though their Super Star is Tom Brady, but Gem of New England Patriots team is Kevin Faulk. First of all, why he is called Gem of Pats?

1.    Loyal to his team, 11 years with Pats.
2.    3,550 rushing yard.
3.    16 rushing TD
4.    424 receiving and 3,667 receiving yard.
5.    Receiving TD 15

Based on his statistics, one can easily jump into conclusion that he is all-round player; hence he is qualified for Gem of Pats title. But the truth is different, Kevin started his career as Running Back, he was an excellent running back. During his tenure with Pats, over a period of time, his coach asked him to do other jobs also like full back, punt return. Those are not glamorous position in NFL, but Kevin took those jobs without any hesitant rather than quit to join other team as Running Back, which made him a Gem of his team with his astonishing all round performance.

Kevin’s success story makes me think something else which is very important to our changing world and lifestyle. Now we are living in a flat world where the luxury of doing one task per one human is gone. We can’t say “my job description is XYZ and you are asking me to do ABC”. The tasks outside of job description also have to be done as long as we can do it with or without some self-learning. 

There is nothing wrong that a developer tests an application, a architect helps developing some small piece of code, a manager runs some test scripts, a QA engineer debugging a code, a store manager checkout customer while sales clerk out for an emergency.

Sunday, August 01, 2010

De|Bug|er

We are living some where in starting to mid-point of technology revolution, still a long way to reach ‘apogee’. But the effect of technology is enormous, from fast food ordering system to NASA Space Shuttle orbiter maneuvering controlled by technology.Every-where and  every-one depends on technology in one way or other. Just look back a decade ago, the nightmare we faced during Y2K era, we were thought world going to be standstill. But thanks to ‘Sang-Froid Debuggers’ emerges from various part of world to make our life easy by providing timely solutions. 

Whether we like it or not, since technology is immature, no bible like guide to develop code, no process (if we have one, people tend to hide behind it) the systems we develop comes with some risks. One of the main risk involves are A)Manual intervention to avoid some possible bugs B)code issues hence system acting weird when some conditions met.

The risk (A) can be mitigated easily but what about (B), to make things worse, most of time the system’s knowledge base may not even exist when some bugs appears.In my experience, there were some bugs took 12-18 months to fix it,of course from very legacy code. But i think we have to do somethings creatively to decrease process time.

Here are some steps to become Sang-Froid Debuggers(assume new developer on a old legacy system without any knowledge base around)

1. Code Psychology : 
One of the most and foremost way of finding and fixing is, understanding developer’s psychology in terms of how s/he writes code,his/her thinking pattern and his/her deviation from “standard” way. The best of doing it is by reading code from left to right, for software developers reading code is most productive than documents.

2. Team Enthusiasm : 
Next level to become ‘Sang-Froid Debuggers’ is understanding teams enthusiasm,of course we may not know until we found some design documents or some real time stories from current co-workers. First of all what i mean by team enthusiasm, (please read 2 nd para first 2-3 lines) due to that each team try to develop system different ways. Some of them very enthusiast towards open source. If that's the case, try to understand, how tightly the system integrated with open source components and start documenting each one’s known issues. Based on my experience, most of the “late hard to fix bugs” were from open source components, mainly we don’t know how to use it.

3. Raising Flags
We all want to fix bugs which are assigned to us by only us but sometimes we need help from others. It is better to ask help from others whenever we needed. I knew some horror stories like one guy took 3 months to troubleshoot an issue, he couldn’t but the other guy did it with in 3 hours. It was not because the first guy was bad, second guy experienced the same or similar issue elsewhere.

4. Early detection and prevention
If we did better work on points 1 and 2, smart developers can sense the system vulnerabilities, start documenting it and start enlighten others.Start some brainstorming for prevention of unwanted bugs from legacy system.

Saturday, August 29, 2009

Book Review : Refactoring by Martin Fowler

Brilliant book and must read one for Software engineers and Java developers. Why i emphasis this book? This book would help us to communicate efficiently. When i start reading Gang of 4 book and Head First Design Patterns, i start wondered that "hey, we did that 2 years ago and it should be called "Factory Pattern" etc etc. Giving an industry standard name for an activity is really important and it is the progression of IT industry. Once we are all familiar with naming and concept then our job is very easy to perform and make quality software. Here after i no need to explain moving method from a class to other class because of blah blah reason, just refer Martin Fowler refactoring pattern "Move Method(142)". Through out the book, i was excited to see Martin Fowler captured everything in detail related to refactoring which we facing in our day by day activity.

Nowadays IT industry code development become static, thanks to current economic downturn and baby boomer's retirement. But the software usage is exploding year by year. The software which developed during IT boom period early this decade is still in use but not scaling up with demand. The only solution now available is to refactor it and make it scalable. Not all of them afford to write a new software from scratch again thanks to economic downturn.

Refactoring by Martin Fowler gives you feeling that he is directly talking with you as a Java Architecture or a team mate. One main thing of refactor is "pairing teams" and "solid test suite". Why pairing teams is important for refactoring, we have to discuss in detail about what kind of refactoring make lot of sense. Based my experience, we have to move step by step process to achieve solid refactoring and always keep it simple.

This book gives you a in depth knowledge of refatoring and most of it, we already heard from our senior team members and architecture, i mean we already followed it because of our experience. But this book consolidated all of them and give them a name and giving some other techniques to refactoring also. Again a must read...

Thursday, June 25, 2009

Software Development – Ego Driven – Part III

In almost all white-collar professions, we have to deal with Ego, Ego is a trait mainly driven by superiority and some inflated feeling of self. Ego is a main driver of one’s growth and without ego there is no improvement. But ego is very complex subject, I’m here try to present my thoughts and how to work with Egoistic environments. Ego is great tool for improvements hence can be used as weapon whenever required. Too much Ego is not okay because that’s main team work killer. As a rule of thumb, too much egoistic person should be an individual contributor like sales, decision making and use the egoistic to beat outside market competition. Here are some more points about egoistic.

Polite or Bully: It is very hard to understand whether a person really bullies or showing bully behavior out of ego. A same person act very polite with “inferior” than one and act very aggressively or bullying with “superior” than one. But the reality is all are equal and everything is illusion that one is above and below. It is very tough to work with those but flexibility and showing some weakness of our own to egoistic person helps and improves team environment. One interesting story is, I know a sales guy who is very egoistic and very successful but always do some mistake in total price or ask some stupid questions like “John, how many zeros for millions”. The secret is he wants to work with others very friendly manner hence some time act like he is also a prone to mistakes and he is not a super human.

Can Do or I can do everything: Can do attitude is really great and positive but we can’t do everything possibly under the sun. We have to depend on others and our success relies on how others also willing to working with us. For example, Software we have initiation, plan, design, code, test, deployment, support phase and each one required some team effect from everybody. Even though we were experienced developers sometime we need a support from a system admin who joined just today, so some level of politeness required to get some help from him/her.

Balancing Ego: Actually we are all ego by birth, but getting mature and interacting with others help us to taming or balancing ego. My best advise to use ego as weapon or we are in team environment and want to balance ego, we have to start using “we” instead of “I” and share credit with others.

But any ways not all are same, we are all having different traits and Ego is not a bad one, as i said it is major factor for improvements and use it as weapon but not always. Actually my tactics would be, when ever i play cricket i would be always with non-tamed-egoistic caption because i always want to be with winning team. Here I’m ending my psychology side of software development series.

Sunday, June 07, 2009

Software Development - Stress Management - Part II

Our life is full of surprises and twists and turns, no one in this world meticulously plan for future, day by day activities etc. All we need is a brave heart to face unexpected. Stress management is really important in our life. We should not get stress easily and burn out ourselves. When i started software development, industry suffered a major setback is managing stress. But now due to the maturity of industry stress is not a big issue. What causing stress, actually stress is unpredicted one. For example, one is very easy go on many things but get stress whenever Christmas season is around the corner, major reason is how can i handle shopping for massive relatives, friends, kids? but s/he may be handles $10 million fund in wall street.

Stress can cause major damage to health, mind. One more important thing is, stress won't show up until it grows bigger and bigger in our own mind. Back in India, i wondered that my dad, uncles other relatives who ever working with public sector never complained about Stress but self employed and private sector complained about stress. What is the connection between them?. Actually one important thing is, India freedom of speech, expressiveness is higher in public sector companies with compare to private sector, since employees enjoyed free to talk, free to say no etc in public sector, which helps them to free up from stress. Based on my opinion, here are some major points in terms managing stress.

1. Say what we can do, talk from our own mind, don't commit more than what we can achieve.

2. Learn to say NO, but not always NO. Balance between Yes and No is really important to manage stress.

3. Treat others as friends/helpers not competitors, competition leads to race which leads to stress.

4. Plan ahead, create a step by step guide to achieve end goal. Get professional help if we need to.

5. Go to new places and learn about new things.

Friday, May 22, 2009

Software Development - A new series 1

A long ago, a friend of mine argued with me that Software development is like painting and developers are painters. As per his view, software development should be done by artists. I straight away disagreed and his argument was immature and naive. Painting and artist are gifted one, not everybody gets those and Software development is a professional job, so it doesn't always required some gifted person to develop it.

Lets take a example of construction field, it is heavy physical intensive work, it required some 250 lbs and 6 feet to perform the job but that is ideal. If a construction company wants to hire only 6 feet and 250 lbs, they can't hire enough employers to build a house and can't make profit. They want to hire any body physically fit for work and then divide work that heavy object lifting job goes to 250 lbs and some arranging, nailing job goes to other below 250 lbs. This is the system, this is how our society work, no body feels discrimination if 150 lbs not getting 50 lbs lifting job.

The same with software development, for a minimum level of coding one should have fundamental strong on the programming language, some working knowledge of database, a decent level of knowledge of Linux/Unix. The distinguish comes as form of expert level, which can be achieved with in 6-8 years of experience. There are 10 million software developers are here in U.S, all of them are not gifted and they are fit into this expert, medium and starter category. But other than that in Software there is one main aspect is attitude, the attitude is really important for developers. In fact attitude is important for any professional work, but i feel very strong about attitude and software development. Development required brain work and run through some analysis/processes in mind all the time hence good attitude required to develop quality software and within budget. More over attitude is really important for young industry like software development.

Why it is important? Again lets take construction field, construction is very old industry and all are well defined and well formed. Lets assume there are 100 people building a house, they may not even know their names each other, but the coordination and building process goes smoothly. All they want to know is what is their job today and when they have to finish it. But the young industry Software development, there was nothing defined, each day there are new development methodology, processes, each company has it's own processes and so on, nothing was integrated and everything working as it's own area. At end of the day, based on my 12 years of progressive development experience, each software developers attitude is making difference of successful completion of project particularly in IT industry.

Based on my experience, there are some main factors contributing good and bad attitudes, they are A. Context Switching B. Stress Management C. Ask other's help/ego.

Context Switching :
What i mean context switching, there are two types of context switching, first as soon as we start to work, we have to forget our personal and concentrate on professional one. second, with in work switch context between projects without losing temper. The first switch is something important and everybody should follow it, a successful career rely on how one separating personal issues with professional life.

[Contd]

From Generative AI to Agentic AI: 2 Weeks of Building MyNewsAI.io

From Generative to Agentic AI: 2 Weeks Building MyNewsAI.io Over the last two weeks, I set out to evolve MyNewsAI...