Airbnb Streamlines the Growth Course of with a Unified Structure for Collaborative Internet hosting

Airbnb lately detailed the way it designed and constructed a unified structure for collaborative internet hosting. This structure streamlines the event course of of recent merchandise, as engineers solely must learn about one central framework that can cowl all internet hosting use circumstances. This framework encapsulates the particular kinds of collaborative internet hosting, releasing the engineers from the necessity to fear about them.

Initially, a single host (particular person) managed every property. Later, Airbnb launched co-hosts since hosts usually share their obligations with one other trusted particular person, corresponding to a member of the family or a neighbour. In the present day, Airbnb internet hosting is the first occupation of many hosts performing as a part of a enterprise. These customers handle groups of different customers and related roles for every of them.

Angeline Rao, an engineer at Airbnb, states that “because the variety of collaborative Hosts grows and new types of collaboration get launched, the engineering work to assist them turns into more and more complicated.” She summarises the motivation for encapsulating these enterprise necessities:

Engineers who’re constructing a brand new function want to grasp all the present kinds of collaborative internet hosting and resolve how collaborative hosts ought to work together with the function. (…) With none sort of unifying framework, product improvement for hosts can shortly develop into a laborious course of.

In a single host mannequin, engineers may simply retailer the host id on every itemizing to find out who has permission to behave on that itemizing. This permission verify would possibly appear to be the next:

if (isListingHost) 
  // Take motion on the itemizing

As soon as Airbnb added new types of collaborative internet hosting corresponding to co-hosting and groups, this code turns into unwieldy. Permissions checks accross the codebase would possibly begin appear to be the next:

if (isListingHost ||
  isListingCoHost ||
  isListingTeamMember ||
  isListingCollabHost1 ||
  isListingCollabHost2 ||
  // Take motion on itemizing

Within the new framework, Airbnb makes use of “person teams” to signify any group of individuals. An id, a bunch sort (co-hosting, crew, and so on.), and an inventory of members outline every group. Every group member is related to a task inside that group (proprietor, co-host, and so on.). Then, a central location is liable for sustaining all associations between person teams and assets within the system (listings, reservations, and so on.).


An occasion triggers the system to replace the related associations every time a collaborative internet hosting relationship or useful resource is up to date. You will need to be aware that this occasion would not comprise particulars of the change. As an alternative, it solely specifies {that a} change to a particular useful resource or group has occurred, together with their id. The system then fetches the information and calculates the right associations in an ultimately constant method.


Dealing with the occasions on this method permits Airbnb engineers to optimize efficiency by parallelizing and batching updates. As well as, since every useful resource replace occasion triggers a re-calculation of associations that’s agnostic to the particular sort of replace, the whole replace course of is idempotent.

Provided that this technique is in place, builders don’t must know the specifics of collaborative internet hosting. As an alternative, they’ll depend on the information on this single location to grasp the connection between a particular person and useful resource.

On high of this technique, Airbnb created a number of patterns to permit builders to question permissions for a particular motion, allowed assets per person, and allowed customers per useful resource to simplify improvement additional. These patterns embrace the utilization of Himeji to question permissions and ElasticSearch to affix the person to useful resource associations with the useful resource information for simpler querying.