On being a generalist

I have an interesting job.  I get to build and lead a small team of developers to create a fancy web-based content distribution / market analysis tool.  This will be the first time in the history of the company that a full time team has worked on the software.  Up until now, they have had a mix of contractors and outsourcing firms provide their software needs.  These are talented folks who have been able to come up with a great product, but as you can imagine, the system has become a bit fragmented.

In our solution, we are currently using the following technologies (in no particular order):

  • Ruby / Rails
  • Ruby / Sinatra / Unicorn
  • MySql
  • C# / ASP.net
  • MSSQL
  • Python / django
  • Python / CherryPy
  • Mongodb
  • PHP

Quite a laundry list no?  This might sound like a crazy stack, but other software companies I work for are no different.  Software systems are complex beasts that tend to be spread across multiple platforms / technologies.  Why is this the case?  I believe that there are a few reasons why:

  1. Software moves a million miles an hour – New programming languages, frameworks, and technologies come out seemingly every day.  Most of the time, these technologies provide developers with a faster, better, or more friendly way of solving a problem, so developers are anxious to get their hands dirty and try them out.
  2. Programmers are magpies, and prototypes, unfortunately, often end up being end product – Because of reason #1, developers will often want to keep up on new technologies and frameworks by getting a “hello world” fired up.  I personally do this quite frequently.  It is critical for developers to stay current on new tech. Often while experimenting with new technology, a particular software problem will come up at work, and a developer will think “man, that would be soooo slick in Node!”  They poke around a bit, get a prototype running, show it to their customer, and before you know it, you’ve got Node running on your production server.
  3. Technology choice, or lack of adapting new technology is a narrative of the culture of an organization – Organizations say a lot about who they are and want to be by what technology stack they use.  No one wants to be perceived as being built on a barn, so new passing craze technology will get wrapped into existing solutions just so the name of the technology can be thrown around in geeky conversation.

Seldom will a developer work for an organization that utilizes a single platform.  We need to be flexible.  We need to be willing to learn new things.  We need to be generalists.

Two stories:

At a previous job, a developer was working on a project.  He had worked in a particular technology for most of his career and was quite skilled at getting things done with it.  A request came in from management which required him to step outside of his sandbox and use a new technology.  I had personally used this technology only a little bit (due to my incessant “hello world” dablings) so he asked if I could help him out.  I of course was happy to help.  Teaching and mentoring are my true passions.  I began to explain to him how he could go about solving his problem with this new technology.  After about 5 minutes, he said something like this: “You know, why don’t you just go ahead and write the code for me.  I really don’t have any desire to learn new technology.”

I was floored.  How could you not have the desire to learn new technology?  How do you expect to stay even close to relevant as a developer?

The second story relates to my new position.  I am currently in the process of hiring a new developer, and I have had a few phone screenings with potential candidates.  One candidate in particular stuck out to me.  his resume was solid, and he had a lot of good .NET experience (which is good, because a large chunk of our new product is written in ASP.NET).  After speaking with him for a while, I asked him what he thought about Ruby, Python, and a few other technologies.  He said something very simmillar to the guy in my first story.  ”I haven’t worked at all in Python or Ruby.  I don’t like Linux.  I don’t really want to learn any of that stuff.”

He was immediately off my list.

A large chunk of our product is written in Ruby and Python, and runs on Ubuntu Servers.  What happens when those components break down?  Does he just twiddle his thumbs until a bug report for the ASP components come in?  Sorry.

Don’t be afraid to learn new things.  Don’t pigeon-hole yourself into a technology.  Be a generalist.

Unless, of course, you don’t want to be on my team.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>