Thursday, 2 April 2009

Brighton ALT.NET Beers - A Review

Huge thanks to everyone who turned up to the inaugural Brighton ALT.NET beers. There were 16 of us in total (a fittingly nice binary number) and we had a lively discussion on a wide range of topics. I definitely came away with my mind opened about a couple of things, which is certainly the whole point.

The topics voted for discussion were:

  1. What’s your favourite way of doing data access?
  2. Why do you do .NET?
  3. Joining a non-ALT.NET team.
  4. Do you DDD?
  5. Alternative frameworks such as S#arp Architecture.
  6. Avoiding generics hell.
  7. 'Walking skeleton' architectures.

What follows certainly isn’t an exhaustive dissection of the conversation but I hope a reasonably accurate reflection of the mood in the room. Please post amendments/corrections below if you feel it’s inaccurate or I missed an opinion.

1. What’s your favourite way of doing data access?

The general consensus was that using an O/RM was the best method of database access. The main reason cited was the massive reduction in effort in writing/generating stored procs etc and then having to maintain them. Linq-to-SQL and SubSonic were discussed but the overriding choice was NHibernate.

It was clear that pretty much everyone had done the stored-procedure maintenance or DAL generation gubbins before (many, many times over) and if you’re not using NHibernate or something almost as good, you’re probably doing far more work on your data access than is necessary.

(There has been criticism in that the ALT.NET movement can be a little dogmatic when it comes to NHibernate. However you can’t escape the fact that the experience that most of the 16 people in the room have had so far, has been overwhelmingly positive. I think that everyone who had used it in anger agreed that it is currently by far the quickest/most mature/easiest/cleanest way currently of doing data access.)

2. Why do you do .NET?

As this was the first meeting it was nice to go around all 16 participants and ask what attracted them to .NET development. Generally people discovered it via VB, classic ASP and C++. First impressions of the .NET framework were pretty positive and it compelled people to find out more. I think I’m right in saying that everyone in the room including all the ex-VB developers now use C# as their primary language for .NET.

3. Joining a non-ALT.NET team

This discussion was centred on what happens when you join a team with little or no awareness (for whatever reason) outside the Microsoft eco-system. Do you try and convert people with death-by-PowerPoint? Probably not the most effective stratagem. Is it better to start with small bits of projects at first and ALT.NETify them to show people very plainly that it will make their lives easier? What’s the first thing that should be introduced? Unit testing? TDD? Continuous integration? IoC? The was a feeling that a lot of the ALT.NET stuff doesn’t really work to its full potential in isolation, but it’s probably best to start small, with things that show immediate value and build up from there. One suggestion was have a CI build server first, then write some breaking tests when fixing defects.

4. Do you DDD?

It was acknowledged that a secular tome of significance on Domain Driven Design (DDD) is Eric Evans’ ‘Blue Book’. (See Mike Hadlow's blog post here).

There were some great points made about how to identify an object, does using the ID generated by the database break the goal of persistence ignorance? Is using the ID a sensible pragmatic solution to the common problem of establishing identity/equality? Can using the ID in URLs help when it comes to REST and SEO? If an entity is incomplete in some way, does that signify that another intermediate entity with a different business meaning is required?

5. Alternative frameworks such as S#arp Architecture

Just over half the room was aware of Billy McCafferty’s excellent S#arp architecture framework. There was a brief discussion on why SharpArch is currently easiest way to rapidly build a ALT.NET type ASP.NET MVC system with NHibernate, NUnit, Castle Windsor and Rhino mocks.

If you haven’t tried Sharp Architecture yet and you do ASP.NET MVC, do check it out because it is fabo:

6. Avoiding generics hell

Dare Obasanjo has a nice summary of what this can mean here. There doesn't seem to be a clear answer to the problem at this time. Covariance/contravariance coming with C# 4.0 will help.

7. 'Walking skeleton' architecture

This topic was about merits of whether or not is was worthwhile to have a separate framework you use for smaller/simpler projects. What happens when the requirements expand and the simpler framework gets in the way because it’s so brittle? Is using IoC total overkill on a brochure site? Where does one draw the line? Does it take more effort to maintain a separate framework than bend the framework you use for complex projects to simpler ends? Is everything else outweighed by the comfort and predictability of a smoother complexity gradient?


This was an excellent meeting. It showed the massive enthusiasm in the Brighton development community for wanting to seek out the best way of creating excellent software.

Let's do it again.

So as not to clash with the London ALT.NET beers (last Tuesday of the month), we will hold our beers on the first Tuesday of the month so I'm delighted to announce that our difficult second meeting will be at the same time at the same place on Tuesday 5th May 2009, 7pm at The Prince Albert, Brighton. I will mention it again nearer the time, but you can pencil it in your PDAs right now. If you're following me (@iainholder) or Mike Hadlow (@mikehadlow)on twitter you deffo won't miss it.

Hope to see you there.


Simon said...

That's a good summary. Thanks again for hosting it; it was a great evening.

Mike Hadlow said...

I had a great time. Can't wait for the next one!