Open Source Maintainer Interviews: Sidekiq and Faktory (Part 2)
See all speakers
See all 4 speakers

Summarized using AI

Open Source Maintainer Interviews: Sidekiq and Faktory (Part 2)

Aaron Patterson, Mike Perham, Jonan Scheffler, and Rachael Wright-Munn β€’ February 25, 2021 β€’ online β€’ Talk

In this segment of the Ruby Galaxy interviews, Aaron Patterson and Mike Perham discuss their experiences and insights as open source maintainers, particularly focusing on their notable projects: Sidekiq and Faktory. The conversation is rich with perspectives on open source sustainability, maintaining community engagement, and effective business models. Key points discussed include:

  • Background on the Speakers: Aaron Patterson is a core team member of Ruby and Rails at Shopify, and Mike Perham is the author of Sidekiq and founder of Contributed Systems. Both speak from extensive experience in the Ruby community.
  • Open Source Contributions: They share their journeys into open source, with Aaron starting back in 2000. Mike mentions a project in creating a Java version of Napster, highlighting how open source allows for learning and community involvement.
  • Sidekiq Overview: Sidekiq is presented as a popular framework for background jobs in the Ruby ecosystem, highly praised for its efficiency compared to competitors. The speakers dive into technical details, emphasizing their experience with scaling and performance.
  • Sustainability Models: Mike explains his approach of creating a business around open source without relying on sponsorship models common in the ecosystem. He articulates the importance of businesses paying for the tools they utilize.
  • Feedback from Users: They discuss the vital role of user feedback in shaping product development. Support queries serve not simply as issues to resolve but as insights into the project’s needs.
  • Licensing Decisions: The speakers explain the differences between various licenses (such as MIT, GPL, and Apache), detailing how their choices impact usability and community engagement.
  • Best Practices for Open Source Maintainers: They advise on crucial aspects such as maintaining a proper README, having a changelog, effective testing, and documenting the development and release processes to foster inclusivity and encourage contributions.
  • Community Building: The necessity of creating an inviting environment for new contributors is highlighted, including maintaining a code of conduct to ensure respectful communication.

In conclusion, Aaron and Mike underscore the importance of sustaining open source projects through valuable community interactions and aligning business interests with user needs. Their discussion illuminates the balancing act of managing software projects while nurturing an inclusive open source culture.

Open Source Maintainer Interviews: Sidekiq and Faktory (Part 2)
Aaron Patterson, Mike Perham, Jonan Scheffler, and Rachael Wright-Munn β€’ February 25, 2021 β€’ online β€’ Talk

For version 0.2 of Ruby Galaxy, we interviewed Open Source Maintainers ✨

Aaron Patterson (@tenderlove) is on the Ruby and Rails core team. He is currently working over at Shopify. He also makes a lot of cheese.

Mike Perham (@getajobmike) is the author of Sidkiq and Faktory. He is also the founder of Contributed Systems and he is definitely not a cat.

Hosted by Jonan Scheffler (@thejonanshow) and Rachael Wright-Munn(@ChaelCodes) πŸ›Έ

This is part 2 of a 3 part video series that was originally streamed on our Twitch channel. You can find our releases every last Thursday of the month (https://www.twitch.tv/therubygalaxy).

Interested in talking? Take a look at our CFP at rubygalaxy.io πŸš€
We are always interested in talks of all sorts, whether you are an experienced presenter, or are looking for a great place to give your first talk ever.

Follow us on Twitter @therubygalaxy and visit our website at https://rubygalaxy.io/ πŸ‘½

Soundtrack for the game DojoKratos done with Game Boy. Available as CC-BY. Found on the Free Music Archive under Boss Splash by sawsquarenoise.

Background Space Video by Space Space from Pexels

Ruby Galaxy v0.2

00:00:06.000 there's a cat all right i'm so sorry continue with your introduction please
00:00:11.599 i i i when i'm not a cat i am an open source project lead open source
00:00:18.400 maintainer uh small business owner um and and all about uh
00:00:27.359 aroused about i guess um no i i so i'm i specialize in background jobs
00:00:34.160 so uh obviously in the ruby on rails community background jobs is a pretty common
00:00:40.320 application pattern for scaling your your computing right you
00:00:45.680 you create background jobs for thousands if not millions of things that
00:00:51.280 you want to do and you can throw them into queues and have dozens of machines pulling these jobs
00:00:57.760 and doing all your computing your business computing as necessary and so sidekick is uh the most popular
00:01:05.360 library or framework for doing that and i not only have an open source free version but i also have commercial
00:01:12.159 versions on top of that which provide additional features commercial support
00:01:17.840 commercial license yada yada yada so that has scaled
00:01:24.080 quite well and it keeps me going today i started sidekick nine years ago and i'm still
00:01:31.360 working on it every day you work on sidekick every single day
00:01:36.960 uh i certainly do the support aspect every single day because people email me every single day
00:01:43.119 um i also have another project called factory which is background jobs uh for any
00:01:48.640 language and so i oftentimes will be working on factory also so this is
00:01:55.119 either factory or sidekick you can see here mike's page on github this is github.com
00:02:01.840 sidekick um that's not your actual page
00:02:07.200 is what is that what is the actual sidekick org is it under contribution what is it just go to sidekick.org the website i'm
00:02:13.760 going to go to sidekick.org and uh that has links to the github repo
00:02:20.480 it has links to the faq to talk about the project
00:02:25.599 and uh links to the wiki and all the documentation they're in that sort of thing where's the kicking
00:02:31.680 where's your karate kicker oh was it on the last page the logo i want the logo in the readme mic i want to make a pr
00:02:38.480 yeah you're right jonah that is obviously an oversight which we must correct immediately number one
00:02:44.720 priority you could ignore all the rest of your open issues and
00:02:50.239 hey i i much prefer to deal with the easy stuff than the hard stuff so aaron do you do you
00:02:58.239 do you lead the development on sidekick or are you more of a background worker
00:03:03.920 good question ron um i would say that uh i can do both
00:03:10.720 you can either you can either put me in the background with the ampersand operator or i can work in the
00:03:17.120 foreground until i die we have a question from the chat for you
00:03:23.120 mike oh sure at what point should a team upgrade to pro from
00:03:28.319 unpaid sidekick um i mean once you have enough revenue
00:03:36.879 to where it's a it's a comfortable expense to cover um i look at sidekick pro
00:03:43.599 what i think about it is it's 80 bucks a month and if you have a developer if you're paying someone uh
00:03:50.319 an engineer you're you're undoubtedly paying them eight thousand dollars or more a month
00:03:57.519 so the cost of sidekick pro is one percent of an engineer at the worst
00:04:03.280 um and to me uh the support and the extra features do unlock a bit of productivity in in engineers so
00:04:11.760 if you're leaning on background jobs heavily and things like batches would be a
00:04:18.000 really useful feature to have then i think it's uh and also having the
00:04:24.080 support where you can email me and that sort of thing i think it i think it becomes a pretty good value proposition at that point
00:04:31.040 um the but the free versions out there for for hobbyists and for people who are just starting out to use
00:04:36.479 uh and and i tell people use that as long as you want you know there's there's no you know i'm not demanding anybody
00:04:42.479 upgrade uh if you want to use the open source version go for it i i've i know of customers
00:04:47.520 who've used sidekiq for many many years and then they finally upgrade to pro and they write to me and say we've been using sidekick for five
00:04:53.759 or six years and we're only now upgrading the pro almost almost apologetic but to me
00:04:58.800 hey welcome aboard i'm glad to have you it doesn't matter if it took you five years or five months to get here um you know i'm happy to have happy to
00:05:05.840 have your support i was checking both of your profiles for the sponsor section i note that neither of you have set up
00:05:12.479 github sponsors yeah i don't i'm not a big fan of the sponsorship model um i know
00:05:19.039 some people like it um but i i don't i'm not looking for like a tip jar kind of approach
00:05:24.400 to me i sell tools to businesses i i don't want individual developers who are
00:05:30.240 who are working on their own or something to pay me five bucks a month that's just not a path i want to go down
00:05:37.440 so to me use the free version as long as you want i want the money from the businesses that are actually
00:05:43.919 using my tool to make a decent amount of money erin how can i get a pro license for
00:05:50.840 ruby you gotta hire me
00:05:58.720 you are the pro license yeah well done shopify then thank you to
00:06:05.360 shopify and i want to actually shout out to github your former player the website we are on
00:06:11.120 for sponsoring ruby galaxy and to forum for sponsoring ruby galaxy and to new relic
00:06:16.800 for helping to make this happen we appreciate all of you and i i can't tell you
00:06:23.680 how valuable your support in making this happen has been to us so we'll do a better job next time when
00:06:29.759 i'm a little more prepared with the stream i'll even put your logos just right there on the page for you
00:06:35.120 that's i think the bare minimum level of sponsor support that should be required for a circumstance such as this
00:06:43.680 can i just really quickly i wanted to ask each of you how you got started with open source because i think
00:06:49.360 in the beginning we kind of asked like what should a person's approach to open sources but that journey is going to be different i'm interested in hearing
00:06:56.080 about what each of yours were um aaron first uh my very first open source contribution was in i think
00:07:04.240 the year 2000 um basically just working on some library like
00:07:10.880 this is kind of awkward but you know the time was the year 2000 we stored i worked at a website where we
00:07:16.960 stored we had a or i worked for a company that had a website that had a listing of people and for some reason
00:07:22.880 we stored everybody's names in uppercase i'll tell you the reason
00:07:28.400 was at the time oracle's search was faster on text that was only uppercase so
00:07:36.000 we i know i know
00:07:41.039 so of course nobody wanted to see their names in all uppercase on the website so what we had to do is we had a pearl
00:07:47.919 program that would like fix the case of their names when it was displayed on the when it was displayed
00:07:54.240 on the website and and obviously that did not work all the time so we used an open source
00:08:01.440 library for doing that so i was contributing patches to that to make it to improve that the way i got started in
00:08:06.800 ruby though was like i was a java developer and i wanted to go back to pro
00:08:12.000 programming so i learned about ruby and in order to learn ruby better i just
00:08:17.599 what i did is i just started taking pearl libraries and porting them over into ruby libraries just as practice
00:08:23.840 essentially and then people started using those
00:08:29.520 and then i had this so that's what i did
00:08:37.360 i think that like uh so i have two or three
00:08:44.000 stories about starting with open source because i i did open source one year and then four years later i did
00:08:49.360 another open source thing that was completely different and then four years later i did something completely different from that
00:08:55.200 um i'll tell you when sourceforge first came out does anybody remember
00:09:00.800 sourceforge came out in about i want to say 99 but i wanted an excuse to use
00:09:08.160 sourceforge so um there was this thing that was really hot at the time called napster
00:09:13.360 and you could use it to uh to download any music you wanted right to pirate music
00:09:18.800 and i thought wow that sounds interesting and and a guy um i forget his name
00:09:25.839 he had documented the protocol the week before and so i said i'm going to make a version of mapster in java
00:09:32.880 that could be run on any platform so like linux or or mac os or windows
00:09:40.240 and so i started writing a open source version of napster in java
00:09:47.440 and so i did that for like six months and that got allowed me to get to know
00:09:54.160 sourceforge i got to know open source development and the quirks therein and uh
00:10:00.959 and uh that was that i mean nothing really ever
00:10:06.000 came of it i i spent six months or a year building it and people used it but
00:10:11.120 it kind of went the way of napster after a year or two i think where i really oh sorry go ahead
00:10:17.760 where i really got involved with open source was when i uh was working at a company and we needed to change
00:10:23.920 maven the java build system to to work with our source control system
00:10:29.200 so i had to write a source control adapter for maven to work with our source
00:10:35.519 control system and that got me on the maven core team and then i got to experience a patch the
00:10:43.440 apache foundation and dealing with project maintenance and
00:10:48.880 and that sort of stuff that sounds way more professional than me
00:10:54.560 it was it was way more professional than you aaron i must admit there was no there was no silly chef
00:11:01.040 hats there was no um puns i think puns were expressly forbidden
00:11:06.320 by the uh lice the maven license um so so yeah in fact i did it while i was
00:11:12.959 at ibm so it was very super tight i've been helpfully pulling up websites in the
00:11:18.320 background here including the github slash maven um one which is not in fact the maven project
00:11:24.240 there is someone who has to handle jonathan have you not realized that putting github slash whatever
00:11:30.240 never gets you to whatever the thing is that doesn't work it's not successful i would recommend against it
00:11:35.920 napster.com is presently on the screen they're totally still a thing apparently so is sourceforge
00:11:42.720 wow sf.net baby yeah yeah um but yeah both of those were before my
00:11:49.120 ruby my ruby days though so you're in ruby now and you work on
00:11:55.920 this sidekick thing and i think you gave a brief introduction of what this was at the beginning but i know we've had some
00:12:01.200 people coming in and out i wanted to just walk back through what sidekick is for
00:12:06.399 people this does background jobs so it's like uh rescue
00:12:12.480 it's basically the same as rescue but it has a different name right
00:12:17.680 kind of yeah i mean if you think about um how do you how do you kick off some work um
00:12:24.079 you know people build websites and when you go to a url that will often hit a server and it'll
00:12:29.680 do some work to render an html page uh you know but what if you want to do something else what if you want to send
00:12:35.920 10 000 emails to a to a customer list how do you kick that off um do you go to
00:12:42.800 a web page and press a button what if you want to send it you know
00:12:49.279 every day you have to go to the website manually every day to kick that off well background jobs allow you to create
00:12:57.440 uh sort of uh units of work for uh
00:13:03.839 for for any sort of computation and sidekiq is a framework for doing that
00:13:08.880 uh in ruby and in rails i was teasing a little bit because i
00:13:14.959 feel like sidekick has become a bit the de facto standard in ruby
00:13:20.399 for background jobs i used rescue and even a bit of delayed job when i first started in ruby
00:13:26.000 but we're looking here now at the comparison graph for speed and it tells me that rescue is 240 jobs
00:13:32.720 a second and sidekick is 7 100 jobs a second so if i want to send 7 100 emails
00:13:40.880 every second then i should be using sidekick well it's that jonah you know there are
00:13:46.399 lies damn lies and statistics right and also benchmarks um those are
00:13:51.440 those are hello world jobs right so that sort of measures the overhead of a background job system
00:13:57.519 and and i have expressly tuned sidekick to be as fast as possible and have as little overhead as possible
00:14:04.000 so um it it it is for sure that there is a lot more overhead in the other systems
00:14:10.399 but you know when i started sidekick my one of my goals was to make sidekick one of the big three
00:14:16.800 i wanted it to be mentioned like rescue delay job and sidekick you know that that was all that was
00:14:23.040 important that it there not just be two but three things that people always mentioned and and you know
00:14:30.240 to your point now it's kind of like sidekick is the one thing and then delayed job and rescue are also
00:14:35.839 mentioned sometimes so i i'm happy that that i've sort of achieved that goal
00:14:41.519 well done matthew from the chat matthew d um adds that there is a thread of
00:14:46.560 difference between sidekick and rescue because of threads because it's it's
00:14:53.920 punny i don't get it
00:14:58.959 that's a lot for me to process aaron says in the chat well done i'm glad we're back to the fun
00:15:05.600 space now so oh boy i actually wanted to talk to you mike specifically about
00:15:12.399 sustainable models for open source and we touched on this a little bit because you had mentioned that sponsors
00:15:18.000 isn't really the route you want to pursue but you have i think demonstrated for
00:15:24.079 open source generally how to do this how to make a whole business around an open source project that still adds a
00:15:30.160 tremendous amount of value to the community we have open core licenses
00:15:35.680 and other attempts that are being made across the board i haven't seen anyone with as successful
00:15:42.320 a model as you've used and one that has been so i guess well embraced by the community like
00:15:48.480 elasticsearch for example got a lot of heat for making some changes to their license recently so i wonder if you would talk a
00:15:55.360 little bit about like your approach to licensing and and how it differs from other other companies approaches to making
00:16:01.920 money from open source yeah so i i think i've done two things
00:16:07.199 that are different than most people um one is that i charge at all you know most open source
00:16:13.199 projects um if they do anything they'll do some sort of sponsorship or patreon
00:16:18.560 type model um i didn't do that i went the open core route and created
00:16:24.079 products that i expressly want to i want businesses to
00:16:29.279 purchase um and so you know i'm i'm depending on engineering teams out there to budget
00:16:36.880 some amount for not only laptops for their engineers but to to buy subscriptions
00:16:44.720 to my software because sidekick is is typically a very important part of
00:16:50.480 the infrastructure for these business applications um the other thing that i did that was
00:16:56.399 different is i didn't go the vc route i didn't go out there and pitch
00:17:02.399 vcs to try and raise a couple million dollars and uh with the express intent of
00:17:08.319 becoming a billion dollar company um some people have gone that route i mean we were
00:17:14.000 we mentioned before we kicked off the show talking about chef right they went down
00:17:19.439 that route of getting i don't know 50 million dollars or 100 million dollars in funding
00:17:24.720 um other companies like hashicorp have have also gotten tons of venture capital
00:17:31.919 i tend to think of venture capital as not sustainable though because really that that vc is investing
00:17:39.200 to get a 10x return on their money so if they invest 50 million dollars they're expecting to
00:17:45.120 get back 500 million dollars that's a lot of licenses a lot of very expensive licenses
00:17:51.679 um and and i prefer just to keep my price low you know my prices uh less than a thousand dollars um and so i
00:18:00.559 so i keep the price low and that allows lots of businesses to afford my my stuff
00:18:07.280 and it means that uh at the same time i can still make plenty of money to support me on my own and i don't have to be paying
00:18:14.880 for um dockers and khaki pants and and white shirts for the vcs uh
00:18:22.799 um who invested in me right jared go ahead go ahead
00:18:30.480 um i was going to ask aaron about his thoughts on this like what what
00:18:36.720 model have you seen for making money in the open source community that you like and what's an example of one that you
00:18:47.679 i have to agree so i i like the i like the model that mike is using i think it's a good it's a good model to use i mean
00:18:56.640 personally like i i also don't like the sponsorships the sponsorships model because i think
00:19:04.400 um let's see i don't like it because i don't want to
00:19:10.559 be dependent on the kindness of i don't know some benefactor in order to
00:19:18.000 have my in order to have my job like i want to be able to show like hey i can provide value
00:19:23.039 this value is important to companies and companies will pay for it although i'm i think what i'm asking for
00:19:29.440 i think probably what mike and i are asking for is fairly similar like i want a salary basically to just work on it i want
00:19:35.840 somebody to pay myself i want i want a company to pay my salary to work on on something
00:19:41.360 um though like i'm happy that shopify is paying my
00:19:46.559 salary and mike just started his own company to pay his own salary where i think the
00:19:52.240 relationship is somewhat similar the other thing is like i feel like if you just do the individual sponsorship
00:19:59.520 type route you may not be connected with the reality of how your
00:20:06.000 software is being used so like if i just had
00:20:11.120 random people paying me to work on work on ruby all day maybe i wouldn't be making improvements
00:20:16.799 that would generally be beneficial to companies or the community at large so i get
00:20:24.640 experience from our production systems saying like oh this and this is too slow
00:20:30.240 or what you know what is it that we need in an actual real production system and that drives the changes that i can make
00:20:36.159 where i'm sure like mike see similar stuff with regard to support support tickets things like that
00:20:41.360 like requests from customers so i think that you don't have that like when you just do an individual
00:20:47.039 sponsorship level you don't have that type of feedback or maybe the feedback that you
00:20:52.880 get might be weighted towards those who complain the most or something like that so
00:21:00.000 i just think that you know getting it getting paid a salary sets up a better
00:21:05.440 relationship between you and the person giving you money because if i'm just sponsoring you
00:21:12.000 individually then as someone who is not a corporate
00:21:17.120 customer i will have a hard time informing you about feature direction the money will flow
00:21:22.799 maybe you'll end up optimizing for the wrong things yeah that that and also like i don't
00:21:29.679 know i just i i don't i don't want to get
00:21:34.799 tips from friends how's that i just don't want i just don't want that on behalf of your
00:21:40.559 friends we want to give you tips though i know but it makes me feel it makes me feel awkward
00:21:46.559 i'm gonna ask another difficult question how much like decision-making power do
00:21:54.320 shopify and sidekick kind of have over what you're working on in open source so we talked a little bit before about how
00:22:00.080 like not having a pm is kind of like a liberating part of open source because you don't have someone like doling out
00:22:05.600 tasks how much of that freedom do you give away for that salary and is it like
00:22:11.120 a non-zero amount is it a small amount so speaking only on my for myself
00:22:19.760 i work solo so i don't have a boss um i'm i'm the benevolent dictator of
00:22:25.600 sidekick and so i can i can take that product in whatever direction i want
00:22:30.640 um that specifically i if i decide to build a feature
00:22:35.760 i can decide what tier that feature goes into like do i give this away to everybody and put it in open source do i do i
00:22:42.880 limit it to pro or do i limit it to enterprise only so um you know my product is uh are our
00:22:50.640 sets are in supersets right so pro is a super set of the open source and enterprise
00:22:55.679 is a super set of pro and open source um and and that can often times be a
00:23:01.600 hard decision is you know i i have to understand that um if i'm going to limit this to only
00:23:07.679 the enterprise then that comes with a significant cost and means that my free users won't be able to use this
00:23:14.320 feature um but uh but that's those that's probably
00:23:19.360 the hardest type of decision that i have to make
00:23:25.440 for me i guess like i don't know the the relationship i have with my employer is good i mean for me the
00:23:33.919 direction that we want to go is that um is the same direction of stuff that i want to do
00:23:40.000 so it happens to like it happens to match up if one day like shopify was like hey
00:23:47.279 you're only gonna we're gonna only work on closed source stuff that we're never gonna release to the community i
00:23:52.880 probably would look for a new job is what would what would happen
00:24:01.440 so i mean i guess the relationship is mutually beneficial and
00:24:06.640 convenient to me so yeah i don't have i guess i don't get to have the same self-direction that
00:24:13.360 mike has since he's his own like he owns his own business i can kind of
00:24:19.120 have that self-direction in that i can choose whether or not to find a new employer
00:24:26.159 but mike doesn't have to do that well you have a purview within the range
00:24:32.400 that you work on aaron which is the you know mri right if you decide you can go you want to spend a
00:24:39.360 week researching a particular direction you have that freedom i would assume right oh yeah yeah
00:24:45.360 yeah but i can't like i can't be like oh you know what i'm going to work on node now or whatever right right
00:24:52.400 but that's but that's a totally fine trade-off for me like i'm super happy with it right
00:24:59.120 mike you had something were you going to screen share for a bit did you want to screen share something with us
00:25:05.440 uh i didn't i didn't have anything in particular oh okay i had in mind i wanted to offer
00:25:11.120 you the option because i understood that might be a thing but i actually think this is perfect we will continue with the existing format where we look at the
00:25:17.360 site yeah i'm fine just i'm i'm fine just taking questions and and looking at the welcome
00:25:23.600 whiteboard here so we have a whiteboard up in the uh in the zoom that says exactly welcome on it
00:25:29.679 scrawled with uh a paint thing the stream right now is looking at the sidekick browser
00:25:34.799 um readme which describes the throughput the uh the table you have in the readme here we can put anything up in the
00:25:40.320 browser though i'm inclined to go to napster.com sometimes at random a browser is is free territory
00:25:47.520 matthew has a question for you mike do you feel it conflict with the wider
00:25:53.679 sidekick using community where people build their own open source versions of pro
00:25:59.679 or enterprise built-in features yeah so that's that's a great question and i and i get that a lot um
00:26:06.080 there's certainly tension there you know i'm not gonna disagree with that everybody wants a free lunch and and hey
00:26:12.559 i love to use open source too and not pay anything for it what i tell
00:26:18.159 people is that for every feature that i have in pro and enterprise
00:26:23.760 there's an open source version out there you can you can cobble together with
00:26:30.159 a half a dozen plugins sidekick pro or sidekick enterprise or the the major
00:26:36.000 parts that you want to use nothing is stopping you from doing that today the the
00:26:42.480 the difference is that you have to test it you have to test that all those
00:26:48.320 things are working well together you have to test that it scales um
00:26:54.480 as far as you need whereas that's that's what i provide when i when i sell
00:27:00.720 pro and enterprise together i'm effectively like a linux distribution
00:27:06.320 where i'm taking all this software and i'm putting it together and then i'm testing
00:27:11.840 to make sure it all works well together and and so that's where a lot of the value comes from
00:27:20.399 they're absolutely that go ahead aaron uh also support i mean that's huge yes yes
00:27:26.880 obviously you can you can email me but that said uh anybody can open an issue in sidekick
00:27:32.640 on github and and i will provide uh you know a response usually within
00:27:38.080 minutes if not hours so um i don't i don't like to say that uh that i don't support open source
00:27:44.799 users or anything like that but it's the paid tiers that keep me doing this
00:27:50.399 every single day so in effect if you're buying a subscription you're ensuring that i'm going to
00:27:56.480 continue to support everybody i just went to the page and tried to log
00:28:08.960 but i'm not logged in in my streaming browser so i'm going to spare you the wasted issues yeah
00:28:17.919 you're killing my sla my support sla that's right so sidekick from an open source
00:28:25.600 perspective like i want to understand the weight like how much time do you end up spending supporting open source customers like
00:28:33.200 your free tier customers as opposed to your enterprise customers because i think that as we talked about earlier it it has to at
00:28:40.320 some level steer the direction of the project right that the features that you're building are you
00:28:46.399 i would if i were you in running a business i would prioritize the needs of corporate customers who are trying to run sidekick at scale
00:28:52.799 over jonen just created a joke issue to say hello right but triaging that work do you just
00:28:59.600 do it all in issues and how do you determine who gets more time how does that work
00:29:08.000 yeah so luckily i my a lot of my business policies are shaped
00:29:13.760 around minimizing the impact of the business on my day-to-day life so um i like to spend as much time as
00:29:21.039 possible programming and adding new features to make sidekick and factory as valuable
00:29:27.840 as possible i don't like spending eight hours a day answering support emails
00:29:33.760 so i definitely try to polish all the rough edges as much as possible to minimize uh
00:29:40.720 support issues and where i do start to see the same issue pop up over and over and over in
00:29:46.159 emails then i'll say okay well there's a rough edge here i need to i need to
00:29:51.279 sand down and make smooth uh so to stop that that support email i mean ideally um my
00:29:58.720 software is working at 100 when no one's asking for support because it just works um
00:30:06.840 now i do ask people uh to open issues where they have
00:30:12.799 ideas where they have feedback where they have bugs or feature requests and then yes i'll just work off of the
00:30:18.640 issue backlog um and uh i've been i've been making an attempt this year to
00:30:26.799 start to pair program with my customers so that i can both help them tune uh factory and sidekick
00:30:34.080 to work best on their systems but also just so i can talk to them and hear you know what's missing what are they
00:30:40.799 still struggling with uh how can i make it even better and so that's already resulted in in several new features uh
00:30:48.559 coming down the pipe uh in both sidekick and factory so it's just it's an ongoing iterative
00:30:55.279 process that that happens every week and every month
00:31:04.320 colton shared a gif in chat that i'm suddenly regretting sharing in the browser but it's a picture of me from a very long
00:31:10.159 time ago at my standing desk demonstrating how to type and code at
00:31:15.279 the same time with a fan in my very long hair at the time we're going to be done with that now thank you colton
00:31:20.880 for the share yeah it was really well placed um so bookmarked oh good
00:31:28.640 oh good glad that she got that gif out there in the world
00:31:33.760 so i used sidekick a lot over the years and i have to say i've not ever had
00:31:39.760 an issue with it do you think that your issue volume for similarly sized projects is
00:31:46.159 is high or low on average well i mean i'm approaching my five
00:31:52.559 thousandth issue in sidekick over nine years um and i like to think and like i said i
00:32:00.559 treat every support email as um as an issue that if it appears over and
00:32:07.679 over and over i try to i try to fix that that bad boy so i i don't hear that support i don't get any
00:32:14.720 more support queries on it so i like to think i have less issues than than
00:32:19.919 the average project of that size um but you know like any project you're
00:32:25.279 going to get over a decade you're going to get thousands of issues it just that's that's life i don't know
00:32:33.039 that's i try i try to minimize them i feel like 11 open issues is winning oh well sure
00:32:41.039 that's tiny we we've all hit we've all browsed to open source repos and and
00:32:47.840 seen you know hundreds of issues open hundreds of pr's open and the last commit was three years ago
00:32:54.960 right that's that's just that just happens
00:33:02.000 that's that's open source burnout for you and it and it happens to everybody erin what's the repo for
00:33:09.279 nokogiri uh sparkle motion slash nokugiri okay
00:33:14.640 thank you i was gonna guess sparkle motion right after i tried tender love in nokogiri
00:33:22.000 what is sparkle motion have you seen the movie donnie darko oh
00:33:29.600 yes i have seen the big dummy
00:33:34.640 so sparkle motion sparkle motion is the um the dance group that the the
00:33:41.760 family's daughter participates in and there's a scene in the movie where
00:33:48.240 somebody from the school comes to her house and is exasperated and says i just what did she say i question your
00:33:56.480 dedication to sparkle motion
00:34:02.799 so he decided we decided to name the group sparkle motion also it's a good name nokogiri has more
00:34:10.560 open issues than sidekick does you're at 160 on nokogiri
00:34:16.159 is this a competition yep yep i guess we're winning though has a really great recommendation here
00:34:23.359 um gem.wtf slash gem name redirects you to the right github repo
00:34:28.800 nice oh nice that's so useful because so many people i go to their gem
00:34:33.919 page on like rubygems and they'll link to the source somewhere else i want to see the github repo
00:34:40.240 most of the time i guess if a maintainer has a choice about where they want to host their source and it's not on github
00:34:46.240 that's that's fine but i'm typically looking for gems in their source on github and can i can i uh
00:34:53.919 can i make a request of gem authors that you please add a link to the change log
00:35:00.000 in your gym spec so that in you know as you release new versions
00:35:05.760 people can see what's changed in this version nothing annoys me more than when everybody links to
00:35:12.160 ci rdoc uh every other thing and then they there's
00:35:18.000 no change log to be found anywhere so you have no idea what's new which is helpful when you're
00:35:24.240 trying to debug an issue in sidekick and a gem you're using because you can't figure out what
00:35:29.920 changed in that gem right i was looking at uh redis 6-2 this
00:35:34.960 morning and i my only question was okay what's new and i had to go through like 10 links to
00:35:41.760 try and finally get to the release notes and then the release notes were half a mile long of every
00:35:47.760 single git commit and every single bug fix that was put in
00:35:54.800 don't do that thing maintainers there should be a workshop on this i have never in my
00:36:01.520 life as a software engineer had a changelog help me
00:36:07.680 interesting i don't think i've ever had it help me either i think there's a discussion to be had there
00:36:14.000 yeah how does the changelog help you so for me i like it when a change log is
00:36:20.960 relatively high level and it gives me an overview of either like a new feature
00:36:26.560 or it tells me uh if a feature has changed in a noticeable way um
00:36:34.000 i don't necessarily need to see like every single bug that was fixed especially like the really arcane stuff but um
00:36:42.640 like what if i'm going to upgrade to a newer version i want to know how is this going to benefit me
00:36:49.599 i'm dying i'm sorry your cat is adorable is she a russian blue
00:36:55.520 my cat pearl's mom was a russian blue and she looked just like her i thought she was a russian blue when i
00:37:00.880 got her but it turns out now she's just a lame american domestic cat
00:37:08.320 i think so mike what you're describing usually to me that that reminds me of the news file
00:37:14.560 it's like new features whatever right like sometimes i'll read news fi news
00:37:21.520 files are good i like the news file in ruby but we stopped doing a change log in ruby there
00:37:27.280 is no changelog anymore yeah because it was just a list of commits and i don't find that helpful
00:37:32.480 like i don't see how that's helpful to anybody and like so like i said i i appreciate
00:37:39.280 it when it's higher level like i don't want to see a list of get commits um that's that's garbage
00:37:44.880 um and so that's why i like like when a new version of ruby comes out there's usually a blog post that says like
00:37:51.040 here's the top 10 features that you should care about and that's the kind of stuff that i'm
00:37:56.880 talking about um you know in sidekick i keep a i like to keep a pretty
00:38:02.480 detailed well not detailed but a change log a high level change log of what's what's
00:38:08.320 new in each sidekick version um and and that's the kind of change log that i want to see
00:38:14.079 every uh project have you know obviously i do it because i think it would be useful
00:38:19.839 to other people it also happens to be useful to me so that i can go to this changelog and i can see
00:38:25.119 oh here's the four changes that are going to be in this next release because literally i won't remember
00:38:30.320 i'll need to go back to my change log to see what did i work on because i'm working on on factory and a bunch of other
00:38:36.880 libraries associated with it i'm working on sidekick sidekick pro psychic enterprise
00:38:42.000 and so there's there's so many different issues that i'm dealing with every day unless i have some canonical place where i i list
00:38:50.240 out uh what's important for people to know about i won't remember it and if you don't tell people about it no
00:38:56.160 one's gonna know about it so if i'm i like this actually because
00:39:02.160 we're turning towards the direction of like advice for new open source maintainers if i'm maintaining a gem and
00:39:07.280 it's starting to get traction which has never happened i have many gems and not once has it
00:39:12.640 ever turned into a product mostly because all of my gems are a joke but there is
00:39:17.839 a um a thing here where we can talk about
00:39:23.599 people helping um are people are you helping people come
00:39:29.599 into open source are are people going to be able to come into open source
00:39:34.800 and create a change log and just call it good there are some other steps i imagine involved in like common mistakes that you see
00:39:40.960 people making with gems maybe we could give them some advice like what are your top three things that new new open source maintainers typically
00:39:54.839 um um i think a test suite is really important so
00:40:00.480 um you know spend some time getting to uh know how to test
00:40:07.119 code and and a test suite really influences your api design
00:40:14.240 and and for the better 99 of the time in my opinion um because it really puts you in the in
00:40:21.119 the shoes of someone who's using your api when you're testing it and that really helps when you're
00:40:26.720 iterating and trying to make a better api design so i think testing and having a good
00:40:31.760 test suite is is vital for maintenance long term um because over the over the years you'll start to lean on
00:40:38.160 that test suite a lot more and more to make sure that future changes don't break something
00:40:44.240 important in your functionality so a test suite is is one of the most important things
00:40:51.520 to me um like i said i also like a change log um yeah i don't know i'm drawing a blank
00:40:59.680 on the third maybe aaron has some opinions read me's are nice
00:41:07.920 well actually read me read me in a license you gotta have a license read me a license oh licensing has become more
00:41:15.200 complicated and a bit more of a sticking point lately what's what's your what's your license of choice erin
00:41:21.359 uh i used to do all mit um now maybe apache too
00:41:29.040 i don't know i i use either mit or apache ii either one of those because like i guess most of the time i
00:41:35.920 don't necessarily i guess it also depends if it's something that i think is gonna
00:41:40.960 if it's something that i think someone will turn into a product i would probably license it gpl but i
00:41:48.640 don't do any of that stuff like everything that i write nobody's
00:41:53.680 it's not a not a thing that can be turned into a product so i just license it mit or or apache2
00:42:02.079 i guess like my worst fear is that i develop something then somebody turns it into a product
00:42:08.160 and never contributes back upstream basically the amazon business model in
00:42:13.440 other words yeah yeah so like yeah that's
00:42:20.160 yeah i think unfortunately unfortunately i don't write software like that
00:42:26.160 that's kind of driving a lot of the licensing discussion though rachel what were you going to say oh i
00:42:31.599 was just going to ask what the difference is between mit gi pu and
00:42:36.800 um no wait that's the wrong one gpl mit gpl versus apache like i actually
00:42:42.000 haven't looked into the apache one at all uh apache is very very similar to mit it
00:42:47.680 has one just one more clause which is essentially like it's a protection against patents
00:42:55.119 so theoretically like somebody could patent the work that you did and then sue you for patent infringement
00:43:02.880 where apache 2 protects you protects you from that gpl has all those same protections but
00:43:08.960 they also require you to um if somebody uses your software they require you to provide the source for it
00:43:16.000 so if they change your software they're they're required by the license to like
00:43:21.200 publish the publish the changes that they made but i think that's only if it's
00:43:26.680 distributed i can't remember exactly the particulars like if they change it and then
00:43:32.000 sell it they have to publish what they what they did so i have a thought here
00:43:38.800 that many times when a company is getting ready to go public they will do this thing where they come in and they
00:43:44.880 they evaluate all of the code and they look for anything that is licensed gpl and they pull it out and replace it because they don't want to go public
00:43:51.200 with any piece of gpl code for fear of a potential legal issue where they'd be forced to open source a part of
00:43:56.400 what they consider to be the value proposition of their company so from that perspective it seems to me
00:44:03.599 that the intended purpose of gpl being to prevent
00:44:08.800 situations like we still want people to use the code we just don't want you to be able to walk into a project and prod
00:44:15.040 productize you know many thousands of hours of other people's work
00:44:20.240 and and so releasing something over gpl to some degree means that it won't be used
00:44:25.839 by a large customer a customer at a public company for example um i don't know that that's
00:44:33.040 optimal given the previous conversation we had around how large enterprise customers can help open
00:44:38.880 source projects drive realistic feature paths what are your thoughts on that so
00:44:46.160 factory is gpl licensed um and i explicitly did that because i
00:44:52.240 did not want amazon or some other big company to swoop in and productize
00:44:59.839 my service i mean factory is a server just like you know any other server like
00:45:06.720 mysql or postgres or [Β __Β ] or redis factory is a network service that you
00:45:13.040 can you can sell as a sas and i didn't want someone to just come
00:45:18.160 in and productize my open source project and and and never contribute anything back
00:45:25.359 so that's why i i i licensed at gpl um
00:45:32.800 and i haven't i haven't had any feedback from customers or users that said that the gpl is onerous or
00:45:40.319 they didn't like it um so it's it from that perspective it's been a a
00:45:46.880 reasonable choice and i certainly have no regrets in choosing it um you know that said
00:45:55.359 go ahead aaron i was going to say a large part of it depends on what the type of the what type of software it is like
00:46:02.720 if it's a library or something that changes that changes the situation
00:46:08.079 like you maybe maybe you don't want to license a library as
00:46:13.520 gpo but a server for sure because people can just turn around and sell it well and that's and so sidekick is
00:46:20.240 licensed lgpl because it is designed to be linked in with the application
00:46:25.680 in the process right in the in the ruby process so i didn't want to trigger any
00:46:31.599 application you know people having to open source their applications just for using sidekick um so that's why i chose the different
00:46:38.480 licenses for the different products because factory is effectively a black box people don't run
00:46:43.599 their own code within factory um and so therefore it can be gpl so
00:46:48.640 that's that's why that's why the difference in the licensing there exactly like you say
00:46:55.440 uh anyway no please i was gonna change the topic
00:47:01.280 uh i was i was gonna say there's a website i think it's called like choose a license or something
00:47:06.720 maybe it's in the chat if you like choose a license and then you just like say what you care about it'll tell you what license you should
00:47:12.640 use so back to the conversation of new folks you know new folks coming to open source
00:47:17.839 if you're not sure what to choose go to this website it'll just tell you what to do basically
00:47:23.520 which is what i prefer because honestly like when i got into open source i just
00:47:29.760 wanted to write code didn't want to think about like legal stuff
00:47:35.280 but yeah unfortunately you have to so yeah i've been doing yeah i've been i've
00:47:41.359 been in open source for 20 years now so i keep forgetting that you know there are people
00:47:46.559 that are coming into the open source community every single day that don't know this stuff and don't know
00:47:52.800 you know lgpl from gpl from to agpl to berkeley and mit
00:48:00.240 this stuff's not easy for sure and so going to websites like choose a
00:48:06.480 license um can really help narrow narrow down and help you make the right
00:48:11.680 choice um though i think one thing i would i would caution people against is choosing a license just based
00:48:18.319 on whatever the ecosystem does a lot of ruby projects they just go with
00:48:23.680 the mit license because that's what ruby uses or that's what rails uses
00:48:29.119 and and i like to say if you're going to put a lot of time and effort into something spend a little bit of time just to
00:48:35.200 figure out the right license for whatever you're trying to to build um if you don't care about it then maybe it's not as important but if
00:48:41.599 you do plan on spending a year or two working on a project um getting the license right can can be
00:48:47.599 useful okay so so far we've talked about yes
00:48:53.920 read bees we haven't talked about what should go into them we've talked about um having a change
00:48:59.200 log and we have talked about what should go into those and what shouldn't go into those we've talked about yes you need a license and the different options
00:49:06.160 matthew d has a recommendation streamline and automate your release process so how do your respective projects
00:49:13.920 streamline and automate the release process when somebody else does it's streamlined
00:49:22.160 because somebody else has to do it
00:49:27.280 i think i probably have more personal experience with this than aaron does since i don't think aaron releases ruby
00:49:33.040 uh no yeah we got to do so i to be honest be really honest i have no
00:49:39.599 idea how ruby does releases like zero zero clue i know that somebody like makes a tar
00:49:45.599 file or something like that i have no idea with the rails we just have like rake rake tasks that you just do like
00:49:52.160 right you just do like one task and then it just packages it all up for you it does its thing
00:50:00.319 and oh lord uh do i have some complex release processes especially for something like
00:50:06.000 factory where i have to cross compile a linux binary i have to build you know a
00:50:13.920 deb file for ubuntu then i've got to build docker containers
00:50:19.359 and then i've got to sign all this stuff with my gpg key and push it to my own docker private
00:50:24.480 docker repository and my own deb repository and i'll tell you i built this stuff over the last five
00:50:31.839 years and i don't remember how any of it works and so i'm just glad i have a make file
00:50:39.200 target and a rake file target for these things and it's all automated
00:50:44.319 and i just remember the the make target i i call to to execute all this
00:50:50.720 and let me tell you the the most white knuckle moment i think uh these days for me is when i upgrade
00:50:57.599 my laptop because inevitably there's some sort of secret file on the laptop
00:51:03.280 that is not on the new machine and lord oh lord i better not lose that
00:51:08.480 secret file um because i got to copy it over to that new machine and so there'll be
00:51:14.240 there's like a six month transition period every time i upgrade machines where i need to cut releases from the new
00:51:20.240 machine for all my software before i can be sure that i can let the old machine go
00:51:26.480 so what i do what i do is i make a backup i have two backup drives i make one
00:51:33.200 backup of the old machine yeah and then i keep that around and then if i need anything i bring it over
00:51:41.200 but yeah it's not fun i just figured out how to add myself to
00:51:48.079 the stream so i'm back sorry everyone wow somewhat disjointed experience for
00:51:55.440 our stream viewers but now there are four heads on the screen it really is though a matter of if you
00:52:02.160 don't automate it over the years you will completely forget what you're doing and how to do it
00:52:07.280 and then you'll be up a creek again and you'll have to reinvestigate and re-teach it to yourself
00:52:13.040 so i i either automate it or i document how to do it because other because every six months
00:52:18.559 i'll have to go in and i'll have to read the documentation of how do i build myself a new server now
00:52:25.200 this is this like this is hurting me this is really hitting home right now because the other day i had to do a i
00:52:31.599 had to do a release of psych the yaml parser and i had to do it for like
00:52:38.240 it has a jruby build and i never remember how to do like i never remember how to do that and
00:52:44.079 i'm like so i had to do all this research just to do one release and i thought to
00:52:49.680 myself i should write this down and then i didn't yes in fact i just
00:52:55.359 remembered if you go to the factory wiki there's a development wiki page where i sort of document
00:53:01.040 here's how to get started with factory development there's a section in there that i literally wrote for how do how do
00:53:07.440 i what steps do i run to release factory and i just go back to that wiki page
00:53:13.119 every single time and i run the commands such as they are so if you want to see
00:53:19.119 how do i release factory just go to that wiki page and it's right there in public
00:53:27.119 you should live stream amazing i wanted to live stream of you releasing factory
00:53:33.280 it's really not very interesting
00:53:41.599 oh uh sorry i got distracted because i watched jonah talking on the stream and it was a little bit behind and i was
00:53:46.880 going to ask a question and my question was so we've talked about releases now what about the contributing.md how do you
00:53:53.200 encourage new contributors to like drop by and contribute to the project and this can be like structured like
00:53:59.280 here the things that i do that help bring in contributors or it can be like the more fluffy here's the
00:54:04.960 thing i do to like bring people in
00:54:12.160 i'll go first uh one one i'd like to have a code of
00:54:25.599 as far as bringing other people in it depends on like i think that's one thing i just want to make sure
00:54:30.720 like i like to do in the community i want to make sure that everybody feels welcome and happy and like
00:54:36.000 is nice to each other uh and that's uh code of conduct helps with that because online we have a lot i think we have a
00:54:43.520 lot less context than we do in person like we can't see each other's faces or how people react or anything like that
00:54:50.240 so we got to write that stuff down which is just a i don't know part of online life um
00:54:57.119 and like the other thing i like to do is put in nice examples for people to
00:55:03.599 work with or play with my code just so they can like have fun have fun doing it i'll put that kind of
00:55:09.200 stuff in the readme so it's like how to i don't know how to use this stuff um
00:55:14.720 what else i don't know it depends on the project
00:55:20.480 like some stuff i post that's open source and i basically do it just for me and i'm like i just did this i thought
00:55:28.240 it was a fun hack if anybody else wants to read this hack like super go for it but i'm not
00:55:34.720 necessarily looking for like i'm not looking to bring people in so it depends on it depends on the
00:55:41.200 project uh like rails maybe we'll have one point we had like the
00:55:46.400 month of wtfs or whatever we posted a big old thing and invited people to
00:55:51.680 like write all their complaints in our forum and we would try to like figure out how to do it so some some things are a bit more active but it
00:55:58.720 depends on what you're going for i think i have to admit that as my projects have
00:56:05.520 gotten more complex and and sort of matured the number of
00:56:11.920 contributors i get has slowed down pretty dramatically um i still get
00:56:17.200 i'd say one intense contributor a year for a sidekick and by that i mean
00:56:22.720 someone who will submit a pr to fix one thing and then submit a pr to fix something else and
00:56:27.920 they'll they'll have a flurry of five or six prs over the course of two or four weeks uh
00:56:34.799 and in doing so sort of scratch their own itch and try to improve things
00:56:41.359 such as their own skills allow um but aside from that it's it's mostly me
00:56:47.599 just grinding every day on the project and helping out people where i can so um yeah i'm probably not the one to
00:56:55.200 be asking about new projects and getting new contributors
00:57:02.559 that's really interesting thank you to both of you is there anything else you can think about that relates to like oh actually i kind
00:57:09.839 of have one how much time do you spend like focused on like reviewing code versus focused on writing
00:57:16.720 code
00:57:21.760 i guess mike your answer is like 100 writing code yeah i mean i i most of the changes that
00:57:27.760 go into my projects are from me um that said i do i do pretty regularly open up pull requests against my own
00:57:34.240 code so that people can see sort of here's the set of changes
00:57:39.520 that are going to go into the project associated with this new feature or whatever um uh
00:57:46.720 and and that way people can either offer comments um and review my own uh changes
00:57:53.359 um or i can link to it in that changelog that i talk about loving so much and then people can see uh you know
00:58:00.880 historically oh here's the the original changes that sort of implemented this feature or this bug fix or whatever um
00:58:09.200 so uh i do i do review uh code i also um i'm not shy about
00:58:16.319 re-implementing a pull request that somebody sends me if i want to do it a different way or go a different direction
00:58:22.960 i tend to really like code that's written in one style and reads as one style
00:58:28.240 so i tend to have very strong opinions on how to implement things and sometimes i'll work with an author
00:58:36.240 to do it or sometimes i'll just thank them and then i'll just re-implement what they they originally sent me um
00:58:42.400 such that it's done more in the in the style that i would do it in do you have any kind of code um what are
00:58:49.839 these uh things called linters that like enforce a code style in your project
00:58:55.599 yeah i use i use linters on both factory and and sidekick sidekick uses um justin's earl's
00:59:02.880 standard rb which is a is a layer on top of robocop
00:59:08.480 um and i just use the standard uh definition of what ruby ruby format should be
00:59:15.520 uh and then i use uh there's a thing called uh golang ci lent or something like that
00:59:22.400 which is runs like a thousand linting rules on go code and that's the factory winter and and i
00:59:29.839 fail the builds if they don't pass
00:59:36.559 aaron okay go ahead aaron i was just going to say like i i would
00:59:43.119 say i spend probably 90 of my time writing
00:59:48.319 my own code versus reviewing other folks code but i'd have to say like
00:59:54.720 80 of that time i spent well maybe not 80 say 70 of that time i
01:00:01.040 spent pair programming with other people so there's um i don't know
01:00:07.040 i have to say probably like most of my recent contributions to
01:00:13.520 rails don't have my name in the author
01:00:19.280 which is like i don't care i mean i don't care it's fine uh i just i like to work with i really
01:00:25.760 like to work with other people on stuff it makes me i just think it's more fun so
01:00:32.640 i had a lot of fun working with you on my commit to ruby you remember that aaron yeah that was a lot of fun yes do you
01:00:39.359 remember then when you pulled my change out because it broke windows a month later yes yes i remember i
01:00:46.319 i have contributed to the ruby community for all of 30 days by adding a commit to ruby someday
01:00:53.440 i will come back around i'm looking forward to getting more involved okay we're going to pop out for a second
01:00:58.720 and we're going to have christina join us on the zoom and we will be back very shortly we're going to do a little bit of a guess
01:01:03.920 shuffle but everyone just stay tuned and we will be right back
Explore all talks recorded at Ruby Galaxy v0.2
+1