ALT.NET - Day 2 Continued
Monday, April 21 2008 4 Comments
I’m sitting here at SeaTac Airport and really soaking in all of the events from the weekend. Here is the finished recap of day 2…
Lunch was next, and Microsoft provided some really good sandwiches.

Lots of conversation continued… I think these guys are talking about how to leverage SharePoint in all software development efforts. Or maybe not 

Some people took this time to do a little work…

In this time Oren probably rewrote SVNBridge or something. You know, about 30 minutes of work.
Here’s Phatboyg:

and good ‘ole JP Boodhoo is always fun to chat with:

Jeffrey Palermo was working on a Youtube video of the participants. Somehow I was edited out of his video. Intentionally? I think so.

I mean come on, just look at that evil smile!
Talking to Suits

After lunch I went to “Talking to Suits” which was a pretty good discussion, however there was a lot of noice chat in my opinion. I got the most value out of listening to Udi Dahan, Chad Myers, and Jim (effin) Shore (!).
Notes from the session:
- Problems:
- Fear
- lack of stuff (documentation, etc)
- no trust
- Some people suggested the subversive approach to agile.
- can work for TDD, CI, etc. but those things are more about quality. Your manager won’t care how you do things if you present it to them in their terms (ie: code quality, better maintainability, less bugs found in production, etc)
- you can’t sneak in trust though
- Need to exhibit empathy, respect and understanding
- Convey the value in terms of the “suit”
- “Suit” was chosen deliberately to convey perception (back to respect & empathy)
- The “suits” are not opponents
- Good book: Rules for Radicals



Behavior Driven Development
The next session was a tough choice. I started out in the BDD session. Unfortunately Scott Bellware had some computer hiccups (I think Windows sabotaged him) — anyway he lost about 10 solid minutes just on setup.
Points were:
- TDD tests don’t prove any business reason why the test even exists in the first place. With BDD, your tests are directly tied to a feature, so you are less likely to start building features that are not even needed. TDD can’t protect you from that.
- To Estimate user stories you must have some acceptance criteria for the story. That can be technical or non-technical / functional or non-functional. This drives your BDD Tests, or “specs.”
- It’s ok to have very technical acceptance criteria like “An order table must be created to store the orders” — Stories are not a customer artifact, they are a team artifact.



Yes that guy *is* wearing a utili-kilt. He does that.
The material that I saw was pretty much the same as what I’ve seen before, so I decided to duck out and check out the NHibernate for Deadheads talk.
NHibernate for Deadheads (or with Cartoon Bears)
To my extreme disappointment there were no cartoon bears in this session, but it was a pretty good Q & A about what NHibernate is good at and why people should not cling to traditional stored procedure + datasets method of data access. I was able to contribute to this session, so that felt good.
After Oren and I went back & forth for about 30 minutes about effective use of NHibernate he finally came up to me and noticed my nametag. It looked like this:
Ben Scheirman
@subdigital
http://flux88.com
He finally put it together, as we have talked a bunch of times online, but he hadn’t put my name to my face to my blog, etc. It was pretty comical. Next time we should have everyone do nametags.


Notes from the session:
- What about sprocs?
- sprocs offer no perf benefits over properly executed dynamic sql, which nhibernate does.
- What about the generated SQL?
- most of the time it is quite good. NHibernate is better at it than I am in a lot of cases.
- The cases where you find that there is a specific query that you want to use and NHibernate chooses to do it a different way, you can provide these as named queries to NHibernate. Use SQL Profiler and be aware what’s going on w/ your database.
- NHibernate complexity
- too steep a learning curve for new folks
- once you “grok” it you can be incredibly productive.
- the data access becomes a solved problem
- irresponsible development leads to serious N+1 select problems. Need to first identify where that happens then find out how to fix it.
- to identify: can use Ayende’s PagePerformanceModule and limit the # of queries at a per page basis. This is very quick feedback.
- to fix: understand lazy loading and eager fetching.
- object design can affect this
- deep inheritance hierarchies (while generally painful in OO) pose big problems depending on the strategy you use
- table per subclass: lots of joins & extra queries to get the data for 1 entity
- table per concrete class: lots of duplication
- table per hierarchy: flattened table with all columns for all derived classes. Limits queries needed, but then you have strange db semantics and no clear way of putting not-null constraints on some columns. Perf problems with lots of columns as well.
- lots of people have seen NHibernate used poorly… including me
- how to fix this?
- NHibernate gets a bad rep
- unfortunately we didn’t dig deep enough here.
Some people expressed concern with NHibernate XML mapping (learning, understanding deep concepts) –– Chris Ortman and Oren both mentioned using ActiveRecord attributes to manage this. I interpreted this as saying Use ActiveRecord (as in, inherit your entities from ActiveRecordBase<T>, which is something that I don’t really like to do). Chris later suggested that I look at RhinoCommons to see how Ayende does Repository<T> with classes that have ActiveRecord attributes. They are not quite POCO’s, but at least the class doesn’t inherit from a persistence aware base class. I will definitely be looking into this. (Damnit, when will planes have wireless internet for us?!?!)
Double Double “D” (or Distributed Domain Driven Design)
I wanted to go to this session in hopes of getting some more structure around what Greg Young was actually talking about. Right now I’m not really feeling the pain of what he’s talking about so I think the talk was a little over my head. Some good take aways:
- “How many of you have an EmailGatewaySerivce in your domain?”
- about 15 people raise their hand
- “That’s a noun. But does it belong in the ubiquitous language? Do you talk to your business experts about this EmailGatewayService?”
- convert it to a verb.
- Create a new SendEmailMessage, pass it to a message handler
- DDDD can help you scale to extreme levels by decoupling your domain from itself. (ie: internal messaging, not just over service boundaries).

About this time I saw a tweet by Matt Hinze that the Pair Programming session was pretty cool so I snuck out and went to check that out…
Pair Programming (Ping Pong Style)
Chad Myers and Ray Houston paired up for this one to demonstrate how to use the ping-pong-pairing technique & TDD to build out a flash card system.
Ping-poing paring goes like this:
- I write a test. I make it compile. I run the test. It fails. I slide the keyboard to you.
- You implement the bare minimum code to get the test to pass. Make sure you don’t add gold plating or nice-to-have things here. Once the test passes, refactor to remove duplication and code smells. Now you write a failing test. Make it compile. Slide the keyboard to me.
- I implement the features, following the same steps as #2.
- Repeat until feature is done.
In this sense there is a good rhythm to pairs. Each person has a specific set of things to do, and the person watching can help them avoid pitfalls or shortcuts and generally keep everyone honest. It’s like continuous code reviews.
I think a lot of people got some good info on TDD and RhinoMocks from this as well. Ray Houston is a BDD Practitioner, so I noted his style of naming test classes & methods. I may start doing this very soon, as BDD is just making more and more sense.
Chad and I did a screencast doing this same thing last week but CamStudio decided to crash while encoding the video and we lost the whole thing. Some folks expressed interest in us doing this again. I wish Camtasia had a community or personal license that was cheap. That’s such a good tool.
Wrap up & Dinner at Mehfil’s Fine Indian Restaurant
We wrapped up the day with Doc admiring the amazing thing that is Open Spaces. It’s so interesting to watch a group self organize and see awesome results emerge.
I could tell that most people were mostly drained. It takes a lot of mental energy to engage at a high level like that the entire day. Add to that the fact that probably half of the attendees were also at the MVP Summit last week. What I’ve found after both ALT.NET conferences is that I need a couple of days to really let everything process and to make some goals about how I want to take that knowledge and energy to go do something good.
A good bunch of us went to Mehfil’s (an Indian Restaurant). I sat at a table with Russell Ball (Caffeinated Coder)and Ian Cooper. Most of our conversation was around world politics and history, which was quite interesting.
I went to the bar for a few drinks and to talk to Steve Harman about some SubSonic thoughts. I was pretty beat, so I went up to my hotel to crash.
Stay tuned for my recap on Day 3…


Scott Allen
4.22.2008
12:24 AM
Plus, there was the aspirin delivery from the Twitter drugstore ;)