top | item 38845650

Show HN: Better Seater – Wedding seating chart optimizer

132 points| teejae | 2 years ago |seater.steam-oven.net

Is anyone having a big wedding reception/event with assigned seating soon? Or know anyone who will?

I've been working on a tool to optimize seating charts for assigned seat events, such as weddings. I'm hoping this site will save people enough time and stress, to charge for the service for larger events.

At the moment, there's no login required, and the service saves no data.

  Why?
    * Save time, rearranging people automatically
    * Help with politics of large gatherings
    * Try moving people and quickly seeing how everything shakes out

  Currently, it will try to optimize for:
    * Keeping groups together as much as possible
    * Use fewer total tables
    * Keep people either together or apart, as indicated

  Current Capabilities:
    * Import guest list/table capacity information from Excel file (there's a template)
      * Generate fake guest list to play around
    * Dragging people to different tables and reoptimize
    * Selecting sets of people who you want to keep together or apart
    * Locking people to certain tables
    * Edit history

  On roadmap:
    * Prioritizing people to seat at "better tables" (VIPs, close family, etc)
    * Rearranging tables visually
What do you all think? Is this valuable? How's the UX?

I haven't come up with a great name for it yet, so naming it "Better Seater" for now.

All feedback and suggestions welcome and appreciated! Let me know what would be useful for you!

106 comments

order
[+] verelo|2 years ago|reply
My wife and i just went through this for our wedding. A few remarks from that experience that might be helpful:

1. Versions matter - she'd often make a draft and want to tell me "ok tell me if you like this better than the previous version". Id just compare the cells above to the cells below.

2. We organized people based on common interests - these people are very into music, these are very into home renovations, these people work in tech...etc. Tagging people with "attributes" and letting the system try optimize for as much overlap as possible would have been amazing.

3. Warn me of duplicates - sometimes in the copy paste madeness, we'd double up someone.

4. Import - We almost missed someone due to me skipping a line in the initial transription of their name into the spreadsheet.

5. At the end of the day guests need to find their seat. I made a QR code that linked to a website where people could type their name to find their table (https://andrewmcgrath.info/wedding) we didn't want to use a big board, it was 1 more thing to make (the website was a 2 hr project i did the day before) and the QR codes were just print outs we put in dollar store photo frames at the entrance, the bar and at the end of the day...we got great feedback over this. With the guest lists, you could easily automate making someone this website.

Good luck!

[+] atoav|2 years ago|reply
As someone who organized very popular parties back in my teenage years: Whatever you optimize for, don't overdo it. Good social events are all about the right mixture between familar/safe and the unknown/dangerous. Match people too closely and you will bore people, I am not saying you should seat people randomly, but also consider which interests might add to each other.
[+] teejae|2 years ago|reply
Thanks for the great feedback!

I agree with versions mattering. At the top, there's every version right now. Probably needs better UX.

Yea, I agree with adding attributes. I wasn't sure if most people would understand that UX. But it's on the roadmap, in lieu of groups.

Yep, dupes are definitely a thing. There's lots of places where everyone has the same names, though, so it could get annoying. Think Bali (5 names cycled), Korea (everyone's last name is similar). I haven't worked on this UX yet.

Great idea with the QR code generator! I'll have to look into this feature.

[+] jsdwarf|2 years ago|reply
Also think about the negative case - which people should not sit on the same table because they don't get along too well or will start a neverending dialogue?
[+] Brajeshwar|2 years ago|reply
Ok. This may be slightly off-topic, but I'm pretty serious when I suggest getting feedback and ideas from an Indian aunty/uncle who has done and helped arrange or take primary roles in weddings in their families. Here in India, for all significant events, there is always an aunt/uncle who knows everything, and everyone asks that person.

Looking at the website and seeing Tables numbered less than ten by default, I realized this targets people who invite their best friends and relatives and strictly choose who they want to see at their events.

One of my friend’s father was that uncle. I once asked him how he knows everything and can organize everything. He writes a lot and writes them down and refers to those writing when he thinks. If I asked him something, he is thinking about his notes in the back of his mind. Once, he gave me directions to go and send out over 50 paper invitation cards. My journey was precise and in perfect sequence, including the cow traps to avoid, the gates I might encounter, and the homes with dogs (so I call out before entering). This is in the 90s, with no phone, while I ride a bicycle to deliver those invites with no marked address on roads I had never traveled, in an Indian rural town.

[+] teejae|2 years ago|reply
Yea, I would love to hear from one of those aunty/uncles! But I don't know any offhand. You have any pointers?

Thanks for giving the tool a try!

[+] thom|2 years ago|reply
Bit of a blast from the past for me, as we used Perfect Table Plan when we got married. I heard about that from its creator Andy Brice who frequented the Joel on Software forums, a spiritual precursor to HN.

https://www.perfecttableplan.com/

Anyway, we used it to get _most_ of the way there, but ultimately reverted to hand crafting stuff at the end. For us there were many constraints that were vague feelings, only coming to light when we had a plan in front of us, and if you end up doing many rounds of tweaks you lose any real efficiency gain from using software.

[+] teejae|2 years ago|reply
Good points! I looked at Perfect Table Plan, and it seemed perhaps a bit "too complex" at the moment.

I agree that it takes some iteration, and that's why the UI is meant to help tweaking, and testing new ideas. You can lock people in place and keep tweaking, and go back in your work.

Btw, how many people attended your wedding when you used Perfect Table Plan?

[+] hermitcrab|2 years ago|reply
PerfectTablePlan is still going strong. Currently in v6 and v7 in development.
[+] devilbunny|2 years ago|reply
Simply contemplating having to do this is one of the reasons I'm very happy that the local standard for weddings (even big, expensive, nighttime ones) in my hometown was buffet service with available but unassigned seating. People hang out with who they want to, as much as they want to, and can just avoid those who bother them.
[+] jcadam|2 years ago|reply
Wife and I were broke college students when we got married. Reception consisted of cake and refreshments (no meal) in the basement of the church after the ceremony -- no assigned seating. Then a few nights in a local (though pretty nice) B&B for the 'honeymoon.'

Still spent too much on everything, should have just blown off the fancy ceremony and drove to Vegas :)

[+] kasperni|2 years ago|reply
I would reach out to some wedding planners/wedding venues and see if it would be useful for them. I think that would probably be your biggest market, if you nailed it. Could be pretty cool as a venue to provide the tool to your clients to plan the seating (I don't know what is out there already)

I definitely think you need to work on the UX if you want want to make on it

[+] teejae|2 years ago|reply
Thanks for the feedback!
[+] _jnc|2 years ago|reply
This is really cool!

Some ideas:

- Let me drag out guests to tables and then optimize around what I've done so far. It looks like optimize wipes the slate clean each time.

- You might consider letting people pick how many seats should be at each table with a +- tolerance.

- People really like seeing seat numbers, whether globally or local to a table.

- If you clean up the UI a bit this could also be something people print out for a reference chart at events.

Automatic seating has been one of the more common feature requests of my own seating chart app, seatpuzzle.com, but I haven't quite gotten around to modeling the right parameters and prioritized a different set of things instead.

[+] wayfinder|2 years ago|reply
If anyone wants to build this by themselves, I recommend using an optimization solver library like OptaPlanner. It basically implements standard optimization algorithms you can read in academic papers (which are interesting to read!) so you don’t have to.

You can probably write a basic planner in under an hour with all the constraints you can think of. You can just continue to fiddle with the constraints and weights until you are happy without having to worry about duplicates or errors.

I’ve used it to solve cost optimization problems for companies I’ve worked with and it works really well.

[+] haroldp|2 years ago|reply
Isn't "Keep people either together or apart" an NP-Hard problem, and basically unsolvable for more than a couple preferences?
[+] stncls|2 years ago|reply
Solving this problem to optimality (for whatever constraints and objective function one is interested in -- a precise formulation was not given by the O.P.) is presumably NP-hard indeed, meaning that the computational cost grows exponentially with the size of the problem (in practice: the number of invitees).

However,

1. This is only an asymptotic argument. For "small" size, these problems can be tackled. People routinely solve this type of problem (namely: mixed-integer optimization problems), with up to hundreds of thousands of variables, to proven optimality, in a matter of minutes (see [1]). In this case, it looks like an assignment problem in which the number of variables would be (number of invitees) times (number of tables), so for up to 1000 invitees and 100 tables, there is a chance the problem can be solved optimally.

2. The O.P. is most likely looking heuristically for good solutions, not optimal ones. And I can't really blame them for that. Do we really care about optimality here?

[1] https://plato.asu.edu/ftp/milp.html

[+] teejae|2 years ago|reply
Yep, NP-hard! This is using an optimization engine. It's not brute forcing. But hopefully it's getting pretty good approximate results.

You can keep trying harder from the state, just click again on the Optimize buttons.

I admit, I haven't optimized the optimizer yet.

[+] maweki|2 years ago|reply
It's probably an optimization problem with multiple parameters so you're never looking for an exact solution.

But as the NP-hardness of that problem goes: Say you have 400 guests on 50 tables and you probably expect multiple solutions, you're looking at maybe 20K variables in a SAT encoding. That's an industrial scale SAT problem but very much not untractable.

The question is, whether we would usually expect a number of solutions in the thousands or whether we expect just a handful. I'd guess its the former, as many people on the "cheap tables" are really interchangeable and not subject to many constraints. So usually you'd looking at just a handful of tables and guests that are difficult to place. That begs the question whether the problem OP's trying to solve is really a problem people have difficulties solving (or isn't easily solved by adding a table or two).

[+] hermitcrab|2 years ago|reply
>Isn't "Keep people either together or apart" an NP-Hard problem,

Yes.

>and basically unsolvable for more than a couple preferences?

Our PerfectTablePlan table planner can optimize seating for thousands of guests with thousands of preference constraints (between individuals and groups) on a standard desktop PC/Mac. It uses a genetic algorithm to quickly produce a 'good enough' (but not guaranteed to be optimal) solution. For seating plans it isn't really clear what the optimum is anyway. It is more important that than Bob sits next to Jill or not next to Jack or not next to an empty seats? Debatable.

[+] tunnuz|2 years ago|reply
Finding solutions that are not necessarily optimal but good in practice is often a tractable problem.
[+] rav|2 years ago|reply
Requirements for the Seating Chart Optimizer I made for planning my wedding party:

* 120 guests: 49 couples and 22 singles

* To be seated at 11-ish tables of 8, 10, 12 people each (by combining 4- and 6-person tables)

* Couples must be seated at the same table

* Plan only needs to say which guests sit at which tables - individual placement at the table will be decided just-in-time by the people putting the name cards down on the day

* It's hard for me to give labels to the guests to give you an idea of who can form a nice table and who can't. It's like, complicated, but I know a good table when I see one.

I made a spreadsheet-based app [1] where I first entered couples and singles into rows and then left blank rows as table separators. On the blank rows I put a "table capacity" number (8, 10 or 12), and on the guest rows I put a formula to compute "remaining table capacity", using conditional formatting to highlight tables where there are too many guests and tables where there are still seats available. By dragging rows around I can quickly rearrange the plan, and the spreadsheet doesn't do much except tell me where the plan is currently "broken" due to overfull tables.

If I compare my requirements with the Better Seater interface, what I'm missing is a way to keep couples together always - I don't want to make a new "group" name for each couple and I don't want to drag twice to move a couple. I haven't tried it with 120 guests, but I'm curious what sort of guestlist size you're aiming for.

[1] https://docs.google.com/spreadsheets/d/1ciib95VBI1YE9KFfPZAp...

[+] teejae|2 years ago|reply
Thanks for trying it out!

With the spreadsheet, you can just put couples as single guest (+1 = 2 party size). So you can put a whole family as (Person+3) or something. See the template.

The "couple" was really the wedding couple as example.

I'm optimizing for probably 100+ guests.

Hope that makes sense!

[+] chadash|2 years ago|reply
This is very cool! I built a tool similar to this, but for elementary school, classroom placements, and people always ask me if I can modify it for wedding seating!

One question/comment. As you already know, finding the absolute mathematically, optimal solution is hard, if not impossible in a reasonable amount of time, but people don’t care, they just want good enough. Found with classroom placements is that people can put in all the information, get an answer that is very close to optimal (mathematically), And then take one look at it, and know something is off, because you can’t actually model every aspect of the real world. so what I started doing giving good solutions that are pretty different from each other. Teachers can usually take a look for 30 seconds or less and decide that one of them is better than the other. Do you have the ability to do this on your tool? To randomly shuffle and optimize from there?

[+] teejae|2 years ago|reply
Great for schools!

If you click on the Optimize, it's already a shuffling. I could add shuffling from there, but it really won't affect optimization too much, as the underlying state is similar.

I can definitely add randomization for fun, but I'm not sure how many people will use it yet. Trying to keep buttons to a minimum at first.

Have a link to your tool?

[+] elicash|2 years ago|reply
Clever idea! I'm planning mine for April, but having trouble understanding how to use this tool. In your default data, Liam is listed as a couple but when you drag to a table it says "1/4". Should that be 2/4? How do I change number of tables and how many at each table? How do I create the "tags"?

The other thing not intuitive is that I was dragging people over to the tables instead of using the 'optimize' button. Which kinda defeats the point. But I figured that out eventually.

I will say, my family lacks drama so it's not so much I need to keep certain people away from each other as I just want to figure out who might want to talk the most to who.

[+] teejae|2 years ago|reply
Congrats elicash!

Sorry for the lack of docs. Try the "Import Guestlist" button. There's a template there as an example.

There's no UI right now for adjusting the guest list. You can only import from the template, saved as an Excel file.

If there's any features you need, please feel free to write either here or to my email.

[+] pricees|2 years ago|reply
I tried writing one of these about 10 years ago and failed miserably.

It was a generalized banquet hall/dinner/wedding seating chart.

The one that I was looking to write involved the following specs:

- friends and +1s sit together

- guests could sign up as a "group" (Tom's group) and sit together

- cluster people from the same area, or not even close to the same area

- some guests need to be prioritized as close to the front of the room/stage/guest(s)-of-honor

These were very difficult specs to satisfy and not getting it right was not an option since folks were paying $50 a plate with ~600 guests. The solution has always been to do it by hand.

[+] jmalmen|2 years ago|reply
Super cool! Built something similar a few years back to assign kids to boats on a sailing camp using Google's OR Tools. Don't recommend OR Tools, solver was super slow vs cplex but didn't find any good OS solver. I used two objectives in my objective function to ensure someone didn't get left out, probably need to do something similar for the prioritization in the roadmap?

https://github.com/jonasmalm/lakritsrot

[+] teejae|2 years ago|reply
Yea, I went with Optaplanner, which is definitely more "user friendly".

Prioritization of parties is on the roadmap, related to table ranking. Were you thinking of prioritization in a different manner?

How were you thinking about "someone getting left out"?

Thanks for the thoughts!

[+] hyperman1|2 years ago|reply
We had a few constraints based on table location:

Person notorious to get drunk was out of sight of the bar.

Person with medical problem close to the toilets.

Young nephew prone to pick candy from jar was diagonally seated to a candy jar, because the whole family loves to see al the strange ploys he came up with to 'randomly' pass the jar and take a candy. Yes we love him :-)

We also seated groups according to preferred language as a secondary constraint, so we had Dutch/French/German/English corners of the room.

[+] pugworthy|2 years ago|reply
Do you account for not putting right handed people to the right of left handed people? But then maybe you do, if you want to play match maker.

So many (imagined) social conditions here. Like A likes B, but B hates A. C and D should meet. E and F are a couple, but F and G broke up in college so it's awkward. H and I are divorced but still on good terms so it's OK. etc.

[+] hermitcrab|2 years ago|reply
>Do you account for not putting right handed people to the right of left handed people?

How do you do that on a circular table? Or are you suggesting some sort of handness aparatheid, with all the lefties on one table?

[+] teejae|2 years ago|reply
Yea for most of the social conditions, you can probably already use the "Separate/Link" feature.

Similar to hermitcrab's comment, I'm not sure about the right/left handed-ness. As I'm currently at table level, rather than seat level, I think it's something that can be figured out at the table level later.

Thanks for the feedback!

[+] lonesword|2 years ago|reply
Genuine question - why assign seats at all? In my country (weddings with 200+ people are the norm) people sit wherever they want. In the US, you wouldn't assign seating at a house party (right?), so why do that for a wedding, since a wedding is after all just a more expensive party?
[+] veddox|2 years ago|reply
To allow different circles of friends to sit together.

At the weddings I've been at (usually 100-150 guests), there would be families and relatives of the groom and bride, then their school friends, church friends, university friends, etc. - anything up to a dozen different groups of people who know each other but not the other guests. So a seating plan allows these friends to enjoy the party together. It doesn't prohibit them from getting to know the other guests, but offers a bit of a safe space with people the hosts know they will get along with.

(Additionally, in many cases, these groups of friends may not have seen each other for several years, e.g. since their school days, and appreciate the opportunity to catch up.)

[+] n4r9|2 years ago|reply
Weddings are usually somewhat formal. Formal events benefit from guidance to reassure guests. For example, a dress code helps you narrow down your choices if you have no idea what to wear. Similarly, a seating plan is great for someone that is there on their own and has no idea who they can sit next to.

The trick is to combine guidance with a relaxed atmosphere where it's fine to ignore it. Your dress code might say "black tie", but it's great if someone turns up in jeans because that's what makes them comfortable.

[+] couchand|2 years ago|reply
To add to what others have said, a big part for me is that you're asking folks to come. For the most part the social expectations of guests are pretty light: watch this quietly, light mingling and chatting, clap when it's time. Sitting down for a meal is unique in that guests must have a sustained social interaction with other guests.
[+] teejae|2 years ago|reply
As others have mentioned, this is very culturally dependent. And culture isn't necessarily country or region. Different types of people like different things. This particular app is designed for those times when you need more assignment, for whatever reason.

Hope that makes sense!

[+] hermitcrab|2 years ago|reply
This varies a lot from country-to-country[1], by 'social class' (for want of a better word) and event type.

[1]And even within countries. I believe it varies from state to state in the US.

[+] jerpint|2 years ago|reply
I’m getting married tomorrow, and doing tables is no easy feat. The list constantly evolves, people come/cancel last minute, and sometimes you can play on multiple relationships for seating (e.g. one couple might be family but also friends with other guests attending)
[+] teejae|2 years ago|reply
Congrats jerpint!

How many people are attending? Please feel free to use this tool if it happens to work for you. Would love to hear if you actually do use this.

But get some rest, and enjoy tomorrow!

[+] lja|2 years ago|reply
This looks so much like the bin packing problem [0] if you generalized it you could do a lot with it.

[0] https://en.wikipedia.org/wiki/Bin_packing_problem

[+] teejae|2 years ago|reply
Yep, I'm targeting an optimization engine at a more specific problem that might be useful to lots of consumers.
[+] huevosabio|2 years ago|reply
Love this. I got married in 2022 and I started a "friend and family graph" with the goal of optimizing layout.

But other stakeholders, cough cough in laws cough, quickly demanded direct allocation.

[+] teejae|2 years ago|reply
Haha! How many people attended? Would your in-laws have been able to use this type of tool?
[+] vekker|2 years ago|reply
Pitching in as yet another dev who also thought of implementing this :)

There were just too many constraints for it to be feasible as a web app in our case. Examples of some of those constraints that make it difficult:

* different table sizes, each with a min. and max. seats

* every table has a "head of table", which has to face the bridal couple

* we preferred couples/genders were mixed at every table, not sitting next to each other

* people who must/should/definitely shouldn't sit at the same table

* distances between people mattered: certain groups should be closer/further away from each other

* distances to the main table mattered

* the exact location of the table mattered (for example, older people should have more room/closer to the toilet/away from the dance floor)

It might seem like overengineering to some :) But in the end, it didn't take us too much time to make the layout: we just printed out all the names, and laid them out physically. Then we used that physical layout at the entrance to show people where they are seated. Most of the work was actually cutting out the names, finding them in the pile, physically placing them, ... So I guess if someone just made a beautiful drag-and-drop UI and let the user do the optimization work, and ignore implementing all the "smart stuff", that would work for many people. I guess you could even monetize it by allowing people to print out the layouts in a beautiful way (engraved in wood or whatever) and have it shipped.

(edit: damn it's annoying that HN doesn't support fully markdown for bullet point lists)

[+] teejae|2 years ago|reply
Thanks for the insights! At the moment, the app is targeted at "table level" rather than "seat level".

This already has different table sizes.

There's already a way to mark who should/not sit together

For location, I'm thinking of adding a draggable UI to put tables in relative places. But at first, I don't want to make this too complex for people to use.

Also, thinking of adding attributes to both groups and tables to get people to what they need (bathrooms, dance floor etc).

There's definitely already lots of apps/sites that let people do the pretty stuff, but they seem really manual at the moment.

Let me know if you have any more thoughts! Thanks for looking!