A number of things have come up in the last few weeks for a project I’m involved in that has shaken my beliefs and shifted my perspective.
The team I work with have all developed a deep level of experience within their domain of expertise. This is part of the competitive advantage we use to win clients. Smart people with a tightly focused specialization can work faster and produce better work than a generalist that hops to the new hotness on every other project.
The problem is that these specializations prevent individual developers from breaking out of their circle of perceived experience without great effort. Specialization codifies itself into the how the team functions, who can work on what and who cannot work on what.
When a problem that demands some technology or tools which are outside of the normal comes up it can throw a wrench in things. Sometimes there are justifiable questions – can we support a solution written in Lua if the original developer leaves? Other times it can devolve into a rather insulting “‘We’ don’t know how to do that” for something that can be learned in a few hours of reading or working through a tutorial.
The perceived difficulty and risk of something new can prompt only the most senior developers to get assigned to work on new things.
In the past at various different jobs we did one of two things. We noticed that the existing technology stack was no longer meeting our needs so we evaluated some alternatives and then everyone was given some insight into the decision, how it was made and then either:
- Everyone was given training to get up to the same level of proficiency at the same time
- A hard cut over to the new project on a new stack and forced everyone to pick it up quickly on their own
Most good developers have no problem picking up a new language quickly. A significant portion of the knowlege you have as a Computer Science or Software Engineer is not tied to the syntax of a particular language.
Part of a good education in Computer Science is experience with a wide range of types of applications. I did AI algorithms, wrote a real-time operating system, OpenGL and ray-tracing, web applications along with the basics of algorithms and data structures. Part of being a great developer is having the breadth of experience to know when to apply certain technologies over others.
A perceived specialization can negate all that past experience, and hinder an individual’s opportunity to tackle new challenges. It demands a balance that must weigh company goals and efficiency won from deep expertise with the desires of each individual developer to work on interesting things and continue to learn.