Cross-sectional or Vertical Specialization

My hovercraf
t is full of eels: Assistant Orange Peelers

The author raises a very good point. I don’t believe you can be successful (or perhaps, its more difficult to be successful) if you break software develop
ment down into a series of specializations. Although a developer may have more training and intimate knowledge in a specific area of code, it is not effic
ient to let him/her focus solely on that area.

A good developer needs to have the ability (ie: knowledge and tools available) to diagnose and debug a problem regardless of where it may lie and what tech
nological cross-sections it might touch.

When I look for a developer, I look for someone with good cross-sectional exposure to technologies and methadologies. These are the types of people that a
ble to easily adapt to different environments and share their experiences while contributing to valuable discussion. What I term a vertically focused deve
loper (someone who is a specialist in a single area) could potentially be very set in his ways. Design/implementation designs should be based on a holisti
c view of the entire system and not on someones personal perferences (although the experiences of a domain specialist are valued).

This leads to my last point, the over-reliance on specialists to make far-reaching decisions.

Hypothetical Situation:

Company: We know we’re doing something wrong and its going to bite us later, but at that point we’re going to bring in a high-priced outside senior perso
n to magically fix the problem for us. For now we’ll look at ways to “optimize” the code.

Maybe I’m not optimistic enough, but I don’t see the point of waiting for someone senior to come in and point out the mistakes (and magically fix them) wh
en you could start taking iterative steps towards reaching a suitable goal right now. I’ve been in situations where I’ve been brought in as a so-called ex
pert to provide man power on a dead-end project. It’s difficult to fight past momentum and really make the right (and necessary) kind of change. So, on a
whole, all developers need to be agile and prepared to work collectively on all aspects of a code base. It’s not possible to have intimate knowledge of t
he entire code base, but it should be possible to have a birds-eye view of the different components and perhaps their most important points of interaction.
The code is owned by the collective and although you may not be a specific expert in a given technology, that’s no excuse not to raise a concern or quest
ion a course of action.

Management should encourage their developers to cross-train and become self-sufficient, I believe a cross-sectional approach to development far outweighs
a specialist vertical approach.