Yngwies And Songwriters

I’m not sure who remembers Yngwie Malmsteen. He was a hair rock guitar player from the 1980’s who was quite honestly the best technical guitarist I have ever seen.  If you get a chance look up a video of him playing arpeggios.  Fast and ON.

He started a band   They played around the United States and of course Europe and Japan.  Um, the world, if you will.

His songs sucked.  Bad.

So here you have a guy with unbelievable talent who can’t write a song anyone will ever remember (anyone except maybe patrons of The Zoo in Winnipeg ).

You of course know what I am getting at.  A lot of times the ability to write a solid, supportable, operational piece of software is more important than the micro-correctness of its parts.

I started to think about this because I was reading Joel S. blogs on hiring, retaining,  and on the so-called best developers there are.  Also because a company I was at had migration after migration of  talent, and kept hiring in the BEST people (so they thought) using the same technique to get them and lose them again.

One for example — was a code rock star they hired who blew the top off their entrance exams; you know, fizz buzz problems, what are the different kinds of state, why override an equals — all those things many of us do not do on a daily basis.  Not that it was important, these things are, but the guy couldn’t code.  He had never used any meaningful tools or had any experience with any real Java architecture, but *had* written a lot with vim and plain old swing type stuff.  In a nutshell, he knew everything about wood but didn’t know how to use a hammer and saw.  The outcome was a great struggle, and a lot of bad rewrites of code because of an inflated ego.  Code reviews would consist of arguments about where to put brackets and the role of “final” in local variable declarations. Never about how to make a better overall application that did what it was supposed to do.

I consider myself an plain old programmer because I have some things I am really great at and some things I am not — good at things like doing data, solving problems in adverse situations, writing web services stacks, thorough testing and getting along with co-workers.   I also have my shortcomings like having not worked on  many service busses, been a while since I’ve touched EJB, UI sometimes bores me (and I have written MORE than my share of Java and JavaScript UI code), and although can do config management (I have set up Hudson/Jenkins servers and integrated them with repositories, build jobs, management tools like Rally etc.) it’s just not my passion.  Plus my memory for everything pedantic just isn’t there.  I only can access so much information.

The few projects I have worked on that have failed ended up having a very opinionated Yngwie’s taking over the teams near the end game.   But they simply cannot tolerate other people’s non-perfection for their own (non)perfection.  One startup I worked on had a Flex front end some years ago, and while we needed a new customer site the Yngwie on that team shot off his mouth and had people expelled to build an unneeded rewrite of the admin piece.    Many of use believe   Code Rewrite is Company Suicide:

The Siren Song to CEO’s Who Aren’t Technical
CEO’s face the “rewrite” problem at least once in their tenure. If they’re an operating exec brought in to replace a founding technical CEO, then it looks like an easy decision – just listen to your engineering VP compare the schedule for a rewrite (short) against the schedule of adapting the old code to the new purpose (long.) In reality this is a fools choice. The engineering team may know the difficulty and problems adapting the old code, but has no idea what difficulties and problems it will face writing a new code base.

It’s almost like being with someone who is OCD.  Another gig I did had a dude who literally did Mark Wahlberg type karate kata in the bathroom mirror (aka the film Boogie Nights) and would come out and insult everyone into submission.  Code did not get written so well and that environment had a terrible blamestorming attitude to our daily existence.  We all cringed (or laughed).

How about a n Yngwie who writes his own build tool when things like Maven, Gradle, and Buildr exist already and are more than adequate?  Seen it.  How about an Yngwie who abstracted classes down so far they hierarchy was 12 deep needlessly?  Seen it. technical skill is fantastic — when used in the correct manner then  technical skill is awesome, when used properly.  But I think there is a bias in our industry to measure something incorrectly — that technical skill is the same as resourcefulness and creativity.

You ever see this video, about the Netscape Rewrite that supposedly put it in the can?  The one thing that sticks out to me in that film is that the people who created it were not the greatest coders, but they CREATED it.  Then later all the uber techno geeks come in and say “this is crap” even though they themselves didn’t invent a Netscape.

It takes all kinds of developers.  But one thing I watch out for is not getting enough opinions on a team.  Many times the Yngwie’s are the loudest and seamingly best choice to ask about something; but if they have no proof of being able to write the song then they might even be the worst coder on the team, the cowboy every manager so fears.

Personally I enjoy a team with a diverse set of skills.  Also, most people I know who produce code for businesses and make money at it are not Linus Torvalds stellar.    How could anyone be?  Heck would most places even pay for a Linus?  And isn’t our industry incremental — a few people making small contributions like a pizza ordering app here, a cool SQL algorithm there; with a few great leaps and bounds — much like Evolution?

It is my opinion that a good dose  of humility makes us all better.  So what if code isn’t perfect, writing code like writing a book is a genesis of getting better; in the application and everything else.

And like most business owners — I appreciate an Yngwie Malmsteen, but I love a George Harrison.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>