Archive for the ‘Software Development’ Category

Hello Android

Monday, May 5th, 2008

helloandroid.jpg

Finally I could get Android Early SDK up and running on my Fedora Core-7 Machine.

The process was quite simple. However I had to struggle for a few days, because Fedora install the gnu version of Java and Android requires Java from Sun.

Here are the steps I had to follow:

(1) Install the eclipse IDE (if you do not have it already) with following command:

$> yum install eclipse-jdt eclipse-jdt-sdk (to be done as super user).

(2) now install the Android SDK and ADT plug-in for Eclipse using instructions from this link.

(3) Install the Java from Sun and set it as default by following instructions from this link.

(4) Now you can say Hello to Android as described in this tutorial.

The Truth about Android

Wednesday, April 30th, 2008

I had an impression so far (from whatever publicity Google has done) that Android is truely open source. In fact I have seen official statements calling Android as open source. Recently I thought of downloading the Android platform code and giving it a shot. But, I could not find any code. When I started to look for the platform code, I could not find it any where.

After some investigation, I came to know that Android is just “Open”. This open could mean anything. However, as of now it does not mean “Open Source” in any way. Google has claimed that they will release the Android source code to developers over a period of time, in pieces. “In pieces” means that they will not be making all the components of Android open source. It will really interesting to watch what all is made open source. For example as of now, only the Linux kernel source is being offered by Android. This is more because Linux Kernel is bound by GPL lincense and as per the GPL license it is mandatory to release the source. Seems very likely that finally Google might release the source code for only those components which are bound by GPL.
Here is an old interview of Rich Miner (the key member of Android team), which I now find very interesting. When asked about the need of Android, Rich commented that, “When we looked at the other [mobile] Linux activities out there, oftentimes they’re initiatives that are based on Linux but their resulting platforms aren’t completely open. Or they’re completely open and they’re Linux”
Now Android is not completely Linux (as Google claims). So Rich’s statement implies that Andorid is completely open. Android is ofcourse not completely open source. So I will be interested to hear from Android team about what exactly this “completely open” means. And how this openness is different from other initiatives like LIMO.

What are Google’s intention with Android?
———————————————-
Well, here is a text from Android website:
“Today, there are 1.5 billion television sets in use around the world. 1 billion people are on the Internet. But nearly 3 billion people have a mobile phone, making it one of the world’s most successful consumer products”.
In wake of above information, it is not tough to guess what Google’s objective with Android is. Their obvious intention is to make a hole in to this big consumer base of 3 billion. Google Apps are already ruling the Desktop world. Google is putting Google Applications and related softwares on Android. If Android clicks, Google can easily get an entry in to a big conumber base.
In order to get a large and free work force of open source developers, to work on Google applications, Google has declared “Android” to be open. Contrary to the claim of being completely open, so far Google has only released a SDK using which Developers can build applications around Android. And next, they have announced a big prize money in various contests (US$ 10 million as of now) for the developers developing their applications on Android. The amount of software which Google can get developed by this 10 million $ plank would be actually worth a few 100 million US$ :-)

Effective Meetings: Do’s and Dont’s

Saturday, October 6th, 2007

Meetings are unavoidable at any work place. At most occasions, meetings can be frustrating. We all face meeting-nightmares in our professional life.
I worked on a project, where none of the team-members were ever interested in any kind of group discussion or formal communication. At early stages of the project, no one wanted to be a part of decision making process. During middle-stages of the project, no one wanted to share any status updates or discuss any critical issues. And finally when the project failed, no one was interested to discuss about the cause of failures.

On another interesting project, the team members seemed interested only in meetings. During the requirement gathering phase, we had frequent (and long) sessions which were mere time waste. These sessions reminded me of the “Impromptu Speech Competition” during college days. There was no agenda in place during these discussion, and every one sounded as ambiguous as one could be.

Since a software development process involves more than one engineer (some times more than one team)
working together to achieve the final goal, lack of communication can adversely affect the quality and cost of the final product. Excessive and ambiguous communication on the other hand, can be detrimental to the morales of sincere and determined engineers.

There are dozens of software development processes which define their own guide-lines for optimal communication. However, these guidelines are not always practical for each project. One can call a number of meetings to decide upon which guidelines to follow, and finally end up without any effective conclusion.

I generally follow some Thumb-rules, to evaluate the effectiveness of a meeting. Though different meetings can be governed by different guide-lines, but these thumb-rules need to be satisfied, if meeting has any true purpose.
(1) Identify the TYPE
Meeting can be of different types. The two most common types (most office meetings will fall under one
of these categories) are “Brain Storming” and “Decision Making” meetings. You may also encounter “Communication Meetings” but we will not discuss them here, as these are one-way meetings. Most participants have no role to play in these meetings, and they even enjoy the liberty to skip such meetings. A brain storming meeting need not have any tangible outcome. These meetings are mainly intended at information sharing (and information enriching) and thought provocation. Though such meetings are nice to have (as they boost creativity), but must be voided as much as possible. Probably number of such meetings should not exceed more than one per project. “Decision Making” meetings are more focussed and can be very useful (if conducted in a right way).

(2) Have an Agenda and Stick to it
Make sure that there is a well defined “Agenda” in place for the meeting. The agenda must be published well in advance, so that participants can be prepare themselves for the meeting. Make sure that proceedings of the meeting are inline with the agenda. It is wise to raise an alarm when you feel that proceedings are deviating too much from the agenda.

(3) Know your role
Each participant in the meeting has a role to play. This role can vary based on what your position in the organization. For example, a Designer, a Developer and a Tester can make valuable contributions to the meeting by offering information on what they know well. However it could be disasterous if a Developer decides to flaunt his (little) knowledge about QA process. (It does not mean that a developer can not contribute to the QA guidelines, but this is not his prime role and he needs to be very well prepared if he wishes to revive the company’s QA strategies). Meeting could also be use-less if one is not prepared to handle one’s role in the meeting. For example if the designers in a “Design Decision meeting” are not prepared well (have not even read the specifications), it is unlikely that meeting will lead to anywhere. Make sure that You (which should translate to “each one of you” in the meeting) understand your role and play it well during the meeting.

(4) Tolerate No Ambiguity
Phrases like “it may be true…”, “as far as I understand…”, “I guess…” evaluate to NULL in a technical discussion. “I will cross-check and get back to you” is a better option, as it avoids confusions and saves time. Try not to be ambiguous in the meeting, and accept no ambiguity from others.

(5) Conclude each item
Any item which is discussed must have a final conclusion which is formally agreed upon by all the participants. In case no such agreement is arrived at, make sure that item is marked as “Open”. Some times each one expresses one’s opinion on the item, and item is assumed to be closed without a formal agreement. In such cases, each one has liberty to assume that one’s opinion has been considered right. This can lead to unpleasant situations later.

(6) Respect Every one’s Time
Along with “Meeting Agenda”, a rough time table also should be worked upon before the meeting. It must
be ensured that participants adhere to the time table. A few minutes drift on either side is ok, but I have seen meeting planned for one hour, lasting more than three hours. This just reflects that “participants have no respect for any one’s time (including their own time)”. Such a mis-managed meeting, amongst mis-managed people, will hardly ever lead to any useful conclusions.

(7) Minutes of meeting
At end of the meeting, some one should take up (or can be assigned) the responsibility of summarizing
minutes of the meeting and e-mailing it to all the participants

IT Industry & Employee Attrition

Friday, August 10th, 2007

Employee Attrition is one of the most critical (along with the weakening US Dollar) problem which Indian IT industry faces today.

Time to time, employee surveys are done to figure out what makes employees to love or hate their employer. Based on these surveys, IT companies (if not all - then at least those who want to retain their employees) take appropriate steps with hope of reducing the attrition. This is an interesting fact that some companies are inherently immune to attrition, whereas some companies fail to control attrition despite desperate efforts. In this post I have tried to analyze the factors which might cause employees to leave an organization.

Recent Surveys
—————————-

Recent employees surveys suggest that most common factor which caused employee attrition during last couple of years has been a disliking for “Immediate Supervisor”. This trend is strikingly different from previous trends, where monetary compensation and challenging work was considered to be the main attrition factor. Before we blindly accept the results of these surveys, we need to ask some questions to ourselves:
(1) Do engineers no more consider “Money” as the primary factor? (atleast I do not accept that this could be true for any profession in any part of the world)
(2) Does “Quality of Work” work no more matter to the engineers ?
(3) What difference does your “Immediate Supervisor” bring to your job?
Basic Instincts
————————-
We all (IT engineers) are human beings. And if we have managed to remain human beings (despite endless slogging at office), we must be bound by natural human instincts. In this post I have tried to analyze, if employee attrition in IT industry has any thing to do with IT engineer’s quest to rise the “Maslow’s Pyramid of human needs”. To start with I will re-visit the Maslow’s “Heirarchy of human needs”

(1) Physiological Needs: Breathing, food, water, sex, sleep, homeostasis, excretion
(2) Safety: Security of body, of employment, of resources, of morality, of the family, of health, of property
(3) Love/Belonging: Friendship, family, sexual intimacy
(4) Esteem: respect of others, respect by others
(5) Self-actualization: Morality, Creativity, Spontaneity, problem solving, lack of prejudice, acceptance of facts.

How we rise (the Pyramid)
—————————————–
Most of us take up our first jobs to meet the bare minimum “Physiological Needs”. I am sure that most of human beings will be happier writing poems than writing softwares. Yet, they deny easier Arts courses (and study engineering), and a fun-filled employment of being editor in a publication company (and slog in front of computers). They choose a less-interesting career with a hope that this career will better satisfy their “basic needs”. This is the reason that the very first factor we consider to choose our first job is just “Money”.
(There may be few people who find programming more interesting than poetry. This is in fact “science of evolution”. A more rewarding work over a period of time can also become more like-able. Few would have found writing poems fun-filled in early days of poetry (and would have got scared by its complexity). But as kings started enjoying poetry, and poets were heavily paid, it became an enjoyable and respectable profession - since I belong to relatively old generation, I still find poetry more satisfying than coding - I hope my kids will not)

We find our jobs very challening and interesting for first few years (or first few months - based on how fast we adapt to the new environment). Then we start feeling comfortable with our work. We no more worry if the code we write will work or not. We no longer worry if our client will fire at us or not (for those silly mistakes and for skipped deadlines). We no longer worry if our manager is satisfied with us or not (and slip out of office to watch a movie on Friday night). I know there are few unfortunate ones for whom these worries never end - and they are the most stable people in an organization (they exist forever, unless the organization itself decides to fire them). This is the sign of craving for attaining next slot in the (Maslow’s) pyramid (of needs). From this point onwards we look for security. “Quality of Work” is an important factor in creating “sense of security”. Those people who are working on cutting edge tecnologies and who are doing more skillful work are more likely to retain their employment (than those who are working on simple tasks) in long term. One wave of slowdown - and testers will be the first people to get fired. Once company gets rid fo unnecessary testers, only then the fire will come to Developers. And probably designers will be the last one to go.

Ofcourse there could be exceptions to the above rule. Some companies might find that testers are more important for them (Are there any such well managed companies who keep optimum staffing of testers) and they may want to fire Developers instead. But such chances are very rare. Since IT industry is very competitive, companies need to keep on developing newer products (even if old products are not selling too well), to stay in the business. So companies need to retain developers (unless they have taken the final decision to shut down). Even if companies fire developers, the percentage of fired developers will be much less than percentage of fired testers. In tight project budgets, developers can even take up the additional burden of testing (most stuff) themselves (rather than testers being asked to do the development).

Those of us who attain enough sense of security in their jobs, still feel some itch. They want a feeling of belongingness and love at their work place (next stage in Maslow’s hierarchy of needs). They want to feel closely attached to their organizations, teams and to the people whom they work with. They want to be appreciated for the work which they do. They want to hear how their contribution is important to the company and is helping the company to grow. They want to bond with their colleagues. They want to participate in Cafertaria discussions. Want to smoke at the office terrace with big bosses. This gives them a feeling of close knit family at work where love flows from all direction. “Immediate Supervisor” plays a big role here. It is his wish to appreciate your work or to scream at you. He might encourage you to mingle with the colleagues and let you hold long cafeteria sessions. Or he might realize that you have not been focussing enough on your work and take challenge of giving you sleepless nights. He might make you fall in love with you work space. Or he might turn the work place in to biggest nightmare for you. So, “Immediate Supervisor” (as pointed out by recent surveys) is an indirect reason (direct reason is lack of love and belonging) for attrition.

Having discovered love and belonging at work place, what we look next is Self Esteem. We enjoy the respect which we get from others at work place. And we feel a natural inclination to praise others. To appreciate their efforts, to praise their skills. And we expect the same in return.

The highest stage what an IT engineer can aim to achieve in his careers is that of self-actualization. I have met a few people who have realized their true Selves. They will be always willing to help you, on or off the record, no matter how simple or how complex your problem is. You can feel free to ask them the silliest of question, and they will respond. You can fire impossible questions at them and they will not shy away. They will help you at design, development and debugging with similar enthusiasm. They will be willing to spend long hours with you, when you are debugging a tricky issue in the lab. When it gets too late for you, they will tell you that it is the time to go home and come back tomorrow with a fresh mind. And they will probably have a fix for you, before you start your work tomorrow. They might surprise you by sending a code-base which they developed yesterday night, while making the design document. They are the greatest and most altruistic people in any orgainzation.

Answering the (Un)knowns
—————————————–

Let us come back to the questions, which I raised at begining of this post:
(1) Do engineers no more consider “Money” as the primary motivational factor?
(2) Does “Quality of Work” work no more matter to engineers ?
(3) What difference does your “Immediate Supervisor” bring to your job?

If you observe carefully, “Money ” and “Quality of work” still remains to be the primary need of employees. However there are some organizations where employees enjoy the these privilleges by default. In such environments, people look for love, belonging and respect (self-esteem). Immediate-supervisors have a big control over their sub-ordinates. In case your supervisor is Ass-Holy, he can make your life miserable and deprive you of the needs which you are looking for (though it would not have costed him anything). A decade back, IT industry in India was still nascent. Most engineers were still looking out to make a good amount of “Money”. Big pay cheques was what engineers used to look for. The “Dot Com Burst” of 2000, was a big lesson for engineers in India. They realized the fact that they can not take their jobs forgranted. They might loose it any day. Firing was a new concept in India at that time. People had always enjoyed a life-time job-security till then: either in form of a government job or in form of a private job (shielded by trade unions). After 2000 down turn and firings, engineers in India started to look for job security (which comes by default from Qaulity-work). There are still many companies in India, who sell job-security to their employees (and manage to attract them at lower salary levels). There are organizations, where “money” and “job-security” comes by default. These organizations still face attrition, if they fail to provide a sense of love and belonging to their employees. Those organizations where these two factors does not come by default, still face attrition because of same basic reasons.

Compensation Hierarchy
————————————–
Based on my analysis above I can construct a Compensation Pyramid (in accordance with maslow’s need heirarchy) for IT engineers. IT engineers start their careers at bottom of this pyramid, and aim to grow upwards (some might feel stagnated at an intermediate point)

(1) Money
(2) Sense of Security (Most engineers get stagnated here)
(3) Love of co-workers
(4) Belongingness to the organization
(5) Respect of co-workers (supervisor and subordinates)
(6) Freedom to Philosophize (Very few attain this slot)

What can employers do
—————————————–
(1) Employers (to be specific - Middle Management and HR) need to identify the current position of each employee w.r.t this pyramid. They should evaluate emloyee’s desperation (desperation should be measured based on efforts) to reach the next slot, and make sure that the employees rise at a speed which is directly proportional to their desperation.
(2) Employers clearly need to understand that different human beings have different intensity of desires. And some human beings get saturated after a few desires have been satisfied.
(3) It needs to be made sure that employees with in-human attitude (attitude developed on basis of gender/cast/regional biases, or frustrations, or incapablities) do not handle and leadership responsibilities.
(4) Identify the people who have reached state of self-actualization and give them authorities. These are the people who can inspire and transform the attitude of employees in a organization.

Additional notes
—————————–
Quality of Work: Quality of work is a myth. Quality of work does not depend on what work you do, but it rather depends on how you do. Most people in IT industry tend to associate “code development” with good quality work, and associate “testing” with bad quality work. However each of them could be performed in a good or bad way (with good or bad quality). This myth has originated because of the more job security which developers enjoy (over testers).
Appreciation: Appreciation is a very powerful tool in hands of manager. It does not only help engineers to feel loved, respected and being useful to organization (3rd, 4th 5th stages of compensation pyramid), but it can also create a (false or true) sense of security (because it helps to build confidence) amongst employees (2nd stage of compensation pyramid).
Love: I have seen many people leave the organization when the people with whom they interact most (inside and outside the office) leave the organization. This again vindicates the importance of 3rd stage of the suggested compensation pyramid.

**********************************************

PS: This article is specific to IT industry in India. However most of the facts could be true for any industry, across the world.

View Other Posts on Software Development

Programming Trends: What next?

Thursday, August 2nd, 2007

Are you a software programmer wondering about what is going to be the next trend in field of software programming? If yes, this post might help you to answer some of your questions.

In last few decades we have seen transition of software development process from low level (binary) programming to High level languages (via assembly language programming). The main driving factors which called for change in programming model were increasing complexity of applications. We also realized that just “High Level Language” is not effective for modern applications. A high mismatch between the amount of software which needs to be written and the availability of software programmers( the later is less) calls for highly efficient software development methodologies. This inspired a lot of research on Software Processes and Design Techniques to improve the individual and team efficiencies, which has now matured to a great extent. Now the focus is on “Automatic Code Generation Tools“. Though there are a number of such tools available (for different languages), but it will need a lot more research to make these tools reliable and user friendly.

Coming back to the question of next trend in field of programming. Let us again have a look at what in past inspired changes in programming methodologies. The major driving factor was increasingly complex applications. What enabled the transition from simpler to complex applications? It was availability of complex hardware. We have transitioned a big way from days of 8085. The modern processor might have over a billion of transistors operating on GHz frequencies. So, in order to answer our main question, we first need to figure out, what is the current trend in processor design (this in turn will drive the next trend in programming)

The processing power of a processor depends on two major factors
(a) transistor count - which is a fair indication of processor’s actual power
(b) clocking speed- which tells how many times per second, processor can utilise its raw power. Doubling the clock speed will mean that you can utilize the actual power twice in a second.

VLSI design has reached such a stage where increasing the processor speed further is not possible (as per the current technology). Hence the processor designers are currently focussing solely on increasing the transistor count to increase the processor power. The modern processors contain multiple CPUs - which is the easiest way of multipying the transistor count. Intel’s Dual Core Processor is one of such examples, where a single CPU core is replicated twice on the chip. In next few years we might see multiple of such cores on a single processor chip.

Using a multiple core processor for multi-threaded applications is quite easy. The easiest way will be to run each thread on a given CPU core. But it becomes really difficult for a single threaded application, to utilize the multi-core architectures. Though a lot of domain specific work has been done (in Multimedia and Communications) to disect the commonly used tasks in to parallel independent tasks (which can be run on parallel cores), there is very less scope of parallel algorithm design in traditional PC based applications (e.g. a document editor, mail-box, browser).

Since the applications really can not be easily dissected in parallel, the main focus will be on designing intelligent compilers to utilize the multiple core CPUs efficiently. Compilers will understand the inter-dependency of given instructions and allocate them to different CPUs (as efficiently as possible). But this job can hardly be done with the current programming languages. Compilers will need some constructs in the programs, to understand the integrity of applications and instructions. This could work in two ways - design a completely new language, OR add some construct to the existing languages. Current focus is mainly on the later. There is lot of research being done on this “Parallel Languages” - most of these languages will evolve from C and C++. So, the programming construct in combination with intelligent compilers may drive the efficiency in coming years. Though MS is still suspicious about parallel programming (as it always is with competitors), Intel is heavily funding a number of research projects on parallel programming.

Let us wait and watch.

READ OTHER POSTS IN Software Category

If you have any feedback on this article, please feel free to give your comments

The Art of Interviewing

Wednesday, July 25th, 2007

Why this post?
—————

There was a time, when the ratio of jobs to applicant was very less in any field. The interviewers were virtual GODs and interviewees had to leave themselves on the mercy of these virtual GODs. But times are changing now - specially in field of Software Development. Though, the ratio of jobs to applicants (in SW development field) may still be less than one, but the ratio of jobs to deserving candidates has become well above one - it can be 2, 3, 4 or … based on the skills you are looking for. In such changed scenarios, Interviewers are not the GODs, but interviewee is. In Bangalore, any good SW engineer looking for a job will have minimum 2 to 3 good offers in his hand, within a couple of weeks. Finally, which company this candidate decides to join, will depend on the impressions which these companies have left on him during the interview process.

Today, almost all SW companies seem to be growing. This growth, combined with high attrition rates, puts enormous hiring  targets before companies. This means a large number of interviews needs to be conducted to find good and deserving candidates.
Some (very few) companies employ hiring consultants to do the initial filtering of candidates- this could involve a couple (or more) of technical interviews. A few senior people can then conduct the final rounds of interviews with the shortlisted candidates. However most companies get all the interview rounds conducted by their own regular employees. This implies that almost every body (at every level of hierarchy) in the company at some time or other is involved in the interview process. Very few companies provide a formal training on interviewing skills to their employees and rest of the companies do not even provide an informal training to the employees (before they start interviewing the candidates). Even those interviewers, who have received a formal training at some point of time, generally tend to drift from the RIGHT interview process , which could change the final decision of the candidate (about if he should join this organization or not).
There is a large amount of material available on art of giving interviews, but there is not much information on the art of taking interviews. Hence, I decided to put this post.

WHAT YOU MUST KNOW before conducting an interview
——————————————————————
Make sure that you have answers to the following questions, before interviewing a candidate:
(a) What is the job-opening for which this candidate is being interviewed?
(b) What kind of skills and abilities does one require to perform the functions needed for this  job?
(c) Why (what points in the candidate’s resume) this candidate’s resume has been short-listed for the interview?
(d) What questions are you going to ask the candidate, to ascertain that he is fit for the job.

Have the right FOCUS
—————————
I have seen some interviewers who conduct interviews with the prime objective of
(a) Showing their own abilities and skills to the interviewees
(b) Proving to the management that they are the best, and no one else is worth hiring.
Interviewers should come out of this mindset and they should primary focus on understanding the candidate’s abilities and skills during the interview.

Decide on QUESTIONS in advance:
—————————————-
The questions should be designed based on candidates’ current field of work, and skills needed to perform the job under question
(a) You need to make sure that the questions which you ask are relevant to the candidate’s experience. Though all candidates are expceted to know the basics of his course, but do not expect them to know every thing about what they have not done. For example, If some one comes from a pure application background, it is pointless to ask them about Operating System Internals.
(b) Questions should be also relevant to the work-profile of the job being offered. If candidate is supposed to work on QA testing, there is no point in asking him about complicated computer algorithms.

Get your QUESTION BANK REVIEWED
—————————————————
Once you have come up with a set of question, list them under a formal document, along with the answers. Get this document reviewed by your colleagues or friends (or any one whom you feel comfortable with). This will help you to ascertain:
(a) Questions which you have formed, are indeed relevant for this interview.
(b) That the answers, which you think to be right, are indeed right.

A few DONT’s of interview process:
———————————-
(a) Do not bias yourself based on candidate’s resume, his/her looks or is communication skills. Communication skills are important, but they are not the foremost requirement for most of the jobs.

(b) Do not insult candidates if they are technically poor. Do not argue with them, if you feel that their answers are wrong.
Any candidate who goes out of interview (no matter how good or bad he was), is going to talk with a lot of people (who will take his words) about the interview and the company. If you have annoyed the candidate, it is very likely that he is going to talk negative things about your company. If you maintained a good environment during the interview, it is likely that he is going to spread a good name about your company (irrespective of whether you finally hire him or not).
(c) Do not unnecessarily stretch the interview. I have seen some people who interview candidate for hours, and then give a one line feedback, “Candidate was very poor”. You really don’t need hours of questioning, to figure out that a “candiate is very poor”. Start with the basic questions. If you feel that candidate is not good enough, close the interview. If you find the answers satisfactory, carry on with the next level of questions.

STARTING and CLOSING the Interview
————————————————
(a) Before you start firing the interviewee with questions, tell him about yourself, about the company and about the job-profile for which he is being interviewed. Then ask him about his organization, his over-all experience and the kind of role he is currently playing in his ogranization. Ask him about why he is looking for a job-change. Make sure that there is an expectation mismatch from both sides.
(b) At the end of interview, give a chance to the interviewee, to ask any question about your company, your group and the work which he might be offered.

……………..

This post is based on my personal experience and observations, if any reader has some thing to correct, or more to add, please feel free to post your comment.

Humanity and SW Development

Wednesday, July 18th, 2007

I am a Software Engineer. I earn “just less than enough” money for a comfortable life. I want to increase my earnings, and I strive for it. But because of high inflation, the prices of essential commodities increase steeper than the increase in my income. I have a good feedback mechanism from my brain to body. The feedback from my brain, makes my body work much harder. As a result, I tend to spend more time in office. I tend to cut my sleep and spend more time to enhance my technical skills. I am always struggling and I am always hopeful. And, I am quite sure that it is the right way to live (or right way to fight for existence).

Recently I happened to read a book on “Extreme Programming”. The book discusses about various basic principles which must be followed to become a successful software developer (on individual level as well as an organization). First and foremost principle being talked about is Humanity. It discusses about basic human needs (of any human being) which must be fulfilled in order to make one excel. This is quite shocking to me. It raises serious doubts in my mind regarding my life style and I am now becoming suspicious if I have been living my life on the right track all along. Let us have a look at the basic needs which this book talks about.

————–
HUMAN NEEDS
————–

* Basic Safety
* Accomplishment
* Belonging
* Growth
* Intimacy
Some other Needs which must be satisified, but out of work place.
* Rest
* Exercise
* Socialization

———–
HERE I AM
———–

(1) Basic Safety: Fredom from Hunger, physical harm and threat to loved once. Fear of Job loss threatens this need.
I work for a small IT company. We are profitable and we are expanding. So, I do not fear any immediate job loss. But, deep inside (my subconcious brain) I am aware that my job may not last forever. I stay far far away from my parents. I have not much time to meet my friends and relatives. I keep sitting in front of a dumb PC all the day, which makes me vulnerable to many chronic deseases. While driving, eating, sleeping, I think only about my work.
(2) Accomplishment: The opportunity and ability to contribute to their society.
As a child I wanted to become an administrator, or a teacher or a journalist. So that I could directly contribute to the society. But I ended up becoming an Engineer. Since I wanted to contribute to my society and country, I joined a job in Public Sector. Soon after my joining, I realized that there was not much to contribute (neither to society nor to myself) at that place. The project which I was working on was late by many years and after the completion it got scrapped (after around 10 years of total struggle and 3 years of my contribution). I decided to change my job after that. Now I work for a private company which makes multi-media products. I make products which are being used by human beings. I should be more than happy that I am contributing to society by providing them these cool products. But, I personally do not believe that society really needs these products much. These products are being made, so that investors (which form a very very small section of society) can become richer and richer. As per my opinion, society needs other major attention: There are poor people who need food, who need education, who need healthy life.
(3) Belonging: the ability to identify with a group from which they receive validation and accountability and contribute to its shared goals.
I do not have much time to associate with any other group than my organization. The primary goal of my organization is to make products faster (without wanting to implement a well managed process which might improve the over-all efficieny) and at cheaper costs. The people whom I work with, are my good friends. But more than that we all are competitors to each other. So we deny any true appreciation to each other.
(4) Growth: the opportunity to expand their skills and perspective.
My company helps me to expand my skills by asking me to work on different techonologies after ever few months. This exerts a high mental stress on me. More than finding any growth of perspective, I feel that my body and mind are GROWING old faster.
(5) Intimacy: the ability to understand and be understood deeply by others.
My PC and my cell-phone have become the most intimate things in my life.

(6) Rest:
I beleive in working hard. All work and no play has become the guiding principle of my life.
(7) Exercise:
For last two years I have been planning to start regular daily exercise.
(8) Socialization:
I used to meet my friends over drinks, every other day. But these days I fail to find time for that.

—————–
New Resolutions
—————–

If you are a Software Engineer working in a small organization (in a busy town of India). It is most likely that you live a life which is quite similar to mine. I am not sure what could be done to improve the human factor of our lives, but I have decided to start on the following activities starting from tomorrow (I hope that this tomorrow comes).
(1) Regular Exercise
(2) Belonging: I am planning to do something which helps my next generations. To start with, I am going to contribute technical and non-technical knowledge to kids them via seminars and books.
(3) Socialization: I am going to meet at least two friends, every week.

——————–
MASLOW’s HIERARCHY
——————–
I realized that I have totally forgotten about “Maslow’s Hierarchy” of human needs, which I had read in my school days. Probably this topic was included in our course-work, so that we can appreciate our (and other’s) needs as a human being, and strive to achieve them. This is likely to make our lives happier. But, we (me and my course-mates) always viewed our course-work as a mean to get out of schools, and enjoy the lives outside. So it is unlikely that any one of us (me and my course-mates) remember this hierarchy. I am just revisiting this hierarchy.

Bottom

| Physiological Needs: Breathing, food, water, sex, sleep, homeostasis, excretion
| Safety: Security of body, of employment, of resources, of morality, of the family, of health, of property
| Love/Belonging: Friendship, family, sexual intimacy
| Esteem: respect of others, respect by others
V Self-actualization: Morality, Creativity, Spontaneity, problem solving, lack of prejudice, acceptance of facts.

Top

I feel that most of my Top Needs are now being fulfilled. I use my creativity at work place, I crack a lot of tough problems, and I have learned to accept the facts. But Bottom needs are mostly unsatisfied. I am not sure how lucky I should consider myself having reached the top of this pyramid.

——————–
MORE on HUMAN NEEDS
——————–
Nine basic needs as per a web-resource

(1) Security
(2) Adventure
(3) Freedom
(4) Exchange
(5) Power
(6) Expansion
(7) Acceptance
(8) Community
(9) Expression

I wish you all the success in your efforts to become a fulfilled human being.
—————————————————————————–
References:
(1) “Extreme Programming Explained” by “Kent Beck” and “Cynthia Andres”
(2) http://en.wikipedia.org/wiki/Maslow’s_hierarchy_of_needs
(3) http://www.itstime.com/jun97.htm

SW development: India Vs China

Wednesday, July 11th, 2007

Bangalore is the IT hub of India. There were many factors which helped Bangalore to become the Si Valley of India.

(1) Availability of Skilled Man Power
(2) Lower Wages
(3) Lower Infrastructure Costs
(4) Corruption free administration
(5) Moderate Climate

In past couple of years I have seen many MNCs closing down their India Operations. In last one year China has emerged as a much better Software Outsourcing Destination. Most of the Engineers in India, refuse to accept the fact that China can take over India in Software outsourcing. But, it is the time that Indian IT work force wakes up before they start loosing their jobs. Let us compare India and China based on the above five factors.

Skilled Man Power : Number of skilled software man power in Banglaore is continuously growing. But the number of good quality skilled man power is continuously on decline. Most of the bright engineers prefer to migrate to USA and Europe. And those who stay back, switch their jobs so fast that companies hiring them can not count on them. Migration and Attrition are working against Indian work force. On the contrary, the quality and communication skills of chinese software engineers is continuously increasing.

Lower Wages : The average Software salaries in Bangalore have more than doubled in last three years. This is also in sync with the inflation rate in India. However, the infaltion and wages in China are under strict control, which makes it an Ideal destination for investors. Shanghai, the most expensive city of china, is still much much cheaper than Bangalore.

Infrastructure Costs: The infrastructure costs in Bangalore have become comparable with most of the cities in USA. However the quality of infrastructure is becoming comparable with third word countries. Office spaces in China are many times cheaper than in Bangalore. The SEZs in China also offer other investment benefits to the investors. At some IT parks, office space is available for free and tax benefits are a big attraction. Most of the Chinese cities have infrastructure comparable to the USA and Europe.

Corruption Free Administration: One of the reason why Bangalore emerged as a bigger IT hub, as compared to other Indian cities (Hyderabad, Pune, Chennai and Delhi) was the ease of entry and corruption free administration. Those who live in Bangalore are aware of how the scene has changed in last few years. I am not sure if local Chinese administration is really corruption free. But Chinese Government at least makes sure that foreigners do not get affected by the corruption in administration (if at all it exists).

Moderate Climate : Climate alone is never a factor for investors. However for the work-force it can be a decisive factor. Bangalore seems to be loosing advantage even on this front.

Let us come back to the common perception in India, that China can never overtake Indian Software Industry. Those of you who believe in this theory might find THIS REPORT shocking and shaking. Indian software engineers had following three distinct advantages over China:
(a) Better English Speaking skills
(b) Better quality software
(c) Better Anti-piracy laws in country
Over last couple of years, this gap between India and China has bridged, and there may be a time, when China might be on a stronger side than India.

This is the right time that Indian IT force wakes up.

……………………………….

For those who want a comparison between India and China, there is another interesting news. Chinese Forex reserves hasve crossed 1 trillion USD mark. Current Indian Forex reserve is about 6% of Chinese Forex reserver.

Outsourcing

Tuesday, July 10th, 2007

This article was originally published @ singhkunal.com on 1st June, 2007. I am moving the article to this blog.

Yesterday I heard about worldwide job-cuts in FreeScale Semiconductors. The same day, Motoroal announced 4,000 more job cuts (in addition to already planned 3,500 job cuts in 2007). Last month, AMD and IBM had also announced major job cuts world wide. Is this a begining of IT slow down (remember the dot com burst)? Looking at the number of H1 application filed this year, it is unlikely the case. The H1 quota for year 2007 , expired on very first day and not all the candidates who applied on first day, could get the VISA. This heavy rush of VISA applications presents a very bright picture of IT job market. Well, there could be following possibilities:

  • Yes, IT market is going down. The number of H1 applications, do not represent the right market status, because most of these applications have been filed on anticipation.
  • No, market is healthy. Layoff announcements are coming in only from IT giants, who had lost business track in recent years. Now they are trying to align their technical work force, alongwith their business objectives.
  • Most of the big companies are now relying on outsourcing their work to smaller (and more for product development, which means job cuts at IT giants, and ample jobs at small companies at the same time.
  • Engineers (in USA) loosing their jobs to cheap work force from asian countries. Even the engineers coming on H1 work permit, are willing to work on much lower salaries.

I consider the current market scenario a by-product of outsourcing2. Let us try to understand a few subtleties related to outsourcing. With the availability of high-speed and low cost communication channels, physical distances are becoming virtual and world is converging at the screen of Tele-conferencing system placed in your conference room. E-mails, direct telephone lines, and web-based instant messaging, have increased the effectiveness and productivity of off-shore development. There are more and more US based companies outsourcing their work to locations in India and China. Their main objective behind outsourcing is cutting down operational costs. But, have you ever thought what outsourcing brings? Does it really help to cut down the costs and increase profit margins in longer tnerm? In short-term, outsourcing helps the organizations to cut down on operational costs and improve their profit margins. But in longer terms, outsourcing may not really bring any cost-advantages. Let us discuss this further:

  • Consider four companies (based in United States) competing with each other in the same domain. When one of the companies resorts to outsourcing, it can cut down the operational cost and thus achieve higher profit margins. The company can also roll out the final product at cheaper rates, and win a bigger market share. This is the first stage of outsourcing, which is visible in very short term.
  • The three companies which have been threatened by their competitor, are not going to wait and watch themselves die. Sooner or later, they will also opt for outsourcing. Once all the companies move major part of their work-force to cheaper destinations, the immediate benefits of outsourcing will begin to dis-appear. Now since all the companies are operating at same costs, they do not have a un-fair competition. However, since the companies have cut down on final product costs, more consumers will be able to afford the product now 3. This increase in over-all market potential, might help the companies to grow their revenues4. I call it the second stage of out-sourcing.
  • Outsourcing work to cheaper destinations creates a high demand of skilled workers at those destinations. Any new company trying to set up their development centers, will be willing to offer big salary hikes5 in order to attract the skilled labour employed by their competitors. At the same time, the current employer, will try to retain their employees (especially the key resources). This rat race amongst the employers highly benefits the labour, and the salary levels can rise steeply. Presence of higher income group in society will result in increased living costs and increased real estate costs6. well. This is the third stage of outsourcing. Here the companies may start loosing their abilities to keep their operation costs low. This means that the benefits which were available at stage-2, will begin to disappear. I call it the third stage of outsourcing7.
  • As more and more work is outsourced, the technology proliferates. There may be ambitious group of people, who might want to start their own ventures. This will mean that the four ogranizations which were first competing with each other will have to compete with many more organizations, now. And what if these organizations are based at those cheaper outsourcing destinations, with no communication overheads? Software business is unique in the sense that you require almost nill infrastructure investments. Hence the companies providing a given software solution may grow like mushrooms in short time. Increased competition, means lower profit margins, and it becomes tough for companies to survive 8 (atleast tough to thrive). Some of the companies to shut down. Some companies my try a last ditch effort to get some market share by selling their products at bare minimum costs (out of basic survival instinct), which might prove harmful for the overall business. I call it the fourth stage of outsourcing.

Is outsourcing Bad?
It is a controversial and complex question. Are you asking a person who has just lost his job? Or are you asking a newly rich Asia based Software engineer who just received a 100% salary rise? Are you asking a company which is loosing its business to competitors or are you asking a company who has gained major market share by cutting down their costs? You might get different answers in each case. But let us try to think of it from a global perspective.

  • Having development centers in different geographical locations in a globalized world is essential. So, as such outsourcing9 is not an evil. If we try to revisit, the effect of outsourcing discussed in previous section, you can see that the problem started when one organization tried to use outsourcing as a means of unfair competetion. So, rather than fighting the outsourcing, we should be fight against the unfair business tactics. Can there be any laws 10 to fight the unfair business created by outsourcing?
  • What caused the third stage of outsourcing? It was the employers resorting to unfair means while hiring work-force. Can there be any laws defining a fair hiring process? I want to mention here is that an effort on employer’s behalf to create unfair laws and exploit their employees of their rights is not what I am asking for. What I am asking for is to create a consensus amongst employers and employees to have a fair play11.
  • Last effect of outsourcing starts with technology proliferation. But, technology proliferation as such is not bad, as long as patent laws are respected12. What causes real problem is:
    • Too Many Players : Monopoly is evil. Some countries have laws to prevent monopoly in the market. But can there be any laws to restrict maximum number of market players? I am not sure if that will be legally correct, but there need to be some sort of control. It may not be a direct control over the number of organizations which can enter a given business. But it could be a different model where a fixed number of entities handle the business aspects in a given sector. Those entities may define different the market conditions and rules. All the companies operating in same sector should affiliate to these entities and respect all the defined rules and regulations.13.
    • Unfair tactics by loosing players : Is suicide a crime? In my country it is. And I hope that it must be true in most parts of world. Why suicide in business not a crime then? What can others do if a dieing organization, makes attempt which are suicidal for the overall business community?. If there are laws for minimum wages, then there must also be laws which guarantee minimum profit margins for business organizations14.

    Where do we go now?
    Current market conditions suggest that we are the stage three of outsouring and getting ready to enter the stage four. Many organizations are trying to consolidate the business through acquisition processes. But, it may not work out if there is a spur of new companies. The same problem had caused the Dot Com Burst. Currently the work requirements call for a large work force in IT industry. But the financial conditions of most employers do not give them much freedom to hire the work force. One possible solution could be great advance in automatic code generation tools15, but that might take some more time to happen. In absence of any effective tools, companies will have to retain/hire employees, but at lower salaries. And there will be more work pressures. Does it translate to another slow down15? Some people believe that argue in USA was started to fight the competition from other asian countries (and not from within the United State). I do not subscribe to this school of thought. However I might be wrong.
    NOTES
    [1] I am going to discuss outsourcing specific to IT Industry.
    [2] Any work which is done by an external source or agency amounts of outsourcing. But for the remaining part of this document, outsourcing refers to the work being outsourced at cheaper off-shore locations.
    [3] It is quite possible that consumer base would have increased by same ration, even without outsourcing related cost-cutting.
    [4]However, the increased revenues may not necessarily reflect in to increased profits. The profit margins might drop down and there is a possibilty that companies might have same or less profit even with increased revenues.
    [5] Ability to hire the good engineers at significantly higher salary than the market norms, still helps these companies, as the salary for similar skills in USA will be much much higher.
    [6] My personal experience is that even if the salary level increase significantly, the buying power does not increase in similar ratio. Buying power almost remains the same.
    [7]In some countries, the government policies make sure that this third stage is never reached. The result will be a direct jump to stage-four. But companies with open government can not really help this process.
    [8]Though many people hold the opinion that a quality product can always make money, but it may not always be the case. Also, generally companies make money by gaining early market advantages. But now it is getting rare that a company will be the only player in market for more than a few months.
    [9] Some times outsourcing might be essential to support the marekt and customers in different geographical locations and it helps the companies to grow their business irrespective of cost of operations.
    [10]Laws should not restrict the flexibility of companies to expand their global business. It should only restrict the cost-based outsourcing.
    [11]I know that there is consensus amongst some companies not to pull out each other’s employees. Can it be on a broader level. Also it needs to made sure that employee’s rights are not exploited.
    [12]I believe that patents laws are respected in most of the countries. And some other companies are starting to respect it now.
    [13]
    [14] There are anti-dumping laws, but they do not really translate in to the solution of a practical problem. It will be really interesting to see if this can be implemented.
    [15] Though the scale of hardware integration has doubled every two years, as per Moore’s law. The scale at which Software can be generated has not seen the same growth graph. This is a major concern.
    [16] Market slow down does not necessarily mean lack of employment. Under-employment also translates to bad market conditions.