Since Good Friday was a Telligent holiday Leon (Fallen Rogue) and I decided to meet for breakfast and some stimulating conversation. Well, stimulating for me at least; I'm not sure how much stimulation Leon got from my never-ending statements like "Huh?", "uh-huh" and "okay, I get it". For those keeping score, Frisch's Breakfast Bar FTW!
Leon started off the conversation by stating that he had been really active in the Ruby community and had not actively participated in the ASP.NET community until about a year ago. At that point he realized that the Ruby community had some strong thought leaders and everything seemed to be on the right path so he decided to put more effort into the ASP.NET community, which he thought needed some help - some organization, some direction. This led us to discuss the things we like, the things we dislike, and things that are broken and why. Over the next two hours we discussed various topics, but the majority of our conversation was dominated by our thoughts about the current state of the ASP.NET community that we both proudly consider ourselves members of.
[Leon, feel free to chime in if any of my recollections are wrong.]
I believe that Leon has a follow-up post to this where he will relay more of his thoughts and evangelize a bit, but I'll start off by presenting a couple of observations and theories that we, a couple of guys in the trenches, raised:
- The ASP.NET platform / community is immature for its age
- Thought Leaders are chasing dragons
- Microsoft needs to let go
The ASP.NET Community
The above image represents my view of the ASP.NET community. At the top of the pyramid you have the leaders who steer the community. At the ultimate tip is Scott Guthrie. While this may or may not be true it is perceived to be true so that makes it real. When Scott writes something in his blog or gives a code example then that example becomes the gospel - it becomes the way it should be done. It is copied over and over and over. And why not, nobody seems to know the platform better than he.
The second group, the Practical Experts, are those of us who are perceived as having varying level of expertise, speak at Launch events, run User groups, write books, blog, etc. While there are a large portion of "loyalists" in this group, there are also a lot of ALT.NET people and others looking for the best way to do things. Some of these people profess TDD, BDD, design patterns and other "best practices" and some of them just do things the "Microsoft way".
The bottom portion of the pyramid, which would be much larger if drawn to scale, consists of the rest of the ASP.NET developers that build or maintain web apps daily and are just looking to get the job done. This large group follows the platform/community rather than study it. They don't actively seek out better ways to do things. Instead they just do what the two groups ahead of them tell them to do.
The ASP.NET platform / community is immature for its age
I have to admit that I know little about the Java world so take my perception with a grain of salt. When I think of Java the first things that pop into my mind are the myriad of frameworks available. Thinks like Spring and ActiveRecord come to mind. While those things are available in the ASP.NET world, you have to look to find them - projects that fall under the Castle project for instance. They are not part of the "standard" toolkit of day-to-day ASP.NET developers. If you ask a 9-to-5 ASP.NET developer about ActiveRecord or Dependency Injection he or she will have no idea what you are talking about. She may know something about MVC if she's been following the recent headlines, but the majority of her time will be spent working with Web Forms. Don't get me wrong, I don't hate web forms, but I know there is a better way and I'm searching for it. But it's hard to sift through all the noise to find it. I really have to look to find the answers. It's difficult for me and I am not a 9-to-5 ASP.NET developer. Imagine how hard it is for someone who spends most of their time "following" the platform/community rather than studying it.
Thought Leaders are chasing dragons
Take a look at the image above. Notice the small groups that have branched off from the Practical Experts group. These are individuals or groups who have become disenfranchised with current state of our platform. They have become thought leaders and are doing something different from the mainstream. They've created their own frameworks - many of them adopted from Java and prepended with "N". Some of them have been adopted by the mainstream (this point can be argued), like NUnit, while most of them are still on the fringes. In most cases small groups of developers have followed these thought leaders creating splinter groups who are doing some amazing things.
What is missing? Each of the arrows in that picture are one way. They go from the mainstream to the splinter groups. Nothing is flowing the other way. Realistically there is a small flow from the splinter groups back to the mainstream, but it is so small that it cannot be seen. We are missing some sort of encapsulation of those frameworks into the platform. Why? Why have they not been better accepted and more widely adopted? Because we, the community, are not steering the direction of the platform.
Microsoft needs to let go
Hooray: Microsoft adopted testing in Visual Studio
Hiss: Microsoft created MSTest
Would have been better if the framework allowed you to plug in whichever testing framework the developer wished. Why make a copy of NUnit? Rather than adopt some of the best practices being developed in the community, something similar (but not as good?) is baked into the product. As soon as MS makes something the out of the box default then that thing becomes "the way" to do things.
Hooray: Microsoft hired Rob Conery to work on SubSonic full time
Hooray: Microsoft hired Phil Haack to help work on the ASP.NET MVC framework
Hiss: See both of the hoorays above.
Microsoft hears our shouting for an alternative to web forms. They are actively seeking to offer one. In my opinion it would be better if Microsoft setup a grant to fund those projects rather than do them in-house. Why? At points during development concessions have to be made. If those projects are independent then those concessions can be made in the best interest of the product. As a Microsoft product those concessions might be made in the best interest of Microsoft or the .NET framework in general. I'm not questioning the honor nor commitment of either Rob or Phil. I know neither personally, but they are both friends of friends, I read their blogs and they both seem to be honorable and stand-up guys. Same goes for everyone else on the ASP.NET team that I have worked with and had conversations with - I know they have the best intentions. At risk of being a hypocrite I admit that if I were offered a job at Microsoft to work on one of my pet projects I would jump all over it.
Microsoft has made steps toward opening up the .NET framework. Recent releases of much of the base class library source as well as Silverlight tooling and ASP.NET MVC source are examples of that.
However, I don't think that the ASP.NET platform and .NET in general will reach their potential until Microsoft stops steering it and relinquishes the reigns to the community, just as SUN did with Java. They should of course continue to focus on the tooling and contribute to the framework, but they should stop controlling it. Doing so would offer the potential for true innovation and would allow the community to guide the platform to make it what we need it to be. Until then it will remain the platform for the community rather than the platform of the community.