The Non-Typical .NET Job

I recently referred to an interesting .NET job as a 'non-typical .NET job'. I hadn't used that term yet up until that point, so I thought that was rather interesting. But what exactly do I mean with 'non-typical .NET job'? It's pretty simple really: a job where you're using .NET technology without blindly following the guidelines, recommendations and software from Microsoft on how to develop software on the .NET platform. It basically means that you'll use whatever you think is most appropriate for what you're trying to do.

The biggest problem in the .NET world is that most companies that do .NET development just stick to what Microsoft tells them to use and how to use it. Many .NET developers largely focus on that, because they know all too well that it increases their odds of getting hired. And let's face it: Microsoft has a solution for practically everything. The only problem is that those solutions are rarely the best in what they're trying to solve. But hey, no manager gets fired for going with Microsoft, right?

The result is that there are too many companies and too many developers that focus only on what Microsoft offers. But there's a lot more to software development than what Microsoft offers, or even knows about. There are countless examples of Microsoft being late to whatever technical party is interesting at the time. And when they show up, they certainly don't always make a good impression.

If you're the kind of developer that likes to learn from what other software development communities are doing, odds are high that you're screwed. There is an interesting OSS community within the .NET world, and they frequently produce great solutions, quite often based on succes stories coming from other development communities. The problem is not that .NET developers don't have great solutions available to them. The problem is that the majority of them simply don't know about them only because there hasn't been any Microsoft hype about it, or that the devs who do know about it aren't allowed to use it because their managers are sceptical about it, most likely also because there's no Microsoft backing for the technology or architectural style that is being proposed.

I'm not advocating the avoidance of Microsoft products or solutions. By all means, use Microsoft products if they are indeed the best solution to your problem. But do be aware of the things that are getting attention outside of the Microsoft sphere and use them when it makes more sense to use them. That's the essence of the 'non-typical .NET job' and that's exactly what makes it interesting: using the right tool for the right job.

  • Flukus

    Man I hate this attitude in the .net world.

    “Because we’re a Microsoft shop” is not a solid justification to use X.

  • Henning

    We’re a MS shop, but we usually have the freedom to choose whatever patterns, frameworks and tools we want to. I can hardly remember any project where a manager told me to use X or Y because it’s from MS. We use tons of open source and will continue to do so.

    Heck, if I’m lucky (and good at persuasion) we could one day use FubuMVC instead of MS MVC.

  • vince

    Hasn’t this issue already been addressed years ago as “ALT.NET”?
    http://msdn.microsoft.com/en-us/magazine/cc337902.aspx

    • http://davybrion.com Davy Brion

      that’s why this post is also in the ALT.NET category ;)

      unfortunately though, the whole ALT.NET thing didn’t quite work out the way many people hoped it would…

  • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

    First of all there is real value in sticking to MS delivered tech. You get used to their style and are able to develop and debug faster because you already know what to expect and what causes problems. You know the naming conventions, common patterns, how the docs are structured, etc. The community has developed know-how on how the MS tech works with other MS tech that is unrivaled because the whole community uses this particular tech to do the task instead of spreading across a variety of options. Maybe a team that uses “the right tool for the right job” would do the job faster and better but this is non-obvious and you cannot state it as a fact. Maybe the tools would not be compatible and will cause problems or the team would lose more time learning them than a team that sticks to MS’s toolchain. However even more important is that the result when you stick to the tried and testest path are PREDICTABLE even if they are not better. This is why managers love it.

    Another interesting fact is that your post contains contradiction. If you hold these principles to be important then you’ve already violated them by choosing .NET. If you believe that open source software, ecosystem diversity, etc. produce better software why did you develop software in an ecosystem that is by default hostile to these concepts? What possible value can it bring over what the Java ecosystem would provide?

    • http://davybrion.com Davy Brion

      i think you and I have very, very different opinions on how software can and should be built… i’m just going to leave it at that :)

      i will reply to the last part of your comment though: it’s quite simple… over here (Belgium), the vast majority of companies do .NET or Java. Especially the big ones. That doesn’t mean that you should ignore open source by default, or worse, be hostile to it (as you put it) because that simply doesn’t make any sense.  There definitely are teams using open source along with .NET and they’re doing great things with it.  And i do believe that the combination of using quality Open Source Software with .NET actually beats using Java with quality Open Source Software for the simple reason that .NET (more specifically C# for the sake of this particular discussion) has evolved much more than Java.

      • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

        I was expecting that. Anders (Hallowed be His name) is a genious but the Java platform has a lot of languages that are quite… “evolved”. In the context of statically typed languages with functional features (like C#) Scala comes to mind. If you could use “non-typical” frameworks to do the job you certainly can use “non-typical” language like Scala (or Groovy, or Clojure, or Jython). I do believe that the language is important and C# is the best mainstream language out there but all other parts of the Java ecosystem are so much better (more mature and evolving faster) than their .NET counterparts. Hibernate >> NHibernate, Lucene > Lucene.NET, etc. There are many small libraries for very specific task that are easy to find for free in the Java world but they don’t exist in the .NET world or cost a lot (if you are lucky and they exist). And I won’t even get started about the whole world of mini-frameworks around Spring. C# is better but is it so much better (than Scala) as to offset all the frameworks that are better on the Java side?

        • http://davybrion.com Davy Brion

          definitely not saying that’s it better than Scala, but Scala is a much harder sell from a management point of view.

          • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

            Same as non-MS tech in the .NET world:)

            • http://davybrion.com Davy Brion

              apples vs oranges

              in case of different languages, managers think about backing and support, as well as the difficulty of finding people that already have experience with the language.  in case of different libraries, managers don’t really think about the experience part, just the backing and support, which is in my opinion highly overrated when it comes to MS tech:
              http://davybrion.com/blog/2009/03/support-of-commercial-software-vs-open-source-software/

              • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

                So languages are where you draw the line on this “principle”. Also you think C# is so much better than Java that it offsets all the libraries the Java community has produced?

                • http://davybrion.com Davy Brion

                  read my previous comment: language choice isn’t something you can always make yourself

              • Anonymous

                We got into a big discussion about this on one project.  We had a need for what the business called workflow.  Essentially authorizing a user request.

                On one side we had the Microsoft-centric group arguing for Windows Workflow.  On the otherside, we had experience.  We suggested it was a simple state machine and could be handled with business logic.

                The Microsoft-centric made claims about support and finding resources.  The one key benefit they did show was how the requests could be tracked and reported through AppFabric.

                So we put a small team together to investigate, and they came back stuck.  So we looked for resources and support from Microsoft and we couldn’t get any.  Nobody seemed to know enough about workflow to help, and MS support was not helpful.

                Our argument for the simple state machine was it was written in C#, and how hard would it be to find a C# developer?

                In the end we realized we were looking at the problem all wrong anyway, but it was still an interesting experience. 

  • Monstercorp

    I think most former Javaer C# programmers are quite open on this point, they use Spring.NET instead of unity, NHibernate instead of EF, so on and so forth. Actually the funny thing in .NET world is, most of M$ guide lines are not so well.

  • Slo

    I think that OSS projects targeting .NET are often better solutions than what Microsft is offering. There is one big difference in how the development community looks at software they use and a big company like MS. MS’s approach is “We know what our developers need” and this is guiding people in a different direction as they wanted in first place. It takes then quite a time to get that to the market (nowdays it is indeed faster), whereby OSS solutions are faster available, since there is an ear directly on the dev community. I also think that MS is bringing people intentionally away from some OSS projects withe their own solutions that have been out there before MS knew those concepts even existed. Good example is unity. I mean there are tons of more mature IoC-s out there, so what is the point of throwing one more into the ring!?  

  • http://twitter.com/colinmathews Colin Mathews

    Well said! I agree completely.

  • http://www.geekswithblogs.net/jboyer Justin

    I too am in a .NET shop and I enjoy some of the things that MS is doing. That does not mean that I am opposed to other options. In fact, I love that there is an OSS .NET community to create cool stuff. I am using EF now but I am planning on looking into other options like NHibernate to see what they offer. I like Ninject as an IOC better than Unity or anything else for that matter. My company also allows me to choose which frameworks that I use (I recommend Ocean (http://karlshifflett.wordpress.com/ocean/) for navigation in WPF, very robust and well done by Karl Shifflett) so I really enjoy researching what options are out there. I actually really like ASP.NET MVC3 by MS and thoroughly enjoy the Razor view engine. However, I am intrigued by FubuMVC and I’ve heard that spark is a great view engine as well. 

    I think the important thing to take away is the fact that if your company is dogmatically shoving MS-only solutions down your throat then maybe you should think hard about your further employment at said company. MS does get things right sometimes, but there is a whole world of other options that you might not even know about. I’m still discovering new cool stuff every day.

  • http://profile.yahoo.com/ZT6BNYNAA2B5IPXUZ2ZXPWZM44 Stuart

    @9599ffd81cd03f5c34610ce13caf1ca3:disqus  – yeah it has been addressed already but no steps has been take yet to fix it.

    http://www.tatvasoft.co.uk/microsoft-dot-net-development.php

  • Pradeep Sweetball

    Thank You

    The given information is very effective
    i will keep updated with the same 

    industrial automation