Öredev 2011 – The Last Day

Ö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.

OredevLogo

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.

Unfortunately, compared to Christian Johansen’s TDD Javascript session this was distinctly unimpressive. Trevor struggled a bit with the live coding and it did not showcase Coffeescript in a good way.

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.

Öredev 2011- Day 2 (Rollercoaster Ride)

Today was a real rollercoaster ride with extreme ups and downs. Sessions by Dan North, Gojko Adzic, Mark Rendle and Greg Young were really fantastic. If any of you plan on watching the Öredev videos, then all of these are worth watching. Unfortunately, I also had two sessions that didn’t come anywhere near the standard of those. But 4 is greater than 2, so still a fantastic ride overall.

Keynote

Dan North delivered the keynote today with the title Embracing Uncertainty (the Hardest Pattern of All). I was really looking forward to this as I’d seen some of Dans’ talks on InfoQ before and they were all really good and really thought provoking. The theme was uncertainty and how we as humans will do almost anything to avoid it. To get a really good summary of the keynote check out Gojko Adzic’s review.

The Agile Manifesto is all about embracing change (uncertainty) but we are not living up to it. Process and tools are still winning over individuals and interactions. It’s the same thing with the other principles in the manifesto. It is so hard to fight against human nature and to accept that some things are uncertain, that some risks are unforeseeable, that some tasks cannot be estimated. It is so easy to fall back into waterfall even if we say we are doing Agile/Scrum/Kanban. So true, so deep. Dan has a solution with Deliberate Discovery, not an easy solution by any means and a tough sell to customers and colleagues. A brilliant keynote that will stay with me for a long time.

Domain Driven Design and Agile

This was one of my dips today. A session by Tomas Karlsson from FRA (Sweden’s version of the NSA) on DDD and Scrum that just never grabbed me. As everything from FRA is classified, he couldn’t use real examples from their domain models and instead used a sample model. This really lessened the impact of his talk.

He had a few interesting points about mixing Scrum and DDD and how they sometimes clash. Both in interactions with other teams and when refactoring the domain model. And he had neat little whirlpool model of development for the domain model. First Harvest requirement –> Model them –> do a Code Probe to test the model’s api –> challenge the Model with a new scenario. Rinse, repeat.

Maybe I am not in the target audience for this type of session but it I didn’t get much out of this. Don’t recommend watching this on video.

Sleeping with the Enemy

Another real high with Gojko Adzic. All about trust issues and tearing down the artificial walls between developers and testers. He talked about how mistrust manifests itself in the development process through processes like Requirement Signoffs and Change Requests. Alibi generators – ways to point the finger at someone else and say it wasn’t my fault. Gojko has worked with some companies that haven’t had a bug in months/years and none of them use these processes.

At this point Gojko challenged the audience with this question: Who should be responsible for functional tests; programmers or testers? There were some testers in the audience that voted testers and some that tried to answer both. The right answer according to Gojko (and I agree) is programmers. Tear down the walls, programmers have to be able to test and they have to write the functional tests. Testing and quality should be a part of the process from the first line of code to the last. Testers should be more like test architects advising programmers on what they should be testing and instead focussing on high value activities like usability and exploratory testing. Check this out when the videos for Öredev are released. Compulsory viewing for all programmers.

Zen and the Art of Programming

Mark Rendle (@markrendle)  did a reading of Zen and the Art of Motorcycle Maintenance and applied it to software development. A deep, philosophical talk that tried to get to the core of why we develop software and how we should practise it. About being a professional and producing quality. He used the concept of Gumption (get up and go, motivation) from the book and how not to lose it. There are a list of gumption traps, some internal and some external, that we all experience at some time or other.

For example, boredom is one I have personally fought against a few times. You’re doing yet another <insert boring project type here> and just can’t wait to get it done so that you go home. In to work at 9 and out at 5, and leaving your brain at home. Mark then gave the advice to think of this in a different way. Put yourself in the user’s shoes, they are going to be using this system for 8 hours a day and if you don’t do the best job you can then you are ruining a third of their life. So be a professional and make the system as user-friendly and brilliant as you can. You’ll be happier in the long run this way.

Mark was previously a stand-up comedian and he timed it perfectly with his line when someone’s mobile started ringing during his closing. I can’t (or don’t want to) quote it here but that alone makes it worth watching this session on video. Recommended.

Cloud First Services

Marc Mercuri from Microsoft did a session on the cloud. I really don’t have anything (or anything constructive) to say about this. The worst session I have been at by far.

How to get productive in a project in 24 hours

Greg Young started the session by explaining why he was wearing a Celine Dion t-shirt. A bet is a bet and he keeps his promises. This was yet another tremendous (I have to find some more superlatives for Friday) talk. He explained his tricks and techniques to get going fast when consulting for a new customer.

The first trick, find the bug hive in the code of the customer’s system. By analyzing the source control history to find the places in the code that change frequently due to bug fixes. Valuable information to kick-start interesting conversations with your customer.

The next tip was to use Continuous Integration even if your customer doesn’t. Install Teamcity locally and you’ll see when your fellow developers break the build.

After that Greg showed us how to do a quick dive into an unfamiliar codebase with NDepend. Find cycles in the dependencies, examine the coupling of classes and for things like cyclomatic complexity. NDepend has its own query language where you can query the code to find methods that have more than 8 parameters or a lot of coupling for example.

Greg did a demo of Mighty Moose (Continuous Tests) his own product for continuous testing and code analysis. I’m beta testing this at the moment so that will be a future blog post (I promise!).

I’m skipping a bit here as there were a lot of valuable nuggets in this talk. This was a fantastic finish to a great day. Thanks again Active Solution for sending me!

Öredev 2011–My Summary of Day 1

Today, Wednesday, was day 1 for me at Öredev (there were two tutorial days on Monday and Tuesday which I did not attend). It’s been really great so far, so thank you Active Solution for sending me. I have taken tons of notes so hopefully I can squeeze all of those into an interesting summary. It started with a fun keynote from Alexis Ohanian, a co-founder of Reddit, about starting a company and delighting your customers. And ended with a thought provoking keynote by Neal Ford from Thoughtworks entitled the Abstraction Distraction. Very relevant for all programmers, as we work daily with abstractions and most (or all) of them leak. I absolutely loved his onion skin api concept. He used Active Record in Ruby on Rails and Git as examples, the idea being that you can used Active Record at the highest level for 80% of all cases but for the other 20% it leaks the layer underneath in a good way so that it is easy to dive directly into writing SQL if needed.

All the sessions were good but I think my favourite session was Christian Johansen’s session on Test-driven Javascript (see review below).

So here is my summary in chronological order of all the sessions I attended.

C# 5: Async 101

Jon Skeet investigated the new async feature keywords coming in .NET 5. He did this by using following the spec for .NET 5 and implementing it himself using .NET 4. Impressively geeky. Check out his blog series describing his EduAsync project. Jon is very English in a Black Adder/Monty Python fashion which when combined with the geekiness of deep-diving into how the C# compiler works, made for a strange and interesting session.

SproutCore

Yehuda Katz, a core committer on the jQuery, Ruby on Rails and SproutCore projects, gave an introduction on just SproutCore. SproutCore is a Javascript MVC framework and a competitor to projects such as Backbone and KnockOut.js. Yehuda was pretty low-key and took the programming approach to showing off SproutCore. He had a really cool slide deck build with SproutCore which had an inbuilt console for live coding of SproutCore examples. And this, more than what he said, really showcased SproutCore. It builds on bindings to SproutCore objects or raw Javascript objects which make it really easy to make views update automatically. I could definitely see the benefits and will probably be using this or one of the other similar projects in the near future.

Resty Galore

I follow Sebastien Lambla (@serialseb ) on Twitter and chose to go this session because I was intrigued by this quote “Now, time to take pictures of that unicorn…” at 3 o’clock at night. I felt I couldn’t miss REST combined with unicorns and it was even better than I imagined. Sebastien used a secret agent unicorn named Resty Galore to illustrate links and forms in REST. Resty Galore had a mission to get to Malmö from Paris implemented as a series of http requests and responses. The first implementation was very procedural and rigid so Sebastien proceeded to introduce links and forms to reduce coupling in the workflow. At the beginning of the session I was wondering how would I ever apply this in my real life projects but by the end I had a few ideas about where I could use it. Any project with a lot of jQuery ajax calls and callbacks could potentially reap benefits of this approach. Intriguing is the right word here. More investigation required on my part.

Building mobile web apps using ASP.NET MVC 4, HTML 5 and jQuery Mobile

Phil Haack from the ASP.NET MVC team at Microsoft presented on the new mobile features coming in ASP.NET MVC 4. He started with Adaptive Rendering of current web pages so that they look better on mobile devices. MVC 4 will have a new default template which by using CSS 3 will change the layout automatically when the viewing device’s screen  is narrower than 850 pixels. Next up was a new DisplayMode features with which you can create pages specifically for a mobile device i.e. Iphone or Android. Phil then showed some jQuery Mobile stuff which is very interesting and feels like it will be how I get started with mobile development. And then lastly he showed off some of the new HTML 5 offline capabilities of jQuery Mobile. See this website here, connect once and then go offline to test it yourself!

Test Driving Javascript

Christian Johansen from Gitorious showed off some mad Javascript skills at this session. The programmer in me was very impressed. He built a jQuery plugin for autocomplete of a search for film database using TDD. Using js-test-driver, a unit testing framework, and sinon, a mocking framework, Christian used a fine-grained Test Driven approach to coding the plugin. He started with one large functional test that failed and then wrote around 10 unit tests to drive the design. And the revelation was that the process was exactly the same as using TDD in any other language. He used constructor injection to get rid of a jQuery ajax dependency in a class and he used sinon to stub out the ajax calls and to stub out the timing issues. I will be buying his new Test-Driven Javascript Development book. js-test-driver works well with Continuous Integration servers so no excuses; it’s time for me to TDD my Javascript as well.

Node.js

The last session of the day was about Node with Felix Geisendörfer, one of the core committers. It was a nice little introduction to Node where Felix showed off the various killer features of Node; Websockets, proxying data streams and parallelizing I/O and more. It has just been ported to Windows and the integration with IIS has begun so I will probably be using this sometime in the future. But not this year, so this is one technology that I’ll look at again when it is a bit more established on the Windows platform.

Øredev 2011

I’m here in Malmö at Øredev 2011. First impressions are very positive; great locale at Slagthuset and a really cosy, intimate atmosphere despite the large number of developers here. The celebrity-spotting is pretty fun too, (if you can call developers like Yehuda Katz, Gary Short or Phil Haack celebrities) it means you keep your eyes open and look around.

I will be blogging more about the sessions that I have attended later on this evening. See you then.