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