If I run Dev Div…
I found this post interesting, so I thought that I would try to answer it.
If I run Dev Div, I would:
- Utilize CodePlex Foundation to a much higher degree. Right now CPF manages about 6 projects, all of them seems to originate from Microsoft. None of them are actually useful for CPF in the sense of creating an excitement around it. If I run Dev Div, and given the indication of the lack of will from within Microsoft to maintain the DLR, I would give the CPF the DLR, along with a small budget (1 million annually should more than cover that) and set it free. That 1 million? I would put it down as marketing, because the amount of good will that you’ll generate from doing that is enormous. And the level of publicity that you’ll get for CPF is huge.
- Sit down with marketing and create a new set of personas, based on what is actually happening in the real world. Mort, Einstein and that Elvis dude might be good when you are building the product and designing the API, but there are other aspects to consider, and acceptance in the community is important. A lot of the public blunders that Microsoft has made recently has been just that, marketing mistakes more than anything else.
- Build for each project a set of scenarios that appeal to each group. For the PHP crowd, point out how WebMatrix makes their life simple. For the ALT.Net crowd, show them how they can use IIS Express to run their unit tests without requiring anything installed. Right now what is going on is that pushing to one side alienate the other.
Let me put this another way, when someone asks me why use NHibernate instead of Entity Framework, I am going to inform them that Microsoft continues their trend of new Data Access framework every two years, and they have gone retro with Microsoft.Data.
- Kill duplicated effort before it goes out the door. Linq to SQL & Entity Framework are a great example of things that should have been developed concurrently (because either project had a chance of failure, so hedging your bets is good, if you can afford that), but they should have never been allowed to both see the light of day. The marketing damage from moving Linq to SQL to maintenance mode was huge.
- Simplify, simplify, simplify! Microsoft does a lot of good things, but they tend to provide solutions that are wide scoped and complex. Often enough, so complex that people just give up on them. Case in point, if at all possible, I wouldn’t use WCF for communication. I would rather role my own RPC stack, because that makes things easier. That is a Fail for Microsoft in many cases, and one of the reasons that they are leaking developers to other platforms.
- Forbid developers from arguing with customers publically about policy decisions. The reasoning is simple, devs don’t have a lot (if any) impact on policy decisions, they can explain them, sure. But when there is disagreement, having an argument about it tends to end up with bad blood in the water. Such discussions should be done at a level that can actually do something. Case in point, recent WebMatrix arguments in twitter & blogs.
- Focus some love & attention toward the non entry level segment of the market. There has been a worrying set of events recently that indicate a shift in focus toward the entry level market, and the rest of developers are feeling abandoned. That shouldn’t be allowed to remain this way for long.
If you’ll not, except for the suggestion about turning simplification to an art form and applying it ruthlessly, most of the suggestions are actually about marketing and positioning, not about product development.
Comments
Amen. I couldn't agree more.
I think 'kill duplicated effort' should also extend to .NET projects outside of Microsoft's direct control.
I think Glenn Block said it best. "Be in the community" as opposed to "engaging with"
Nice summary, I would add acknowledging and empowering the Mono effort (by alleviating any outstanding patent threats) and open source community in general. At the moment they look to be kept at arms length with hardly any visible collaboration. One of the disadvantages .NET still has compared to Java is that its not supported cross-platform.
I agree with you on the WCF front - initially I thought it was a sweet abstraction however overtime I found it to be an over complication which promotes configuration hell that spurs most serious back-end web service developers to find alternate or build their own web service frameworks - myself included.
The trouble I've found with Microsoft lately is although they've released a lot of products and updates, I find most of them un-inspiring. I have little or no interest with Azure, WebMatrix, oData and all their previous RPC and DAL efforts. I find most of the exciting technologies of late are being born in open-source space (e.g. NodeJs, MonoTouch, jQuery, Closure Library, Redis, Hadoop, as well as your RavenDb etc). The last thing I was excited about was .NET 3.5 and LINQ. The next release from Microsoft I'm most interested in is actually IE9 - hopefully it will finally raise the minimum standards bar that they've kept stagnant for over 8 years.
I actually don't mind Microsoft catering for entry-level devs as long as it doesn't hinder their efforts for seasoned, 'best-practices' developers. Back in the day I actually considered Access to be the best RAD tool available for developing small databases. I actually think MS is learning from the simplicity and productivity enhancements found in competing offerings, I like MVC, @Razor and am looking forward to the EFCTP4 release - finally a code-first, convention-based DAL I can happily use.
Nicely put...
"Lucky" for you, I'm not a dev anymore. :)
I agree with most points, except that WCF is too complex. WCF is not more complex than for example the Windsor container. With both you can start within a few minutes and start exploring their capabilities.
However if the standard provided functionality is not enough, you can extend it. And WCF can be extended at every level. Without much effert is was able to write an Protocol Buffer implementation for WCF and able to connect with a LCM RPC framework. To make it work I only needed to adjust the WCF configuration, which I do with code, not XML configuration.
In my job I need to be able to connect with all kinds of data services. Most of them are data stores, but also internet enabled services like WebServices or XML-RPC. WCF is a communication framework and it comes with implementation for often used communication services like WebSerices, XML-RPC, MSMQ and named pipes.
Dave,
Windsor offers multiple levels to extend itself.
At varying level of complexity.
With WCF, you are generally enmeshed in complexity from the get go, and you can just use the defaults, the defaults are no good
The problem is that community voices (like you) are not the majority of developers, you (the self called community) live in a very small world.
In the companies I've worked, (in Argentina where I live), no dev care about the community. They just go to work, get the job done and return to their families.
@Eduardo:
Entry level products does not equate to simplification. In fact, the opposite is often true.
But Eduardo's point is valid. The people who read this site and other's like it are a very small minority of .NET developers.
Just because a few 100 people who constitute the "community" hate on something via Twitter, doesn't mean Microsoft is going to change their direction. They make millions off large companies who will blindly use whatever the produce. That, in turn, creates a heck of a lot of .NET Developers who don't have an exposure to anything outside the Microsoft family of products.
Let's say you somehow get 100 developers in a room who honestly represent the real .NET community. How many of them do you think have heard of the SOLID principles or an ORM prior to the release of EF? If you think more than five then I think you're dreaming.
The usage of Microsoft is actually a bit like a Giffen Good ( http://en.wikipedia.org/wiki/Giffen_good).
Eduardo,
You seem to confuse entry level products with simple products, or assume that stuff like WCF is something that advanced people would want to deal with.
There isn't such a correlation.
I am one of those devs that Eduardo is talking about. I come to work try to enjoy what I do then go home to my family. With that said I am frustrated with a lot of the "frameworks" Microsoft ships out. Either they are so overly complicated (Biztalk,most of the Application Blocks,WCF,..) it is just easier and more maintainable to create your own or they are like the WebMatrix crap that is just insulting and embarrassing to be in the .net world.
I have used WCF with smart clients, mobile apps, web apps and every time I am bitten in the ass with an overly complicated config file that I end up scrapping it and kicking myself for thinking about using WCF.
I just replaced a Biztalk implementation with Rhino.ETL and Rhino.DSL (BTW thanks Ayende! :) in a month that originally took 6 months and huge license fee. Not to mention all the baby sitting Biztalk required, let's not talk about deployments... :).
Sure all this stuff makes for a great demo for the next PDC, Tech Ed, and for all those consultants ( hey, I was one of them for many years). But when it comes to implementing it...
In short "Microsoft please quit creating crap for the next fancy demo".
Ayende,
Would you roll your own RPC stack/framework if you had to interop with services let's say for example using some w3c standards like WS-Addressing and WS-Security?
"The people who read this site and other's like it are a very small minority of .NET developers."
That is indeed true, but perhaps that's also the crux of the matter. I think what Ayende and others, like myself, are actually looking for are things that would inspire more/most/all developers to participate in the community, in other words change "small minority" to "vast majority" or at least "considerable part" .
Not everyone will contribute, but a lot more people would feel that they belong to the community and that they can benefit from it.
Of course it is we (the community) who are responsible for making this happen, but it is unlikely to do that unless Microsoft provides more focus and tools that promote developer productivity instead of book author productivity.
Gunteman,
I agree with you, and I know this post (and Rob's post that inspired it) are just for fun. But the reason I was commenting on Eduardo's point is that I don't think the community (as a whole) is particularly upset with the direction MS is taking here with LightSwitch, Web Matrix, et al.
My point is, I don't think that the majority of the community wants to change.
Sure, we know that by using IoC Containers, properly testing our code and following design principles like SOLID we are doing it "right:, but there's an entire other set of people out there who vastly outnumber us who simply don't care. Their cheers for LightSwitch drown out our sobs for the loss of IronRuby.
The majority of developers in the .NET world simply try to do there job as Eduardo said. So they have no or few interest in learning new concepts, frameworks or API's in theirs spare time. But then there a bunch of new things every year like WCF, WPF, WWF, Linq, EF, ORM, EL, IoC, DDD, DDDD, NHibernate etc. all with a high and time consuming learning curve. What do you think they will do? Sit down an try to learn it all? I don't think so. And I think Microsoft has realised that. But instead of making the entry to those things simpler, they create new stuff like Microsoft.Data, WebMatrix, LightSpeed etc. to please most of the developers using their products.
I think this is very dangerous. So as Ayende said, they should better focus on "Simplify, simplify, simplify" their frameworks and API's. And if they would "Utilize CodePlex Foundation" and try to reach more "acceptance in the community", the community will easily grow and reach more and more developers. In the end this will make the mentioned entry-level products needless.
Focus some love and attention toward the non entry level segment of the market. There has been a worrying set of events recently that indicate a shift in focus toward the entry level market, and the rest of developers are feeling abandoned. That shouldn’t be allowed to remain this way for long.
Sadly it seems like every big company treats newer customers better than old ones. Don't believe me, just ask your phone or cable company you've been with for years why you can't get that introductory rate all their new customers are getting.
I dislike your over simplification of code plex. I find it very useful. It's about community not a place for MS projects only. The fact that you say there are 6 projects means you don't get it.
And the no duplicate efforts stiffles growth. Microsoft eventually combines different work.
One thing is clear, who ever runs DevDiv will have no shortage of advice :)
@Jonathan: read it again... its the CodePlex Foundation (codeplex.org) not the open source community (codeplex.com). You might want to check up on that before you blast away...
Joao,
Actually, it is pretty easy to get the introductory pricing.
Just tell them you are leaving them, and let the customer conservation give you the deal
Jonathan - re: codeplex....Ayende said the CodePlex _foundation_. He wasn't referring to CodePlex the hosting site. Big difference. This, to use your own words "means you don't get it".
And as a first step in making the community more inviting, why not reduce the hostility just a tiny bit...
Hallo Ayende,
all of you talk about the complexity of some of the MS Projects, but if you talk with Java Developer, they'd not complain that much. Look at J2EE, Eclipse RCP, JBOSS, spring and a lot of java opensource projects out there. Are they simple? I don't thing so. It depends on your academic level of education and effort if you want to understand those frameworks. I don't think someone without that level could code something like NHibernate. Those who criticize those projects need to take a look at java. I agree with you, when you say it should be simple as possible, but not simpler.
YROD,
Actually, the Java world had a huge rebellion against complexity a while ago.
See the EJB wars
I would. 16,000 is a drop in the bucket in world wide .NET developers. My company employs 300+ .NET developers, and I can count on one hand how many actually know what Unit Testing is.
Do you ever notice how it's always the same people commenting on all the ALT.NET-ish blogs? Your work with MSDN magazine is definitely getting you more press (therefore subscribers), whichy is good. But lets say there are 1 million people in this world doing .NET development, your 16,000 represents 1.6%.
This is partially true. For small shops, yes I agree, for large shops (like big corporations) legal departments and astronaut architects who are so far removed from actual development make decisions.
I have worked for four companies where using OSS was forbidden, even for internal work due to paranoid legal departments. Those companies employed well over 1000 .NET developers, now maybe I'm just really unlucky at where I was working, but I doubt it. At places like that you can attempt to change the culture, but it's very difficult. For example, it took us two years to get Log4Net approved...in the mean time we just wrote our own, so what was the point?
Then you have the Astronaut Architects who forbid things like Unit Testing, or Dependency Injections simply because they don't understand it. But hey, they have a Vice President in their title, so they must be right, right? I fought to get NHibernate (then after dealing with legal, EF 4.0 because at least it's better than nothing) at my last job only to be told by the VP (an ex DBA) "Why, do you think a program can write better SQL than me? I don't think so", instantly squashed.
This is the reality that the majority of.NET devs live in, so they read your blog (and others in the same "family") and do what they can to adopt better coding practices, but really decisions are rarely in their hands.
I think Jeremy Miller said it best in the old ALT.NET pod cast that he has trouble hiring people at DoveTail simply because the majority of .NET developers don't code the way they do.
Let me rephrase that, then.
In the last year, this blog had 632,331 unique visitors.
Using you math, I get 63%.
Regarding commentators. You are ignoring some very important aspects of how people organize communities.
In most communities, you are going to have a small number people who speak up. It doesn't mean that the rest don't care.
Well, YES. That is well proven by compilers, you know.
Ayende,
I believe, despite being a minority, the ALT.NET types of people have made a serious impact on Microsoft, EF, Unity and MSTest are examples of that. But at the same time, Microsoft is about making money, and it's something they are very, very good at, and if they're introducing all these products, they're doing it for a reason.
See the thing is, people only come to hire you if they already think outside the Microsoft bubble, you're already preaching to the converted. I agree that just because someone doesn't comment it doesn't mean they don't care. My point is, that the percentage of people who do care is still very low in the .NET world than any other serious development platform.
There was a great Herding Code podcast about that, where one of the hosts commented about how weird it was going from a tiny minority to the mass majority when moving to Ruby. Things like proper testing and design is a given in that community, that's just not the way it is with .NET.
I have no idea what you're talking about here.
Steve,
If you are looking for a major shift in MS primarily because of the ALT.Net crowd, look no further than MVC.
About the compilers remark, you mentioned the DBA " can a tool write better SQL than me ". Compilers have long ago proven that they can do that with machine code, the same concept apply
I responded via email, I think I've derailed this conversation enough. :)
Over the years I think the best thing to do is learn a technology which has high demand, little supply and pays well in your area. For me, it's BizTalk & Sharepoint these days. Chasing the latest technologies from Microsoft is a waste of time. For example, I don't care if Sharepoint doesn't use MVC.
If you have a job that pays well, do something you like, offers job security for years in the future and work decent hours, that what all matters at the end of the day. Everything else is secondary. I am getting tired from the Microsoft firehose.
Comment preview