RSS
Facebook
Twitter

Monday, February 10, 2014

Should you notice I'm a woman? Should I care?

So, following on from my observations of being an outsider at FOSDEM because I'm not an open source developer, I do have another story to tell where my female-ness is actually relevant.

I'm going to give specifics, but it's not to name and shame or anything like that, it's just that anonymising it will probably erase some of the subtleties.  But I'm not telling this to make anyone feel bad, because this is not an oh-poor-me story, this is just the way it goes sometimes and I want to share what it feels like.

At JFokus (a conference I really enjoyed, where I got a chance to spend time with some awesome people) I was on a panel (well, game-show really) about static vs dynamic languages.  Not unusually, I was the only woman on the panel.  Also not unusually, one of the reasons I agreed to take part is to do my bit in demonstrating that women have technical knowledge too (in my opinion, it's important where possible to avoid a stage full of white men of a particular age, and I'm in a position to be able to do something about that).  And, as per usual, I was a bit nervous about this in case the only woman on the panel also turned out to look stupid, but hey, looking stupid is one of the risks of this job.

During the session, my gender was mentioned twice - once with "ladies first", and once to specifically point out that our static-languages team was somehow superior because we had both genders represented (well of course we're better, I'm on the team). Note that neither of these was derogatory at all - both were, in fact, positive towards me, and I wasn't troubled or offended by them. I'm used to people noticing and commenting on my gender.  I got used to it in the same way you get used to your commute to work, or dealing with merge conflicts - it's something you do, it's not always comfortable, but it's no one's fault and they're not out to get you.

I didn't really process how the gender-mentions made me feel until after, at which point I was drained from giving yet another new talk that day, as well as the surprisingly physical panel discussion. But afterwards, when I was back in my hotel room packing for yet another plane journey, I was thinking "is it normal?".  Was it inevitable that someone was going to notice/point out that I'm female?

Was it down to my choice of clothing?  I debated long and hard with myself about wearing what was definitely a ridiculously short skirt for a session like that, but in the end I decided I didn't want to wear jeans like everyone else, and wearing tiny skirts is something I find fun. But I did think I'd be behind a table and it wouldn't be too obvious.  Should I worry that much about what I wear?  I used to plan what to wear for work, I used to love dressing up for going out with friends, so over-thinking my clothes for a conference is part of who I am.

And one of the reasons to wear the skirt is because I've found myself wearing jeans and t-shirts more than ever.  I think the combination of travelling a lot (I hate packing, so packing a couple of pairs of jeans and a bunch of t-shirts makes life easy) and being part of a tech company where that's basically our uniform has lead to extreme laziness in my clothing choices, and I want to change that.  Who wants to look like everyone else?  Not me.

So back in that hotel room, at the end of a long day, knowing I have to get up at 5am the next morning to get on a plane to New York, I felt drained.  I felt... vulnerable? But if I dig down to find out what's really making me feel not-cool, it's not because a couple of people noticed I was a girl.  It's because I was tired, because I was on display, because I had been worried about my choice of clothes, because drawing attention to yourself is not terribly British, because I didn't know if my new talk was any good.

It's easy to blame impostor syndrome, or something similar. And maybe this is what impostor syndrome feels like. But I'm pretty sure every conference speaker, whatever their gender, race, sexual orientation, age, has felt this way.  I don't think it's because I have two X chromosomes and I'm in a male-dominated environment.

I'm not really sure what conclusions to draw from this experience.  I did want to share it so that other people know what it feels like.

Possible conclusions:

  • When you're tired, it's easy to blame the first thing that springs to mind for your lack of shiny-happy feelings
  • When you've got a lot on your plate, seemingly-innocuous (even those driven by positive intentions) comments or actions can increase your stress levels
  • Don't think too much.  It can drive you mad.

Saturday, February 8, 2014

Feel like an outsider?

So, FOSDEM.

I've heard great things about this conference, so I was pretty exited to go

The Java dev room
Now I know people talk about impostor syndrome whenever they mention the woeful lack of diversity at tech conferences.  Interestingly, I felt like an impostor at FOSDEM - not because I'm a woman (there were quite a few techy women around at FOSDEM, more than I expected) but because I'm not an open source person.

I mean, I am, technically - MongoDB and the Java driver are both open source, and I have real live code on github.  But I didn't get there via the open source community, I was hired to do a specific job that happens to be open source (for which I am extremely grateful).  So although I knew the MongoDB folks I was there with and a lot of people who were running or speaking in the Java room, I didn't feel really at home in this conference.  I think I feel more comfortable with the ones aimed at enterprise Java developers (by which I mean Java people who work producing software for companies) because this is more similar to my background - I understand the attendees and I think I know what they want.

It's also possible since I've been to a lot more of the enterprise-aimed conferences that I used to feel just as awkward there, and I've become much more comfortable now I've been to many.

Which leads me to another observation: when I first went to JavaOne, in 2011, I felt extremely conspicuous as a woman.  I mean, I didn't do much to help, my skirts and shorts are occasionally… not really enterprise-developer-length.  But I felt like everyone noticed me and I felt the pressure to assert early on in every new conversation that I was, in fact, a developer and not a booth babe or a recruiter.  But these days, I feel much more comfortable.  And do you know what's really helped with that?  Being a speaker; having my face on the website.  I don't have to prove I'm a developer, I was asked to speak at that conference - if the conference organisers think I belong there, then I belong there.

So… what.

Well, we can do things to combat this I-don't-belong-here feeling - I'm pretty sure we've all been there, regardless of gender, race, background etc.  To be honest, us geeks probably feel this more than most humans.  

Conferences and user groups and meet ups and so forth can all make life a little easier for those feeling this.  At the London Java Community, for example, we started having greeters at the door for our social events, to try and make everyone feel welcomed and to introduce people to each other.  I also liked what YOW did - they had a really informal social event at the end of the first day of the conference (with free booze, yay!) which made it relatively easy to mingle with other people.  FOSDEM, with its lack of free food and drink gave us less opportunities to mingle with people other than your own friends, although I did like the canteen area for random encounters.

But it's not just down to organisers of groups or events to solve this problem for us.  I've found that if you do feel like you don't belong, there's a way to get over that, and it's not to withdraw.  It's to get more involved.  Find the groups you feel most comfortable with (for me, it started at the LJC), find the medium that you're most comfortable with (in person meet-ups, e-mail, IRC, Twitter, whatever), and join in.  Have conversations.  Meet people.  Once you start to make friends you start to feel like you belong, and when you start to feel like you belong you can step up and do more.  You might even find yourself accidentally propelled into speaking at an international conference, and who knows where you find yourself after that?  Although I appreciate that's not for everyone.  The point is, find your comfort zone for entry and gradually push yourself more - as you find yourself more accepted and respected, you'll feel less like an outsider.  At the very least, you'll have friends to talk to at these sorts of events.

And don't be put off by a couple of bad experiences - you don't have to go back to that group, those people, that thing, but don't assume that all groups or events are like that.  I've been to a number of events, techy or otherwise, that I didn't feel at home with.  If, after two tries (in person, I'll give e-mails lists or chat rooms many more chances), I still don't get on with it, I try somewhere else.


There are still going to be times when you're not in your comfort zone, but this is probably healthy - pushing yourself a little leads to different opportunities.  And in my case, it reminded me what it was like to be an outsider, a newbie.  And that gives us greater empathy for people in that situation.

Thursday, January 30, 2014

Sevilla MUG, first event


Last night was the inaugural meeting of the Sevilla MongoDN User Group.  An event organised with just over 48 hours notice, in a city where I don't speak the language and where even my best-connected contacts aren't sure they're fully plugged in to the tech scene.

I'll admit, I had some reservations:

  • a lightning talk? Will people come all that way for beer and 15 minutes of presentation?
  • in English? Whilst I'm desperately learning Spanish to get closer to presenting in Spanish, at this point I'm just not ready and have to hope people want to listen to me ramble in a foreign language
  • a MUG? Are people interested in joining a group that's solely focussed on one technology, a technology that might not have adoption here or even interest?
  • two days notice?  Are you kidding?  I know people here like to figure out their plans at the last minute, but surely this is shooting ourselves in the foot before we even start.


And then last night...  The people... they came.  On time.  And with their interesting stories and their varied backgrounds.  They listened, they asked questions, they wanted more.


What a great event.  What an awesome city.

I can't wait for next month.


(Slides here, with usual caveats of them being pretty pointless on their own)

Thursday, January 23, 2014

Introduction to MongoDB and Big Data

I wrote an article for the latest edition of Java Magazine which is an introduction to MongoDB for Java developers, and a nod to why it's good in the "Big Data" space.


Look inside >
51
MongoDB and Big Data

Sunday, January 19, 2014

Why is it News when a woman becomes CEO?

I'm pleased to see that GM has hired the "best person for the job" as their new CEO - that does seem like a good idea.  I'm happy her gender did not get in the way.  What makes me uncomfortable is the international news coverage of the decision of this large manufacturer to hire a woman as their CEO - if she were a man (and/or black/gay/disabled) would the headline read "The camera loves her. So do employees."?

But at the root of that is probably the thing I'm most unhappy about.  What I'm not happy about is that it is 2014, halfway through the second decade of the 21st century, and she's the first woman CEO of a car manufacturer.

I worked at Ford Motor Company as an undergraduate and, later, a graduate.  I basically did my apprenticeship there. I know that over fifteen years ago they were hiring graduates from different disciplines (men and women), they had a women-in-leadership programme (or probably several, as I was only involved in the one for the IT organisation), they had a great maternity package (a great package for adoption too, but only the standard paternity package, ho-hum), on-site creches at the bigger locations, and were actively looking for ways to improve their diversity across the board.  They had issues on the plant floor which they were actively working to address, but management did not have a culture of discrimination, to my knowledge.  I remember the number of "real" techies in my IT graduate intake year, not the number of women, probably because the women were better represented than the coders.

So why has it taken so long for these old, old companies (Ford turned 100 while I was there) to put a woman into a position of leadership?  Maybe all these actions are what has, finally, lead to this mold-breaking appointment.  Or maybe decades of doing what is supposed to be the right thing is not having any impact at all - Mary Barra's father worked at GM for 39 years, she herself started there as an intern and engineer, and has worked in different areas of the company as she's risen through the ranks.  In this day and age, it's probably more unusual to appoint a CEO who worked their way up to that position in that company than it is to appoint a woman - I'm not sure how many more there are out there when often it seems the best way to get a promotion now is to switch company.

I don't know why it took GM so long to appoint a female CEO, I don't know how they managed to be the first of the big automotives.  And although I really hate all this "Oh wow, a woman CEO" news coverage (and I dare not read the comments because I know I'll get angry), I don't know if it's something we need to do, to hold up these positive female role models, or something we should stop doing because all it does is point out how unusual women in leadership are - how news-worthy it is that a big, old organisation has finally joined the 21st century.  But the fact that I felt the need to blog about it I think means we still have a lot of work to do in this area.

Thursday, January 2, 2014

Goodbye 2013, you were good to me...

Well, if I thought 2012 was the fastest disappearing year on record, that record was smashed into the ground by 2013.  What a year!  And because I didn't manage to write this on time to publish elsewhere, I can do a more personal reflection of the year here on my very own blog.

Apparently, reading over last year's article, I had goals for 2013:

Get more involved in schools/mentoring.
Yeah... That didn't happen. I don't think I even made a single Meet a Mentor event this year, which is an excellent, really lightweight way of mentoring in London, and I'm sorry I was unable to participate.

Contribute to a major release of the MongoDB Java Driver.
Well, I contributed... but it's still not ready for release yet.

Give a keynote at an international conference.
Nope, didn't manage this either! But I did keynote at the LJC Open Conference again.

...and more of the same from this year: presentations, user groups, blogging, workshops.
Well, this I did manage. More on that later.

I foresee a lot of travel in my future.
There was even more than I imagined. And a big bit of travel that I did not anticipate.

I also made zero progress on the book I signed up to do in 2012, and did not start the other book I have simmering in my head, although I really hope that YOW has given me enough momentum to make a start on that.

So, what a let down, right?  I only managed two of my five resolutions, what a sucky year!

Not at all.

What an amazing, busy, life changing year (yeah, but every year changes your life in some big or tiny way, right?  Otherwise we'd be standing still).

2013 was the year I got stuck into my new job.  I have to admit, the evangelism bit was kinda tricky when you have to sign up for conferences months in advance, and I didn't know a) anything about MongoDB (shh, don't tell anyone) and b) what my strengths or interests would be.  Given we were re-writing and re-designing the Java driver, I opted to create a fluffy talk on software design, that I could evolve over the year as we learnt more during the driver re-write.  And because I apparently still follow the "say yes to everything" policy from 2012 (something that's not supposed to be a theme of 2013, and made my life trickier than it should have been) I've given a couple of other talks on things that I can't help ranting about.

Development-wise, we've made progress on the new Java driver, but I've felt unable to contribute as much as I had expected to - travel and conference preparation take a lot more time out of my schedule than I ever realised it would, not to mention the cost of context switching.  However, I am proud of some of the things I've brought to the project, including gradle, coding standards (automated with checkstyle, findbugs and codenarc), Spock testing (as well as a general focus on automated testing), and addressed all outstanding pull requests.  As well as creating a tutorial for the new Java driver, I've also made a start on better documentation.  These last two are areas I'd like to progress further in 2014.

I've done quite a lot of community support this year too.  Although I find it hard to answer most of the questions off the top of my head because I'm still learning, answering questions on Google groups and StackOverflow has probably been the best way for me to learn about MongoDB, particularly how Java and JVM developers are interacting with it.  And from barely having any points on StackOverflow I've now got over a thousand - yay!  Hurrah for gamification, it's a perfect carrot for Trish-shaped people.

Although I've done less writing on the blog in 2013 than in 2012, I'm pleased to have posted some more meaty technical content in the form of the Spock blogs (I feel like my conference write-ups are just filler, but people seem to like them so I'm going to carry on unless otherwise instructed).  I also made my debut on the mongodb.org blog and on the O'Reilly Developers Blog with a two part piece on technical testing in job interviews.  I'd really like to focus more on my writing in 2014, not just my blog but more guest posts and more magazines.  But I'm not going to be over-ambitious and claim any of my book-writing is going to happen.  

The highlight of my year was moving to Seville (Spain) in August.  Moving out of London definitely made is almost impossible to hit my previous resolution of mentoring, and means I'm no longer as active in the LJC, but it's such a great place to come home to when I've been travelling.

And speaking of travel, I guess this has made up the majority of my 2013.  So I'm going to bore you with a summary of it.

January
New York: Spent a week locked in a meeting room in our NYC office with my co-conspirator on the Java driver.  I love working remotely, but this week spent on location was worth more than months of working from home - not only did I get to meet/hang out with colleagues, but I got to know my main co-worker much better than I would have otherwise (even with video conferences), and it was instrumental to creating a productive working environment.

Post-Christmas New York
February
Miami: A month later I had an even better opportunity to get to know this company I'd signed up with - our all-hands meeting was in Miami, and pretty much everyone was there (there was even a dedicated room to for 24 hour support that worked in shifts so that the support guys could be there).  It was enormously valuable not only to meet everyone, but also to hear from all of management what their vision for the product and the company was.  I know that sounds boring, and when I worked at Ford I hated that sort of thing.  But nowadays I want to know what sort of company I'm working for and what direction they're going in, it helps to motivate me.  It was also nice to feel like part of two teams - the familiar faces there were the people from EMEA (mostly the London office) and the drivers team (distributed everywhere, but many in New York).


When I got back to London, I was flattered to be interviewed as part of the Women Tech Makers series.

March
You won't believe it was sunny the previous day
London: I was lucky to be part of the programme committee for QCon London, so for the first time I got to see what goes into organising these conferences.  It's not easy!  You can have as many opinions as you want, but you need to work really hard to find great speakers and great content.  I was especially surprised when I actually attended how poorly we'd done in attracting diversity in our presenters, even though Aino, Dan and I are particularly passionate about this topic.

At QCon I gave a workshop on the new Java driver, which had limited attendance and required me to re-think the tutorial.  I was a bit discouraged by this, if I'm honest, but later in the year I built off this experience, and I'm glad I learnt something from it and managed to improve too.

As a presentation, Dan North and I talked about interviewing - mostly from the point of view of the interviewer, but also there should be plenty of tips if you're currently looking for a job. At the time, I was concerned about this presentation as it was a very last-minute thing, but we've had some great feedback from the talk which makes it all worthwhile.  I find co-presenting a little tricky because a) you have to work around another's schedule/style/interests and b) when I'm co-presenting with someone with an awesome reputation it makes me feel like a shy schoolgirl, which is not great for stage presence.  But this session was a lot of fun, and working with someone with more experience is the best way to get better.

DevoxxUK: Hot on the heels of QCon was the first Devoxx conference in the UK.  If there's something I learnt from this experience, it's to not be on the programme committee for two conferences that happen in the same month, and present at both of them.  But however difficult it was behind the scenes, Devoxx was an absolutely brilliant conference as a speaker and attendee.  It's also where I first presented "What do you mean, backwards compatibility", the talk that's been evolving all year, using the Java driver as a case study for software design.  I also co-presented on an intro to NoSQL with Kim Ross - I should try and get that video online actually, it might be good to publish.

The last weekend in March, after these two brilliant but exhausting conferences, my boyfriend and I had a conversation which, somehow, unexpectedly, led to us investigating a move to Spain.

April
I took myself away from London for two weeks and managed to actually get some code done.

An amazingly productive working environment
May
GeeCON, Poland: I've already summarised what I loved about this conference in the blog, but here I gave the Backwards Compatibility talk again:



June
New York: again.  Another catch up with the team, and to meet our newest member, Justin.

July
Dublin: Worked from our EMEA headquarters on commercial support, which was an interesting experience.  Also presented at a local user group - I like these mixed technology groups, you get to hear some different experiences.


Shanghai: Absolutely amazing experience, my first time in Asia.  Loved it.

August
Moved to Seville.  Had holiday, did some actual code.  I swear I code better in the sunshine.



September
What a month!
Oslo: JavaZone.  Unveiled the new version of my talk, higher level and fluffier: "Design is a Process, not a Document".

I managed to survive Oslo with only my phone, since my trusty D80 camera finally gave up, but at Heathrow was "forced" to upgrade to the D7000 - since I took almost no pictures of Oslo, it's clear I need a "real" camera.  Honest.

New York: A Grand Meeting of the JVM and C# teams.  Sat in a room with everyone I got a much better idea of the motivation behind a lot of our design choices.

This trip to New York was a bit of a disaster on the personal front, losing my phone, having things stolen from the hotel room, being put on two broken planes at JFK before finally having to go back to Manhattan overnight so that we could fly the next day.  But these are all first world problems, solvable with time or money (or both), and you just move on to the next thing.

San Francisco: My third outing to JavaOne.  As always, it's all about the people you meet out there.


October
...and I still haven't been home yet.

Aarhus: Finally made it to GOTO Aarhus, it's the first year I've been invited and not had a clash with JavaOne.  The sneaky beggars made me track host of the Careers track to ensure my attendance.  I never blogged about Aarhus because I got further and further behind on the blogging (instead of having loads of opportunity on the plane, like you'd think I would have, the more travel I did the more likely it was I would fall asleep in front of a movie instead).  I gave two talks here, both different to anything I'd done all year, because what you need when you're on a plane and in hotels for a whole month is to decide, for your last conference in the tour, to do something completely different (Note To Self: Do not do this again).  The first was Career Advice for Programmers, a talk I was disappointed with because I have so much to share and 50 minutes was not enough.  Probably more suitable for those starting their careers than senior developers.  The second was Top Ten IntelliJ Tips (with special guest star Dan North), which also didn't go as well as I'd liked, because live coding is fraught with danger, but if people pick up just one tip from it, I've done my job.

Aarhus was a great conference that I simply didn't appreciate as I spent most of the time asleep or preparing both talks.  Four cities back to back is simply too much, especially if the Atlantic separates some of them.


I was eventually allowed home for a week, then it was...

This is all I saw of Berlin
Berlin: At this point the travelling was less entertaining than it used to be, and, once again, I was re-writing the talk as I needed to present something much more MongoDB-specific (apparently I'm an evangelist for some NoSQL database - who knew?), so I saw nothing of the city at all, which is the thing I regret the most.  However well or badly this new talk went, Berlin was a great opportunity to meet some really awesome speakers - smaller conferences (I think it was about 300 people) are much better for mingling.


London: Back on (more or less) home turf for JAX London.  When I signed up for this, I didn't know I was going to be living in Spain, so I thought it would be painless to give a presentation and the updated workshop from QCon London.  Yeah... I panicked a LOT about JAX (I apologise to the organisers for passing on my panic without giving them enough notice for them to be able to help me), in particular the half day workshop I gave, as I didn't feel that went well at QCon.  And it scared the crap out of me to find out 30 people had signed up and more wanted to come.  But after putting a lot of work in to the preparation, and taking into account the lessons I learnt at QCon, this tutorial went really well, and I'm ready to give it at conferences next year.  Also, I think tutorials are the right place to talk in depth about MongoDB and to teach people about what it is and how it works, and presentations are a better platform for more general things that apply to a wider audience.

I have almost no photos from this trip to London (apart from a couple of Colin pretending he wasn't going to drink at the LJC Community Night) - looks like I didn't bother to bring my camera, since one of the few I have is via the iPad.  This is what you look like when you visit eight different cities in less than two months:


November
More Actual Code, a Virtual JUG presentation, and then...

New Zealand: How exciting, an Actual Holiday.  Because I get to travel all the time, and often get to see the cities I visit, I haven't taken any real time off since February.  As we were going to be in Australia anyway, we got a chance to see New Zealand - a country I've always wanted to visit, ever since my uncle lived there when I was a child.

December
Australia: I've already given a very detailed round-up of YOW.  If I say it was my favourite conference of the year, people will remind me that I've said that of more than one conference.  But it was an amazing way to round off an incredible year.



So, there you have it.  2013 was a year in which I travelled all over the globe, visiting two continents for the first time as well as jetting around Europe and the States.  It's a year where I started to learn a new language (Groovy) and continued to make very limited progress learning another (Spanish). It's a year in which I struggled to find the balance between all the parts of my job and my personal life, not always getting it right, but learning a lot in the process.  Sure, reading the travel bits make me feel like I spent a lot of it fairly stressed, but it's also a year where I found a lot of happiness.

So, 2014, I have plans for you:

  • Travel less.  At the end of 2013 my batteries were extremely empty, the back-to-back travel has a much larger impact than simply the time it takes out of the schedule to get somewhere.  This resolution is not just about not getting on a plane, I want to focus a bit closer to home - Madrid and Barcelona, I hope you guys don't mind presentations in English - including investing in local communities in Seville.  But for those who aren't here in Spain, I have plans to compensate for this lack of physical interaction with people like...
  • More remote presentations.  The vJUG presentation went much much better than I expected, and it took a lot less time out of my schedule.  It was also a lot of fun.  I also want to do more webinars, screencasts, and so on.  On a related note...
  • More writing.  Yeah, I probably said this last year.  But I've got a backlog of things for the blog, plus a number of other magazine articles I'd like to do.  I've got loads of things I want to write up for our official documentation too.  And this isn't just pictures and stories, but code-heavy stuff as well, like...
  • Workshops and tutorials.  These are a better platform for learning about MongoDB at conferences (better than an hour-long talk anyway), and with a bit of effort should translate into something that can be done by anyone, anywhere.  We already have a free education course for Java & MongoDB, but I want to offer even more examples of how to code against our driver and the other libraries people might be using.  And not all these libraries are in Java-the-language, for example...
  • Do More Groovy.  I've really surprised myself, because I'm a die-hard, too-old-to-learn-new-tricks Java person, and I'm falling for Groovy - I love that the syntax is Java-ish but slick and descriptive.  I want to continue with the Spock stuff in the driver, but I have ideas for a load of other Groovy things I could do in the Java/JVM/MongoDB world.
I think that's plenty to sign up for right now.  Speaking of which, I've sort of failed at point 1 already, and I might see you at one of these:

31st Jan - 2nd Feb: FOSDEM.  I'll be lurking in the NoSQL room.
4th Feb: JFokus.  I can't stay for the whole conference as I have to fly to NY.  Wait, what did I say about not doing things back to back?
5th Feb - 12th Feb: In New York for company meeting stuff.  Can't wait to be back, feels like a long time.  I wonder if it's worth trying to find a JUG to speak at, or if I should stick with my usual schedule of catching up with friends and colleagues, and shopping?
3rd Mar - 6th Mar: QCon London.  Currently scheduled for another MongoDB tutorial and a talk (about groovy, yay!).  Schedule will change, because I'm currently clashing with...
7th Mar: Joy of Coding.  Not sure what I'm going to be talking about, votes welcome...
20th May - 21st May: GOTO Chicago.  Again, not sure what I'm presenting on.  Will also probably spend some time in NYC while I'm in the neighbourhood.

So yeah... that's my quiet 2014....

Monday, December 23, 2013

YOW

December disappeared in a rush of vacation and a fleeting tour of Australia.  It's hard to believe that it's the eve of Christmas Eve already, it's almost impossible to feel Christmassy when you're getting sunburnt on a boat and seeing people in swim-suits wearing santa hats.  A mid-winter festival (complete with trees and fake snow) just feels very odd in summer.
I cannot take Christmas seriously in this weather
YOW! is a unique conference, in that it's the same agenda in three different cities: Melbourne, Brisbane and Sydney.  It seems to me that this is a great way to attract speakers from a long way away (and everywhere is a long way away from Australia) but make it cost effective - although you have to shuttle the speakers between the cities, you have the speakers for nearly two weeks and get the material three times in the three different locations.

I suffered a lot for this conference...
As a speaker, it's awesome - not only do you spend the better part of the month in the sun when your hemisphere is nearing mid-winter, but you also have the opportunity to really get to know the other speakers - you're sharing bus journeys, flights and dinners together for a week and a half.  Also, because you're at the same conference three times, you have the chance to see a lot more of the talks.  I admit I missed most of them in Melbourne because I was re-writing and practicing both my talks (note to self - next time, only commit to one talk), but by Sydney I saw the talks that I wouldn't normally get around to - talks on technologies I'm not currently using and probably won't get a chance to.  But it was great to see other approaches to problems, and the variety of presentation styles.


Since I saw most of the talks, I thought I'd give a run down of those I watched (now I feel bad I didn't get a chance to see everyone's, if I missed you it's not because I don't love you):


Computing Like the Brain: The Path to Machine Intelligence
Jeff Hawkins (@numenta)

I've seen Jeff talk on this subject twice before - an earlier version of the talk at Strangeloop 2012, and then the keynote at GOTO Aarhus.  It's a really fascinating approach to machine learning that's different to traditional Artificial Intelligence approaches.  It's waaay beyond my comprehension level, but reminded me why I studied AI at university.  If you get a chance to see it, I recommend it.  There's a video available of the Aarhus talk.

Safety Not Guaranteed: How Successful Teams Ignore the Rules to Create Successful Products
Jeff Patton (@jeffpatton)

A thought-provoking talk on how agile teams succeed.  Mostly it talks about how a process is not going to save you, that you need to find your own approach from all the practices that are available.  I liked the message because it's very Lean Startup-ish, and I think the approach of getting feedback and learning from it is the best way to succeed.  My take-home points:

  • Change from a delivery-focussed organisation to a learning organisation
  • Even if you're on time, you're probably wrong
  • When we think "process" we rarely think collaboration and team
  • Those guys aren't high-fiving because they hit a deadline.

A Little Graph Theory for the Busy Developer
Jim Webber (@jimwebber)

Even if you're not using Neo4J or other graph databases, it's worth seeing this talk just to understand what sort of problems graphs are good at solving.  Also to see how graph theory could have predicted the first world war (not sure if this was funnier or more awkward when Jim presented this in Berlin...).  A great talk if you're interested in Data Structures or the NoSQL space.  Not so good when Jim feels compelled to make Mongo Is Web Scale jokes because he sees yours truly in the front row.  Will we never get over that?  Jim's a great presenter and therefore this theoretical talk is very approachable.

Take home points:
  • With graph databases your query emerges from the structure of the graph itself
  • It seems like another interesting way of modelling your domain
  • Most databases are tuned for size because traditionally size impacts the cost of querying
  • In a graph database, query latency is proportional to the size of the graph you want to explore (not to the whole database).

Charles Nutter (@headius)

Quite an in-depth talk about how the JVM could evolve to support more than simply Java-the-language.  Interesting at an abstract level for us Java developers to see how our language is not the be-all and end-all, and get a glimpse of things we might need to care about in the future.  Not too many take-home points for the every day developer, but definitely interesting for those more interested in how a language is built and what goes on behind the scenes.


NoSQL & NewSQL - The Empire Strikes Back?
Dave Thomas (@daveathomas)

A look at the whole landscape - past, present and future - of RDBMS/SQL, NoSQL, NewSQL.  It's a good way to step back and see what's going on there, not to blindly follow the new trends.  The thoughts that occurred to me:
  • NoSQL solutions might not be the silver bullet solution, but by offering lots of different persistence options we're challenging perceived best-practices and having conversations around how to store and access our data
  • SQL was never actually evil.
  • Joins suck; the O/R Impedance Mismatch; two phase commits are expensive
  • Map/reduce is the best way to query NoSQL stores?

Michael Nygard (@mtnygard)

Michael gave a really great talk on where the DevOps movement started, what it's all about, and tackled some of the fears and obstacles that people and organisations face that can prevent them doing things in a more DevOps-y way (and problems that you keep seeing when you separate Dev and Ops).  I saw a lot of things in this talk that resonated with my experiences, and it was another example of how the hard stuff in our jobs is all about the people and the politics, not the technologies.
  • What if you measured Ops on the number of features going into production, and Dev on the stability of production?
  • Performance is a feature.
  • You'll never teach yourself out of a job, the more you teach, the more people will rely on you
  • A failure-inducing system is a system that lets people fail.  Don't blame the people.
  • Your development tools and environment are part of production, because they are on the critical path to production, and should be treated as such.

Kevlin Henney (@kevlinhenney)

Given my interest in Software Design this year, this was a talk that was close to my heart. It looked at each of the SOLID principles, where they came from, what they are, helped us understand why we need to care about them (or not).  It became clear to me that as we become more experienced, as we grow, we need to continually re-visit the things we think we know, or the basics of what we're trying to do, as you'll find things there that surprise you - things you thought you understood, or things that you didn't understand before and now have more context for.  In particular, I learnt another argument against using inheritance willy-nilly (one of my current favourite bug-bears)
  • Writing software is like writing fiction.
  • Experts say "it depends" because they know a number of rules which might be applicable.
  • You can't change published interfaces because other people are dependent upon your code (pretty much the entire basis of my Backwards Compatibility talk), but if you own the code you can change it to your heart's content.

Ben Christensen (@benjchristensen)

Netflix are doing some really amazing stuff with architecture, design and code, and what I love the most is that they're willing to share it with the rest of us. Rx and reactive programming are big buzz words at the moment, and the event-driven, asynchronous approach is something that we embraced at LMAX and is now, to my mind, an "obvious" way to create scalable systems.

I liked Ben's visualisation of the events in the system using marble diagrams, and I liked that he showed us code and walked through it.  There were a number of things to get your head around in the talk, and I personally would like to see it again to see what I missed first time around.  Definitely worth watching if you're interested in this way of coding, I think it's a paradigm that will be used more and more.

Lyssa Adkins (@lyssaadkins) and Michael Spayd (@mspayd)

I don't know why it never occurred to me that you could create a framework for professional development for agile coaches.  Lyssa and Michael have done just that, and having something a bit more formalised helps figure out what a coach needs to do in order to develop further.  Agile coach, scrum master, iteration lead... all these titles do not currently tell anyone how good you are at the job or what your strengths and weaknesses are.  The Agile Coach Competency Framework seems like a good starting point for conversations around: the coaches you have; the coaches you need; your current skills as a coach; the direction you want to go in as a coach.  If you need to hire or develop an agile coach, or if you are a professional in this space, this is worth looking at.

Mike Barker (@mikeb2701)

I was so pleased to hang around with my old LMAX colleague during YOW that I totally failed to take the time to see all of this talk.  Depending upon the city it either clashed with mine or was immediately before.  However, it's a must-see for fans of the Disruptor, Mike goes into detail about what's in the latest version of the Disruptor, how and why these things work.  I'll definitely be watching the video when it's online.

Angle Brackets, Curly Braces, JavaScript & Assembler
Scott Hanselman (@shanselman)

A funny, polished, brilliant keynote.  Honestly I can't remember anything about it other than something-something-Microsoft-cloud, and push things down to the client because there's power there, but don't let that put you off - I did not write notes, I simply sat and enjoyed every minute of it.  It was a great performance, and a reminder of how much practice it takes to become a truly good keynote speaker.

Programming In Time - Live Coding for Creative Performances
Andrew Sorensen (@digego)

I have only one word in my notes for this talk:

Awesome.

It was the best presentation of the conference.  Different to anything I'd seen before, engrossing, creative, fun.  Sure, watch the video, but if you get a chance to catch this at any other conference, I highly recommend seeing it in person.

Liz Keogh (@lunivore)

I nearly didn't go to this talk, because we did BDD at LMAX and I'm trying to lead us towards this at MongoDB and I know all this stuff blah blah blah.  I'm so glad I did go - not only is it nice to have your opinions confirmed and the concepts you try to live by repeated to you again, but there were things in here that should help me push the BDD approach more.

One of the things I remember Liz for is explaining the use of the word "should" at the Lean conference at Bletchley in 2010.  In this talk I was struck once again how important the words we use are: should, given/when/then, and so on, giving us a framework for thinking about a problem.  It's one of the reasons I wanted to move towards Spock, because it forces the use of some of these words.

I wrote lots of notes:
  • Assume you got it wrong
  • Is there a context in which the event will create a different outcome? (Your account is empty, the ATM is out of cash, you have a pre-approved overdraft)
  • Don't think of the software that will solve the problem, assume it will be done by pixies (like Pratchett's Iconograph), forcing us to stop thinking of solutions when we're trying to outline the problem.
  • Not all user stories are about the user, they might be about other stakeholders
  • Acceptance criteria vs scenarios - "Can you give me an example?"
  • Ask why a change needs to be made or why something is a bug, if I've messed up this feature I might have messed up something else
  • Testers do think differently to developers, they have a process of deliberate discovery
  • BA/Dev/Tester huddle - the three amigos
  • If a project has no risks, don't do it
  • Complicated/Complex/Chaotic/Simple projects/systems.  Some types of systems don't lend themselves well to BDD
  • All the risk is in Complex problems, and this is also likely where the value is.  This is the area that developers tend to like to live.
Afterwards I questioned Liz on her separation of Devs and Testers in the talk - this seems contra to the current trend of hiring developers-in-test or other moves to make QAs and developers one-team-one-dream.  She pointed out that it's less of a job description and more of a role that people take in a team.  Then she suggested I was currently in a tester role, not developer, as my mindset is very much focussed around proving our code quality rather than jumping in and implementing features.  I think it was meant as a positive thing...
Sam Newman (@samnewman)

"Microservices" is another one of these buzz words doing the rounds at the moment.  There was a lot of discussion amongst the speakers about how micro is micro, and one definition I liked was "a microservice is a service that does one thing and one thing only".   In Sam's talk I got an idea of why microservices are a Good Thing, and how you might go about moving in that direction.  There was practical advice on things you should be doing if you're using this kind of architecture:
  • Align your services with your organisational structure
  • Microservices let you deploy independently and move faster, and you can run each service in whichever technology / language is right for the job
  • Standardisation vs autonomy - standardisation between services, autonomy within.
  • Pick conventions and stick with them
  • Try not to support distributed transactions
  • You need to get better at monitoring
  • Can create tracer messages that flow through the system
  • Create templates that do the right thing, make it easy for people to do the right thing.

Google Earth Engine: Enabling Science with Novel Software
Mike Dixon

I saw this because I'm interested in geolocation and geo-stuff at the moment, but this talk wasn't really about the sort of thing I'm playing around with.  It was (to my mind) really interesting material though - using satellite images from the past few decades to spot patterns and predict things.  It's really nice to see applications of technology that could potentially impact the whole world, rather than just things that make money for companies.  My Dad, who's a geography teacher, would have loved this talk.

Cloud Native Architecture at Netflix
Adrian Cockcroft (@adrianco)

Really interesting talk, always to a packed room, about how Netflix has created a scalable architecture.  As I said earlier, I'm really impressed with what they're doing, I'm particularly interested in their chaos monkeys and primates.  I definitely recommend seeing this presentation.

Joel Pobar (@joelpob)

A look under the covers of how Facebook ships things.  It's a very interesting contrast to the Netflix, microservices approach.  It's great to see the different approaches at the same conference, maybe it gives people an idea of the pros and cons of each way forward.  

What I particularly liked from Facebook was that the teams seem to be set a goal, and then they're free (to some extent) to pick what to work on in order to meet that goal.  There's definitely an experimentation side to things (very Lean Startup again), a lack of fear of trying new things, some stuff will work and some won't, that's life.  But at the end of the day there's a definite measurable that will tell you if you're doing the right thing or not.  On the VM team, the aim is to get CPU cycles down, that's it.  This is a very different approach to having a backlog of stories that's prioritised by the business.  Interesting and useful stuff in this talk.

Lessons Learned from Adopting Clojure
Jay Fields (@thejayfields)

I'll be honest, I went to this talk because I chatted to Jay a number of times throughout the travelling circus, and I liked him - I have almost zero interest in Clojure at this moment in time.  But I'm really glad I went, because I learnt loads of stuff that's relevant for my day job (who knew?).  This presentation is basically about how to introduce a new language into a company/team, and he's able to show the process over a period of several years, which in our industry is a life-time - many talks are around the latest, shiniest thing a company has introduced.  He speaks frankly about the cost of introducing a new language, gives some good advice on the approach to take, and personally made me wonder if I might have bitten off more than I can chew by sneaking Groovy into the Java driver via Spock and Gradle.
  • Don't force people to use a different editor AND a different language - if you take away both comfort zones you'll meet resistance
  • Keep the other tools in place too - ant, maven, etc.
  • Choose non-production code to try it out on
  • Choose code that showcases the power of the language, its strengths
  • Choose something that you're willing to keep in the old language, in case it all goes horribly wrong and you have to go back
  • When you've introduced a new language, you've just given yourself a second full-time job - supporting that language, training people, etc.  
  • You need to know everything - you are the expert.  Read everything.
  • Get a budget for training and support
  • "It's practical to get your career sorted before playing with new technologies" (I wrote that down and now don't remember the context, but it's an interesting point)
  • There's so many things you can do by innovating and adopting a new language.

Focusing the Core Domain: Domain-Driven Design Case Study
Eric Evans (@ericevans0)

I always love meeting people who's books I've read (or at least, started).  I've been really interested in the Domain Driven Design stuff since the guys were banging on about it at LMAX, and I've tried to use some of the concepts to drive the design of the new Java driver for MongoDB. This presentation was a specific (anonymised) case study of applying Domain Driven Design.  My main take away point is that not plunging into development, that asking questions, that waiting, is sometimes the best thing you can do.  

Mobile Web Whirlwind Tour of PhoneGap, Cordova & Topcoat
Brian LeRoux (@brianleroux)

I'm not doing mobile development at the moment, so this is another talk I went to because I met Brian at the various speakers events and wanted to see his talk.  It was another talk I really enjoyed - very well presented, technical, code-y, entertaining.  And it also blew away my preconceptions about PhoneGap, an opinion I had formulated during my very short stint working at ThoughtWorks three years ago.  If you're in the mobile space, or even in web development, definitely worth watching.  If not, then maybe just give it a watch to see what's happening out there.
  • "We're web developers, we don't need tests"
  • Cadence and project heartbeat really important
  • "Performance first", but actually it's about the people
  • Find one thing and do it well
  • Measure everything
  • Build a real app and extract out the components, instead of doing enterprise architecture
  • Help pages with example code templates: "developers copy and paste, at least this way they'll be copying the right stuff"

Philipe Krutchen (@pbpk)

Scrum-type methodologies tend to focus on user stories and feature delivery.  This presentation talks about physically colouring the different types of work that you have in your backlog (tech debt, bugs, stories, architecture) and understanding how to prioritise each of them.  This talk is worth seeing if you are in a Scrum-ish environment, and you have a backlog of stories.  If you're struggling to find time to address tech debt, this is probably applicable too.  For me, the take-away point was simply having visibility of the different types of work - often the backlog only contains stories, and the other stuff is missing.  From there, you're in a better position to work out how to prioritise things.

Stewart Gleadow (@stewgleadow)

More and more people are talking about APIs, especially as we now have lots of different ways of getting to data/applications, even if you just think web/phone/tablet.  Stew gives very solid advice on how to build APIs so that you can correctly separate back- and front-end, and create (specifically) great iOS apps.  There's a good intro to what REST really means too.
  • Different devices don't have to share the same API if it doesn't work well for them
  • On Objective C: "It's like ugly Ruby, or beautiful Java"
  • From day one send the information about the client version, the handset etc. to the server
  • You must worry about backwards compatibility because there's a very long tail on app upgrades
  • Libraries that bind your JSON have tight coupling
  • You can ship client code that checks if a feature is available on the server and ignore it if not - that lets you turn on the feature at the server-end
  • Encourage upgrades to the new version, by doing things like "if you had version 347 you could use this feature"
  • The phone application is the hardest thing to change so it should not be your integration point
  • You need an anti-corruption layer, your phone should not be pointing to the internal systems.  This will be your mobile API, and can include caching and security
  • If your logic is in the client, it's in the place that's hardest to change.

And then there's my talks.  Like I said, I was foolish enough to say yes to giving two of them, but the great thing was I got the chance to do a fluffy talk and a technical talk.

Dave Thomas saw me give a talk with this title at Aarhus, and asked me to present it at YOW.  I was really pleased to get this chance, because conferences often find it hard to excuse a talk that might suggest you get a new job when your employer probably paid for your ticket.

I wasn't that happy with the Aarhus version, if I'm honest - I was trying to squeeze everything I'd learnt about managing my career over the last 15 years into an hour's talk, and I failed horribly.  I re-wrote it almost entirely for YOW - it's clear there is a lot of stuff I'd love to talk about that I didn't get a chance to cover, but hopefully this talk is more broadly useful for everyone.

YOW might not have been the best audience for it, as most people had my level of experience or more, and a number of people said "I wish I'd known that 10 years ago", but my experience seems to tally with other people's, so maybe it will be helpful to more people over time.

It's kinda weird to stand there and talk about all the choices you made to get to where you are, the mistakes you've made and explain some of the choices.  Especially weird if some of my ex-employers ever see the talk.  But I did learn a lot of things the hard way, and I didn't end up here by accident, I want other developers (especially those in the early stages of their career) to learn things the easy way.

So yes, I've given a talk with this title a number of times this year.  It morphed from the original version into two different talks - "Design is a Process, not a Document" and a more MongoDB-focussed one, which I reused the original title for.  This newer, MongoDB-focussed one is what I gave at GOTO Berlin, and I decided to use this for YOW as it's a technical (ish) talk that goes into some detail about MongoDB, and they do pay my rent.

The really great (or possibly, bad) thing about YOW is that because it's the same conference at three venues, only a few days apart, it gives you a chance to put your Lean Startup knowledge into practice - you can experiment, get feedback, and improve.  Like the GOTOs/QCons, they have a Green/Yellow/Red feedback system from the audience so you can get a feel for how they liked your talk (the Aussies are a bit non-committal, they were keen on the Yellow button - commit one way or another!! (or don't, I don't want more reds)).  So decided to A/B test my talk - at Melbourne, I gave the GOTO Berlin one; at Brisbane, the original one with updated code and design diagrams.  Since the Brisbane one got a higher score, I went with that with some minor tweaks for Sydney.  The upshot is, people like hand-drawn pictures of monsters, and are less keen on understanding the internals of MongoDB.  That's useful to know.


But the talks aren't the only things that make a conference.  And YOW got the other stuff right too:

  • I loved the drinks receptions in the evenings, that's a great place for people to come and ask you questions about your talk, stuff they might not want to share in front of everyone.  Note to attendees - if you do see a speaker at a drinks/network/mingle event, feel free to chat to them.  We're there for you guys, and we're only people ourselves and like the company.  At many events, the speakers know very few people.
  • Sydney had an outdoor eating area, which was awesome - if you're going to spend weeks in a conference hall, it's nice to get outside for food.
  • There was a, um, misunderstanding about appropriate dress code for one of the vendors.  The conference organisers were on this immediately, and, to their credit, the vendor acted swiftly with no fuss.  A great example of how to handle this sort of thing at tech conferences.
  • Having all the travel and accommodation, particularly for this complicated trip, arranged by very capable and approachable people made the speakers' lives really easy, and I think that helped us to be more prepared and relaxed for our talks.
  • A speaker's excursion (on a boat!) at the weekend was an amazing way to bond with the other guys.
I loved YOW, I hope I can go again.