Seating Charts

Build a seating chart for your classroom, your charity event, or your restaurant from your phone or tablet. Seating Chart can be used for a small classroom of 10 students, a wedding with over hundred guests and everything in-between.

  • Create charts and place different types of tables on it
  • Add people to each table
  • Assign individual seats
  • Easily keep track of your chart as it grows throughout the chart creation process
  • Get detailed views into your chart, who is sitting with whom and how many empty seats remain at the table
  • Access chart from multiple devices, got a tablet as well as a mobile device? Create a seating chart on one device, continue working on it from another
Stacks Image 416
Stacks Image 418

Development

The original idea for the app came from my girlfriend, who is in charge of education programs at a museum and needed to create a seating chart. At the time there wasn't a single "seating chart app" in the Play store. Creating the app was the perfect challenge which allowed me to work with user-created content.

Developing the app has been quite an adventure. I spent a lot of time spent huddled over in a window seat at a coffee shop, with a myriad of devices barely fitting on the tiny table -- always in danger of having the coffee or the mint tea spill on them. We survived. Along the way, I came across some interesting challenges:

1.
Storing user data in the cloud and syncing data between devices. Finding the right technology and the right data model for storing user's data in the cloud was a very interesting challenge. When a user installs the app on a new device the expectation is that any in-progress and previous seating charts are available on the new device instantly. This was a major feature I spent a lot of time getting right and I'm very happy with it.

Following along the lines of the "learn completely new technology" approach I had with this app, I worked in RxJava for processing sync events. "Reactive" is a completely different way of thinking about coding and though I really love the approach, I'm very happy I kept the RxJava code isolated in the "reading sync events" portion of the architecture.

2.
The seating chart grid. I wanted to make sure I didn't reinvent the wheel with custom layouts. I knew I needed long vertical and horizontal tables so the first thought was to find a layout which supported a grid layout with flexible cells that could span many columns or rows. Instead, I stuck with out-of-the-box, well-tested Android's RecyclerView and GridLayoutManager. For example, a table which spans three columns still draws each column/cell but makes sure to draw the first cell as the "start of the table" the second cell and the "middle of the table" and the last cell as the "end of the table."

The validations for the chart got very interesting -- if you're adding a long rectangular table, the code needs to make sure there's enough space for it. This got even more complicated when you could technically overwrite a cell if you accidentally added the same table to the same location on different devices -- this can easily happen if one of the devices was offline and didn't yet know that the other device already created a table in that location.

3.
Seating arrangement. Assigning people to individual seats was difficult more from a mental rather than a technical standpoint. I hadn't planned it in the original design of the app, but all the user feedback suggested that it would be a valuable piece of the app. I worked it into the schedule and put time aside for developing various algorithms for building seat layouts for different types of tables -- also learned to use the Android Drag and Drop framework.
Stacks Image 454
Stacks Image 457