Dec 2, 2007

Are technical skills alone or just being a quiet achiever sufficient to boost your career?

The answer is no. The technical, analytical and problem solving skills must be complemented with:
  • Effective marketing skills to promote your skills, knowledge, and achievements along with ability to negotiate your promotions, salary or contract rates. Now days it is a rarity for management to pro-actively recognize or reward their staff unless there is an immediate vacancy to fill. If you cannot determine your net worth, how the management can?
  • Effective communication, interpersonal, presentation, mentoring, being a team player and business skills. I have seen candidates with technical, analytical and/or problem solving brilliance getting either sacked or failing to make a mark in their careers due to lack of one or more of the above mentioned skills.
There are myriad of books and online articles that can help you on the second bullet point, so let me elaborate on the first bullet point based on my experience and observations. If you want to market a merchandise successfully, you must know the merchandise. The same is true in marketing personal services in Java/J2EE.

When and where do you market your technical, analytical and problem-solving skills?
  • Team meetings and design/technical sessions.
  • Pro-actively providing either verbal or written recommendations or suggestions on improving the quality of the software, development process, fixing design and/ or development flaws etc.
  • Demonstrating your work and achievements via team/stake holder presentations, conferences, training, hand-over sessions and/or road shows.
  • Casual chats/conversations.
  • Code review sessions.
  • Interviews and CV.

Note: Take care not to over do and not to point fingers or undermine others. You should have your facts and know what you are talking.

What is required to effectively market your technical, analytical and problem-solving skills?
  • Ability to look at the big picture and drill down as and when required.
  • A good understanding of the key areas of software design/development.
  • Ability to look at things not only from a technical perspective but also from a business/stakeholder perspective.

In early stages of my Java/J2EE career I was in a position to impress my team leads and architects by pro-actively pinpointing some of the critical performance issues, transactional issues, memory issues and threading/concurrency issues and more recently on design flaws, scalability issues, software development process and best practices. I call these the key areas in my book entitled “Java/J2EE Job Interview Companion”. Let me illustrate with some Java/J2EE related examples:

  • Struts action classes and Servlets are not thread-safe.
  • Valuable resources like database connections, file handles and sockets must be closed properly.
  • Throwing an application exception will not rollback transactions in EJB.
  • Web search functionality that can return large result sets should consider using true pagination.
  • Improper implementation of equals(..) and hashCode( ) methods can cause indeterministic behavior that is hard to debug/reproduce.


This requires ability to think outside the square and analyze (i.e. What If scenarios) and think of exceptional conditions.
  • What if an exception is thrown or customer cancels the transaction? Will the transaction be rolled-back?
  • What if 100 concurrent clients access this search functionality? Will it be thread-safe? Will it scale well without any performance or memory issues? [Consultants/contractors spend lot of time fixing these types of problems]
  • What if these critical messages are published to the live system with some inappropriate and/or sensitive messages? Do we need an approval or work flow process to prevent any human error?
  • What if a JMS message is lost? Do we require a guaranteed delivery mode? Or is performance more important than reliability? Can this message be consumed by more than one consumer?

Problem Solving:

This requires ability to identify and fix root cause of the problem.
  • “Account” objects are not getting added properly to HashMap. A possible cause is that the equals(..) and hashCode() methods are not implemented properly in “Account” class.
    Cannot retrieve the stored objects from the HashMap. The possible causes are that the equals(..) and hashCode() methods are not implemented properly or mutable objects are used as keys.
  • CPU usage is very high. Possible causes are an endless while loop, never ending recursive method call, spawning a new thread every time instead of using a thread-pool, over-working the thread scheduler, memory starvation, improperly sized heap memory, inefficient Garbage Collection (GC) or GC alogorithm inefficiency etc .
  • OutOfMemory exception is thrown. Possible causes are not enough memory allocated for the working of the application, unintentional object retention causing the heap to grow and grow, not making unused objects garbage collectible, memory leak in the JVM etc.

When do you engage in negotiations on your promotions/remunerations?

Everyone wants more money, but it is something entirely different to be worth more!. Your value is established entirely by your ability to render useful service or ability to induce others to render such service. Before you even start to negotiate your salary be sure that you are worth more than you now receive.
  • After having proved and promoted your abilities and worthiness (say 6 months to 1 year).
  • After having an alternative job offer that is more attractive but you are happy where you are.
  • After having multiple job offers if you have decided to move on. Do not rush in to accepting the first offer you get while you have more interviews to attend or waiting on other interview outcomes.

Note: Study the market rates, demand for your skills etc. Do not be unrealistic.