Statistics
Visits: 105082
Page Visits: 139160
Active visitors (monthly): 5364
Feed Count: 45
Most visited page: Adding value as a technical analyst
Category : General

Shaping your technical career

There are close to 100,000 software developers joining the Indian IT industry every year. With so many developers, it is easy to get lost in the crowd. I have engaged myself with the IT industry for over 12 years now. I have seen the ups and downs of the industry. I have consistently done a decent amount of coding over the last 12 years. I have put together some of the things I have learnt over my career.

#1: Love coding

If you love coding, you will be interested in a technical career. There are lot of programmers who are in the industry who do not like coding. Their expectation is to become some sort of manager - a product manager, a project manager or a line manager. Everyone is welcome to do coding. But, if you are in for a technical career, you have to love coding.

#2: Application development

Application development is a rare thing. Most applications require maintenance or enhancements. There are lot of products available in the market like business intelligence products: Informatica, Microstrategy or business application tools like SAP, PeopleSoft. There are many developers who work with these products doing various system integration activities. The percentage of people who are involved in hard-core application development is very less. If you like coding, you should find yourself in an organization which does hard-core application development. You will enjoy it much better there.

#3: Choose your platform

There are lot of application development platforms - Microsoft.Net, Java (J2EE), Python, Ruby etc. Choose one and stick to it. Choosing a platform to work on is an emotional decision. It is not a logical decision. All platforms evolve over a period of time. You do not have to work in the best application development platform. You just have to choose one you are most comfortable with and stick to it.

#4: But we do not have projects

I have heard lot of managers saying that they do not have projects in say .Net. I want to narrate an incident that happened to me a few years back. At that time of the incident, I had over 5 years of application development experience. By mistake, I was associated with a project involving MicroStrategy. Soon, I became a BI expert. I remember talking to a manager about moving to a Microsoft specific team. My manager bluntly told me: "You cannot decide which team you want to work with. If the organization wants you to work in a Business intelligence (Data warehousing) team, you have to go to that team". You have to be flexible to the organization. But, not at the cost of your career. I wasted one year of my professional career with that team. But, it is not a complete waste. (humor intended!) I learnt a bit of data modeling - Star Schema design, ETL, BI reporting, and some analytics. It has helped to relate to people who are working in BI. I still have good friends who work in the BI world.

#5: Associate with people who appreciate your technical skills

There are lot of developers who are good in a specific technical discipline rather than posessing a broad range of technical skills. I have seen good programmers who are good in trouble-shooting but poor in design. I have seen some good designers who are weak in trouble-shooting. If you work for an organization where you need to posess a broad range of technical skills, ensure that you associate with people who appreciate your technical skills.

#6: Work on open-source projects

Work on open-source projects. This will help sharpen your technical skills. There are lot of people who will reach out to you. These  people appreciate your technical skills.

#7: Knowledge accumulation

Learning new things is good. But knowing a lot of things does not mean much. Knowledge accumulation is very much the equivalent of building your physique in the gym, or making a lot of fortune in business. Developing good analytical skills, decision making skills, prioritizing and planning skills is more interesting, more valuable than accumulating lot of knowledge. You can be a good technical guy without knowing a lot of things but be able to do a lot of things. Beware of the technical guy who ridicules others for not possessing some knowledge. Such category of developers are very common in India.

#8: Process but not too much of process

Process is necessary. But, if your organization talks only about CMMI, or Greenbelt, you are working for an organization which is an expert in grooming managers (and not technical people).

#9: Beware of colleagues

If you are a good technical guy and  you are in the early stages of your career, then you may not understand your colleague who has developed good organizational skills. Your colleague is on the way to become the biggest manager of all time. So, do not be influenced by him or her. The colleagues with good organizational skills appear to be good backstabbers. (humor, slightly sarcastic, intended) But, they are meaning well, especially for the organization. So, you should learn skills to handle these sort of people. But you should not get carried away by their "cutting-edge" skills to become one of them.

These are tips from my experience. As you can see, I have been an above average developer. So, these are tips for the above average developer. For the excellent developer, the career progression is clear and smooth.

I like to know your comments and what you think about the post.

Permalink | 2 Comments | Leave your comment
 
Commented by Vijay at 29-Aug-2011 12:09 PM

Thank you for your comments. You are right about learning a lot of new technologies. It helps us give a lot of options to the customers so that they can pick the best alternative.

Commented by Mitendra Anand at 28-Aug-2011 10:23 PM

Vijay, Nice column, I liked it.

To add to the list, I think in today's time a growing programmer must learn to read books on technology(s) he/she is interested in. Many programmers limit themselves to start with "Hello World" kind of thing and then they carry on the work as it comes with the guidence from web.

I particulary liked one of your statement -"I have seen good programmers who are good in trouble-shooting but poor in design. I have seen some good designers who are weak in trouble-shooting." I believe reading the subject helps in becoming good at designing and after you are exposed to the subject. It's the intution/gut feeling which makes you a good troubleshooter.

Aeroplanes, Design patterns, and People

Yesterday, I attended an interview where I was asked to design a air-traffic control system. I designed one and the interviewer was sort of happy. On the way back home, I reflected on the interview. My thoughts went to my favorite topic of innovation.

Without innovation, we would not have a aeroplane. Innovation is about finding something new and perfecting it. But, of late, I have to admit that innovation is not everything.

Today, air travel is safe. This is because of the efforts of well-trained engineers making a Boeing or an Airbus. It is because of a lot of well-trained maintenance staff who do all the checklists to ensure a safe travel. Every organization needs a handful of innovative people and a whole lot of process-centric, skilled people. A software product is no different from an aeroplane.

A software product must be new and satisfy a valid customer need. Innovative minds should work together to come up with a new product idea. But, once an idea is formed, we follow all kinds of design patterns, to ensure that the software product is maintainable and usable. We follow good processes to ensure that the software product satisfies the customer need. We need both innovative people, skilled people, and process-centric people to come up with a good software product.

There is also an other side to it. Innovative people and process-centric people specialize in what they do. Rarely, they understand each other. Why is that?

Innovative people need to break a few rules. That is when you come up with something new. Innovative people understand that rules and processes exist to satisfy a need. There could be multiple ways to meet the need. So, the existing process is just a convenient or effective way to do a certain thing.

Process-centric people are a different breed. They like to do things as perfectly as possible. A process, once defined, should not be broken. It can be replaced by something new and better. They are experts in following process.

I belong to the breed of people who like to try new things. I believe that nature evolved because of trial-and-errors. Evolution is not planned. If it were planned, monkeys would not have tails. I also believe that there exists a framework to do the trial and errors. If trial and errors were chaotic, there would not be any gravity. (I believe gravity evolved). OK, I am sure that you would have lost me by now. So, I will cite a concrete example.

A lot has been invented by trial and errors. Before Edison came up with the electric bulb, he failed more than a 1000 times. The framework of coming up with an invention through trial and errors is just plain logical analysis. The above examples are given to justify my stand of trying out new things.

I definitely do not belong to the category of process-centric perfectionist. But, I do follow process. Over the past few years, I have found one major weakness of the process-centric perfectionist. The process-centric perfectionist extend their process-centricity to human behaviour. They demand a level of behaviour among their co-workers that is sometimes simply annoying.

Is it not common to find managers who appreciate well written emails, polished and respectful conversation more than well-written code? Being a person with an innovative bend, I do not have much rules. But, I have one rule which I will definitely follow: Avoid the process-centric perfectionist. If you have to deal with one, deal with him or her with utmost seriousness.

This was the train of thoughts that came to me on the way back from the interview. I felt that it was worth a post.

Permalink | 1 Comment | Leave your comment
 
Commented by Mitendra at 14-Aug-2011 07:52 PM

Vijay, Nice one :)

I love this line "Is it not common to find managers who appreciate well written emails, polished and respectful conversation more than well-written code?"

 

Keep writing!

Some good technical skills

Over my career, I have seen numerous improvements in developer tools from Microsoft. When I started off, COM / COM+ were buzzwords. Then sometime in 2001, .Net became the development platform from Microsoft. Intellisense is a great productivity enhancement which earlier users of Visual Studio never had. Before, we had to go through MSDN documentation to know API details.

Over time, technologies change. But the behaviors that are required to be a good technical guy do not change much. There are few technical behaviours that I have listed out:

Prototyping: To validate any architecture, prototyping is essential. A good architecture is just one way of multiple possible ways of getting things done right. Without prototyping, there is no way an architect can find out if what he is proposing is the best alternative.

Using Frameworks: Frameworks are reusable components that offer good productivity as well as defacto design standards. eg. MVC framework, entity framework.

Adherence to Organization standards: There are multiple ways to do a simple thing like client-side validation. Eg, validator controls, jQuery validation, HTML helpers all do validation. The best one should be choosen based on other applications in the organization. Or based on organization standards. Organization standards are more important for things that depend on the organization infrastructure like implementing security.

Learnability: Learning new skills is very important. Lot of the products that are available in the market is continously evolving. Without learning, we will be preaching obsolete ideas to the younger generation who may be more upto date with the latest and the best.

Understanding why: Learning new skills with an attitude of why helps to understand why the improvement exists. If you are learning new skills with an intention to learn a lot, you may be missing a few points. Understanding why something exists helps to apply the technologies effectively.

Troubleshooting: Troubleshooting technical issues and getting things done is also important.

Permalink | No Comments | Leave your comment
 

Books for a new start

Wish you a happy new year 2011. A new year is a good time for a new start. In the last month, I have been reading a few books on startups. I like to share with you these books:

The Art of the start by Guy kawasaki is a good book on understanding how to pitch your company to venture capitalist, new hires, and the market.

The Innovators Dilemma by Clayton Christensen differentiates between sustaining innovation and disruptive innovation. Innovation is a new way to do things. Disruptive innovation disrupts the existing market. For eg, offshoring is a disruptive innovation in the early 90s. Big companies are best suited to bring sustaining innovations. Startups are best suited to bring disruptive innovations to the market.

Crossing the chasm by Geoffrey Moore explains how companies go from early markets to mainstream markets. Early markets are dominated by visionary buyers who are technology enthusiasts. Buyers in mainstream markets require references and competitive products before buying a disruptive product. This book gives a few tips of how to do it.

Books offer good advice. But, they can't beat execution. My best book of all time is Sam Walton - Made in America. It describes how Sam Walton built Walmart with great execution skills and copying the competition with great speed. I feel Microsoft is built around similar lines.

Wish you a happy new year 2011, and a great start to the year.

Permalink | No Comments | Leave your comment
 

Adding value as a technical analyst

There are some market analyst predicting a double-dip recession. So, 2011/12 may be a year of recession. Recession is the time when the tough survive. Here are some tips on how you can improve your technical skills:

Know all the features of the product / framework that you are using. Understand the implications of using a specific feature. For eg, are you aware of web parts framework in asp.net. Are you aware that it can be personalized and it uses the aspnet db. Unless you know the features and limitations, you will not be able to convince the business that something like iGoogle can be done with a few hours of effort in asp.net

Ability to compare different frameworks and the equivalent of one feature in another framework. In Asp.net, there are two frameworks - WebForms, MVC. What is the MVC equivalent of a user control in WebForms. What is the difference between using RenderPartial() and RenderAction() in MVC?

Ability to suggest multiple alternatives of doing the same thing. If you want to implement Tabs extensively, is AjaxControlToolkit the best choice? Or can JQuery Tabs be used as an alternative? Or is it better to go for a well designed custom control. If it is a custom control, will you go for a plain server control or an Microsoft AJAX library based server control.

Getting things done in time is a great asset that business loves. Troubleshooting and debugging can help you get things done. An extremely good debugger can get anything done in the world.

In the words of Martin fowler, "Any fool can write code that computer understands. A good programmer writes code that humans can understand". Today, the most important aspect of software programming is maintainability. Can you write code that can be maintained with the least cost? If so, do it and highlight to the business the maintenance cost that is involved to maintain your code.

Follow good design practices and patterns. Are you aware of Dependency injection pattern - programming to interfaces. Why is MVC considered a novel way of improving the presentation layer? The best book available for understanding .Net patterns is - Dino esposito's Architecting applications for the enterprise.

One of NRN's favorite quotes is: "Love your job but don't love your company because you never know when it will stop loving you". In times of upcoming recession, it is good to love the work and add value to the business, but you may still get fired.

Permalink | No Comments | Leave your comment
 

A few tips for niche companies

I like to see more technology based niche companies in India. There are many areas like consulting, support for open source software, or a specific technology area like MVC or Azure where niche companies can operate.

The key to building niche companies is getting business. To get business, a domain expert is required, who has got great knowledge about the product or domain. Domain experts speak the language of the customer. They understand the requirements much better. They can prepare requirements document and test the final deliverable.

Aligning the business to a specific industry and specific geography can help. Common industries that are willing to spend a lot of money are banking, insurance, retail, pharma. Trendy industries are social networking and mobile apps.

Mini-products or solutions is a good way to show-case capability. Mini-products are highly customizable and extensible products that contain the base framework and allow a high degree of customization for individual customers.

Have light-weight process adherence and highlight it. Check agile in wiki for a list of agile methodologies. Pick one, prepare templates for it, and stick to it. CMMI is a good organization process framework whereas any agile methodology is a good engineering process framework.

Permalink | 1 Comment | Leave your comment
 
Commented by DDR at 11-Jan-2011 12:00 AM

From beginning to end you nailed this post to the wall! Great Job!

New features to the blog

A few new features have been added:

  1. The look and feel of the blog is improved by applying consistent styles
  2. The BlogRoll page gets the latest post from each of the blogs added
  3. The Links page is more informative
  4. The blog now provides a RSS feed

In the backend, several new features are added including RichTextEditor.

Permalink | 1 Comment | Leave your comment
 
Commented by Test at 29-Oct-2010 11:45 AM

Testing this feature

Career Building in IT industry

#1: Career Options

At the peak of the career, there are three options:

  • Senior executive – Someone who has knowledge of strategy, operations, people to create customer value and profitability
  • Consultant – Someone who has deep knowledge on a specific area
  • Entrepreneur – Someone who creates a unique product or service that provides customer value and profitability
The above options are available in any industry.

#2: Building a career

  • If you are a person who loves the details, you need to build yourself as a consultant or knowledge expert or simply an industry / organization expert.
  • If you are a person who loves to work with people, operations (process), strategy, you need to build a career as executive
  • If you are a person who loves to create something new, you have to develop the other skills to become an entrepreneur.

#3: Software applications

People working in software applications are unique as they are technology people working with established industries. Here are common usages of software applications:

  • Software applications can be created as part of IT department in any industry. Usually, the IT department processes information or create business workflows from other support functions like marketing, sales, procurement, HR, legal, finance.
  • Software applications can be built around the internet to create new business workflows, social networking, mobile applications etc.
  • Software applications can be built around devices to provide new usability or convenience features.

#4: IT industry

Apart from working within established industries, speciality IT companies are of two types:

  • Software product companies that build software for the rest of the IT industry
  • Software service companies that provide solutions and software services for other industries

#5: General tips on career building:

  • You need to be an expert in all areas related to something. For eg, if you are an executive, you have to be an expert with people, operations / process, strategy. If you are an asp.net consultant, you need to be an expert with asp.net, mvc, jquery, wcf, linq, silverlight.
  • Knowing a lot in un-related areas does not have market potential. Exception for one, the rest of the knowledge is hobbies.
  • Doing something where you have the passion to do and learn is better than doing something where you can get more money. Eg. Become a data warehousing professional, because there is more money there.
  • Moving from one industry to another is a risky thing. Lot of learning is required to understand the customs of the new industry.
  • Everyone has a chance to work / contribute to the society for 35-40 years. Building a career is a slow process than a fast / opportunistic process.
  • If you are (like me) in the beginning of your mid-level career, and you have a passion for unrelated areas, like asp.net consulting, project management, product startups, you need to give up all but one of your passions, and re-focus again.

Permalink | 2 Comments | Leave your comment
 
Commented by Rajiv at 25-Oct-2010 01:06 AM
Good ideas you have about the career!
Commented by Swami at 04-Nov-2010 12:13 AM

Very nicely written. Well categorized and insightful.

Advice to big managers

We had a workshop of experts in the coolest place (tavern) in town. And we came with the following recommendations to all software companies operating out of India. For the benefit of the larger community, I am posting this here.

Career progression for developers

  1. Get rid of performance rating systems for developers
  2. Link pay-hike to promotions and inflation-rate and not performance
  3. Give behavioral feedbacks to developers on a continuous basis and record them for future reference
  4. Promotions should be based on required competencies and behavioral skills for a position
  5. Create special positions for knowledge experts – Technical, Domain, Process, Management for which behavioral skills are not important

How to treat employees

  1. Knowledge should be accumulated and shared across the organization
  2. Cool people are as important as hard-working people (Cool = convenient/balanced/Aware, Hard-working=Getting it done irrespective of obstacles)
  3. Do not give a share-holder attitude to technical employees
  4. Motivate employees by giving a fair pay and an interesting work environment
  5. Get trust-worthy employees, and if trust is breached, be prepared to fire
  6. Have flexible working hours or pay for overtime
  7. Identify talent or special skills with each individual and exploit it
  8. Set clear expectations on what is expected out of an employee

Working culture

  1. Be flexible with documentation and reporting
  2. Use transparent communication to make decisions
  3. Get buy-in from concerned people including developers for the decisions taken
  4. Allow complete freedom over what process will be followed, and follow it rigorously
  5. Have a clear strategy for measurement and analysis and use the right techniques
  6. Identify risks and issues and make handling risks as the most important part of execution
  7. Monitor and record product (not project) risks and issues in a place where it is easy to retrieve and confidential
  8. Any initiative should be justified with adequate benefit analysis

The role of senior management

  1. Eliminate bureaucracy or inaction or referring to company policies
  2. Create a learnable organization where employees can quickly learn something either in a structured or unstructured way
  3. The organization’s objective is more important than managing the perception or career
  4. Managers should enforce the desired process and culture in an organization
  5. Do some of the above cultural changes in the organization using experts
Permalink | 3 Comments | Leave your comment
 
Commented by Sam at 17-Aug-2010 09:56 AM
Hi sir, thanks for posting useful info. I am from india. I am learning .net Can u tel me which is high paying job in: web app, win app. ? also better job security? assume performance: upto the mark/good. Thanks in advance. Pls post to samuel431.net@hotmail.com
Commented by Mitendra at 20-Oct-2010 11:49 PM
Hey Vijay, Interesting points. All are so true and practicle. Dint know about this aspect of yours while you were with ABB. Keep it up. - Mitendra
Commented by Vijay at 24-Oct-2010 03:27 PM

Thanks Mitendra.

Changes to the Blog

I have made a few changes to the blog. I have changed the styling a little bit to give a dashy green look. Blue is my favorite color. But I want to try a greenish look. Apart from that, the website is more SEO friendly than ever. I have got rid of the .aspx from the URL.

Apart from that, yesterday is one happy day. I have received a pay-hike which is considerably higher than my previous few years.The increase in pay in non-percentage terms is the highest ever in my career. So, I am very happy about it. When I get happy at work, I start blogging!

Permalink | No Comments | Leave your comment
 

Star at ASP.Net Forums

I have been posting answers to different questions at ASP.Net Forums. Over the last six months, I have posted more than 1500 answers and have reached STAR level with around 8000 points. You can track me as vijayst in the forums.

There are a few interesting projects that I am working on. This is keeping me away from blogging and working on the Forums. The project that I am working on is based on MVC, AJAX and JQuery. It is all interesting area for me. I should be post quite a few blogposts on my experience once I am done with the product development in June

Permalink | 2 Comments | Leave your comment
 
Commented by Wally McLaren at 23-Mar-2010 11:21 AM
Hi Vijay We have a new ASP.net website but now we want to add a social component - need your help URGENTLY please ! Please contact me by email on wmclaren@icon.o.za - thanks Wally
Commented by Vijay at 24-Mar-2010 10:30 AM

Please post this question on asp.net forums. You will get better responses. If you require professional help, please get in touch with a certified microsoft service provider

ASP.Net Blog

This blog is an ASP.Net blog. Why should I mention the obvious? I am an ASP.Net enthusiast. So, I developed this blog so that I have more control over it. The blog was developed fairly quickly within three weeks. In the next few months, I am planning a lot of improvisations on the website. These includes features like SEO optimization, RichEditTextBox for composing posts (and different blog storage format), and RSS feed for subscribing to the blog. Of course, I like to post better content!

Back to the ASP.Net ness of the blog. I ran the SEO optimization tool on my website. And it has a very poor rating. A few points that came out of the SEO optimization is: Have titles and META=description for each page, Have keywords and tags for each page. If you look at my home page, there is nowhere ASP.Net is mentioned. For the next few months, I will be working on improvisations on the website specifically targetted at SEO optimization and making the search engine understand that this is a ASP.Net blog

Permalink | 2 Comments | Leave your comment
 
Commented by Vishal Pawar at 11-Feb-2010 03:19 PM
i appriciate ur work an thankful for creating such blog i woud like u suggest u something about u for SCO but not publically mail me @ oi21@in.com..
Commented by Vijay at 11-Feb-2010 06:18 PM

The best way to handle SEO stuff is write better content! Something relevant and something useful.

ToolTip for DropDownList does not work in IE6

Every control has a ToolTip which is displayed when a user hovers over the control. A DropDownList also has a ToolTip property. This works fine in Firefox. But, in IE6, the tooltip does not work. The Tooltip for Dropdownlist for Internet explorer will work only if the DropDownList is disabled. Here is a Microsoft support article explaining the same: http://support.microsoft.com/kb/221608

Permalink | No Comments | Leave your comment
 

SQL for Matrix Reports

I have a list of students in the student table. I have a list of exams in the exam table. There is a score table with the following columns studentID, examID and score. I want to create a matrix report with students in the rows and exams in the columns

The report will look like this:

Student NameExam 1Exam 2
Vijay7383
Rahul7964
If we can get the SQL select statement as SELECT StudentName, Exam 1, Exam 2 FROM TempTable, we can accomplish this matrix report. The whole point is writing a stored procedure to create this matrix table. Below is the SQL stored procedure for creating the matrix. This involves cursors and dynamic SQL:

CREATE PROCEDURE [dbo].[GetScoreMatrix] AS

CREATE TABLE #Temp
(
   StudentName VARCHAR(50)
)

DECLARE @sTable VARCHAR(1000)
DECLARE @sCol VARCHAR(1000)
SET @sTable = 'ALTER TABLE #Temp ADD '

DECLARE cExam CURSOR FOR 
SELECT ExamName FROM Exam

OPEN cExam
DECLARE @sExamName VARCHAR(50)

FETCH NEXT FROM cExam INTO @sExamName

WHILE @@FETCH_STATUS = 0
BEGIN

SET @sCol = @sTable + '[' + @sExamName + '] INT NULL'
EXEC (@sCol)

FETCH NEXT FROM cExam INTO @sExamName
END

CLOSE cExam
DEALLOCATE cExam


INSERT INTO #Temp (StudentName)
SELECT StudentName FROM Student


DECLARE cScore CURSOR FOR
SELECT s.StudentName, e.ExamName, x.Score FROM 
STUDENT s INNER JOIN Score x
ON s.StudentID = x.StudentID
INNER JOIN Exam e
ON x.ExamID = e.ExamID


OPEN cScore

DECLARE @sStudName VARCHAR(50)
DECLARE @iScore INT
DECLARE @sUpdate VARCHAR(1000)

FETCH NEXT FROM cScore INTO @sStudName, @sExamName, @iScore

WHILE @@FETCH_STATUS <> -1
BEGIN

SET @sUpdate = 'UPDATE #Temp  '
SET @sUpdate = @sUpdate + 'SET [' + @sExamName + '] = ' + CAST(@iScore AS VARCHAR(3))
SET @sUpdate = @sUpdate + ' WHERE StudentName = ''' + @sStudName + ''''

EXEC (@sUpdate)

FETCH NEXT FROM cScore INTO @sStudName, @sExamName, @iScore 

END

CLOSE cScore
DEALLOCATE cScore

SELECT * FROM #Temp

DROP TABLE #Temp
GO


Permalink | No Comments | Leave your comment
 

Welcome to the blog

Welcome to my blog! I am a ASP.Net enthusiast. I am planning to keep my enthusiasm for ASP.Net and related web technologies going for a few years. I am not interested in building big applications, atleast now. But I like writing small code snippets and explore new ways of programming.

This blog will contain some of these code snippets that I develop. I keep myself active in ASP.Net forums at http://forums.asp.net. So you can catch me there as vijayst. Happy coding!

Permalink | No Comments | Leave your comment