We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

How Compose uses Rails to Scale Work, Now Open-Sourced

00:00

Formal Metadata

Title
How Compose uses Rails to Scale Work, Now Open-Sourced
Title of Series
Part Number
46
Number of Parts
89
Author
License
CC Attribution - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Compose is committed to making remote work work. Our biggest hurdle is communication and teamwork. When we joined forces with IBM, we added a new issue - how to scale. So, our devs built an app we’re open-sourcing called Fizz. Built on Rails, Fizz helps us empower our team to do great work, feel like family, and operate happily and efficiently as an international, remote, self-managing organization. We work transparently, commit to open-source, wear sweatpants, and genuinely enjoy each other and we’re committed to keeping it that way. We harnessed the power of Rails to make that happen.
81
DataflowTelecommunicationOnline helpComputer animation
Computing platformDatabaseOpen sourceMiniDiscFlow separationComputer animation
Mobile appSelf-organizationQuicksortCache (computing)Core dumpProjective planeSlide ruleGoodness of fit1 (number)Online helpTelecommunicationRight angleBitMikroblogData managementLie groupMultiplication signMereologyLine (geometry)Office suiteDisk read-and-write headSoftware bugChecklistSoftware testingControl flowSharewareInteractive televisionData storage deviceDot productProcess (computing)Point (geometry)Existential quantificationGroup actionDemosceneDecision theoryOperator (mathematics)PlanningRobotFlow separationElectronic mailing listCodeKnotType theorySingle-precision floating-point formatStress (mechanics)Source codePower (physics)Exception handlingData structureMultilaterationRemote procedure callCovering spaceAnalogyRule of inferenceWordTwitterCASE <Informatik>Integrated development environmentPopulation densityDifferent (Kate Ryan album)Event horizonComputer animation
InformationContext awarenessMultiplication signGraph (mathematics)NumberCross-correlationIntegrated development environmentGroup actionOperator (mathematics)QuicksortMobile appView (database)Electronic mailing listSlide ruleProjective planeFunctional (mathematics)Connected spaceMereologyTable (information)Function (mathematics)Query languageFrequencySymbol tableHash functionBitExpressionCodeControl flowUser profileComputer fileSoftware developerSinc functionOpen sourceProduct (business)Repository (publishing)WeightProfil (magazine)SpacetimeSequenceVariable (mathematics)Token ringSource codeSoftware bugDatabaseVirtual machinePhysical lawProcess (computing)Endliche ModelltheorieBasis <Mathematik>Daylight saving timeSoftware repositoryGame controllerVulnerability (computing)Arithmetic meanPhysical systemWater vaporOutlierEstimatorObservational studyRight angleResultantFile viewerLink (knot theory)Diagram
DatabaseXMLLecture/Conference
Computer animation
Transcript: English(auto-generated)
The talk today is on scaling Compose with Fizz. Fizz is a tool that we built internally to kind of help us with communication.
So, I'm JP, I'm with Compose. If you don't know who we are, hopefully you will after this talk. We're a fully managed platform for open source databases. So we have several offerings today. Mongo, Elasticsearch, Redis, Postgres, Redis, Rethink, etcd, RabbitMQ, and Disque.
And this is a sponsored talk, obviously. So, I did want to throw in a marketing slide for my friend Tom. If you go to Compose.io slash RailsConf, we do a 60-day free trial right now. And we also have kind of a campaign going on if you try out Redis, we'll send you a special edition Redis t-shirt.
So Compose in 2015, so we're, the company started in 2010. In 2015, we had about 20 employees, I think, and we're fully remote. We have a pseudo office in Birmingham where a couple people like to congregate. But for the most part, we're a remote team,
and we span the United States and several other countries. So, around this time last year, we were acquired by IBM, which, that was my reaction when this happened. But since then, we've continued to grow. And so the green dots are all of our new employees since the acquisition.
And what's cool is we've just continued to kind of spread. We're even more remote now than before. And I think we're actually doing a pretty good job of making it feel like we're one big team all in the same place. Just quick, right now, is anyone else in here on a remote team? Or has pretty much everyone in office?
Everyone? Two, a couple people in remote? All right, cool, that's good to know. So, a breakdown of our organization. It's primarily engineering. And then next is support and ops. And then their other three groups are pretty much all the same. And it is not a typo. We don't have salespeople then or now. So, that's always a fun thing.
And our organization structure's a little different as well. We're pretty much all empowered to make our own decisions. We sort of choose what you work on and who you work with and how you go about doing it. And so, in practice, this is kind of what this looks like. And I'll kind of talk about this as part of the tool. But it's always a fun thing to see.
All these lines going between each person represents things they've worked on together. And so, you don't really have a cool way to see that if you're not all in the same office where you really kind of get that day-to-day interaction. So, we really try to do it with the tool. So, a breakdown of the app.
Obviously, it's a Rails app. And the primary store is Postgres, and we use Redis for some Slack commands as well as sessions. And then we're actually trying out Discue for ActiveJob. So, it's sort of the backing store for that. And so, kind of have a checklist. So, if you kind of break it down,
one and two are sort of gonna be the core of what Fizz is. And then I'll talk a little bit about what's not a project because we don't do project management, which is always fun. And then four to seven just kind of help you with your day-to-day. Kind of help you get insight into what others are seeing and what they're doing.
So, the first thing is what's everyone working on? We get this a lot. Even though we have this tool, people still want to know what others are doing. And they want to know what others are doing not just within their own group of engineering or marketing. They want to know what's going on around the rest of the company. So, the first concept we have is called Posts. And the tool tries to help you remember people's names.
Even though there's only 40 of us, it's still not easy to remember all the names associated with each person. So, as you're typing out a post, we do give some help there. And here's just a couple of example posts. And go into more detail about those in a little bit. So, one I had and then one Matt had earlier.
And then, they're not all serious either. So, the other thing is there are things that happen throughout the day that you would normally share in a work environment. Whether it was you had to deal with something with the wife or you had to deal with something with the house. In this case, Kyle had to deal with IBM.
And so, he felt that that was worthy enough of a post. And so, here's kind of our general rules for posting. Emoji, strongly encouraged. You should mention other people. I shamed Michelle earlier today for not always including other people in her posts. But the idea is you want to be working on stuff with other people. And the only way that someone's gonna know that
is if you mention them in the post. And then, we feel like we've made hashtags cool again. Lisa, who's in our marketing and analytics group loves to use the hashtags. And it's kind of like GitHub markdown. Most of it's pretty much supported. You can do lists and code markdown.
And we want to be posting often. Ideally, you'd post once or twice a day, maybe when you get going in the morning, kind of talk about who you're working on something with or what you're doing. And then, at the end of the day, kind of what you have accomplished. If you go more than like a day or two, I think two days, except for the weekend, the Fizz bot will heckle you in the general channel of Slack.
So, you will be shamed if you do not post. And the other thing that we do is we kind of like some interaction in the tool. It's not used that much today. But I think as we continue to grow as a team, it's gonna be something that we use a lot more is the threadable posts. So, you can comment on the main post or you can comment on someone's comment. And you can also like a post,
which is something that we felt like is pretty good. And I have an empty slide in here. I don't really know what happened. So, that's kind of the general concept of posts. Everything's really built around that. It's simple, it's to the point, and it really kind of highlights what you're doing. But the other thing is people often do grunt work
or they do work behind the scenes that no one ever knows about, except for maybe one or two people. So, we want the ability to make that known and make it easily seen. So, we have a concept called praises. And it's just in the same post form. You just prepend it with slash praise.
And it basically gives credit to that person. So, a lot of times what I see happen is people are like head down working on something and they actually forget to post for a couple days. But you may notice that and so a lot of times people try to take the time to praise that person. We also praise people for going on vacation and actually taking time away and being on vacation
because the hecklebot doesn't really know what vacation is today. It's one of those things we're hoping to get in soon. And you're not supposed to be able to praise yourself, but there's probably a bug in there now that somebody did earlier today just to test it. So, here's just example praises. These are also work related a lot of times,
but not always work related. So, they have a slightly different styling. And the biggest thing is you want to praise at least one person. And the next thing is a project. So, I don't wanna, is anyone a project manager?
Thank goodness. Okay, so the idea with project managers is a lot of times they're kind of the keepers of the communication, right? So, you're working on a project. They're the ones doing the status updates. They're the ones communicating whatever it is you're working on with other people. We don't have that because we don't really do typical projects because we don't have managers.
Teams self-organize around a single goal. A lot of times that's whether it's a feature release or even a bug fix. And even then when you're kind of gathering around a central thing, we don't have leads. There's not someone that's like in charge of the project because it's not a project. We also don't have due dates,
but that doesn't necessarily mean we don't plan for things. So, what's kind of cool with the Fizz is as you're working on something, it's a lot of times you can really see when something's almost finished because people are basically saying, you know, about to wrap this up. And the biggest reason we don't know is because we don't have roadmaps. We kind of every day almost,
we just really evaluate what's the most important thing for, to be working on right now, whether it's for the customers or for internal support. And we really try to base all of our work off of what's most important right now. And that doesn't actually mean that we don't,
we don't do email with this, but that doesn't mean there's no communication. We have a special tag called Noteworthy that DJ, he's one of our writers, he basically takes all the posts that have used that hashtag in the last couple days and he'll generate an email for everybody. So, what we call these are actually milestones.
And they're very simple and short and to the point. And you don't really like complete a milestone. You can join a milestone at any time and when you're done doing whatever the work is, you just move on to it. Move on to something else. You don't do more than one thing at a time. So milestones, you can't really be a part of two of them.
But you can also, you can work on another project or another milestone without actually joining it. So it doesn't prevent you from helping others out and you can kind of reference that in the post with the caret symbol. So if you did a post with caret32, it would actually be attached to that actual milestone.
And you see that the goal is always very simple and straightforward and something that should be accomplished within a week. Very few milestones will span more than a week. We don't really, I don't know of many that have gone that more than two weeks really. So I've mentioned hashtags a couple of times.
And what we really use it for is a way to give context to posts. So we are able to basically take a post with one or more hashtags and people and aggregate that information to give context around whether it's a central function or a central group. So we feel like we've made the hashtag a thing that people use in the workplace and it's not gonna get shamed for.
So we use them a lot as a shocker. Marketing loves to use hashtags. No big surprise there. But every group kinda uses it. And so what this shows is basically all the users that have used this hashtag within the last several days. And here's some example ones. Lisa is probably the most frequent hashtagger in her posts.
So it's always fun to show hers. And then on the top hashtags, that's on the, each person has a profile. And so you can kinda go see what are the things they spend the majority of their time on. So this is mine. And so it's mostly engineering-related stuff. And then we also have it hooked into Slack
where if you use, with certain channels, you can set it up to where if somebody includes a hashtag like marketing, it'll hit the marketing channel. But every post, no matter what it is, will hit our general channel. And we feel that's important because a lot of times, you know, you wanna read back through when you're out. And we also have built some new stuff
where you can basically be gone for a week or a day and you can easily kinda get a feed of what all's happened. So the last thing, you kinda saw it earlier, is connections. So one thing we don't have is obviously really organized groups. We have general engineering, we have general marketing, and we don't have like product development.
We don't have, you know, our UI group even if still, we just, you know, we're all engineering. And so without giving context to the work that we're all doing, there's no way to see like something I'm doing is actually applies to another group. And so that's where connections come in. And so I thought it'd be kinda fun to do a little,
show off some part of the app. We create what we call edges. And so we use a common table expression in Postgres. And so we can do some recursive queries. So what we're doing in this one is we're taking all the mentions and the hashtags on posts and we're kinda cross-correlating them with one another.
And then we group them. And then we use that in this select query where we create weights. So it's basically saying these two users have done something together within some certain frequency and it kinda creates a score. And then we kinda throw them in a hash and return the nodes, which is just each individual person.
And the edges as well. So here's kinda what the edge would look like. You'd have the ID, you'd have the two users and then the weight. And then the other bit is the nodes, which is just each individual person. And it kinda gives us a really fun graph of the company as a whole.
And so to us, this is what like a healthy working environment looks like. You don't see a lot of siloed people. You don't see one particular person doing a lot more than others. You don't see, you know, it's basically you don't wanna see any outliers. And we feel like that's what this shows. And it really, no matter what the view is,
you know, you don't really see it. This one kinda breaks it down so you can see each individual person a lot better. But even the links, you know, it's hard to see them, I think it's the slides. But we feel like, so one cool thing is Banks, who's kind of in the middle there, he's been around for, I think, a week.
And he's already got connections to six or seven people in the company. So it's a really cool way to see if you've got someone new, are they getting involved? Are they kinda diving in? Are they working with other people? And we feel like that helps us a lot. So the next thing is Slack. It's kind of our lifeline within the company.
You know, when you log on in the morning, you know, you kinda hop on Slack and sort of see what's been going on right now. You may wanna read back through. But all of our posts, you know, they hit general. And these are just some examples of things that can happen throughout the day. But a big thing that kinda people talk about is, you know, fear of missing out.
If you're on vacation, or if you just wanna take the day off, and you kinda wanna know what's happened, you know, what have people posted about, you can go to the app and scroll back through it. But what I've found is that I spend the majority of my day, like Slack is there in front of me. I'm not kinda jumping into other tools a lot.
And so if you just, we have special slash commands. So you can do slash day, or daily summary, or week, or weekly summary, and it'll just dump in, you know, whatever that range is for you. And then so you can easily kinda read back through it, and since it's a slash command, you can delete it. So it's not gonna like clutter up your main channel or wherever you post that.
So the last thing is GitHub. So this is something I added for engineering, and specifically almost kinda selfishly for myself, because I'll be working on something, and I might go a day without posting. And so as I'm finally getting down to posting, I'm trying to think back through like, what have I done? Like, you know, I know I've worked on more than one repo, or I've spent a lot of time
reviewing someone's pull request. You know, these are all activities that, you know, we want people to spend time on. You know, pull requests are vital for us. It's kind of how we do all of our, it's how all code, you know, gets deployed, and issues as well. We have a central repository where support will just file issues with information from customers
about bugs, and then so that's work that we can then correlate from support, and then engineering will get involved, and anyone will get involved with that GitHub issue. And so you wanna be able to kind of take all of this action that's happening in another tool, and be able to kind of use it in your posts.
And so here's an example of what happens in Slack. You can just run slash fizz activity, and it'll basically dump out all of your activity for the last week, I believe, and it breaks it down, it kind of groups it within each specific thing with a number, and so what we do here is when you run that command,
the trick is, you know, you run it, and you get some output in Slack, but there's, you know, you need to be able to correlate that back to an actual post, and so when I was working with one of the designers, he originally, the numbers were gonna correlate with the actual post ID, and he felt like that, it made more sense to just give a straight numbered list. So what we do when we, you know, generate this is,
we have a user, and then we have, you know, whatever the number is in the sequence, and then we just create, we dump a list in Redis, and so when you use it, we can then pull it back out and say, all right, they gave us 64 and 65, what post ID does that really correlate to? So when you do a post in Slack, you can just say, you know, slash phys, what you did,
and at the end, you just throw activity, colon, and then whatever, you know, however many numbers you are on there, and you'll see that those correlate to 60, I don't think I had it there, so it'd be 64 and 65 in the list there, and so what happens in the post, the actual post, we tried to kind of mimic it after, you know, if you go to your user profile in GitHub, and it'll show you a little breakdown
of what all you've done. We try to model it after that, and be able to actually link to the activity, so if someone posts something, and you see some commits to a project that you're interested in, or you work on yourself, you can then go and take a look at it. So the other things, that's really it. Other items we're hoping to add soon,
we use Help Scout for our ticketing system, and Trello, our ops team likes to use that, and there's lots of other things that we use. We don't really make people only use one tool. So the goal is for us to open source this pretty soon here. When we first started working on it, we were pretty lazy and would hard code things that really should be environment variables,
like our Slack token, or our Slack channels, or anything like that. So we're trying to clean up the code base a little bit to get it out there, because we think, you know, it might be of interest to other people, and it does use, you know, more than one database, but we're a company who can help you with that. So that's all my questions, or that's all my talks. Are there any, anyone have any questions or comments?
All right, well thanks for coming. You know, I'll be around afterwards, and you know, we got a booth if you want to come by and talk database, or talk Fizz.