Developers who make up for a shortfall in their own
experience, or don’t have the confidence to tackle development tasks on their
own are a performance problem that you need to address before the problem
affects the performance and morale of the entire team. A certain amount of help
should be expected from the more seasoned members of your team. The job
definition of a senior programmer should include a certain amount of coaching
and mentoring of the junior programmers on the team. It’s when a team member
who shouldn’t need coaching requires constant help from other team members that
you have a problem. The problem begins with the impact on the productivity of
the team member who’s being asked for help, but if left unchecked, could have a
negative impact on morale and the entire team’s productivity. If the help
detracts from the time spent on producing a deliverable, that’s a productivity
issue. If the senior programmer makes up for this by working extra time, that’s
a morale issue.
There are several ways in which you may detect a problem in
this area. The most obvious is a complaint from a senior member on your team
that their time is being wasted in helping a more junior member. Keep in mind
that we’re not referring to a situation where a senior member has been assigned
to coach or mentor a more junior member; we’re talking about someone who
shouldn’t need constant guidance, burdening the senior team member with
requests for help. Get the details of these requests from the senior member.
How many times a day do they ask for help? What are the issues they need help
resolving? How many hours a day are being wasted? The one-on-one conversation
becomes a little trickier when the development team is remote. You’ll need to
ensure that each member of your team has the means to contact you by telephone
and is encouraged to do so should they encounter a problem they think you can
solve.
Observing the behavior yourself is another way in which this
problem can come to light. This is usually an outcome of the "walk about”
approach to management and requires you to be physically present among the
development team. If you observe one team member frequenting another’s work
place, observe the behavior of both team members. You’ve spotted a problem if
one is clearly asking the other for help. Signs to look for include: paper
copies of code to be debugged, the visiting team member directing the host team
member’s attention to their code on the computer monitor, and body language –
does the visiting team member lean in to the host? Do they receive an answer,
nod their head, and then walk away? A development team that is performing as a
cohesive unit will provide you with numerous opportunities to observe this
behavior as team members provide help to one another as its needed. Your job is
to observe situations where the traffic is all one way.
The deterioration of a senior team members productivity is
another (and the least desirable) way to identify this problem. A senior team
member who has proven in the past that they are capable of a high level of
productivity that begins to miss deadlines, or produce poor quality code is the
warning sign. Use the "walk around” technique to gather more information on
this situation, paying particular attention to the team member whose
productivity has suffered. Spotting another team member at their work station
is an indication that productivity is suffering from an excessive amount of
help being provided to the visiting team member. If you don’t have an
opportunity to observe the team member, take them aside to get to the root
cause of the problem. Start the conversation by citing the team member’s
accomplishments and contributions in the past then tell them you’ve noticed
that their productivity or quality has been suffering lately and ask them to
provide you with a reason. One-on-one conversations with your team require deft
handling and cultural sensitivity. There are some team members who will never
allow the situation to get to this point and there are others who would rather
swallow their tongues than complain about a team member. If you are dealing
with the latter, you may have to ask closed-ended questions to get to the root
cause of the problem. Don’t hesitate to force a yes or no answer to your
question (i.e. "Is another team member coming to you for help all the time?”,
"Who is that team member?”).
You need to take corrective action now that you’ve verified
that you have this problem. The first step is to evaluate the needy team
member’s skill and experience. You may need to re-evaluate the team member’s
status if they joined the team as a senior programmer and constantly need help.
You have a different problem when the team member is described as a junior
programmer. More on this situation later in this article. A programmer who is
described as a senior programmer may not necessarily be a fraud because they
are asking for an excessive amount of help. You need to compare the skill set
and areas of experience in this person’s resume against the type of work you
have assigned to them. If their experience and skill set does not align with
the work, you need to re-evaluate your planned work assignments and training.
For example, training and experience in .jsp programming won’t provide a
programmer with the ability to design database structures to store information.
Examine your plan to determine if there is an opportunity to train this
resource in the areas they are deficient in. Alternatively, you can
re-distribute the work so that someone with more experience is assigned the work
and the needy programmer is assigned work more in line with their strengths. By
the way, the other side of this coin is the programmer who is weak in an area
and takes action to strengthen the area without burdening other team members.
Where this happens, and the programmer manages to deliver quality code on time
without burdening their team mates, recognize their accomplishment and do what
you need to do to retain them for your team!
You can strengthen the needy programmer’s skills by either
providing them with formal training or providing them with the coaching or
mentoring they need. Both these solutions will necessitate a change to your
plans. Formal training will require an increase to the budget and additional
resources to make up for the training time. Of course you may choose to address
the shortfall with overtime or simply extend the schedule, if there is slack
time in the activities assigned to the needy programmer. Establish a formal
coach/student relationship when you choose that action. Both the coach and
needy student need to be on board for this approach to work but if the needy
programmer is already asking for the help you shouldn’t have a problem on that
end of the relationship. Make sure that the coach is allowed the time required
to adequately coach the needy programmer. You will also need to provide
adequate time for the work assigned to the needy programmer; the amount of time
originally assigned for the work was based on a false assumption and the work
needs to be re-estimated with the new information. Your new plan must provide
extra budget for extra resourcing to make up the shortfall, an allowance for
overtime to make up the shortfall, or new end dates for the work packages where
there is slack in your schedule.
So far all of our corrective actions have been benign. There
has been no need to address behavior problems. That doesn’t mean the "needy
programmer” problem is never due to behavior problems. The most common of these
is what I call "false advertising” which means that you have acquired a senior
programmer who isn’t really a senior programmer. I’m not referring to the
situation where the programmer has been assigned work that doesn’t align with
their skill set, I’m talking about the programmer who has misrepresented their
skill set in their resume and in any interviews you’ve had. The resolution of
this problem will differ depending on the source of the programmer. You should
consider replacing this person if they are a contract resource. Go to the head
hunter who sourced the programmer and let them know the reasons for the change.
You may also want to change head hunters if you feel they mislead you. Make
sure there are valid senior programmers available, with the skill set you need,
before making this move. Don’t make a bad situation worse by dumping a
programmer who was able to make some contributions to the team without a
replacement. You should also perform a "Lessons Learned” exercise where you or
your team was responsible for interviewing the needy programmer. How did this lack
of experience escape your notice? What questions could you have asked that
would have exposed this lack of experience?
You will need to approach the problem from a different angle
when the resource comes to you from an internal organization, either your own
or another in your company. Tread very carefully here as someone in a position
of authority in your company has assessed this person’s skill set and described
them as a senior programmer. Approach the needy programmer’s manager about the
problem. Explain the problem to them citing the facts you gathered from your
observations and point out the gap between your expectations and the needy
programmer’s abilities. Please keep in mind that a good deal of what appears in
a resume is subjective, even when it comes from a manager. You may be dealing
with a situation where the needy programmer is a protégé of the manager in
which case you should expect opposition. Focus the conversation on the needs of
your project, rather than the deficiencies of the programmer. Arranging for a
replacement of the needy programmer with another possessing the required skill
set is the most desirable outcome of this meeting. Failing that outcome, you
may be able to return the needy programmer to the bench and replace them with a
contractor. Again, be careful that you don’t make a bad situation worse by
losing a programmer capable of contributing at a reduced level with no-one.
You need to engage a Human Resources expert if you can’t
resolve this situation with the needy programmer’s manager. Let them help you
out of your jam. Allowing an expert 3rd party to resolve the
situation may be your preferred route, if there is a history of conflict
between you and the manager. There are 2 advantages to this solution: 1) your
HR rep should be an expert in handling conflict, and 2) you defuse the
situation by inserting a 3rd party between yourself and the manager.
The disadvantage of doing this is the risk of destroying any trust established
between yourself and the manager. I would advise the engagement of the HR rep
only in situations where you are certain you can’t resolve the situation
directly with the manager. State your case to the HR rep citing the facts
you’ve observed and focus on the desired outcome: the replacement of the needy
programmer with someone who possesses the skill set you need.
The needs of your project should be uppermost on your agenda
when dealing with needy programmers but keep in mind that your relationships
within your organization/company will extend beyond the conclusion of your
project. Your responsibility is to deliver your project on time, on budget, and
with the features and degree of quality required, but try to do this with as
little damage to your relationships with others in your organization as possible.
Unless you’re a consultant and only on board for this project, you will need
the cooperation of these people for success in future projects.