Saturday, September 23, 2006

Why software engineers in smaller companies are better .....

Its been a long time since I wrote for my blog, its been a hectic couple of weeks but finally got the time to add to my ramblings on the software development sector.

Everytime we recruit/interview a software engineer from a larger company, many a time I see a very distinct difference between that particular individual and the software engineers of my company in relation to thier technical acumen and general programming skills. My engineers are way ahead in thier knowledge and capabilities. Now if I recruit/interview an individual from a software company that is approximately the size of my company or smaller this difference is negligible.

Why is this ?!

- A software programmer coming from a larger company is supposed to be exposed to skills, expertise and infrastracture that usually small software companies can only dream about.

- They work under senior architects/programmers/design analysists who are supposed to be very very experienced and these "experienced" people whose salaries we would never be able to afford.

-A software programmer coming from larger company is supposed to be exposed to best practises and guides such as ISO & CMM which makes one more productive.

- A software programmer coming from larger company is supposed to have worked on more sophisticated and large projects.

Yet they seem to be lacking ....!

First I thought that only the bottom of the barrel were actually leaving the big company and trying to join us but as we went along this was not the case either.

Delving into this strange issue (atleast according to me) the answer was simple and apparent once you really thought about it.

A small software company is extremely productive in size and responsibility in order to cut costs yet increase its quality.

Keeping this in mind a software engineer in a small company usually is exposed and takes a active roll in all aspects of the SDLC. The software engineer is involved right from collecting the requirements from the client, assisting the senior engineer in designing the system, the actual implemention of the system as well as assisting in the testing & quality assurance of the system. Many a time this engineer is also involved in the actual deployment of the live system. This gives the software engineer of a small company a very crucial macro exposure to the entire SDLC process hence having a very realistic view of what is involved in getting a system up and running.


In a large company, a software engineer is assigned to a particular slot in the SDLC as his responsibility profile and will remain only in that slot. So if the individual is involved only in implementation, he/she will have experience & exposure ONLY in implementation, they have no idea of who the client is, what the client really wanted, was the design correct nor what were the results of QA and deployment.

The above forcing the software engineer to have a extremely myopic view of the system.

The next major issue is the sense of ownership, pride and responsibility to give good work to a client. A software engineer in a small company usually gets in touch with the client in some form or the other and a relationship is created between them giving rise to a sense to responsilbilty to the client, mutual respect and the human tendency to perform well in order to gain accolades for a good job done. The client automatically becomes "HIS/HER" client and not only the client of the company. Hence increase quality & responsibility tremendously.

This does not happen in a large software company. The software engineer who is in the slot of implementation does not have a clue who the client actually is (maybe just a company name), what the whole product is really about nor where it is going to be used. For this individual it is another programming module for some product that is to be completed as soon as possible.

In a small software company the adaptation to new/appropriate technologies for a project is based on the need of the project and the software engineer has to adapt himself/herself to the demands of the projects increasing his versatlity as a software programmer. The flexibility of a small software company allows for change/upgrades/adaptation in a very simple manner. Also it might not be able to afford to hire another software engineer just because a portion is in another technology that the current engineer does not know. He/she will be expected to upgrade/adapt and deliver.

In a large company change in technology for the project involves more than just what the project demands, it also depends on the policy of the company of technology changes, cost to company etc. In most cases also when there is change of technology the same software engineer is not used and another engineer who has the required skill sets is used while the original software engineer has to remain in th technology realm that his/she was employed for hence stumping his / her growth towards achieving a certain degree of versatality which is crucial for a software programmer. I am not saying that he/she should know all languages but the capability to adapt to the demands of the project is a crucail element in the capabilites of a good sooftware engineer.

Maybe that is how a large software company runs and I do agree that it does bring out great products so they must be doing something right but what about the capabilites of the individual software engineer in the long run. ?