Just got home from NDC 2011 which was my second NDC. Like last year the highlights included serialseb destroying peoples technical arguments by asking “what’s the business requirement?” and people in general making fun of the height of Scott Bellware. In my mind there really is no better conference and I’m already looking forward to going next year!
These are a few of my notes and links from the talks I attended, note that the quotes are not actually quotes but something that I feel was something essential and / or just plain funny from the session.
The last programming language – Robert C Martin
Want to learn the syntax of lisp? Here’s a left paranthasis, here’s a right. You’re done.
Uncle Bob is one of the greatest presenters there is. Even if the topic doesn’t interest you or you disagree withwhat he’s saying you’ll still enjoy the talk very much. What I find really humbling about him is that it would have been so easy for him some 20 years ago to become some sort of enterprise architecht and do whatever it is these kind of people do instead of pursuing what he has. And with a community that are so easily distracted by shiny “new” things (hello node.js!) it’s very refreshing hearing about how little has actually happened in the last 20 or so years.
The proposition of sort is that if we’ve not manage to come up with something _new_ in such a long time (relative to how long the profession has existed) maybe we should consolidate the language “market” and agree on a language (clojure?).
Beyond Agile – Scott Bellware
Principles instead of methodologies.
Many people who have been doing the agile thing for a long while have said basically the same thingthat Scott said in this talk. The problem with equalling agile with scrum and building a whole (money making) industry around it with certifications etc killed it. The talk was an interesting mix of common sense (that unfortunetly is anything but common) and some lean (startup) ideas.
DDD – Keith Braithwaite
There is no best practice.
Since I work mostly with the EpiServer CMS I rarely have a complex enough, if any, domain so I’m not too familiar with domain driven design. The big take away for me for this session is a reminder about the importance of knowing your history and this also tied into what Uncle Bob spoke about in the first session.
Building .NET applications with BDD - Gaspar Nagy, Jonas Bandi
I’ve been using Cucumber for a while in my current project so I had quite high hope of seeing some discussion on some of the pain points I’ve felt. While the reasoning around declarative instead of scripted feature files did adress this I’d hoped for a bit more concrete examples, especially around UI-based tests. But it was nice to see SpecLog which I’ve only read about and SpecFlow is clearly an impressive product.
Dynamic in a static world - Hadi Hariri
Educate your fellow developers, don’t protect them.
I’ve been meaning to read up on dynamic features of c# 4 for a long time but never got around to it. Hadi did a very enjoyable and informative session which later cause me sit up coding way too long the same night and left me slightly tired the day after. When I confronted Hadi with this he gave me at-shirt so I guess I can forgive him for the lack of sleep he caused me.
The Transformation Priority Premise – Robert C Martin
You don’t want to be good with the debugger
Again, Uncle Bob did an excellent job of presenting. This talk consisted of him doing the PrimeFactors kata and how he when helping his son with his math homework came to some realisations about how to do TDD. Apparantly they one day course about TDD on monday spent half a day around this concept. The priority list wasn’t al that clear to me, luckily Uncle Bob also posted a detailed blog post about the very same subject.
Effective Specifications and Tests for Agile Projects - Gojko Adzic
How do you know it’s scrum? Well, we have no documentation.
As I mentioned earlier we’ve been using Cucumber for a while and this talk was all about the motivation for why you’d want to use examples for this style of testing. The inverse proportions of how confused a developer / tester /ba is depending on how far ahead you’re planning work that needs to doing was also somewhat of an eye opener.
Further Gojko made a graph suggesting which artifacts that should be produced in comparison to how far away implementation time is / was.
Winning Big with Specification by Example – Lessons Learned from 50 Successful Projects - Gojko Adzic
Derive scope from business goals.
This second session from Gojko was a natural follow up from the previous and dealt with a set of “surveys” Gojko had done with successfull projects that used specification by examples. When creating the examples the goal is not to derive a gazillion examples that covers each and every possible combination but rather 5-6 examples that covers the business goals. These 5-6 examples will be a good bases to nurture discussion around them whereas a very long list of them will do the opposite. And in the discussion the team will create a shared understanding of the task at hand.
Writing Executable Specifications: BDD and Context Specification – Scott Bellware
BDD – use it when no other form of communication is sufficient
Scott made the point that the syntax of given/when/then is too closed to the “thing” being specified to be used in a general case. The risk is that since the level of specificity is the same as the code that developers just translate the code directly instead of writing in a language that the user you’re writing software for. I’m not totally sure but I think this is similar to what Gaspar Nagy and Jonas Bandi talked about when writing Gherkin features in a declarative or scripted sense in their talk. Two big take-aways for me was that a warning sign to a projekt is that when you have a product owner (or similar) that is 100% available to the team. This means that the PO is 0% in the business and since this is the person that should inform the team about the business they need to be in the business. The other thing was the answer to the question “How much testing?” which was “As little as possible, as late as possible”. This is a classic agile answer but Scott then emphasized that “as little as possible” is still quite a lot of tests and “as late as possible” coincides with when requirements have been defined.
Who needs a service bus anyway? – Udi Dahan
Asking where the ServiceBus is is like asking where ethernet is.
I consider my implementation of NServiceBus on a customer site one of the best decisions and implementation I’ve done. While I’d like to take as much credit for this as possible in all honesty about 90% of the credit should go to NServiceBus and the team that created it for creating a product that is such a joy to work with and truly just works. Therefor much of what was said in the session was not really news to me but it was still a please to see Udi since he’s a very good speaker and if you didn’t know about brokers, buses and pub/sub before it was a good introduction.
Also Udi sort of sensed that this, in the word of another developer, is “the .Net conference for people who don’t really like Microsoft”, and did some popular BizTalk bashing.
Wake Up and Smell The Coffee - Anders Norås
A very code oriented introduction to coffeescript. I enjoyed it!
Package Management deep-dive with OpenWrap - Sebastien Lambla
The great thing with nuget is that through the package manager console you can run a good package manager.
I’ve been following OpenWrap for a while but I’ve been actually using NuGet. A few things, amongst them the ability to add commands to the shell looked nice, and I’m sure there are more things that difference the usage from NuGet but as this talk just scratched the surface they weren’t all that apparent. A lot of stuff that is in the works, and for me that’s mainly the ability to publish websites via OpenWrap, looks really interesting.
Advanced Aspect Oriented Programming - Donald Belcham
I’ve been mainly using AOP in the sense that various third party project I can’t live without uses it. The AOP framework of choice have mainly been DynamicProxy but Donald showed one called PostSharp which had some interesting properties. In this code centric talk Donald showed various ways you could use AOP in the compile process to simplify your code and remove a lot of the boilerplate. For instance in a NHibernate / PageTypeBuilder scenario you need your properties to be virtual so PostSharp code was created to make sure that during compile time all properties in a certain namespace will have the virtual keyword applied to them. Another example was to make sure that you get a compilation error if you had missed virtual on a property.
I’d really like to give this a try on PageTypeBuilder, just for the fun of it, but since PostSharp is not free I’m not sure that it’s possible.
Continuous Deployment for ASP.net - Ben Hall
High != line coverage
High == confidence of change
In this talk by Ben Hall, who apparently looks like he’s 14 years old according to tweets, spoke about continious deployment. In my current project we’re on a 3 week release cycle which is pretty far from the 50 times a day company Ben used as an example. Recommended steps to get continious deployment was
- Automate deployment
- Monitor systems
- Feature switches (easily turn feature on / off. That means deploying more feature than you actually use and then have the ability to easy switch which features are active. This also ties in to A/B testing were certain features are only active for certain user / user groups. This combined with 2 can give great insights as to what features work or not)
- Do it!
In my case there is so much ceremony involved with the hosting company (RFC etc) I’m not sure it would even be viable to do release once a week, but perhaps as Ben said; “If it hurst, do it more often”.
The three amigos - Conery, Bellware & Hariri
Every time someone says Model, View or Controller everybody has to drink!
A very entertaining talk where Conery and Hariri built a website in parallel using rails and Asp.Net MVC 3. Even Bellware (and I’m not sure if was sarcastic when he said it) admitted in the end that MVC has really caught up to rails now. But it’s quite apparent for me that they are doing that by imitating and not innovating. All in all, a very fun session to watch!
Raven DB by Example – Emil Cardell
A document database is not only good for web scale
The last session for me was from my friend and college Emil Cardell on the subject of the document database RavenDB. I did a few experiments with RavenDB last summer and by the looks of it a lot has happened since then (but you wouldn’t expect less from Ayende now would you?). The UI looks a lot nicer and the ability is has to define indexes from repeated queries seems very nice. Emil also suggested the following guidelines when modeling your documents
- No referential integrity
- Isolate by change (or as Ayende spoke about in the distributed podcast, keeping you documents modeled after your transactional boundaries)