Michael is a founder of TargetProcess (agile project management software). His Mission is to provide solutions to real problems in agile projects. He wrote several books about web development and many articles related to almost all aspects of software development. Michael is a DZone MVB and is not an employee of DZone and has posted 48 posts at DZone. You can read more from them at their website. View Full User Profile

Software Development: Specialize or Generalize?

  • submit to reddit

Now here’s a good topic for discussion. Many years ago we were hiring software developers as such. For the most part, they were good at their job, but not all of them.  Me, personally, and all my teammates back from these times – we were writing in any language. Something needs to be done in .NET? There we go. Any HTML work? No problem (well, the HTML work was mostly for me). Shoot something in javascript? Done. I’m not talking about the quality of these solutions, not yet.

Then, we became set apart from each other:  here’s the JS team, and they give zero consideration to the server-side tasks. These guys are .NET guys, and God forbid if they lay their hands on the client-side (with rare exceptions). This distinction projects into hiring as well: here’s a .NET, a .JS and an iOS position. It manifested itself in particular as we got down to tp3, putting the clear boundaries between various areas of responsibility. The UI is done in .JS and .JS only, everything communicates with REST API, the core team negotiates the query/response format with the .JS team, and off we go. This is a nice way to start a new project. Each team is busy with their part: they design architecture and do the refactoring as they aspire to perfection within their boundaries.

However, there comes a time when the teams are almost done with the architecture, but there’s a flurry of horizontal application-specific issues.  It somehow turns out that there’re tons of the UI related tasks, and few server-side tasks. That’s when specialization delivers the heaviest blow. The teams are not aligned, there’re twice as less developers in the UI team as compared to the .NET team.  As a result, a half of the core team developers hang around nagging for new tasks, and one has to assign them to not so important jobs. On the contrary, the UI team is permanently slammed.

My opinion is simple: there’s no ultimate specialization. Sure thing, someone prefers one technology over another, and works with it most of the time. But a classy developer is able to adapt to a new ecosystem quickly and write in any programming language efficiently enough. The 80/20 rule of thumb might well be in effect here.  You’re focused on your core competencies, at the same time reaching out to the new areas.

From the company’s standpoint, it’s very cool when someone can create a feature in its entirety. There’re less delays, the feature passes all the developments stages faster, there’re less discussions and handovers. One can truly stay focused on the tasks that are important at this very moment, and not shop for some work of a lower priority.

From the developer’s standpoint, it’s not as simple as that. I’ve never had any problems or issues doing something by myself.  For some reasons, it is a big problem for some people. Yes, at the beginning you’re not likely to come up with perfect solutions. Yes, there will be some naive mistakes. But, in my opinion, a great software developer can deliver sensible solutions even in a fairly unknown environment.
Next, it’s about personal involvement. Many people hold .JS for HELL. However, if the framework is done, as well as HTML, it doesn’t look that bad. Some interesting things can be accomplished with .JS as well.

Why I liked to do a feature all by myself? It’s about the great feeling that I did it on my own, that’s why. This feeling means a lot to me. How about you?

To sum up, we will now resume hiring classy software developers, the ones that can create the entire feature from start to end, despite the technologies, and have nothing against that.


Published at DZone with permission of Michael Dubakov, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)


Mohan Kumar Muddana replied on Mon, 2013/02/04 - 8:22am

I agree with you. In large companies people are segregated based on their tech area. Smaller companies target a person who can handle other things outside their boundary. Things are changing will lot of full fledged java script frameworks, new HTTP standards and plenty of languages to select from. One cannot be sitting lame duck in future.

Serge Bureau replied on Mon, 2013/02/04 - 9:53am

I disagree, polyglot is in general having a basic knowledge on many languages and tools, but no real specialization.

It also means witching tools very often, very time demanding.

Also on support side, using too many tools and languages makes support very difficult.

It used to be that using many language in a project was bad design, I believed it and still do.

That is why we have people saying some languages are "too complex", when you use it only intermittently it is normal, it is a case of too many tools and not really taking advantage of those tools, the real strength of the top 20% is wasted.

So I do not like the direction of the software industry. Why is it that our multicore-multiGHz machines are not performing much better than MHz of 20 years ago, and something like word requires a GB of disk space. Multi-tools is nice for choice, but using many at once produce only bloat.

Philopator Ptolemy replied on Tue, 2013/02/05 - 5:52pm

What about specialization of labour? Doesn't it contribute to better efficiency? A JS expert is much faster and effective in JS than a .NET/Java guy is. Not to mention the "beautiful" UX done by server dudes (i know it sounds like provoking a flame).

And if you have imbalance between workload in front and back-ends, staff the teams accordingly...

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.