Öredev 2011 has come to an end. It is hard to describe in words the impact Öredev has made on me. I watched a lot of the videos from Öredev 2010 but it is definitely not the same as attending the conference in person. I have never experienced an atmosphere like it before. An intimate, friendly environment coupled with everyone’s intensive lust for learning was just really special to be a part of. I felt I that I mentally lifted my head and looked around and ahead in a way that is really hard to do while at work. Very inspiring and I would recommend the experience to any programmer.
The keynote today was from Jeff Atwood of Coding Horror and Stack Overflow fame. I’ve been reading Coding Horror for ages and listened to a lot of the Stack Overflow podcasts so this was just a rehash for me. But probably interesting if you hadn’t heard it before.
Agile Testing: Advanced Topics
Janet Gregory (@janetgregoryca) started her session by talking about the Agile Testing book she had written together with Lisa Crispin 3 years ago. Janet reflected that the book has held up pretty well but that she wanted this session to be about what has changed in the last 3 years; a of summary of the latest ideas about Agile testing.
The first topic was Feature Acceptance; when you are not meeting your customers’ expectations you can try to build the features that matter, that make the customer happy. Janet had a great jigsaw puzzle story to illustrate this point. She had taken a jigsaw puzzle with her to build while supervising kids at a summer camp, and didn’t get as much time as she had planned to finish it. But because she chose to build her favourite parts of the picture on the jigsaw first, she felt pretty happy about it anyway. She had completed enough to see the soul of picture and that she hadn’t completed all the boring blue sky bits didn’t really matter.
Janet told another story that also intrigued me. She bought a toy pirate ship for her team and told them it was a symbol for their legacy codebase. The team then proceeded to mess up the ship with Play-doh and markers until it looked as ugly as their codebase. Then after every sprint they tidied up the ship a bit just like they were tidying up their code. It’s amazing how the human brain works but this physical stuff really helps with motivation.
All-in-all a nice little summary of Agile Testing.
Domain Models and Composite Applications
Udi Dahan (@udidahan), one of the lead developers on NServiceBus and a DDD expert, had a session for us DDD beginners. First he described a traditional domain model, just like the ones all of us have seen in our projects. These models typically have huge, interconnected database schemas and are really hard to change and understand. Udi recommended a mind shift to get around this. Don’t focus on the entities, focus on the field instead.
He used a really good example to show this, the customer entity. What is a customer in business terms? Sales works with leads, as soon as they have sold their product, then they move onto the next lead. So they don’t use the word customer and don’t really work with or care about the customer. Accounting sees the customer as an account, so a customer isn’t a term they use either. Not even Customer Support sees the customer in the same way as the typical customer entity in a model. So it is basically just us developers that believe there is such thing called a customer due to us focussing on entities (nouns) instead of fields.
The point being that we should not have one model that fits everything. We should have different models for different fields. When we do this then we can split up the database into independent mini-databases. These bounded contexts (DDD word) communicate with each other by sending the id of the aggregate root and not by sharing state. This makes it possible to have a mixture of relational and NoSql databases. The motto being use the right tool for the job.
Udi did a great job with this presentation. Recommended for watching when the videos come out.
Credit Crunch Code
Gary Short (@garyshort) had it tough being both heckled by Mark Rendle and a baby (the baby seemed to quite enjoy the session) while doing this session on Technical Debt. But he managed it so well, I started wondering if he’d also been a stand-up comedian (as Mark was). Before going into this session I wasn’t sure if I’d learn anything new about Technical Debt. But I did!
The first interesting new concept Gary talked about was interest on Technical Debt. Once Technical Debt is incurred it also accrues interest. He defined interest in these terms:
- The time is takes to get back up to speed on the code where the Technical Debt was incurred
- The cost of the damage to your brand due to Technical Debt
- Possible loss of market share
- Low morale in the team
Then he took this even further with a mathematical formula for calculating Technical Debt. This could be used to put an actual number (in kronor, euros or dollars) on the value of your Technical Debt.
He ran out of time at the end and had to skip a bunch of slides but he did it in such an entertaining way that it didn’t affect the quality of the session. I had fun at this one.
Transforming Data into Pixels: Visualization with Canvas and Coffeescript
Trevor Burnham did a live coding session on using Canvas in HTML 5 to visualize data. This wasn’t what I thought it would be. It was more a presentation of Coffeescript than HTML 5. Trevor did some low level Canvas rendering of data points (with x and y values) which could eventually be a data visualization tool.
Patterns of Effective Delivery
This was a follow up to Dan North’s keynote yesterday. Dan presented some new patterns that he is currently figuring out. First Dan defined the three words Pattern, Effective and Delivery. The definition of Effective was extremely interesting. Effective only has meaning in a context, it depends on what you are optimising for. Today, quite a lot of us optimise for security in our processes. Processes like Scrum optimise for teachability. This is a very deep question, what are you optimising for in your current project?
Dan then presented a bunch of new patterns that developers could use depending on what they are optimising for. I don’t know what to make of these really. I’ll have to let them sink in and try think about them for myself. Some of them are really controversial and go against the current thinking in the Agile community. This session made me feel like a novice again. I don’t think I can use most of these patterns, I am just not good enough yet to judge if they have value. Unbelievably thought provoking, totally wrecked my head as we say in Ireland. Great way to end Öredev really. My cheese is moved.