This is a web app for facilitating S'Ups (quick meetings) between the employees of a company.
A Standup is a regular meeting between the members of a specialized team to discuss their team's goals, and priorities for achieving those goals. A S'Up (short for standup) is instead an informal and interdisciplinary standup, where members discuss what's up with their own work, or just in general.
S'Ups help form connections between colleagues that normally aren't nearby or working with each other, creating a lattice of connections throughout a whole un-fragmented company.
The interdisciplinary nature of the meetings often leads to creative conversations sparking ideas for new directions in research and product development. Remote workers especially appreciate S'up since it gives them a chance to have informal interactions with otherwise inaccessible members of the company, strengthening the sense of community.
This app passively generates fresh triads of company members to S'up every week. It does all the scheduling to make sure every member has a meeting with a coworker they are unlikely to have had a chance to chat casually with lately, and communicates this to everyone involved via email.
Here is a graph of a sample company's employees connected together via their work team co-memberships. The graph has clear hubs, and the number of bonds per employee (node) is unequal throughout.
Here is a graph of a sample company's employees connected together via their S'Up co-memberships after 6 weeks. The graph is distributed and clustering is starting to disappear. You can see employees who signed up for S'Up later (bottom right corner) have yet to be completely subsumed by the plane of spaghetti.
S'up contains a homepage where new users can sign up, edit their name/email and group memberships, and also disable themselves from being included in S'ups in the case of a busy week.
S'up sends emails on Sunday mornings with information about scheduled S'ups:
and then sends a followup email the Saturday after the work week to confirm that the members have met (which will prevent them from meeting again until they have met with everyone else in the company), and asks for feedback.
S'ups follow a few rules:
- You will never be in a S'up with a member of one of your teams.
- You will not meet with someone in the same S'up until you have met with everyone else possible on your team.
- Clone/Fork this repo
- Deploy with environment variables
- Add cron tasks
- Add teams
- Tell members of your organization to sign up
- Automatically receive emails upon signup, Sunday emails for S'ups in the coming week, Saturday emails for confirming meetings in past weeks
This is a rails app that can easily be deployed with heroku, so the instructions there can be followed. The only requirement before deploying is to set some environment variables for your own sup app.
This app uses the figaro gem, so it is recommended that you place all your environment variables in a application.yml
file in the config
directory of the app. The required environment variables are:
COMPANY_NAME: "Initech"
COMPANY_NAME_POSSESSIVE: "Initech's"
PRODUCTION_DOMAIN: "guarded-stream-9823.herokuapp.com"
SUP_USER_NAME: "username"
SUP_PASSWORD_HASH: "..."
SMTP_USER_NAME: "ilyakava@initech.com"
SMTP_PASSWORD: "lumberghrulz"
SMTP_DOMAIN: "guarded-stream-9823.herokuapp.com
COMPANY_NAME
andCOMPANY_NAME_POSSESSIVE
are used in email copy and on the website to refer to your company.PRODUCTION_DOMAIN
should be the web address (withouthttp
orwww
) for where you are hosting your app.SMTP_USER_NAME
andSMTP_PASSWORD
are your email address user name and password. These are used by the app to automatically send emails from the given address.SMTP_DOMAIN
can be the same asPRODUCTION_DOMAIN
You should put the app under SSL and restrict its access with a username/password.
SUP_USER_NAME
: the username for a shared loginSUP_PASSWORD_HASH
: generate as follows:
require 'bcrypt'
BCrypt::Password.create('password')
=> "$2a$10$yKF3BYd1sbZNvandxGJg4.EsQcYd41UP1FJrs6PwrcA6gJ3rQIA8u"
An optional but recommended environment variable is:
COMPANY_MEMBER_EMAIL_REGEXP: "@initech|@inite\\.ch"
- This is a regular expression that will be used to accept or reject people signing up for your app based on their email address. This one will only allow members to join with email addresses like
milton@initech.com
andpeter@inite.ch
. Note how escaping the literal period\\.
takes two backslashes if you are using figaro (because of yml file parsing). Not providing this environment variable will lead to all email addresses being valid.
Another optional environment variable is:
ADMIN_EMAIL: "bill@initech.com"
This address will get weekly email reports of which meetings are scheduled, and what comments people are leaving when confirming their S'up.
Once you've deployed to heroku, follow the instructions about heroku scheduler only in the "Installing the add-on" and "Scheduling jobs" sections. Then, after selecting your app in the heroku dashboard, and clicking on "Heroku Scheduler," and add the following three jobs:
Task | Dyno Size | Frequency | Last Run | Next Run |
---|---|---|---|---|
rake schedule_meetings |
1X | Daily | never | 13:00 UTC |
rake trigger_weekly_email |
1X | Daily | never | 15:00 UTC |
rake trigger_followup_email |
1X | Daily | never | 15:00 UTC |
rake send_weekly_admin_email |
1X | Daily | never | 16:00 UTC |
Although the least frequent running choice is "Daily" on heroku, these jobs will actually be run on Friday, Sunday, Saturday, and Sunday respectively (for info on why: look in ./lib/tasks/scheduler.rake
).
With the configuration in the above table: S'ups are scheduled 8am EST on Friday, email invitations to S'ups are sent 10am EST on Sundays, S'up followups are sent 10am EST on Saturday, and the admin email is sent 11am on Sunday. This app will work fine without followup emails scheduled, but by responding to followup emails accurately, the quality of S'up matchings will be higher. The first two tasks are the bare minimum for the app to function.
Following the commented example in the seeds.rb
file in the root directory, write some ruby code that will generate the teams at your company. Then run heroku run db:seed
.
Visit your app (heroku open
), and sign members of your company up, or link people to the site. Members will need to enter their name and email, and choose 1-5 work teams that they are a part of. These should be teams in which they are already a part of some formal standup, since no S'ups between members of the same work-team will be allowed.
Since each S'up contains 3 people, remember that unless your company has an exact multiple of 3 employees signed up, not everyone will be a part of a S'up each week. However, it is very unlikely for anyone to be left out of S'up two weeks in a row.
If things around the office get a bit hectic, any member can disable their participation in S'up via their member panel in the app.
- Click here on this: badge to check what needs to be done!
- Click the 'Issues' button above on the right to log a bug or problem.
Run rake fspec
to exclude the slow specs that check the convergence of the pairing algorithm, and rake
to run all tests (several minutes).
(c) Artsy, 2015 + Ilya Kavalerov
MIT