Take the 2-minute tour ×

It used to be that, if you wanted to develop an N-Tier app in .NET you built your UI with Winforms or WebForms, your BLL with standard C#/VB.NET/{.NET Language}, your DAL with ADO.NET and maybe throw in some remoting.

Now you've got, WPF, ASP.NET, ASP.NET MVC, Silverlight, WCF, WCF Data Services, WCF RIA Services, WF, EF, P&P App Blocks and more.

That's just some of your options if you want to build an N-Tier Application using .NET, and - maybe I'm just not that smart but - few of these are easy to learn well. And these are only products from Microsoft. Nevermind the other myriad tools & technologies (other ORMs, UI frameworks like PRISM, AOP frameworks etc. etc. ad nauseum).

Is it freedom of choice, is it information overload, or is it normal and I'm just slow/dumb?

share|improve this question

7 Answers 7

Information overload and freedom of choice are the combination I'd likely take for an answer here. Yes there are lots of different possibilities, but some may have been designed with specific purposes in mind that may make more sense in some cases. For example, building a small business ERP in Silverlight likely doesn't make much sense but there can be uses for ASP.Net, C#, WCF services, and other tools to put it together that may make for a better experience.

The reason I'd say overload is that I'm not sure anyone on the planet knows all of what one could do with .Net except for Jon Skeet of course.

share|improve this answer

I have taken a huge swig from the Microsoft Kool-aid. I have been working in .Net forever and I would agree with you that there are just way too many things to learn if you are trying to learn them all at once or if you are trying to code as you learn.

I think that the MS documentation can only add to the information overload that you are talking about. (Every example has every possible gizmo all running magically)

I have found for me it is better to find a generic approach to solve my problem, then find technologies that fit the bill and decide if this particular project and this particular code is the place to inject some learning while I am coding. I only allow myself one new thing per project. I have found it is just to difficult to get more than one variable changing while I am trying to develop real production code.

Here is the process I follow as an example for your N-Tier question. Being a Martin Fowler Domain model advocate. This means a Data Access layer (with mappers), a Domain, and some sort of service or manager layer all fronted by some sort of UI.

Now that I have those general ideas, I can think about what are my particular requirements and see if there are any natural places to leverage new techniques. AHA! we want this app to be a Windows client. Now, WinForms or WPF? I think I will go with WPF because I can better test it with this new thing MV-VM. that is the end of the thought on the rest of the project. I will use tried and true already proven methods for the rest of the application.

As much as I really would like to try the Entity Framework v4, I just cannot risk the project trying to keep all of those plates spinning at one time. I have found that this approach works very well for me and allows me to grok one technology before I attempt another.

Hope that helps a bit


share|improve this answer

Those exponetial technology curves are a bitch, huh?

P.S. You are not dumb, it's a lot to get a handle on !

EDIT OK - so people did not like my sense of humor.

Some of these techs are just the next version. WCF is just the latest remoting technologies but MS is a marketing machine and they decided to go with another cool combination of letters. The same could be said with ADO -> ADO.NET -> Linq.

Now in addition to just the latest version, some of this stuff is a different specialized tool for a different job. While it is a challenge to keep up especially since we don't or can't use all the tools in our day job, I like the fact that the tools are available. You may run into a situation in which having this custom tool will be really, really useful.

share|improve this answer
Stupid, stupid, stupid marketing. (I am criticizing marketing in general.) Sixty-four bits! (I fell for that one because I thought I would have a 64-bit OS within a few years; and this was in 2005, when XP-64 was already out.) Intel: More gigahertz, more fun! AMD: No, use our Intel-based (?) rating for comparison---Athlon 64 3500+! Intel: Core 2 Duo! (Whoa, redundant! And what's Core 1?) Western Digital, and a thousand other companies: Green! Eco! Okay, rant over, for now. –  Mark C Nov 15 '10 at 22:16
+1: I liked your sense of humour. It put my (sorta) rant into perspective. I get that the tools are useful, I just wish someone would stand up and say "Just f'n pick one!" Then we can all learn it, know what we're doing and all work together... but noooo we have to have a whole bunch of shit that all try to do the same thing... AND the competition to all of that shit that we have to weed through as well. –  Steve Evers Nov 16 '10 at 2:38

It's normal, but whether you're slow or dumb is unrelated. No one developer will be an expert in all of those. Sure, you can reach competency in all of them, but that will take quite a while. A true grasp of any of these technologies requires developing a real application with them, and working around the issues you discover during the process.

share|improve this answer

All in all I would say that while choice is essential to a healthy platform, it also requires you to make decisions without the full picture, because the full picture is almost impossible to obtain even for the most intelligent of us.

Freedom of Choice It's a good thing that there's so much freedom of choice, because it keeps the .NET ecosystem alive and as the platform as versatile as possible. Most of the technologies you mentioned have some distinct properties that might just make them the best choice for a certain kind of project.

Information Overload There are a lot of high-level resources that guide you in selecting the right technology even without fully knowing those technologies. (Almost) No one knows all of them inside out. Let others filter the information so you may avoid information overload.

Am I slow/dumb? You don't have to know all those technologies to successfully build an application, however small or large the app may be.

In a small-scale project you may just go with what you know instead of learning technology X. OK, your solution may require a bit more code, have a clunkier design, incur a performance penalty or have a different feel, but it could very well be possible to get the job done without technology X.

In a large-scale project you'll likely work in a team. You concentrate on one of the tiers and the associated technologies, while others take care of the rest.

share|improve this answer

I think that anyone who claims expert experience in every .NET technology is a liar. There's just too much for a single person.

At some point you have to either specialize or take a step back and just know the different building blocks at a more abstract, high level, and know where to go for more details if you ever need it.

Even then, does it really matter much? You'll probably still get the job done even without the latest gadgets. People managed to build some pretty awesome apps a few years ago after all. There's a good chance that a lot of this stuff will just be a fad that is obsolete by .NET 6.0 anyway.

share|improve this answer

The .NET stack has plenty of technologies, that's for sure. It helps to read about each one to learn when the technology should be used; the pieces fit together pretty well (though it's frustrating that there are so many changes to the technologies, so often).

share|improve this answer

Your Answer


