Two weeks ago I attended the GOTO Amsterdam 2014 conference. I still have vivid memories of last years GOTO Amsterdam, because it was my first time attending and speaking at the conference. The lineup of speakers in 2013 was really impressive and I had the change to watch professionals from the industry that I admire and respect like Martin Fowler, Linda Rising, etc. This year there was another impressive list of speakers talking about a variety of subjects and I did not doubt to register. In this post I will highlight some of the talks I got a change to watch during the two conference days and why I thought they were worth mentioning.
A Real World Multifactor Recommender System & the required Nextgen Integration Solution
This was my first talk on thursday (after the keynote) and was one of the talks that I was really looking forward to, because I was curious how they handled user analytics and product recommendations at bol.com in comparison with how we do analysis and personalisation with Hippo CMS.
Barrie Kersbergen and Niels Basjes work for bol.com, one of the biggest online retailers in the Netherlands. At bol.com they have the challenge of showing real-time recommendations of products to their (potential) customers based on the behaviour of the customer and the available data of their previous customers. Barrie started by explaining the type of data and the amount of load their system needs to handle and explained the different type of workloads being handled by the system. Their existing system currently handles batched measurements and real-time measurements. These different types of measurements are currently stored in different data storage solutions and the batch measurements are currently being processed with Apache Hadoop. Barrie went into the current limitations of their existing recommender system ('Limited' realtime analysis and no detailed long, history amongst others) and explained the reasons why they were rethinking their existing architecture.
From this point on Niels showed that they came up with a variation of the Lambda Architecture which they called the 'Sessionized' Lambda Architecture. For those of you not familiar with the term Lambda Architecture, it's a term that Nathan Marz originally came up with for being a generic, scalable and fault-tolerant data processing architecture, based on his experience working on distributed data processing systems while working at Twitter. If you want to read and learn more about Lambda Architectures I really recommend visiting lambda-architecture.net.
At bol.com they need to slightly differentiate from the default architecture because they need to track the bounded event streams e.g. related events need to stay together. They do this by having a 'Sessionizer' in front of their backend services which assigns a predictable visit id to a user, which is then passed down while interacting with their backend services.
This presentation gave me a good overview and understanding of what a Lambda architecture is and where existing examples of Lambda Architectures fell short for bol.com.
Adopting Continuous Delivery: Adjusting your Architecture
I've been fascinated with Continuous Delivery (CD) for a while now and I'm always questioning myself how and if I could/should apply this to my Hippo CMS based projects. As Rachel Laycock (ThoughtWorks) explained during the talk, even though you fully understand the concepts of CD it does not always mean it's 'easy' to apply to an existing project. Adapting CD might require organisational, process and architectural changes. I really liked the fact that Rachel talked from experience. She shared the good and the bad experiences she had while trying to help a customer move towards using Continuous Delivery.
Having a micro-services and/or decoupled architecture can make adopting CD easier, but there is no silver bullet as she explained. During the talk she also gave the audience some techniques for moving a complex and hard to change architecture forward by using techniques like the Strangler Pattern, Branch by abstraction and Feature toggles. Especially the Strangler pattern was a new concept to me and from this talk I've figured out that I have more reading to do and there are many different things to consider. Thanks Rachel for those insights.
REST: I don't Think it Means What You Think it Does
Before the conference I was intrigued by the abstract of Stefan Tilkov's talk on REST. The talk started out with the basic concepts behind REST, but quickly turned towards the misconceptions. I loved how Stefan interacted with the audience and asked the audience to comment which URLs on one of his slides represented a RESTful URL. Quickly it became clear that in the some attendees also perceive REST as a definition of pretty URLs that follow a certain standard in which the content of the URL indicates if the URL belongs to a REST service or not.
There is no such thing as a “RESTful URI”
I personally think that one of the more fundamental problems is that people think that having an API that uses JSON over HTTP automatically makes it a REST api. I guess most of the industry now uses the term REST for exactly such services, but in essence they do not reflect was REST stands for. Stefan pointed out that you should not worry about the characters, but you need to concern about responses and the context of such services. Another rule of thumb when creating these services is that clients should not have to build URLs using string concatenation. I think these two rules are really important and explained pretty well in Richardson Maturity Model. I really recommend reading the article by Martin Fowler on the steps towards the glory of REST. By attending this talk it also reminded me to actually read the dissertation on Architectural Styles and the Design of Network-based Software Architectures by Roy Fielding.
Things I Wish I'd Known
Personally I either have something with an opening keynote or I don't. The keynote by Rod Johnson on Friday morning was actually one that I could relate to and this was due to the fact that he talked about his experiences in co-founding SpringSource. Now I personally never founded a company from the ground up, but I joined Hippo at an early stage and recognised some of the things Rod mentioned during his keynote. In his keynote he talked about the good, bad and ugly of starting a company and the ups and downs they had with the company itself. I guess for the people in the room that are working at a startup there were many notes to take, but Rod was very clear about one thing.
Make your own mistakes instead of repeating mine
One of the interesting things about starting a company is that you will always need more money than you think you need and it's very important to make sure that you avoid people and legal mistakes. Those can really kill your company (especially when combined). If you are a (co-)founder of a company and was not at his talk I want to share one important advise. When it comes to company culture. remember that you as the founders are the ones that should drive the culture of the company. I've personally seen this happen in a successful way when I joined Hippo in 2003. I think Arjé, Jeroen and Tjeerd did an excellent job at creating a great company culture here at Hippo. I probably would not have stayed around for such a long time if that wasn't the case.
Rod also had a good tip for startups looking for funding; "investors invest in problems not in solutions". The fact that Rod is one of the board members of the highly successful companies like Elasticsearch, Neo Technologies and TypeSafe shows that he can put his experience in practice. In one of his final slides he showed more general lessons he learned of which I liked in particular one especially:
In today’s world, an individual developer can have a huge impact!
The conference in general
The conference in general was a great experience. The Beurs van Berlage venue is amazing and really easy to reach, because it's on a few minutes walking distance from Amsterdam Central station. The lunch and food was great. Quoting my colleague Joanna:
"The pistachio dessert was excellent."
The conference also allows you to meet new people easily, because there is plenty breaks and room available between sessions to have a chat with others and hang out at one of the exhibitioners booths and experience new things like an Oculus Rift. I also had the change to meetup with some great people that I also talked with last year at our own booth.
My colleague Ard Schrijvers gave an excellent talk on "Scalability Patterns & Solutions for Dynamic high-load Java Websites". His slides and all the slides of other speakers have been made publicly available and the videos of the sessions that got recorded (not all of them) are slowly coming online.
If you have the chance to go next year I highly recommend it!