goto; Aarhus 2011 – Day 3

The final day of the conference kicked off with a great keynote, and my favourite presentation of the conference in the afternoon – Linda Risingsadly I had to leave early to catch my flight home so missed seeing my ex-ThoughtWorks colleague Alistair Jones speaking.

Keynote: Applying Design Thinking and Complexity theory in Agile Organisations

Jean Tabaka began her keynote with a story of trying to produce an agile cookbook to help a company implement Agile. She used complexity theory to explain why this approach is doomed to failure: most organisational environments are complex, the same actions do not always produce the same results, so we must look for emergent practices instead. She emphasised looking for resilience over robustness, and effectiveness over efficiency, and suggested that we can use design thinking techniques to help.

Architect track: Seven secrets every architect should know

Frank Buschmann talked about the importance of architects staying involved with the development teams they represent, and emphasised that architecture needs to be designed for understanding and maintenance, as well as to support the key system functions. He suggested that an architect’s job includes implementing a walk skeleton of the architecture, end-to-end, to prove it works well, and that they should continue to work closely with developers, pairing and writing code, while still maintaining a view across the system. I particularly liked his description of an architect as “the eye of Sauron”!

Java: Titanic, COBOL and the 100 year platform

Ola Bini kicked off with a check for any attendees from Oracle, luckily there were no takers. For the first part of his talk, he discussed the key attributes that a platform needs to support to take it into the future now, including lightweight threads (fibres). For the second, non-technical section, Ola described some of the processes by which Java and the JVM are updated, and how implementations like Apache Harmony are unable to be licensed for certain uses – the basis of Oracle’s lawsuit against Google. He lamented the lack of openness around much of the work Oracle have done and are doing with Java and the JVM, and speculated as to whether this may hurt the platform. With Java 7 out, Java 8 delayed until 2013 and discussion already going on around Java 9, he discussed some of the upcoming changes such as the introduction of the lambda.

Tools and Performance track: Personal Kanban

Troels Richter declared at the start of his talk that his goal is for us to want to try his Personal Kanban technique, and it only took less than half the talk for me to want to give it a go! He used his own web based Kanban board to demonstrate how he first visualised his own workflow (backlog, this week, today, pomodoro, waiting for feedback, evaluation, done) and then applied work in progress limits – which, interestingly, he’s breaking. The evaluation stage is interesting: here he asks what value the activity had and whether it helps to meet core goals or values. The Kanban board the Troels used was online at kanbana.com.

Tools and Performance track: Coffee, Tea or Agile?

We now sleep less and use caffeine to wake us up in the belief that this is the way to be more productive. Linda Rising suggested that these habits date back to the industrial age and factory workers, but ultimately the effects of caffeine can be more harmful than good. My personal favourite slide of the conference was Spiders on Drugs, when she asked: would you want the spider on caffeine writing your software? Looking at the mess it had made of it’s web is almost enough to put me off tea! Our bodies have a natural rhythm, maybe we should start listening to it, taking regular breaks – even naps – to maintain productivity and focus.

Tools and Performance track: Lightning talks

First up: Ola Bini charged through 28 slides and two demos in eight minutes, all in an attempt to convince us of the general awesomeness of Emacs.

Tudor Girba talked about the search for innovation, and how we can examine our own wrong assumptions by presenting to others, demonstrating our ideas, and looking for challenges to them.

Fred George presented on how we can remove things that kill productivity from our culture – in particular, fear of failure, and extra roles that create the need for more meetings to transfer knowledge.

Martin Thompson said that in software, we sculpt models. It’s art, which is better when it’s minimal and not overdone. If we get too hung up on what we have, we don’t learn – we need to refine and change the models in our software, while keeping their identities the same.

Kevlin Henney described the link between productivity, personal effectiveness and happiness. By taking up street photography, he sharpened his senses, increased patience and creativity, which brings benefits to work as well as his personal life.

goto; Aarhus 2011 – Day 2

Day 2 of the conference, and after last night’s conference party there are a few sore heads and yawns. With user groups taking up part of the afternoon, it was a slightly shorter day, but still plenty of good sessions and chat in between.

Agile at mid-life track: Fractal TDD

Steve Freeman talked about how We can use tests to help us identify places in our system that need to be refactored, in particular where we may want to begin pulling out new classes to take care of things like logging. He presented many examples of code before and after refactoring, so that it was clear how the changes could make the code clearer and neater. Many of the changes introduced for tests also had uses and benefits in production. He also described common unit test smells: too many assertions, magic set ups and long, long tests with an unclear purpose.

Technologies and Tools: Programmer Anarchy

As so many of my ex-colleagues work at Forward, I wanted to see what all the fuss was about, and Fred George didn’t disappoint! He described their working environment with a high level of trust both within the development team and between them and the business. One of the interesting points for me was how all of the applications are tiny, just a few hundred lines each. Instead of creating one monstrous codebase, each application just does one thing and does it well – like store data, or produce one report. This also means they can use the best technology for each part, and they use a wide variety including hadoop, clojure and Ruby. It certainly sounds like a programmer’s paradise.

Agile at mid-life track: Beyond Retrospectives

Linda Rising reminded us all of the importance of retrospectives as a driver for change, rather than a whinging session. She suggested at the next stage beyond retrospectives is continuous feedback: why not have a real time timeline in the team area? Some other things we can all try: take five minutes at the end of every day to reflect on the small wins of the day, experimenting with one or two new practices every day, making all meetings stand ups or even standing up to work (moving more keeps us healthier and happier).

Agile at mid-life track: Measuring Progress and Performance in Large Agile Developments

Andy Carmichael described his role as a lead scrum master across about a dozen scrum teams, out of a total of a hundred. He acknowledged the management attitudes that make it difficult to run agile in large, waterfall organisations, such as wanting to harass the team (sorry, “give them a pep talk”) when it doesn’t look like velocity is high enough. It’s not easy to move management away from the belief that the guys doing the (shortened) upfront planning are “all knowing” when it comes to estimating large projects accurately, and towards considering how to change the plan when things go wrong. The metrics were detailed and I can think of many managers I’ve worked with and for who would love this kind of visibility, but I can’t help thinking it moves the focus away from trust and empowerment.

goto; Aarhus 2011 – Day 1

It’s been a pretty awesome first day at goto; in Aarhus – after the first keynote, I found myself gravitating towards the DevOps sessions, which were really interesting. The .NET track was also good, and I was sorry to miss Rebecca Parsons – whose idea was it to put both Rebecca and Jez on at the same time?!

Keynote: Dart

Lars Bak and Gilad Bracha present a technology preview of Dart, a new language for programming on the web. Syntactically, it looks a bit like a cross between C# and JavaScript – which is unsurprising as there was a deliberate attempt to keep the syntax familiar. Types are optional and type errors don’t prevent the program running, instead the type checker is designed to help the programmer. The code compiles into JavaScript to run in the browser, and in future we may see support added to Google Chrome. My first impression was that it looks like it’d be pretty cool to work with, so excited to have a go.

They presented a news reader and a cool clock project running in the browser, both written in Dart.

More info: Tutorials and language specification, open source project

.NET track: Conventions – make your code consistent

Mark Seeman presented an interesting and very technical talk, using dependency injection with Castle Windsor as an example of where we can introduce conventions to reduce the amount of code we need, therefore making the code more maintainable. He used a series of well prepared code examples, also demonstrating the app working, to make his points. By describing the conventions we want to use within the code itself. Enabling conventions make it more straightforward to extend the code using the conventions, restraining conventions such as unit tests ensure developers are following the conventions in place. Mark presented an interesting example of a unit test used to prevent references to the DI container popping up in any assembly except the outermost one.

Mark’s code on github

DevOps Track: Evolving Continuous Delivery

Like all of his DRW colleagues I’ve heard speak or follow, Chris Read succeeds in making me quite jealous when he describes their working environment, with clients sitting next to developers, and happy to accept a higher level of production bugs than most places I’ve ever worked! This acceptance of risk means that they are able to push out changes within 30 minutes of writing the code – on average. What I liked the most about Chris’ talk was the message that the things we’re told when we start doing agile – continuous integration is important, automate tests – still hold, but the implementation of them varies greatly. Just like with agile practices, how we manage continuous delivery must also vary to suit the team.

DevOps Track: Scaling DevOps

Jez Humble’s talk was polished and engaging, covering the need to bring ops and development together in large organisations in order to deliver better quality software, faster – which is of course what he’s best known for writing and speaking about! The two key insights for me were that reducing the cycle time will mean people are less than 100% utilised (and conversely, aiming for 100% utilisation increases cycle time), and that deployment pipelines can actually be a great tool for helping audit software delivery, possibly for SOX or ITIL compliance. I only wish that more companies grasped these concepts from the top, and used them to manage projects.

DevOps Track: DevOps Fools, Tools, and other smart things

Patrick Debois’ talk was focussed on how tools can help us to change our ways of thinking, and cultures. He talked how tools can encourage about collaboration and how two people from different backgrounds, like development and operations, can combine to make “creative chaos” – and that may not see the benefit of collaboration until we look around to see its effects. He emphasised that we should use tools to find new ways of working – be creative and look under the hood. If a tool only has one way of using it, that’s a problem – given an API, we can find new ways to innovate with the tools we have.

.NET track: Developers have a mental disorder

Greg Young was loud and entertaining, the perfect talk for nearly the end of the day. Taking the view that abstraction is “programmer porn” and developers love to solve problems that nobody actually has, with abstract solutions, he tore holes in many common development practices. A couple of things that made me think: it’s easy to measure DRY, but the flip side of removing duplication (coupling and complexity) is much harder to measure, so we optimise for DRY. Many tools take away the pain we cause ourselves by writing bad code, making it much easier to do just that. Most complicated problems can be worked around without the tools. Many of his observations had me laughing, or groaning in recognition, but I still have no idea how to convince others of the truth behind them.

Keynote: Cool Code

In other careers, like writing for example, we would look at other people’s work, particularly good examples of it. Kevlin Henney suggested we should do the same for code, and produced many examples of “beautiful” code. Some is literally beautiful, like the C program that depicts a part of the globe – and when run, outputs itself with a 45 degree movement. Another example was the chess program as long as 4.8 tweets. Some of the best code will never be used in enterprise applications, but it’s ingenuity and sometimes sheer playfulness makes it provocative.