YOW recorded me, yet again, talking about the adventure that is the design of the new Java Driver for MongoDB. This is the same talk I gave at GeeCON and DevoxxUK, with some updates based on our Journey So Far. In it, I cover the architecture of the new driver and some of our current thoughts around where we want the API to go.
Since I have a tendency to bang on every now and again about how we, as developers, could do better in managing our careers (for example, by creating CVs that don't suck, and by staying ahead of the curve), Dave Thomas asked me to speak for a mere 50 minutes on the subject at GOTO Aarhus, a talk I wasn't enormously happy with as there was no way to cover a lifetime of hard-fought experience in such a short time. Dave seemed to like something in it though, as he gave me the opportunity to present the topic again at YOW last December, and this time I think I managed to distill the important points into the (still ridiculously short) time allotted.
See the video here, and please give me any feedback you have.
I recognise there are many many more topics I could cover, so I'd better start making a list. Suggestions?
It’s been a while since I updated you on my travel plans, so now I’ve had some more conferences confirmed, I thought I would pass the information on.
I’ve been really lucky to have been selected for some great conferences this year. I was asked to do a few more, and it was genuinely painful to say no to everything, but it seems the laws of space and time cannot be broken, and so I’ve been forced to select a tiny subset of all the places I’d like to go:
- 20 May: [GOTO Chicago](http://gotocon.com/chicago-2014/presentation/HTML5,%20Angular.js,%20Groovy,%20Java, %20MongoDB%20all%20together%20-%20what%20could%20possibly%20go%20wrong?) - I’m giving the same live coding presentation from QCon London, although knowing me I expect there will be some tweaks, changes, additions, and maybe improvements.
- 22-23 May: In New York City, since I’m more or less in the area. Gimme a shout if you want to meet for a drink.
- 25-28 May: SpeakerConf Barcelona. And while I’m in the area…
- 29 May: Barcelona JUG - “HTML5, Angular.js, Groovy, Java, MongoDB all together - what could possibly go wrong?”
- 2-5 June: New York City, probably (wait, am I going to be at home at all??)
- 23 July: OSCON - live coding again!
- 28 Sep - 2 Oct: JavaOne woohoo! I love having this opportunity to visit San Francisco.
I’ve got a couple of other events I’m still trying to work out the details for, but I think this is 2014 all booked up.
Last night the Sevilla MUG had our March Madness event. This was our largest event yet, with 36 people signed up. Although the aim of March Madness is to have a MongoDB Engineer at all the user groups this month, that’s not such a big deal for us as I live here, so this was also the first event where I wasn’t the main attraction - [Javier] (https://twitter.com/JvrBaena) gave a really great talk about the lessons learnt at SocialBro after using MongoDB in production for the last couple of years.
The slides for my introduction to Replica Sets and Sharding:
And the slides for the main attraction:
The event went really well, everyone seemed engaged, and our first talk in Spanish seemed to encourage more questions than normal. We were also in a new venue, and although I love the central location of our previous venue and the friendliness of the owners, the menu of the new location seemed to be a massive win.
|Picture courtesy of +Russell Miles|
This was supposed to be a 20 minute intro talk (OK, so I clocked it at 40 minutes in rehearsal) with the rest of the time devoted to questions on any subject I know about, or even anything I have an opinion on. Sounds dangerous, but means I can always move fast on the answers I don’t know in order to cover more ground - cunning, you see? Actually, that sounds like it would be more fun if alcohol were involved.
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):
- 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.
- 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).
- 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?
- 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.
- 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.
- 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.
- 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.
- 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.
- "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"
- 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.
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.
Yesterday I had the privilege of presenting the very first session for vJUG, a new virtual Java User Group that allows us to span geographies when sharing talks and stories. I’m really interested in the vJUG idea, especially now I’m not in London - if we can find good ways to share knowledge without having to travel, that will help us reach people who don’t normally go to conferences or don’t have a local user group to go to. Not to mention cutting travel costs and saving the environment.
See the event, and the record of the IRC chat, here:
The slides are also online, but obviously they’re part of the video as well:
<a href="http://3.bp.blogspot.com/-RpASMopn-iA/UnjQz9Tss-I/AAAAAAAAL8c/21JMVGxFuT8/s1600/DSC_1075.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">So, I thought a few months ago that my blog would become more of a travel blog than a tech blog because of the amount of conferences I was going to. Turned out that I was so busy writing / updating / practicing talks and workshops and, er, travelling, that I never got around to doing retrospectives on the events I’d been to.
- Designing with Lambda Expressions in Java - Venkat doesn’t simply cover the syntax of lambdas, but how they encourage us to use different design patterns to those we commonly use. Very informative.
- Lambda: A Peek under the hood - Brian Goetz goes into detail of how lambdas are actually implemented. Not something an everyday developer needs to know in order to use them, but extremely useful if you want to understand things like their performance, and why they’re not simply syntactic sugar. Despite thinking I understood this stuff, I still had to watch this twice (once at JavaOne and once at GOTO Aarhus) before I could say I understood it. Totally worthwhile making the effort.
- Making Java Groovy - A great, engaging talk about how Groovy and Java can live side by side, and showcasing some of the nice features of Groovy. I found this particularly helpful now we’re using Spock and Gradle, and learnt some new tricks.
- MongoDB for Hibernate/JPA developers - Obviously Justin is my colleague, so I should give him a shout out. But what I like about this talk is that it does what it says on the tin - introduces MongoDB for those of us who are/were used to working with out databases in a particular way.
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-2MEmpzgCoGE/UnjTq0XVQlI/AAAAAAAAL8w/hiLFac_YcuQ/s1600/DSC_0924.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
There’s some other conference going on at the same time, over in Moscone. Something called Oracle Open World. A few of us snuck over there to take a look at the massive MongoDB stand there (in the heart of Relational-Database-World!). Open World is a scary place filled with people in suits, looking to sell or be sold to. It’s also massive. We chatted to our mates there and then ran off to eat burritos.