All posts

culture thumbnail image

Culture Time

Culture Time is one of the unique things that makes the EU & UK Engineering Team at OpenTable so special. During Culture Time, engineers can engage in professional development like online courses, work on proof-of-concepts for new OpenTable features, and more. It is an opportunity for us to grow and learn new technologies, as well as a chance to work with people outside our normal team. Some Culture Time projects have even gained momentum and ended up as production code. In fact, the tech blog itself is an example of a Culture Time project.

culture thumbnail image

Acing the internship interview

Today is an exciting day because we've just started accepting applications for our summer internship programme! If you're reading this then hopefully you've already applied or you're thinking of applying. Don't worry if that's not the case, but just bear in mind that the target audience of this blog post is internship programme candidates.

events thumbnail image

We're hiring!

It is a very exciting time for us at OpenTable, and specifically at OpenTable Engineering in Europe.

culture thumbnail image

Welcome to the OpenTable Europe technology blog

Hi, welcome to our relaunched tech blog, it's been quite some time in the works! Our last post was in 2019 – and to be fair there have been some distractions since – but we're delighted to be back.

events thumbnail image

Meetup: Design Systems in the Real World with React

This Thursday, June 13th, we are pleased to be able to partner with the React GraphQL Academy to host Design Systems in the Real World with React at our Finsbury Square office, London.

backend thumbnail image

Structuring large ASP.NET Core projects for testing and readability

This is a continuation of a previous post where I described in detail how to test an ASP.NET Core API end-to-end in an isolated, repeatable fashion. This is a shorter post that discusses an approach to structuring your project that should make it easier to test and develop.

backend thumbnail image

Testing an API In Memory in ASP.NET Core

This is long post that describes how to setup an in-memory test harness for testing an entire ASP.NET Core API with lots of code examples.

culture thumbnail image

Starting your career as a software developer

A couple of years ago I was asked to give a talk to programming undergraduates at Kings College, London. I wrote up the session as a blog post and added it to my personal website, where it has received thousands of hits since (one or two hits).

engineering thumbnail image

Monads explained by a imperative programmer - with examples

A monad is any type construct that follows a specific pattern; it works in the same way as other design patterns. The .NET ApplicationContext is a singleton in the same way that Array is a Monad. Something being a monad does not define its purpose; in the same way that a class can implement many interfaces, a monadic type can also conform to many patterns to increase its usefulness.

events thumbnail image

Meetup: New Ideas for the New Year

Tuesday the 12th of December, OpenTable is delighted to host the thirteenth appointment with the WEBdeLDN meetup.

events thumbnail image

Meetup: Bedtime stories

Wednesday the 22nd of November, OpenTable is delighted to host the twelfth appointment with the WEBdeLDN meetup, featuring talks by Tammie Lister (Experience Designer at Automattic) and Cristiano Rastelli (Front-End Engineer at Badoo).

engineering thumbnail image

Circuit Breakers and Application Resilience

For most people circuit breakers are a concept that belongs in the world of electricity. They are usually a box of fuses under the stairs that prevents the tangle of extension cords from turning into an unexpected open fireplace behind the TV. But the concept of a circuit breaker is something that we can apply to software and software services.

events thumbnail image

Meetup: Frontend Refactoring at Scale

OpenTable is delighted to host the tenth WEBdeLDN monthly meetup with talks by Jack Franklin and Nick Balestra.

events thumbnail image

Hosting external events

This June, OpenTable hosted the London Machine Learning Study Group to great success. We provided the food, drinks, and space for an extremely talented speaker and over 100 RSVPs. It was also my first experience hosting an external meetup at OpenTable - and I learned a lot!

frontend thumbnail image

Pragmatic Testing with GraphQL

We’ve been using GraphQL at OpenTable for a little over half a year now. I won’t go into detail as to why we started using it, but suffice to say, we really enjoyed creating our very first GraphQL endpoint. It eased a lot of the inconsistencies that we were experiencing with some of our REST-ful services.

culture thumbnail image

OpenTable's Global Hackathon 2017

Last week we were excited to kick-off our first OpenTable Global Hackathon, underway simultaneously in San Francisco, Los Angeles, Mumbai, Melbourne, and right here in London. Having personally never attended a hackathon before let alone helped organise one I was initially daunted, but with some careful planning, good suggestions from the team and a fair amount of making it up as we went along, the end result was quite a success.

culture thumbnail image

The goal driven organisation

Quarterly team goals are an effective way to establish organisational purpose, direction and alignment while supporting team agility. But be vigilant - they can be used inappropriately.

backend thumbnail image

testing-node-apps-with-docker-compose (and some Soul)

As I am sure the audience of this post knows to some extent, Docker is a technology that has grown to become popular over the last few years, allowing developers to deploy pieces of software by packaging them into standardized containers, in a number of various ecosystems (Apache Mesos, Amazon Web Services and many more).

engineering thumbnail image

falcor-postman

At OpenTable, we have an engineering culture that empowers us to research, experiment and learn.

engineering thumbnail image

OpenComponents - microservices in the front-end world

Many engineers work every day on opentable.com from our offices located in Europe, America, and Asia, pushing changes to production multiple times a day. Usually, this is very hard to achieve, in fact it took years for us to get to this point. I described in a previous article how we dismantled our monolith in favour of a Microsites architecture. Since the publication of that blog post we have been working on something I believe to be quite unique, called OpenComponents.

frontend thumbnail image

Testing React Components

At OpenTable it’s becoming an increasingly popular trend to use React. One of the reasons for this is the ability for it to server-side render whilst still giving us the client side flexibility that we all crave!

culture thumbnail image

Puppet-Community

Puppet is an important tool to us at OpenTable; we couldn’t operate as efficiently without it but Puppet is more than a tool or a vendor, it is a community of people trying to help each other operate increasing complex and sophisticated infrastructures.

infrastructure thumbnail image

The DNS ABC

Before joining OpenTable I was looking for a software engineer job and I've done my fair share of interviews. A question that has popped out a lot, and when I say a lot I mean always, is:

backend thumbnail image

Hapi.js and SIGTERM

When we first stood up our hapi.js APIs, we wrote init scripts to start/stop them. Stopping the server, was simply a case of sending SIGKILL (causing the app to immediately exit).

engineering thumbnail image

Dismantling the monolith - Microsites at Opentable

A couple of years ago we started to break-up the code-base behind our consumer site opentable.com, to smaller units of code, in order to improve our productivity. New teams were created with the goal of splitting up the logic that was powering the back-end and then bring to life new small services. Then, we started working on what we call Microsites.

backend thumbnail image

A Beginner's guide to REST services

As a junior, I always find it easier to just sit and write code than actually stop to think about the theoretical basis that lie under the applications I work on. REST is one of those terms I heard a lot about, so I decided to try to sum up what it means and how it affects the choices we make everyday as software engineers.

infrastructure thumbnail image

On Strongly Typed Logging

Logging is a crucial element of monitoring highly available systems. It allows not only to find out about errors but also quickly identify their cause. Logs are often used to generate metrics that help business and engineering make informative decisions on future development directions.

frontend thumbnail image

Building a living styleguide at OpenTable

If you're reading this you've probably built yourself a website. A site - large or small - that's thrown together or crafted over many months. And if you have, you’ve probably kept all your CSS class names in your head, or at least been able to go straight to the relevant stylesheets to retrieve them.

frontend thumbnail image

Explaining Flux architecture with macgyver.js

Flux is an application architectural pattern developed by Facebook. It was developed to solve some of the complexities of the MVC pattern when used at scale by favouring a uni-directional approach. It is a pattern and not a technology or framework.

frontend thumbnail image

Supporting IE8 in the OpenTable redesign

We're really proud to have released last week our redesigned website, the culmination of months of hard work from many talented people here in London and in San Francisco.

backend thumbnail image

Proxying Services With Hapi.js

I've raved in the past about how awesome hapi.js is, but I'm going to talk about just a specific case today.

engineering thumbnail image

Hobknob v2.0: A new dimension

Sometimes there is the requirement for more granularity when toggling a feature switch. Version 2.0 of Hobknob hopes to address this with feature categories.

infrastructure thumbnail image

Interacting with ElasticSearch using Hubot

At OpenTable, we use a few ElasticSearch clusters. Our aim was to be able to interact with our ElasticSearch clusters via HipChat so that we could troubleshoot easily and without having to log into our VPN. We already use Hubot as part of our systems workflow, so it made sense to be able to interact with ElasticSearch with it.

culture thumbnail image

Coach don't rescue

I recently attended a fascinating and emotionally-charged talk by Samantha Soma at DareConf 2014 titled 'How to stop rescuing people'. It strongly mirrored my experience of moving into a leadership role and I'd recommend anyone with a spare 30mins to watch it.

engineering thumbnail image

Hobknob v1.0: Now with authorization

We are pleased to announce the version 1.0 release of Hobknob, our open-source feature toggle management system. With it comes a few additions and several improvements.

events thumbnail image

PuppetConf 2014 - Part 3

This is our summary of PuppetConf 2014. In our previous post we gave an overview of the first day of the conference. This post will provide an overview of the final day.

events thumbnail image

PuppetConf 2014 - Part 2

This is our summary of PuppetConf 2014. In our previous post we gave an overview of the contributor summit. This post will provide an overview of the first day of PuppetConf.

events thumbnail image

PuppetConf 2014 - Part 1

It has been one week since our attendance at this years PuppetConf and we have just now caught up on all the great talks that were given and the projects demonstrated over the 3 day period. Here's our summary of the event (split into 3 parts), hopefully you will find as much inspiration in the content as we have.

engineering thumbnail image

Introducing Hobknob: Feature toggling with etcd

The ability to dynamically turn features on/off in software without the need to redeploy code is extremely beneficial. Whether you are trialing a new feature or using branch by abstraction to avoid creating feature branches, the use of feature toggles can aid continuous delivery and provide a mechanism to reduce mean time to resolution when an issue occurs.

infrastructure thumbnail image

Testing Puppet with Beaker pt.3 - Testing Roles

In the first two parts of this blog series we have focusing on testing puppet modules with beaker. As an open source contributor there is always a large test matrix so this makes absolute sense. But what about the other large use-case for beaker - what about our day-to-day internal code base? Not all of this is modules, in fact a large portion of it is other puppet code - roles, profiles, facts, hiera data etc. All of this needs testing as well.

infrastructure thumbnail image

Testing Puppet with Beaker pt.2 - The Windows story

In part one we discussed our first steps into the world of acceptance testing our Puppet manifests. By using Beaker we able to test managing local users on our Linux boxes. This was a positive experience for us. It allowed us to get to grips with the basics of configuring Beaker to run tests and configuring our node sets to run those tests against. In this post, we will be discussing how we went about getting Beaker working with Windows.

culture thumbnail image

What can I do?

I've noticed recently a lot of content in my social media network is based on the current escalating problems in the Middle East.

engineering thumbnail image

Acceptance Now

When is acceptance-only testing a good idea, and how can its problems be overcome?

infrastructure thumbnail image

Continuous Delivery: Automating Deployment Visibility

In our continued effort to drive towards a service oriented architecture each of our teams are continuously improving their deployment processes. Recently our team has focussed on automating as much as possible, putting as much into chat as we can and improving our logging/metrics.

infrastructure thumbnail image

Managing Windows Features with Puppet

Back in June 2013, I wrote about Windows Feature Management with PowerShell. We have since released a Puppet module that will do this for us. We originally wrote PowerShell:

infrastructure thumbnail image

Managing Windows Web Applications with Puppet

As part of our move towards a configuration management tool, we really wanted to start automating as much of our infrastructure as possible. This included our application configuration stack. IIS management is pretty easy with PowerShell. It would look something like this

culture thumbnail image

Remote Worker Notes – Tools and Setup

For the last couple months I've been working remotely with our search team at OpenTable. Let me share our remote working setup and some rationale for our choices. I will shy away from judging how it's all worked out and leave that for subsequent blog posts.

culture thumbnail image

Effective prioritisation

Prioritisation is a huge part of modern life. No. Prioritisation is an ESSENTIAL part of modern life. I'm not talking solely about Agile here either. Yes we plan stories, yes we prioritise them to get them into the backlog but I'm aiming at a higher level. Life lessons that are useful to all of us.

engineering thumbnail image

Look ma, no unit tests!

At OpenTable we strive to deliver change as quickly and correctly as possible. To do this effectively we are always looking for new tools and methods that allow us, the developers, to respond quickly and accurately to changing requirements and environments.

infrastructure thumbnail image

Upgrading Puppet with Puppet

As part of one of our recent ForgeFriday efforts we released a new module puppetversion with the purpose of managing the installation and upgrade of Puppet in a platform agnostic way.

infrastructure thumbnail image

Testing Puppet with Beaker

One afternoon I got asked to write a new Puppet module to manage local users on our Linux boxes. Not a contrived example but a real-world need as we begin to move our infrastructure from Windows to Linux. Managing users is one of those tasks that is at the core of the Puppet ecosystem and I thought this would be pretty easy as I had done this sort of thing many times before. What added to the complexity was that we needed to support Ubuntu, Centos and FreeBSD machines that we had in our stack and we wanted to make it something that was open source and on the Forge - so lots of testing was required.

infrastructure thumbnail image

ForgeFriday - our commitment to the Puppet Forge

Those of you that read this blog on a regular basis will be aware that here at OpenTable we take our commitment to Open Source very seriously. As part of the infrastructure team at OpenTable we are begining a process of being open-first. That means that everything we write will be open-sourced unless it contains a significant amount of internal information but we will architect to limit this.

backend thumbnail image

Internationalisation in a RESTful world

I18n is often a painful afterthought when serving content from a http-api. It can be taken for granted and tacked on using nasty query string values. But thankfully HTTP provides us with a solid gold opportunity. If you can look past the mire of content negotiation you can see the nuggets that lie inside.

engineering thumbnail image

When to performance test in production

In my last post about performance testing I wrote about how we decided to do it in production as the ultimate test of success. Performance testing in production is enough to make some operations guys have a panic attack and a few odd looks were dished my way when I raised it on behalf of the team.

backend thumbnail image

Performance testing our Search API

It was midnight on the Friday before Christmas, my seven-week old child was tucked up asleep and I was pretty chilled. All was calm and it was time for bed. Two minutes later I had a phone call, followed by a series of Nagios email alerts, and a need to put my work hat on quickly. The search API was having trouble; as the manager of the team who developed it, I was not looking forward to this. We were having a real slowdown at one of our busiest times of the year – this was going to be fun.

infrastructure thumbnail image

Benchmarking APIs - why it’s important, and how

Since I joined OpenTable I’ve been experimenting with performance monitoring, specifically on web services. One of the projects my team is responsible for is a REST API that provides UI elements for HTML5 applications, shaped as HTML snippets and static resources. Our consumers are websites deployed in multiple parts of the world, so our service needs to be fast and reliable.

events thumbnail image

Programme Management, making Agile scale

A lot of us were lucky enough to attend NDC London this year, we even sponsored one of the food stalls. I often see one or more real themes coming from talks at conferences. At NDC London I saw three talks around scaling Agile. Indeed Dan North's (@tastapod) talk was called exactly that. It is a topic OpenTable is trying to make happen. We are about 100 engineers on three continents which is a lot of teams working together.

infrastructure thumbnail image

The adoption of Configuration Management

In years gone by, we were a traditional IT company. We had teams of developers and operations. They rarely mixed. Around nine months ago we started to really try and get these teams working together. We introduced a configuration management tool, Puppet, into our ecosystem.

culture thumbnail image

20% time: Why, as a manager, you should love your engineers to be doing it

We allow all our UK based developers to have some time to explore new technologies, try out prototypes and clean-up things that escape the day-to-day process. Two days out of ten, seems a lot doesn't it?

culture thumbnail image

Coaching style over substance

Have you ever been lucky enough to mentor someone who really got it? Maybe you've had the opposite experience and the session ended up being a failure for both of you?

culture thumbnail image

Beginning a journey to chatops with Hubot

As a part of our 30% time a few of our team, @ajroyle, @stack72 and I (@ryantomlinson) decided to get together and look at Hubot with Hipchat integration. There are several weird and wonderful scripts that ship with Hubot (see above) but the core concept of driving tooling via chat is one that we see value in.

engineering thumbnail image

Linking to your app in Windows 8

In an effort to raise the visibility of our excellent Windows 8 app we have recently connected www.opentable.com to the Windows Store. This was simply a case of adding two lines of meta data to our site. Or it should have been – there were several gotchas along the way that are worth sharing.

backend thumbnail image

Resolving domains to areas in ASP.NET MVC

When building a previous project, I created an ASP.NET MVC application that would allow subdomains to resolve to different areas of the project and thus show different views. I wanted to be able to extend this functionality. I wanted to allow different domains to point to different areas. This would allow me to deploy the application just once and then have different headers on the web server rather than regional variances. Whilst on a flight to San Francisco, I was able to hack together some code that allows just that. The details of that hackiness are below.

infrastructure thumbnail image

Quick look at RethinkDB

Someone in the office mentioned RethinkDb and I was impressed by the rhetoric on the site, so I decided to spend a couple of hours spiking one of our existing nodejs apps with RethinkDb. The app currently uses MongoDb so inevitably I'm comparing the two.

engineering thumbnail image

Counting in ElasticSearch

Counting is the religion of this generation it is its hope and its salvation. Gertrude Stein

engineering thumbnail image

Grunt + Vagrant = Acceptance Test Heaven

My continued love affair with Grunt reached a new high the other day, when I combined Vagrant with my Grunt deployment tasks and test runners.

engineering thumbnail image

Grunt your deployments too

We've been using Grunt as a build tool for our nodejs apps, and it's brilliant. It lints, it configures, it minifies, it tests and it packages.

backend thumbnail image

MapReduce in MongoDB

One of the first things I took on when joining OpenTable was building a new endpoint in our reviews API to aggregate and summarise restaurant review data. Thankfully, at the time, all the data I needed was cached in memory so building the response object was a simple set of linq queries over the cached reviews.

infrastructure thumbnail image

Using Vagrant to work with ElasticSearch on your local machine

Recently, I have started to work a lot more with Vagrant as a tool for creating a standard development environment across my team. This essentially means that regardless what the developers' machine is set up or running as, they can still reproduce the same environment as their colleagues just by entering a command.

frontend thumbnail image

One Gun - Many Enemies

I spent some time, re-investigating Javascript. After a few months of intensive TDD and SOLID training at OpenTable I was curious how those principles apply in a slightly different environment. Guess what, they do not differ that much... I planned to write about all this sometime in the future after gaining more experience from real battles ahead, however Watirmelon post invited me to attack this subject immediately.

infrastructure thumbnail image

Managing Windows Certificates with PowerShell

Managing certificates on Windows is really painful. There is no easy way to do it. The general way to install a certificate to a Windows Server 2008 machine is as follows:

events thumbnail image

NDC Oslo

Three OpenTable heroes took to Norway last week to attend NDC Oslo. For two of us it was our first major conference and for one, Paul Stack, he had to speak.

infrastructure thumbnail image

Windows Feature Management with PowerShell

In late 2012, our development team started to move towards our systems being much more automated. Long gone are the days of developers creating runbooks in Word and giving them to our operations team to use to set up our production servers.

backend thumbnail image

nLocalGeoCoder

With OpenTable having engineering teams spread across multiple offices it's important for us to maintain open email dialogue about new products us or our teams have created, new tools we've discovered or problem solving approaches that have helped us achieve our goals. Recently in one of these emails Aish introduced the team to a new open source ruby implementation of reverse geocode lookup for latitude and longitude he'd written called local-geocoder. With an interest in understanding how this worked, to learn a bit of ruby, to make this project accessible to .net developers and just to see how long it would take I decided to port it to C# and .net.

backend thumbnail image

Getting Started With SpecRun

We recently switched from writing automated acceptance from Cucumber to SpecFlow... this is no slight on Cucumber it's just that we had a lot of C# developers who wanted to get closer to writing acceptance tests. Worth adding that SpecFlow has also come a long way as a .Net port of Cucumber and is pretty much like for like now.