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