JavaOne 2011

So, I’m off to JavaOne next week!

This is an unexpected and very pleasant surprise.  I’ll be there with Martin (of the Disruptor fame), and Martijn (that’s not going to get confusing at all).  Martin will be talking about the Disruptor on Thursday, and Martijn is busy talking about… everything.  Most importantly for the LJC he’s representing us in our shiny new JCP Executive Committee role.

I’m really looking forward to meeting pretty much anyone and everyone who’ll talk to me.  It’s the first international conference I’ve been to and I’m hoping to meet people I wouldn’t normally get a chance to see in London.  It’s also really cool to be able to represent both LMAX and the London Java Community. Hopefully it won’t lead to some sort of split personality syndrome.

Almost more excitingly, I’ll be doing a spot of shopping in New York on the way there and back. Because, well, it would be rude to fly over to the States and not drop in on my old home.

Maybe I’ll get a chance to catch up with some of you in one of those amazing cities…?

First public appearance caught on video

Remember a while back I talked about my first public appearance?

Well, I chased down the video, because I’m masochistic, and here it is for you all to enjoy. Pleasingly my mannerisms are slightly less of a camp man trapped in a woman’s body, which was my impression the last time I saw myself presenting. It helps that YouTube has made the video so dark you can’t see me.

Slides are available for all to enjoy.

Special thanks to Playfish for hosting the event - as always, their hospitality was awesome.

The fact that they didn’t serve wine is probably a Good Thing.

Are you an awesome developer?

We are hiring!

If you think we’re doing something interesting, or if you think you can help us do our thing even better, come join us.  Your boss will be the dude who wrote Continuous Delivery, you’ll get a chance to experience what Danny calls meta-Agile (or Agile Agile), and you’ll really start to care about Domain-Driven Design<img alt="" border="0" height="1" src=";l=as2&amp;o=1&amp;a=0321125215&amp;camp=217145&amp;creative=399377&#34; style="border: none !important; margin: 0px !important;" width="1" />.

Ideally we’re after Java people, but at the heart of it we want people who are dead passionate about development.

Apply via the Stack Overflow Careers advert (you get extra brownie points if you mention my blog).

What my hangovers can teach you about Agile

As a survival trait for living and working in the cites1 of London, I have a set of rituals to avoid hangovers. If you are not a single person living in a city like London, you might not understand how vital this is. Most networking, particularly in the financial services industry, is done in the presence of alcohol.

So preventing the inevitable hangover is quite important to the other part of the job – the actual working bit. I’ll let you into a secret and tell you my nightly ritual:

  • Floss and clean teeth (OK I’ll admit, I barely floss when I’m sober let alone drunk)
  • Cleanse/tone/moisturise (I’m a rubbish girl, this is a very recent ritual for me)
  • Apply cuticle cream
  • Do my calf stretches
  • Drink 500ml of water
  • Eat something, even if it’s a dirty McDonalds (quarter pounder with cheese, no pickle no onion).

Prior to all this is the additional requirement “don’t drink more than a bottle and a half of wine”. Everyone has their limits, lots of practice means I know full well what mine are.

This actually works for me. I won’t claim to feel capable of being quite as high performance as the code I’m working on, but I won’t feel like killing myself, and I will make it to the gym before work and do a whole day of productive coding.

If you were trying to solve a similar problem (“no debilitating hangovers”), you might try and follow my rituals. But you might decide that drinking the water was going to mean you had to go to the loo in the night, and strike that off the list. You might be on a diet, so you don’t have the food, thinking the alcohol is calories enough for the night. And you’ll follow everything else religiously, but still have hangovers.

Or you might ignore the alcohol intake guidelines, thinking the stuff that you do at home to repair the damage should be enough, and drink 12 pints of margaritas. Or you might be the sort of person who can only get away with drinking a couple of glasses of wine / pints of beer, and follow my rules perfectly, but still feel like dying the next day.

And when this happens you’ll look at my rituals and think “What a waste of time! This person has no idea what they’re talking about”, and throw the whole lot out of the window and go back to doing waterfall development (oh wait, I’m getting ahead of myself).

Or you’ll do the bits that actually prevent the hangover (the water, the food, restricting alchol) and go around telling the interweb I have no idea what I’m talking about because the other stuff is a waste of time.

The key point here is that this works for me. It’s foolish of me to tell the world this will fix all their problems, and pointless for others to copy it without realising why they’re doing it.

For example – why on Earth is “apply cuticle cream” on there? It doesn’t actually fix the problem of dehydration due to excessive alcohol intake. But it’s important to me, because I need to make the time to do the whole ritual to get my brain into the right place for sleep. It’s also dead important for my subconscious – alcohol is basically abuse of my body, the beauty part of the regime is to remind my brain that its important to take care of myself too. It doesn’t fix the immediate issue of hangover the next day, but it aims to prevent future problems of drowning my sorrows in alcohol. It’s an important part of my Long Term Plan – these rituals need to be worked into the daily steps to lead eventually to World Domination.

And calf stretches? Well, I’m injured, have had shin splints for a million years. If I want to run the Royal Parks Half Marathon in October, I need to stretch 3 times a day. Doesn’t matter if I’m drunk or not, it’s not an excuse. The half marathon is a very important longer-term goal. But you don’t need to do it. Well, unless you have the same issue.

The important thing is that all of these rituals are tied to a goal.  But they’re not the same goal:

  • Floss and clean teeth. GOAL – don’t get told off by the dentist. Don’t require fillings - costs money and not great for overall health.
  • Cleanse/tone/moisturise. GOAL – prepare subconscious for sleep and remind brain that body needs love.
  • Apply cuticle cream. GOAL – prepare subconscious for sleep and remind brain that body needs love.
  • Do my calf stretches GOAL – Royal Parks Half Marathon
  • Drink 500ml of water GOAL – prevent Debilitating Hangover
  • Eat something, even if it’s a dirty McDonalds GOAL – prevent Debilitating Hangover.

The thing here is that if I didn’t do the stuff to aim towards longer-term goals, I might be more inclined to drink more out of boredom or despair, I might have worse hangovers in the future.

To paraphrase Eddie Izzard “…and that’s like our Lord Jesus the agile process…”. Agile, in whatever form you take it (actually all processes) is supposed to enable you as a team / organisation to work better. Whichever cult you follow, there are practices designed to work for you to make you more productive. But you do have to continuously improve, gather and act on feedback, and, most importantly, to know why you’re doing what you’re doing. Otherwise it’s just cargo cultism – you look like you’re doing everything, but the results just don’t arrive. I’ve worked for a scrum-but company – they had the cards, short iterations, invested customers.  But no single product owner, they never acted on the results of retrospectives, and most importantly the team didn’t own the work they’d signed up to. They also had a project manager who told people what they were doing. This doesn’t answer the question. This is drinking 12 pints of scrumpy and doing “cleanse/tone/moisturise”, and wondering why it still hurts.

You have to understand the problem. You can’t blindly follow the stuff that you fancy, the stuff you find easy. If it’s easy, it’s probably something you were already doing.  If you picked up agile to make a change to deliver more/better/faster, there is going to be some pain. Because if what you were doing before was working, you’d carry on doing it. So improvement is going to be hard. At first.

The key is to stick with it, to check progress, to continuously improve. To find what works for you.

1 Random fact of the day: London is actually two cities, the City of London and the City of Westminster.  But you probably already knew that.

Effective Sketches

On Thursday I was at Simon Brown’s Effective Sketches session at Skillsmatter.  Just because my pictures are pretty awesome doesn’t mean there’s no opportunity for continuous learning.

The points Simon made in the session really made sense to me, and I wish I could have had something like that as a primer when they taught us UML at university.  Without the context of what the diagrams were supposed to mean, to convey, all the boxes and lines made no sense to me back then.  I’m still not a fan of large chunks of UML because I think the convention sometimes gets in the way of real meaning.

My take-away points were:

  • Don’t try and squidge everything onto a single diagram.  The reason lots of different flavours of architecture diagrams exist (e.g. logical view, infrastructure view, etc) is because you have different audiences for each of the diagrams and different things that are important when you’re looking at it from one particular angle.
  • One diagram you particularly need, especially if you are producing a stack of documentation for a system (e.g. you’re a consultant presenting findings to the client) is a really succinct, summary view of what the system is actually trying to achieve.
  • If you’re not going to use UML, you should at least agree on consistency and some conventions - for example, does the direction of an arrow represent data flow or dependency?
  • UML tools make it easier to represent different views of a data model and retain consistency.  One diagram is less likely to contradict a different view if your sketching tool points this mistake out to you.
  • Yes, your code should be self-documenting.  But you can’t give the code to your business customers or expect your hardware guys to figure out your requirements from it.  To pass knowledge around the business it’s more efficient to have diagrams representing the shared understanding of the domain.
  • Architecture diagrams should show the intent and the vision of the system.
I also used my laptop to take notes for the first time.  In the past I’ve preferred not to use a laptop, because a) I like pencil and paper and it allows me to doodle and b) the temptation to read my e-mail or check facebook is not something I want to succumb to.  But using Evernote really worked for me, I could annotate the slides with my notes, and it made converting my notes into this post a lot easier.
PS it has not escaped me that this is one post without a diagram.  The irony is not lost on me.