In almost all of companies that I've worked, the issue of "who does development on the new technology" has arisen. In a large number of cases, the work has been outsourced to contractors, leaving internal developers disenfranchised and resentful. The general developer opinion has been that the managers don't care, that they were brought in for their skills and have been left to rot since, and that there's a lack of belief in their abilities.
Based upon the number of times this situation occurs, I personally think the blame is more attributable to a combination of slight failings from different areas depending on the company (as always, there can be good and bad people in any position):
- Contractors generally don't share knowledge when they are hired in. The contractor usually cuts a solitary silhouette, not engaging with the developers other than to assert their technical superiority, potentially trying to prolong the contract for as long as possible. The contractor may well even be using the project to skill themselves up on a particular area.
- Those that hold the purse strings for the projects/programme (upper management) for generally pushing for a short-term financial gain over the long term success and health of the business
- Technical management for not having the belief in and the strength to stand up for their internal staff. Again, this is taking short term success over long term health of a company.
- The project manager/development-lead regularly pick the contractor, basing the decision upon technical skills (as that is the perceived requirement), rather than their ability to ensure that the project is not just delivered, but *maintainable* and understood. I.e. a contractor that understands that they are there to mentor staff as much as cut code.
- And finally, the developers... The developers assume that they are "owed" by the company to provide training. Whilst different people learn in different ways, I don't believe that training courses alone (which is what many developers ask for) really add much value. I personally find Google and MSDN far better value resources than any course. If a developer really wants to ensure that they get to work on new technologies, they need to do their bit to stop it from (perceptibly) costing the company so much. They need to add a percentage to how long "legacy" projects take, spending time learning new skills and techniques, basically "playing the game".
Still on the subject of developers, the typical training budget of a couple of thousand pounds/dollars a year is nowhere near enough to learn a new technology, so the shortfall will have to be made up somehow. Rather than a rigid stance that "the company owes it to me", developers should understand the commercial realities of business, and judge:
- Why they want to work on the new technology - is it for fun, or is it because of current skills becoming obsolete?
- How can they justify training on a new technology in financial terms? (I.e. exactly what training do they need, how much will it cost, and how long will it take for the company to make that money back)
- Is their current company really any worse than any other?
- What are the risks and rewards of changing job?
From a management perspective, the problems occur (in my experience) for two reasons:
- Bonuses and promotions are usually only based on the success of the projects the individual has delivered, promoting short-termism.
- The power generally lies with those the hold the purse strings; people that (rightly) generally don't care about the technicalities of the solution. One technology may well appear much as any other to such people, so the importance of internal skilling and the relevance of this to the developers may well not be apparent. (I'll be writing more about this in another entry soon...)
When this problem occurs, analyse which one of the following 5 parties is causing the issue and why. Then you can determine if you have the power to affect the situation in any way, or if it's better to save your energy.