I'm totally in agreement with Clemens here when he says that the entire Microsoft Stack is now huge and you have to start selecting on which pieces of it on which to specialize. The platform has always been large, but it used to be easier to keep up with it. However, with the new wave of Microsoft heavy metal (a.k.a the whidbey/yukon/longhorn wave of products), there's just way too many new interesting products to grasp at the same time.

I certainly have felt recently the same way Clemens mentions, and that is sort of saddened to have to choose between so many cool things because I just don't have the time to dive deep into all of them (not all of us have the amazing capabilities friends like Clemens and Sam have :)). For example, readers of my blog (if there are still any) have probably noticed I've been devoting a lot of entries to discussing BizTalk Server and fewer general .NET issues. This is no coincidence. As I've mentioned in the past, BizTalk is a huge product with tons of cool things to learn and that has been taking a lot of my time both on and off work.

That has meant less time to learn and do cool things with indigo or ASP.NET 2.0, for example, which is something I regret. I'm looking forward to spending more time with VS 2005 and related tools now that we're working on a new project with them. Of course, one issue that does actually impact our ability to really deep dive into all of these new technologies (besides the sheer complexity of it) is the whole deal with incompatible CTPs, which, besides putting your sanity to the test, can also be a significant problem for those of us machine impaired.

Speaking on the whole specialization thing, I've always believed that specialization is a good thing, particularly with some people thinking that staying a generalist was just knowing the basic development language and the BCL (yeah, right). However, I do ask myself if we're not starting to get to a point where specialization becomes less useful than it should. It used to be that you could specialize in a given product (i.e. SQL Server, Oracle, ASP.NET, whatever) or at least a broad technology. Nowadays, now, development products/platforms become so large that even this is becoming hard; for example, if you use to specialize in sql server, now besides all the basic capabilities you had there's SSIS, the service broker, huge new BI tools, and so on. Visual Studio 2005 is absolutely huge, not even considering Team System. Indigo, Avalon and friends are complete worlds in themselves. However, specializing in just one of those "small" aspects will probably not cut it unless you're in a rather large team. For example, if you're "just" an indigo specialist, how much value do you bring to the mix of a 10 people team building a distributed Enterprise Application? It can certainly be very relative depending on the role and how you consider things. And this is, of course, ignoring the fact that you're likely going to also need some problem domain knowledge as well (unless you're working on tools or in a product oriented shop). Perhaps the trick is in specializing, but not too much? Or perhaps in being able to specialize fairly rapidly on the tool of the moment depending on the point of your career and your role in a given project...


Tomas Restrepo

Software developer located in Colombia. Sr. PFE at Microsoft.