I’m throwing in the towel in FubuMVC

tl;dr:  I’m giving up on fubu and effectively retiring from OSS on .Net


Some things came to a head last week and I announced that I’m planning to cease work on FubuMVC after finishing some performance and startup time optimization work as a 2.0 release — which right now means that FubuMVC and its very large ecosystem of surrounding projects is effectively kaput.  Even just a couple weeks ago I was still excited for our 2.0 release and making big plans, but the writing has been on the wall for quite some time that FubuMVC no longer has enough community support to be viable and that the effort I think it would take to possibly change that situation probably isn’t worth it.

For me personally, FubuMVC has turned out to be a fantastic experience in my own learning and problem solving growth.  My current position is directly attributable to FubuMVC and I’ve generally enjoyed much of the technical work I’ve gotten to do over the past 2-3 years.  I’ve forged new relationships with the folks who I met through my work on FubuMVC.

On the downside, it’s also been a massive opportunity cost because of all the things I haven’t learned or done in the meantime because FubuMVC takes up so much of my time and that’s the main reason that it has to stop now.

Some History


Rewind to the summer of 2008.  I had just started a new job where we were going to do a big rewrite of my new company’s website application.  My little team had a choice in front of us, we could either choose Ruby on Rails (the hot thing of the day) or continue with .Net and use the brand new ASP.Net MVC framework coming down the pike.  If I had it all to do again, I would choose RoR in a heartbeat and just have gotten on with getting the project done.  At the time though, the team previous to us had completely flopped with RoR (not for technical reasons) and the company was understandably leery of using Rails again.  At the same time, this was at the tail end of the ALT.Net movement and I felt very optimistic about .Net at the time.  Plus, I had a large personal investment in StructureMap and Fluent NHibernate (yes Virginia, there was a time when we thought ORM’s were a good idea).

We opted for .Net and started working on early versions of ASP.Net MVC.  For various reasons, I disliked MVC almost immediately and started to envision a different way of expressing HTTP endpoints that wouldn’t require so much coupling to the framework, less cruft code, and better testability at the unit level.  For a little while we tried to work within ASP.Net MVC by customizing it very heavily to make it work the way we wanted, but MVC then and now isn’t a very modular codebase and we weren’t completely happy with the results.

From there, we got cocky and in December 2009 embarked on our own framework we called FubuMVC based on the “for us, by us” attitude because we believed that after all the bellyaching we did for years about how bad WebForms was (and it was) Microsoft gave us yet another heavily flawed framework with little input from the community that was inevitably going to be the standard in .Net.

Fast forward to today and FubuMVC is up to v1.3, spawned arguably a healthy ecosystem of extensions, and it’s used in several very large applications (fubu’s sweet spot was always larger applications).  It’s also failed miserably to attract or generate much usage or awareness in the greater .Net community — and after this long it’s time for me to admit that the gig is up.


Why I think it failed

Setting aside the very real question of whether or not OSS in .Net is a viable proposition (it’s largely not, no matter how hoarse Scott Hanselman makes himself trying to say otherwise), FubuMVC failed because we — and probably mostly me because I had the most visibility by far — did not do enough to market ourselves and build community through blog posts, documentation, and conference speaking.  At one time I think I went almost 2 years without writing any blog posts about fubu and I only gave 3-4 conference talks on FubuMVC total over the past 5 years.  I believe that if we’d just tried to get FubuMVC in front of many more people earlier and generated more interest we might have had enough community to do more, document more, and ground away the friction in FubuMVC faster through increased feedback.

We also didn’t focus hard enough on creating a good, frictionless getting started story to make FubuMVC approachable for newbies.  FubuMVC was largely written for and used on very large, multi-year projects, so it’s somewhat understandable that we didn’t focus a lot on a task that we ourselves only did once or twice a year, but that still killed off our growth as a community.  At this point, I feel good about our Rails-esque “fubu new” story now, but we didn’t have that in the early days and even now that freaks out most .Net developers who don’t believe anything is real until there’s a Visual Studio plugin.

I’ll leave a technical retrospective of what did and did not work well for a later time.

What I’m doing next

I turned 40 this January, but I feel like I’m a better developer than ever and I’m not really burnt out.  I tease my wife that she’s only happy when she’s planning something new for us, but I know that I’m happiest when I’ve got some kind of technical project going on the side that lets me scratch the creative itch.

I’d like to start blogging again because I used to enjoy it way back but I wouldn’t hold your breathe on that one.

We’re kicking the tires on Golang at work for server side development (I’m dubious about the productivity of the language, but the feedback cycle and performance is eye popping) and the entire Scala/TypeSafe stack.  I’m a little tempted to rewrite StructureMap in Scala as a learning experience (and because I think the existing Scala/Java IoC containers blow chunks).  Mostly though, Josh Arnold and I are talking about trying to rebuild Storyteller on a Node.js/Angular.js/Require.js/Mimosa.js/Bower stack so I can level up on my JavaScript skills because, you know, I’ve got a family to support and JavaScript quietly became the most important programming language on the planet all the sudden.

I’ll get around to blogging a strictly technical retrospective later.  Now that I’m not under any real pressure to deliver new code with fubu, I might just manage to blog about some of the technical highlights.  And if I can do it without coming off as pissed and bitter, I’ve got a draft on my thoughts about .Net and the .Net community in general that I’ll publish.


28 thoughts on “I’m throwing in the towel in FubuMVC

  1. I’ve always knew Fubu by name, but only recently really started looking at it and then using it for a project. I think you guys did a great job technically. I’d like to thank you for that. Unfortunately although you had (have!) great achievements with Fubu you failed to “market” them properly, thus failed to generate traction, and I can certainly understand the frustration.

    While unfortunate, I think you are leaving something great behind. My hopes are you’ll not dump it altogether but leave it in a state that will allow it to grow if people will find it useful. I’ll be happy to continue using it but only if I knew the platform is stable. If I will be using it, I’ll be surely be fixing bugs / adding features.

    Thank you again for the past, and let me humbly ask that you’ll take some time to describe the current state of affairs somewhere so there’s at least the possibility that someone else will pick this up sometime.

  2. It’s sad it has come down to this, but it’s understandable (although… OMG javascript!!!). I’m very close to release my MvcPowerTools library with features heavily inspired by Fubu (html conventions, routing conventions) so, in a way it’s a bit of a tribute to Fubu. Maybe I’ll be more lucky than you since my library is extending asp.net mvc (providing alternatives for those who need it) instead of replacing it.

    Anyway, it’s good that you’re still maintaining StructureMap and while I’m not a user, I think competition is always good and .Net needs as many options as it can get. In the meantime, thank you for your hard work, personally I’ve learned quite a few things from you

  3. About nine month ago I told my colleague that there’s a trend when great developers ditch .Net in favor of JavaScript. He told me I should give some concrete evidence of that. And here we are, with a possibility of having one.
    I certainly respect your decision, but it’s still sad for me. Although Scala is a way to go – a language with a great community, production usage and a JVM behind it.

    1. @Sam,

      The short answer is no. I think Roslyn has the potential to be a very big deal, but I already thought that before we decided to generally quit and start moving away from .Net. I think the .Net Foundation is more symbolic than something that’s going to matter. The introduction of Outercurve made no discernible difference.

      If you wanna know, the rapturous attention that Build got only reinforces my decision. .Net is strictly Microsoft’s world and we’re all just living in it.

      – Jeremy

      1. Jeremy,

        While understandable, I am saddened to hear that you are moving away from .NET.

        And yea, you are right. Outercurve made no difference in the .NET OSS ecosystem but I am hoping that the .NET Foundation will do better since the Xamarin guys are involved. I do hope you stick around the .NET community though, even if it’s not going to be your primary platform going forward.

    1. The short answer is to get rid of the “R” in transactional systems. Go to document databases when you can. Event sourcing for us has removed the need to do any kind of complex ORM mapping because objects are either persisted as serialized Json or denormalized read only views.

      – Jeremy

      1. +1 for wanting to see a longer blog post about this.

        Thank you for all the work you’ve done for the .NET OSS community. I’ve used StructureMap for years and literally just discovered the Fubu project last week. I’ve already learned a ton from digging through the source.

        Best of luck to you in your next chapter. The .NET community is forever in your debt.

  4. I’m holding my breath for some new .NET blogs, I always found them really easy to understand and helpful back in the day. If you’re a better developer than ever then don’t keep all that gained wisdom to yourself! 🙂

    I hope you stick with StructureMap as I’ve always been a big fan of it.

    1. Thank you Philip. I’m hoping to call StructureMap “done” after the inevitable 3.0.1 bug fix release and the docs are published. It’s hard to stay passionate about a project that’s a decade old and just one of about 15-20 adequate options;)

  5. You come across quite bitter than you’re having to learn new stuff. Embrace the change 🙂

    Also, Scala like all functional languages doesn’t really need a IoC container. It’s built into the language in the form of partial applications. There may be mileage in investigating some sort of library to encapsulate certain things on very large projects, but I’m yet to see a well designed FP project reach that sort of size. Things just tend to gravitate into well structured components and micro services.

    I’m surprised you didn’t investigate F# first, with an AngularJS front end. That’s a more popular route for .NET devs to take these days.

    1. “I’m surprised you didn’t investigate F# first” — we did, even had a proof of concept of what FubuMVC usage w/ F# would look like that we were happy with.

      “you come across quite bitter than you’re having to learn new stuff” — I’m looking forward to learning new things, but strangely enough I’m not real thrilled with throwing away several years of hard work and having to admit that it largely failed.

      “Also, Scala like all functional languages doesn’t really need a IoC container” — last I looked Scala is an OO/FP hybrid, and I’m not at all convinced that there’s no value in an IoC tool at all, even if we did go pure FP. Besides, you might have seen the part where I called that a learning experience.

  6. Good to hear. As for what’s next, have you looked at clojure/clojurescript at all and do you have any thoughts on it?

  7. I’d be interested in seeing you blog your experiences with document databases. So far I have not been successful in convincing anyone to use one, even though I think it would make development much easier. I’m curious to hear what’s been good and bad in your experiences.

  8. This makes me very sad. I’ve put together several projects using FubuMVC since I discovered it in the summer of 2011, and while I occasionally ran into problems (a couple of which I was able to actually submit fixes for) I generally always liked using it.

    At the end of last month I started some client work where I decided to give ASP.Net Web Api a whirl because it looked like (from a few blog posts and examples I read) they had implemented a lot of the things I liked about Fubu. Last week I’d gotten far enough in that I’d decided to go back to Fubu for my next project – the number of times I’ve said to myself “this would have been easier in Fubu” or “the Fubu version of this feature is better” in the last few weeks has been overwhelming.

  9. Wow, I just learned that Fubu project as an ecosystem is dead, really sad, I’ve used Ripple on a project once and really loved it, it was so much better than plain NuGet. I’m starting a new project now and I wanted to see if I can use Ripple and that’s how I found out.
    I completely share your disappointment with .NET’s community, I’ve been saying this thing to my colleagues for years, basically that other languages have so much better communities, even the much hated, by .NET devs, Java is so much better but they wouldn’t get it. Thus I fully understand you wanting to get out of .NET, there’s a better world out there 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s