Last month at the 'office' one of the guys I'm working with casually in conversation called me a guru. Now this isn't the first time this has happened, but I always shrink away from a comment like this as vaguely embarrassing. Like I'm sitting in Lotus position for hours, with smoky incense wafting around the room, staring lovingly into nowhere. Ok, so I actually do that  :) - but not necessarily when coding (in fact I do it for EXACTLY the opposite reason, to slow down AFTER coding).

I also found this statement rather ironic, because the developers I'm working with on this assignment are particularly sharp and have an interesting and well designed application and architecture.  Working with them has been a joy because of their skill level and the architecture which is extremely flexible. It's allowed us with only very minor modification to build a new front end Web application interface of an existing desktop platform. So what business have these guys, who are obviously top notch at what they do, calling anyone a guru?

It's all in the Perception

Well, what the heck is a guru in this day and age of software development? Certainly there are people in certain niche areas that can be considered the top experts on what they do. Often it's not necessarily that they are the best at what they do, but they are the people who are most visible in a particular area and can communicate their skills to other developers.

I certainly don't think of myself as particularly smart or talented. Loud, cynical and opinionated sure. Pragmatic and practical maybe... But, a guru? Hardly.

There are a lots of people who are a heck of a lot better in just about all aspects of software development, design and architecture. I know I have lots to learn about many aspects of software development and if I had the time I would love to spend way more time improving my skill set. Even with my focus on experimenting and integrating newer technology; even then I don't have time to do everything I'd love to spend time with and learn. Just like for everybody else, reality creeps in with deadlines and other real world chores that need to be accomplished. Drat.

As developers most of us have a few developer heroes we look up to so most of us (except the truly arrogant) have some sort of Gurus or at least idols. I admire folks like Scott Hanselman and his breath of knowledge and communication skills and his wit, Scott Guthrie and his sheer energy and skill at communication and again breath of topics he covers all while being at the helm of the dev division at Microsoft. There a handful of developers like Nikhil Kothari, Wilco Bauer, Calvin Hsia to name a few, who are brilliant both in terms of their ideas and coding skills. There are many more, but most of my heroes are folks that I can practically associate with in some way, rather than the high and mighty white tower guys. But by the same stroke I mentioned against myself as a guru, these guys are good at what they do but they are also focused very tightly and just very visible at the same time. And I bet they feel the same way - they have people they in turn look up to and aspire to improve themselves in those fields where they are maybe not at the top of their game. No matter how good or how 'high up' in the rock star developer chain you are, there's always space for improvement and just as likely somebody who's better at what you do. It pays to eat a little humble pie and check the arrogance at the door.

I also think today that in the era of specialization we live in, it's increasingly difficult to be truly an expert at anything more than a few very specific technologies or even niches within a given technology. For example, if you say you're an expert in ASP.NET that's a pretty wide stroke and it'd be pretty hard to be an expert in all of it - the technology has gotten so wide. You may be very good at working with data driven applications using the stock controls, but you then probably don't know all that much about the low level semantics of ASP.NET and how to build a say a sophisticated handler implementation from scratch (maybe you do, but I'm using this as a typical example). Likewise you maybe great a JavaScript and client side development and not do quite so well with the server side of development or maybe vice versa. We all prioritize our specialties and there are some things that we are expert at and some things we know enough about that we can figure it out as we go.

And it's definitely getting harder to find your focus with so many technology choices out there. Who has time to keep up unless you are a in a position to just examine and evaluate everything that comes your way giving a huge chunk of time as part of your job description? It's also no wonder that many people are starting to burn out on the technology round and round and are looking for 'gurus' to pull it all together. Unfortunately, there are no easy answers and no guru who'll solve our problems the easy way...

We're all Gurus in a Way

Software development is hard. Software development is a wide area of knowledge and most of that knowledge comes from experience. And even that experience doesn't get you everywhere - skills are hard won, one project or assignment at a time.

Yet at the same time most of us also are very good at at least one thing. This can be a general technology, or it can be a specific business process. Even if you work a fixed 9 to 5 job it's likely you are in an expert on the technology or methodology or business practices you're working on. I often work with different customers and their business problems or solutions that they've built and it's often amazing to see what amount of ingeniousness has gone into solving a specific business problem. A lot of these solutions are innovative and unique in the ways that they utilize technology efficiently and effectively. As an outsider who comes in to help with specific technology problems (vs. business problems), I am just as starry eyed, thinking of black arts when it comes to those business implementations. In other words, we often forget that we are good at things that we take for granted because it's second nature to us, but feels like a monumental achievement to those looking in from the outside. Any technology sufficiently advanced looks like magic when you don't understand it, right? <g>

Any technology that is new to people can easily feel overwhelming and then having someone around that knows the technology and uses it efficiently can easily seem like a black art: Guruism born. As I was working with my clients these weeks it's clear the developers have a strong background in software development, but they've been isolated in a specific type of development (desktop apps specifically) and for them Web development was fairly foreign. Sure there was basic understanding of HTML and how server based processes work for handling Web requests, but more arcane topics like CSS design, JavaScript and DOM programming and using AJAX to handle callbacks to the server surely seem foreign. It's easy to dismiss these things as 'basic education' for Web developers, but if you think about all the things you need to know to start building effective Web applications (and not those drag and drop type apps you see in demos) that take advantage of proper separation of concerns, proper design, integration of server and client functionality in a browser for example - it all involves a lot of different although interrelated technology. So next time you sit down with a newbie and wiz through CSS tags off the top of your head, or DOM element properties 'just like that' rolling your eyes at Mr. Newbie because he looks at you with a glazed over expression, remember that we didn't get there in a day either.

Next time you think of anybody as a "Guru" just remember that you've probably spent your time learning and becoming an expert in your area of expertise yourself. And although you may not get the wide recognition of somebody who's more widely visible because of a big mouth or a big case of exhibitionism (<g>) think about what you have accomplished and how that compares even if on a smaller scale.  There are no Gurus - there are only fellow developers on a similar path as your's.