And so QCon is over for this year, and it’s been a great conference (IMO). I’m not sure I learned anything totally new – it was more an affirmation of things I’d thought / heard / read about – and a chance to see some of these things out in the wild. The speakers ran from big conference names to academics through some front-line experts, so a real range. I don’t think I attended a single sales pitch, and although a few named products slipped through the net, they were all OSS projects, not commercial products. All-in-all it seemed to stay true to the “for programmers by programmers” promise.
The overall theme seemed to be that you can achieve pretty much whatever you want using bits and pieces that are already out there and tailoring them for your particular problem domain. There is no one-size-fits-all solution, and very little reason to pitch up to a big COTS vendor and buy their product suite (beyond internal accountability and CYA.) The real key is getting the right people and empowering them to solve the problem for you. Small teams, with the tools they need, no more, no less, will get you there. The same solution applies whether you’re tackling problems of scale of planetary proportions (Facebook), or focussing on extreme performance at the chip level (LMAX).
My only real regret is that I missed the Erlang / Functional Programming tracks – it’s something I’d love to know more about, but I just felt I had to either commit to the entire track or none at all. (It’s a bit like snowboarding – I’d like to learn, but if I only manage five days skiing a year I don’t want to spend it on the nursery slopes.)
Highlights were LMAX and Facebook – amazing teams breaking new ground – inspiring stuff from both, and a big thank you to the speakers, Aditya Agarwal from Facebook, and Dave Farley & Martin Thompson from LMAX.
On a technology front, the web is ubiquitous, as is mobile, though what that means is still a problem (what makes something “mobile” if my netbook runs the same software as my desktop – is it GPS, AR?) If you’re working client-side then it’s HTML/CSS/JS and HTTP; if you’re working server-side it’s offline, async, and message-based. Nothing new, although you might want to think about storing your data in somewhere other than an RDBMS. Just make sure you know why you’re doing what you’re doing, and can defend your choice if necessary.
My quick list of best practices is as follows:
- Do hire good people (great people if you can afford it)
- Do give those people everything they need to do the job
- Do pay attention to detail – it counts. Just ask Apple.
- Do learn the basics – everyone should know HTTP
- Do use the best tool for the job / problem at hand
- Do keep focussed on the problem that needs solving
- Do keep learning – you can never know enough
- Do keep it simple – if it’s not obvious, it’s a problem
- Do embrace change
- Do take risks!
On the other hand:
- Don’t be a slave to habit
- Don’t cut corners – it doesn’t help
- Don’t over-complicate
- Don’t build for a future that may not exist