0:00:00.967,0:00:01.870 So, 0:00:02.130,0:00:05.140 It's official. We're starting. 0:00:05.140,0:00:09.987 Hello everyone, I'm Stefanie Butland, [br]rOpenSci's Community Manager 0:00:09.987,0:00:13.258 and I so warmly welcome you to [br]our community call 0:00:13.258,0:00:15.723 on maintaining an R package. 0:00:16.183,0:00:24.187 I wanted to first acknowledge that everyone here [br]is under extraordinary stresses right now 0:00:24.187,0:00:28.534 in light of the COVID-19 pandemic. 0:00:29.454,0:00:34.769 None of us knows what weights [br]other people are carrying at this time. 0:00:35.299,0:00:40.723 It's a remarkable thing that all of us [br]have decided to take this hour 0:00:40.723,0:00:43.496 to come together and be together [br]as a community. 0:00:43.496,0:00:48.946 And so many of you I know as sort of warm,[br]generous, accepting people. 0:00:48.946,0:00:51.810 And so I thank you all [br]for taking the time to do this, 0:00:51.810,0:00:55.510 and for the next one hour of your lives, [br]I've got your back! 0:00:55.954,0:00:58.753 And now for something completely different: 0:00:59.233,0:01:02.212 rOpenSci is a non-profit initiative, [br]founded in 2011 0:01:02.212,0:01:05.950 by Karthik Ram, Scott Chamberlain, [br]and Carl Boettiger. 0:01:05.950,0:01:09.620 We enable open and reproducible research[br]by building technical infrastructure 0:01:09.620,0:01:13.290 in the form of staff- and community-contributed [br]R software tools 0:01:13.290,0:01:18.787 and we build social infrastructure [br]in the form of a welcoming and diverse community. 0:01:19.497,0:01:25.166 You can find our bi-weekly newsletter [br]at news.ropensci.org. 0:01:25.726,0:01:29.499 We have a code of conduct [br]that applies to both in-person 0:01:29.499,0:01:32.455 and online interactions, [br]like this call today. 0:01:33.372,0:01:35.815 You can find it linked [br]from the footer of our website 0:01:35.815,0:01:41.618 and it includes reporting [br]and enforcement guidelines. 0:01:41.618,0:01:47.491 The session is being recorded [br]and the video and any other resources 0:01:47.491,0:01:53.526 are going to be posted on our website [br]at ropensci.org/commcalls 0:01:53.526,0:01:56.210 within about three business days. 0:01:58.050,0:02:00.369 I'm going to tweet from rOpenSci [br]when those things are up. 0:02:00.369,0:02:05.690 We use a shared Google Doc, [br]which if anyone's in there 0:02:05.690,0:02:07.652 could you please paste the link back [br]into the zoom 0:02:07.652,0:02:09.615 so that new joiners can see this. 0:02:09.870,0:02:14.062 We typically use a Google Doc [br]in our community calls 0:02:14.062,0:02:15.731 for collaborative note taking. 0:02:17.193,0:02:23.028 You can find that at [br]bit.ly/ropensci-commcall-maintaining 0:02:24.610,0:02:30.064 I'd like you to add your name [br]and your affiliation into the attendees list. 0:02:30.324,0:02:35.090 And there's a format there that you can follow [br]because it helps me grab that information. 0:02:36.687,0:02:42.200 In this call, it's a different flavor for us, [br]we've decided to do this as a panel discussion 0:02:42.200,0:02:46.320 as opposed to a series of talks [br]with attendees asking questions. 0:02:47.489,0:02:50.418 And so we're going to have [br]one short presentation, 0:02:50.418,0:02:53.348 followed by a panel discussion, [br]full of pre-selected questions. 0:02:53.950,0:02:57.970 I've already typed each of these questions[br]that are planning to be asked in the doc 0:02:57.970,0:03:03.412 and so invite anyone to add any comments[br]you're interested in capturing from the panelists, 0:03:03.412,0:03:07.736 as well as any expertise, [br]any thoughts you might have about this 0:03:07.736,0:03:11.460 because we really are [br]a bunch of rich resource people here. 0:03:11.460,0:03:16.140 And so audience answers are just as valuable[br]as the panelist answers at this point. 0:03:16.660,0:03:20.600 And this is something that we end up sharing[br]as a long-term resource. 0:03:20.600,0:03:22.560 It will be accessible forever. 0:03:23.336,0:03:27.708 This time, unfortunately, [br]we won't have time for taking impromptu questions 0:03:27.708,0:03:30.151 from attendees on the community call 0:03:30.151,0:03:34.418 but I've created a separate section in the doc[br]called questions - Part B, 0:03:34.418,0:03:37.544 where you can ask questions [br]that come up for you 0:03:37.544,0:03:41.970 and I invite anyone [br]to answer each other's questions. 0:03:43.150,0:03:47.324 And together, as I say, we'll make this [br]a rich resource for everyone to use. 0:03:48.160,0:03:51.327 So finally, it's my pleasure [br]to introduce our panel. 0:03:51.960,0:03:54.708 Julia Silge recently joined RStudio 0:03:54.708,0:03:57.076 as a data scientist and software engineer. 0:03:57.596,0:04:00.880 When we put out a call for a new[br]maintainer for the qualtRics package, 0:04:00.880,0:04:03.600 Julia took it on because[br]she was using it in her day job 0:04:03.600,0:04:06.450 as a data scientist at StackOverflow[br]at the time 0:04:06.450,0:04:10.270 And she worked on the annual developer survey [br]using qualtRics. 0:04:10.270,0:04:13.360 She also maintains other R packages, [br]including tidytext, 0:04:13.360,0:04:16.010 which has been downloaded almost[br]900,000 times. 0:04:17.080,0:04:17.890 Elin Waring 0:04:17.890,0:04:20.713 is a professor of sociology and interim dean 0:04:20.713,0:04:25.487 of the School of Health Sciences, human services [br]and nursing at Lehman College CUNY 0:04:25.487,0:04:28.003 She teaches research methods[br]and statistics. 0:04:28.388,0:04:31.245 Elin was part of the rOpenSci Unconf17 group 0:04:31.245,0:04:33.110 that developed the skimr package 0:04:33.110,0:04:37.199 which has become very popular [br]at over 250,000 downloads. 0:04:37.906,0:04:40.612 Elin works with Michael Quinn[br]to maintain skimr 0:04:40.612,0:04:44.130 as they've shepherded it[br]through two major releases already. 0:04:44.290,0:04:46.210 She formerly was a contributor [br]and maintainer 0:04:46.210,0:04:47.669 for the Joomla CMS project 0:04:47.669,0:04:48.963 and her approach to maintaining 0:04:48.963,0:04:50.793 is influenced by that experience. 0:04:51.189,0:04:53.346 This includes understanding [br]the importance of having a clear concept 0:04:53.346,0:04:55.503 of what you're trying to achieve, 0:04:55.503,0:04:58.350 being able to politely but firmly say no, 0:04:59.010,0:05:01.320 and knowing having users changes everything. 0:05:01.890,0:05:04.341 Erin Grand is a data scientist 0:05:04.341,0:05:05.720 at Uncommon Schools 0:05:05.720,0:05:08.638 and a Board member of[br]R-Ladies New York City. 0:05:08.638,0:05:10.366 Erin created and maintains a package 0:05:10.366,0:05:12.224 for NASA's Astronomy Picture of The Day 0:05:12.224,0:05:16.540 It's called astropic and it was inspired [br]by her early love of astronomy. 0:05:16.620,0:05:19.496 And one of her own images was featured 0:05:19.496,0:05:21.320 as Astronomy Picture of the Day. 0:05:21.320,0:05:22.491 Life goal achieved! 0:05:22.881,0:05:25.740 She also maintains a set of[br]Internal packages at her work. 0:05:26.785,0:05:29.575 Leonardo Collado-Torres is a[br]research scientist 0:05:29.575,0:05:31.860 at the Lieber Institute [br]for brain development. 0:05:32.050,0:05:34.440 He maintains several[br]Bioconductor packages, 0:05:34.440,0:05:39.281 including recently submitted spatialLIBD[br]for spatial transcriptomics data. 0:05:39.281,0:05:41.842 He's a co-founder of the LIBD rstats club, 0:05:41.842,0:05:44.674 the CDSB Mexico community of R 0:05:44.674,0:05:46.859 and Bioconductor in Latin America 0:05:46.859,0:05:49.809 and those members just submitted[br]their first package to Bioconductor. 0:05:51.000,0:05:56.604 This represents a dramatic percent increase[br]in Latin American Bioconductor developers. 0:05:56.604,0:05:58.467 So, congratulations! 0:05:58.487,0:06:01.036 Also, congratulations, Leo, [br]just in the last couple of days, 0:06:01.036,0:06:04.060 was promoted [br]to the position of Research Scientist 0:06:04.060,0:06:06.045 and he's written a post about that. 0:06:06.715,0:06:11.798 Scott Chamberlain, our final panelist, [br]is a co-founder and technical lead of rOpenSci. 0:06:11.798,0:06:15.561 He maintains, in his words,[br]probably too many packages. 0:06:16.051,0:06:18.585 Part of Scott's work involves [br]finding new maintainers 0:06:18.585,0:06:21.029 for rOpenSci peer reviewed packages. 0:06:22.320,0:06:26.210 And he tries to find those when [br]current maintainer needs to move on, 0:06:26.210,0:06:27.982 like the qualtRics example. 0:06:28.455,0:06:31.530 His bio is really shortest [br]because he's actually far too humble. 0:06:33.565,0:06:36.115 Julia is going to speak [br]for about 10 minutes 0:06:36.398,0:06:40.444 and then for the rest of the hour,[br]she's going to be moderating a panel discussion 0:06:40.444,0:06:41.893 with pre-selected questions. 0:06:41.893,0:06:44.733 For people who have just joined, [br]thank you for sharing the link 0:06:44.733,0:06:47.260 to the shared Google Doc again in the zoom. 0:06:48.255,0:06:52.623 Please add your notes there,[br]add your own questions in the bottom. 0:06:53.220,0:06:55.497 I am now going to share my screen 0:06:55.497,0:07:02.614 because I will note for people joined that[br]Julia is not sharing her lovely face in home backdrop, 0:07:02.614,0:07:05.006 because there was an earthquake [br]where she is, 0:07:05.006,0:07:06.362 she lost internet. 0:07:06.362,0:07:08.296 And so I'm going to be showing her slides. 0:07:08.296,0:07:10.210 So if you'll give me a moment. 0:07:10.650,0:07:14.287 Sure... Well... [inaudible] 0:07:16.790,0:07:18.130 [Julia Silge] Fingers crossed. 0:07:18.130,0:07:22.794 Yeah, there was a 5.7 earthquake 0:07:22.794,0:07:27.117 at your needs and it was not super big. 0:07:27.117,0:07:33.418 But enough that one of the aftershocks [br]knocked out internet at my house 0:07:33.418,0:07:36.705 and I'm trying to be able to still speak 0:07:36.705,0:07:42.758 If we lose me, [br]then I know that everything will keep going 0:07:42.758,0:07:45.630 and in a great way. 0:07:45.630,0:07:47.918 So, 0:07:49.130,0:07:54.936 So we're going to talk through these slides [br]about just briefly about particular perspectives 0:07:54.936,0:07:57.002 on maintaining an R package. 0:07:57.002,0:08:01.163 So if we go to that slide about being... 0:08:02.220,0:08:05.417 Let's see that, next slide... 0:08:05.417,0:08:09.283 Maintaining an R package we often think...[br]we cannot... 0:08:09.463,0:08:11.870 There's a Reese's about 0:08:12.283,0:08:15.648 when you're building R package,[br]about what we focus on 0:08:15.648,0:08:17.853 in the technical aspects. 0:08:17.954,0:08:19.647 But once you're in the piece, 0:08:19.647,0:08:21.923 though the part of you actually [br]built your package 0:08:21.923,0:08:23.200 and people are using it. 0:08:23.230,0:08:26.278 There's quite a balance [br]in the amount of time 0:08:26.278,0:08:29.326 that we spend managing technical work, 0:08:29.326,0:08:33.727 which is, of course, [br]extremely important with social aspects 0:08:33.727,0:08:36.988 of who is using the package, if you will, 0:08:36.988,0:08:41.317 involves often with asking [br]a lot of the right questions 0:08:41.317,0:08:43.020 (go to the next slide) 0:08:43.020,0:08:45.891 Some of the right kinds of questions [br]that we ask 0:08:45.891,0:08:49.125 when we're thinking about [br]what it takes you to packaging, 0:08:49.125,0:08:50.944 the date, or some of these like -- 0:08:51.284,0:08:56.841 Is this a package that's used really broadly [br]by a lot of different kinds of people 0:08:56.841,0:08:58.095 and we can think beginners? 0:08:58.095,0:09:01.855 Is this a package that has a specialized use case 0:09:01.985,0:09:06.022 or that's used by people who know each other,[br]internally at a company? 0:09:06.624,0:09:10.548 Is the person maintaining the package, [br]the person who put it together originally, 0:09:10.548,0:09:14.790 or as has it been passed along [br]a couple of times? 0:09:15.090,0:09:17.254 When you think about [br]maintaining your package... 0:09:17.254,0:09:22.870 I'm interested here as we have our discussion[br]what people's perspectives on like 0:09:22.870,0:09:24.010 how do we change? 0:09:24.010,0:09:28.464 And so you can either thinking [br]about packages changing over time 0:09:28.464,0:09:31.120 or, packages being superseded. 0:09:31.120,0:09:39.251 And it's been interesting in our discussions [br]preparing for this community call. 0:09:39.811,0:09:42.605 Software doesn't live forever. 0:09:42.620,0:09:48.548 And when we build software, [br]do we put thoughtfulness into 0:09:48.548,0:09:51.090 what do we expect to happen next? 0:09:51.090,0:09:52.645 So we can go to the next slide. 0:09:52.645,0:09:57.373 One of the motivating ideas [br]of setting up this community call 0:09:57.373,0:10:04.500 is that most software out there,[br]whether you're talking about R packages or not, 0:10:04.520,0:10:09.069 have one main person who keeps it running 0:10:09.069,0:10:15.705 and a goal of rOpenSci, [br]and a lot of us in this community, 0:10:15.705,0:10:24.306 is to build up the sustainability [br]of our software ecosystem. 0:10:24.310,0:10:29.356 And it's somewhat brittle [br]and also contributes to burnout 0:10:29.356,0:10:33.848 and uncertainty about [br]what is going to happen 0:10:33.848,0:10:36.639 when we just have one maintainer. 0:10:36.639,0:10:39.380 Some other things [br]you can struggle with are 0:10:39.380,0:10:44.603 You know, literally no one else knows [br]what to do with this internal of this package too. 0:10:44.603,0:10:52.955 What do you do with one person having to manage [br]sometimes what can feel like 0:10:52.955,0:10:56.647 an overwhelming amount of feedback from users. 0:10:57.557,0:11:00.034 If you go to the next slide 0:11:00.034,0:11:03.227 There's interesting research out there[br]about 0:11:03.227,0:11:06.367 both like what is the situation[br]with software contributors 0:11:06.367,0:11:11.525 and how can we either navigate that situation, 0:11:11.525,0:11:16.652 encourage more or figure out [br]what the right path could be for a community. 0:11:18.550,0:11:27.420 The references at the bottom here[br]of analysis of open source contributors 0:11:27.420,0:11:29.735 In this analysis, they did -- 0:11:29.735,0:11:31.928 It's not uncommon to find 0:11:31.928,0:11:35.136 casual contributors,[br]like people who are not the main maintainer 0:11:35.136,0:11:39.726 and you have a situation where there's[br]a lot of, a long tail of small contributions, 0:11:39.726,0:11:45.078 so like half the contributors[br]are responsible for 2% of the commits. 0:11:45.078,0:11:47.841 But they are lots of different kinds of commits. 0:11:48.408,0:11:51.602 These 2% of commits [br]from lots of different kinds of people 0:11:51.602,0:11:53.245 are lots of kinds of things. 0:11:54.064,0:12:00.118 You know there are things like typos, [br]but they're also things like fixing bugs 0:12:00.118,0:12:02.731 and building new features and refactoring. 0:12:04.310,0:12:08.110 This ... contributes -- 0:12:08.110,0:12:11.600 What this is, is evidence that [br]these are people who could be scaled up 0:12:11.600,0:12:15.110 to being more contributor,[br]more contributing, 0:12:15.610,0:12:20.951 more significant maintainer or contributors, [br]if that is appropriate for your program. 0:12:20.951,0:12:23.030 If you go to the next slide. 0:12:23.030,0:12:25.800 We often have this model [br]of software contributions, 0:12:25.800,0:12:28.755 where we have to think of it as [br]like an onion model 0:12:28.755,0:12:33.460 where you've got the users,[br]and the contributors are inside of there, 0:12:33.460,0:12:35.544 and the committers are inside of there. 0:12:35.544,0:12:37.765 And that's often how we have [br]this mental model 0:12:37.765,0:12:40.840 of like how, why, the software work, [br]you know. 0:12:40.840,0:12:45.915 But, we might want to consider whether [br]that is the best model 0:12:45.915,0:12:52.340 and instead move to what's on the next slide, [br]which is a hub and spoke model 0:12:52.340,0:12:55.070 where the code is central, right? 0:12:55.070,0:12:58.105 Like, that's the thing that we're all using. [br]So that is in the middle. 0:12:58.105,0:13:01.482 And there are maintainer [br]who work mostly on code, 0:13:01.482,0:13:05.982 but there are also other kinds[br]of maintenance activities happening 0:13:05.982,0:13:11.802 So there are maintainer of the software[br]who focus mainly on education and docs. 0:13:11.802,0:13:16.005 There are maintainers [br]who focus mainly on issue triage. 0:13:16.005,0:13:18.995 There are maintainers [br]who focus mainly on evangelism. 0:13:18.995,0:13:23.270 And users kind of swim around in this -- 0:13:24.159,0:13:28.794 swim around in this like in a soup [br]around this hub and spoke model, 0:13:28.794,0:13:32.950 and depending [br]on their particular need at any one time, 0:13:32.950,0:13:36.679 they engage with these different maintainers.[br]Like, maybe the user-support one, 0:13:36.679,0:13:41.240 or maybe the people writing the code,[br]or maybe the people writing the docs 0:13:41.240,0:13:44.635 and so like this might be [br]a helpful mental model 0:13:44.635,0:13:50.272 for thinking about package maintenance, [br]especially for larger packages 0:13:50.272,0:13:52.282 that have more users. 0:13:52.412,0:13:56.160 So if you can go to the next slide. 0:13:56.540,0:14:00.620 So it turns out we do actually have research [br]and know what can contribute to, 0:14:00.620,0:14:06.260 what can encourage more contributions.[br]So the next slide outlines something 0:14:06.580,0:14:12.320 For one study that was done, something[br]that somethings that we, you know - 0:14:12.320,0:14:16.550 if you're involved with rOpenSci, [br]you've heard this kind of thing 0:14:16.550,0:14:17.750 and seen this thing in action. 0:14:17.750,0:14:21.720 So, include and enforce a Code of Conduct. 0:14:21.880,0:14:26.840 Have cultural norms and[br]include kindness and respect 0:14:26.840,0:14:31.770 Something that was here. That is interesting.[br]I don't see a lot in R packages, 0:14:31.770,0:14:35.070 but could be interesting to consider. 0:14:35.070,0:14:40.656 That's: make more public or explicit[br]any future plans you have. 0:14:40.656,0:14:45.047 That can help contributors know what to do. 0:14:45.507,0:14:51.787 And then the - if you go to the next slide. [br]This paper also has some very interesting ideas 0:14:51.787,0:14:58.545 of how to help newcomers become[br]contributors and maybe eventually maintainers. 0:14:58.602,0:15:02.260 These are all here. [br]I'll highlight a couple 0:15:02.490,0:15:05.685 Let's talk about that.[br]I'll just highlight that second one: 0:15:05.759,0:15:10.989 Have forms of participation[br]that are legitimate in your projects, 0:15:10.989,0:15:17.213 that are valued,[br]that are not writing code, 0:15:17.213,0:15:22.530 that are on ramps and[br]then those last two I think are very interesting to 0:15:23.490,0:15:30.581 To explicitly acknowledge all contributions.[br]To have a culture around your project 0:15:30.581,0:15:36.310 that doesn't let contributions just,[br]kind of get, you know, swept away 0:15:36.310,0:15:39.355 and also to follow up both on success and failure. 0:15:39.355,0:15:44.620 If someone opens an issue or submits[br]a PR that is not a good fit, 0:15:44.620,0:15:49.200 To follow up on both the things [br]that succeed and fail. 0:15:49.280,0:15:51.870 So, what we just went through in those slides 0:15:51.870,0:15:58.840 are just some summary and thoughts[br]on the current situation. 0:15:58.840,0:16:00.867 So a little bit of research of what we know. 0:16:00.867,0:16:01.487 You can go to the next slide. 0:16:01.487,0:16:05.710 The rest of the time that we're going to have[br]here is going to be a panel discussion 0:16:05.780,0:16:13.080 If my phone tethering holds up,[br]I am going to moderate this panel of folks 0:16:13.080,0:16:16.905 who are going to talk about some of[br]our experiences. 0:16:16.905,0:16:22.810 Some of our opinions on maintaining[br]R packages. 0:16:22.810,0:16:27.011 And if you will, the next slide that will[br]just have some of the references. 0:16:27.011,0:16:29.895 Just to thank you.[br]Where some of those images. 0:16:29.895,0:16:33.595 And a thank you to Scott for some[br]of the research that he shared. 0:16:33.595,0:16:36.365 So thank you to all that. 0:16:36.365,0:16:41.915 And I think with that, [br]we can get started with our discussion. 0:16:43.530,0:16:47.434 Alright. So if you're -- [br]So, panelists: Leo and... 0:16:47.434,0:16:55.030 So our panelists are:[br]Leo, and Elin, and Scott, and Erin. 0:16:55.670,0:17:01.039 So, you all have been introduced,[br]but can you unmute? 0:17:01.039,0:17:04.356 And then, to get started, [br]I think the first question 0:17:04.356,0:17:09.983 I would love to have us discuss is:[br]What does it mean to maintain an R package? 0:17:09.983,0:17:11.043 This is what we're talking about. 0:17:11.043,0:17:14.202 So, I would love to get[br]your perspective on that. 0:17:14.202,0:17:19.280 So let's go around and so, briefly,[br]let's first have all four of you all say like 0:17:19.280,0:17:23.886 What do you, like -- what does it mean to[br]maintain R packages? So Elin, can you start? 0:17:24.487,0:17:28.580 So I think it means a couple of different things, 0:17:28.684,0:17:33.246 There is this very specific thing,[br]that term you use 'committer' before, 0:17:33.246,0:17:37.240 which is people who can commit[br]to the master branch 0:17:37.240,0:17:44.380 And in CRAN like the person whose name[br]is going to be there as the email address for 0:17:44.485,0:17:47.583 and make the submission[br]and they're going to be the prime contact 0:17:47.583,0:17:51.490 So that's one definition[br]which is kind of the traditional 0:17:52.047,0:17:54.158 open-source way of thinking about it. 0:17:54.233,0:17:57.246 But then there is kind of,[br]I think what you're getting to, 0:17:57.246,0:18:01.987 bigger possible group of people[br]who are invested in making sure 0:18:01.987,0:18:03.909 that the package is maintained. 0:18:03.909,0:18:06.539 Meaning keeping --[br]just like maintenance on anything, 0:18:06.539,0:18:09.170 keeping it up to date, dealing with bugs, 0:18:10.900,0:18:17.516 what happens when you stop working,[br]because some other package updated 0:18:17.516,0:18:19.955 or because R, base R, change something 0:18:21.017,0:18:23.070 So someone who participates in that. 0:18:23.070,0:18:27.245 And then also, potentially, [br]in all the other areas you were mentioning. 0:18:27.245,0:18:30.102 Yeah yeah nice! Scott? 0:18:30.102,0:18:32.959 What do you think it means [br]to maintain an R package? 0:18:34.608,0:18:39.545 [Scott] Um, there's a lot of details, I guess.[br]But I think that a very... 0:18:39.800,0:18:42.058 Can you hear me good?[br][Julia and Stefanie] Yeah. 0:18:42.058,0:18:47.806 At a very high level, I guess, [br]the thing that came to mind first for me 0:18:47.806,0:18:50.876 was just that it's like [br]a constant learning process. 0:18:51.010,0:18:54.555 A constant, sort of like,[br]trying to figure out 0:18:55.983,0:19:01.739 how to do any particular thing better,[br]whether it's testing or function compos-- 0:19:01.739,0:19:05.430 like how your function is composed,[br]the parameters or whatever. 0:19:06.023,0:19:10.474 And I think another point,[br]about the second point that I came up with 0:19:10.474,0:19:15.512 was sort of constantly learning[br]how to design better function interfaces. 0:19:15.512,0:19:18.480 You know how the functions are named,[br]and the parameters are named, 0:19:18.480,0:19:23.620 and how their default values, [br]their -- stuff like that. 0:19:23.620,0:19:29.690 So I think this is constant learning process [br]of how to design easy to use interfaces. 0:19:29.690,0:19:33.672 [Julia:] Yeah yeah yeah yeah,[br]all of what you both you just said 0:19:33.672,0:19:39.696 really resonate with my own experience [br]with like the different packages I maintained. 0:19:39.696,0:19:43.240 Erin, when you think of like,[br]maintaining an R package, 0:19:43.240,0:19:45.280 what do you think that actually means? 0:19:45.610,0:19:51.390 [Erin] Yeah, first of all, [br]I agree with everything the other panelists said 0:19:51.930,0:19:53.940 Something that hadn't been mentioned, I think, is 0:19:54.180,0:20:01.523 the sort of ownership around community [br]and communication of the package. 0:20:01.523,0:20:09.975 So, being the person who responds to issues[br]or is looking at push requests, 0:20:10.315,0:20:17.962 and really, like, dealing with the communication[br]out to contributors or to users 0:20:17.962,0:20:22.688 on either changes or what's happening[br]with the package. 0:20:22.688,0:20:26.653 [Julia] Yeah. Nice![br]Yeah, that's absolutely, that's really great 0:20:26.653,0:20:31.041 And then Leo, what do you -- what about --[br]what's your response to this? 0:20:31.041,0:20:34.195 What do you think it means means [br]to maintain an R package? 0:20:34.650,0:20:39.212 [Leo] So I'm going to echo[br]what some of the other panelists said 0:20:39.212,0:20:42.570 but for me it's like you deal [br]with the questions you get from users. 0:20:42.602,0:20:46.294 You approve or disapprove changes [br]that you receive from others 0:20:46.294,0:20:49.320 and you end up learning [br]about community guidelines, 0:20:49.320,0:20:52.346 like my case like the Bioconductor guidelines. 0:20:52.590,0:20:57.775 And then you also have to -- [br]you end up learning about like are R-devel 0:20:57.775,0:21:01.998 and what changes are coming,[br]how to anticipate those changes, 0:21:01.998,0:21:05.290 such that you can fix them [br]before the user sees them. 0:21:05.890,0:21:07.453 [Julia] Yeah, that's great. 0:21:07.453,0:21:13.690 So one thing I heard a lot of you mention[br]was like deal -- understanding users, 0:21:13.690,0:21:18.591 hearing from users...[br]and, the issue of like user feedback 0:21:18.591,0:21:22.625 I think is a really interesting one[br]when it comes to maintaining R packages. 0:21:22.765,0:21:24.382 So some R packa -- 0:21:24.382,0:21:28.799 So some, you know, pieces of software [br]are in the situation where you're like -- 0:21:28.799,0:21:35.599 [inaudible] 0:21:35.710,0:21:38.069 [Erin] I think we lost you. 0:21:38.359,0:21:41.230 [Stefanie] Julia? We just lost your sound. 0:21:44.060,0:21:47.269 Folks, we have a backup plan.[br]And for those of you in here: 0:21:47.560,0:21:50.780 Julia lost internet [br]due to an earthquake today. 0:21:51.510,0:21:53.469 [Julia] But, you know, on the other -- 0:21:53.469,0:21:58.290 [Stefanie] Oh! Julia! Hold on.[br]We lost you for like 40 seconds. 0:21:58.290,0:21:59.321 [Julia] Oh, okay. 0:21:59.321,0:22:03.141 [Stefanie] Could you please restart by asking[br]the question that you were just about to ask? 0:22:03.141,0:22:04.735 [Julia] Sure. Sure... 0:22:04.735,0:22:12.720 So user feedback is an issue[br]that R packages need to deal with 0:22:12.720,0:22:19.330 and many packages need more contributors, [br]not fewer 0:22:19.330,0:22:21.975 and so we often want to encourage[br]user feedback. 0:22:21.975,0:22:26.377 At the same time,[br]some packages are in the situation 0:22:26.377,0:22:29.280 where they have a fire hose [br]of user feedback 0:22:29.780,0:22:35.631 And that fire hose [br]can sometimes feel like -- 0:22:37.727,0:22:39.660 You need to manage that. 0:22:40.807,0:22:44.588 How do you manage that? [br]What kind of situations have you been in? 0:22:44.588,0:22:49.349 What strategies do you use [br]to deal with user feedback? 0:22:49.559,0:22:54.344 Elin, can you start with this first [br]because I think I've heard 0:22:54.344,0:22:59.690 you have some interesting perspectives on this, [br]especially as someone who -- 0:22:59.690,0:23:03.695 with skimr as a very popular package. 0:23:03.695,0:23:08.877 (Erin) Sure. So skimr is pretty popular 0:23:08.877,0:23:12.471 and we do get [br]a lot of different kinds of user feedback 0:23:12.471,0:23:15.957 we get people who want to know[br]how to do things in skimr, 0:23:15.957,0:23:17.332 they have questions about it. 0:23:17.332,0:23:24.441 We have people who want to make,[br]you know, suggestions for future development. 0:23:24.441,0:23:27.772 And then we get people with issue reports[br]and -- 0:23:27.965,0:23:30.122 I will say... it -- 0:23:30.122,0:23:34.081 when I said having users changes everything,[br]it really does 0:23:34.081,0:23:36.825 because you do have kind of a relationship[br]with them 0:23:36.825,0:23:39.830 and they're using -- [br]you've kind of -- 0:23:39.830,0:23:43.924 It's complex, right? [br]Because you've kind of given them something 0:23:43.924,0:23:48.785 And you want them to be grateful[br]that you gave them this thing 0:23:48.785,0:23:52.038 and but you also, you know, in terms of -- 0:23:52.038,0:23:55.814 if you're enjoying your package [br]and you're developing it, 0:23:55.814,0:23:57.621 and you want to find out what's wrong. 0:23:57.621,0:24:01.359 So it's kind of like you feel good [br]when people are asking you 0:24:01.359,0:24:03.585 and tweeting to you and stuff like that. 0:24:03.585,0:24:08.330 But it can also get a little bit overwhelming. [br]I will say -- 0:24:08.330,0:24:14.073 And skimr is kind of a strange case [br]because it was first developed at the unconf. 0:24:14.073,0:24:19.512 And so people were tweeting about it like[br]before it was finished, 0:24:19.660,0:24:23.445 before even like the first prototype[br]was finished. 0:24:23.445,0:24:29.289 And so we had a lot of feedback right away[br]about ideas of things to do 0:24:29.289,0:24:35.419 and people started using it. 0:24:35.419,0:24:39.676 Um, and so I'll just tell you [br]how I kind of think about dividing it up 0:24:39.676,0:24:41.213 like one thing I did was: 0:24:41.213,0:24:48.128 within two weeks we had questions[br]on StackOverflow about skimr. 0:24:48.128,0:24:51.888 And so in the end, [br]once it got to like five questions, 0:24:51.888,0:24:55.334 I just created a tag. [br]And so I have a tag that I follow. 0:24:55.334,0:24:57.606 And I find that's helpful. 0:24:57.606,0:25:01.170 We don't get that many questions anymore[br]over there, but -- 0:25:01.170,0:25:05.223 And then we have our issue tracker. 0:25:05.223,0:25:10.476 It's the main place where people show up [br]and it's really helpful in a way 0:25:10.476,0:25:15.858 because we have some kind of heavy users[br]who come in and say: 0:25:15.858,0:25:21.559 "hey, if you're on the development version of tibble, [br]it doesn't work anymore because this happened." 0:25:21.559,0:25:26.230 And so that's helping us[br]keep a little bit ahead of the game 0:25:26.230,0:25:32.838 because you don't want to find out [br]that it breaks with the development version of tibble, 0:25:32.838,0:25:39.801 the day that there's a release[br]and they can be really helpful with that, 0:25:40.561,0:25:43.710 On the other hand, the whole issue of -- 0:25:44.640,0:25:50.390 You know, if you have a package [br]that you're keeping for multiple years now. 0:25:50.390,0:25:54.439 You have things like your code style [br]that you want to enforce 0:25:54.439,0:25:56.940 like we use spaces some places and 0:25:56.940,0:26:03.206 and we want to use the assignment operator[br]and not the equal sign and things like that... 0:26:03.206,0:26:07.539 And so sometimes it's hard when users [br]want to send a pull request. 0:26:07.539,0:26:10.917 And then you want them --[br]you want to encourage them to contribute, 0:26:10.917,0:26:12.331 but you don't want them -- 0:26:12.331,0:26:18.227 no, it feels kind of like [br]you're being so OCD on like saying: 0:26:18.260,0:26:20.696 "Hey, would you mind adding a space here?" 0:26:20.696,0:26:25.433 And so I find it challenging to find the balance[br]with that in terms of saying 0:26:25.433,0:26:29.421 I'll just fix it for you, versus asking them to fix. 0:26:29.765,0:26:33.234 [Julia] Yeah, yeah, there was -- some of the[br]things you said in there in terms of like, 0:26:33.234,0:26:37.145 you know, following a tag[br]on StackOverflow, or 0:26:38.362,0:26:44.006 You know, getting that note of should I edit a PR[br]afterwards versus interacting with somebody? 0:26:44.006,0:26:46.590 Are things that I also have,[br]kind of had to figure out, 0:26:46.590,0:26:50.608 like, what am I, what am I going to do.[br]And so that's interesting. 0:26:50.608,0:26:58.143 Um, you addressed some of the issues [br]around also managing feature requests as well, 0:26:58.143,0:27:00.149 which was another interesting question. 0:27:00.149,0:27:03.450 So Leo. I think you um -- 0:27:04.342,0:27:08.524 I wanted to ask you about that issue [br]of hearing from users 0:27:08.524,0:27:11.177 as someone who works [br]on more specialized packages. 0:27:12.105,0:27:14.815 [Leo] Yes, so the packages [br]I work with on Bioconductor, 0:27:14.815,0:27:16.719 they don't have as many users 0:27:16.719,0:27:18.392 [inaudible] 0:27:18.392,0:27:20.805 you needed some very expensive data[br]sometimes 0:27:22.372,0:27:23.586 in order to use them. 0:27:23.586,0:27:28.881 And so the issue I deal with is that 0:27:28.881,0:27:33.092 from one side we have open source tools[br]and we want to provide them 0:27:33.092,0:27:36.293 and you know for free and build [br]a community around them. 0:27:36.293,0:27:40.111 But the other side, sometimes we have people[br]that have this expensive private data. 0:27:40.111,0:27:45.011 Some published under scared about sharing it,[br]even when they have questions. 0:27:45.011,0:27:47.734 So you end up getting a lot of emails. 0:27:48.370,0:27:52.737 And I try to convince them saying [br]that this doesn't really benefit anyone 0:27:52.737,0:27:57.901 Because I mean, I learn from the experience. [br]They learn from the experience, 0:27:57.901,0:27:59.503 but no one else really does. 0:27:59.503,0:28:05.569 So I tried to convince them to put[br]their questions on the Bioconductor support website 0:28:05.820,0:28:10.268 and through it share small reproducible examples. 0:28:10.853,0:28:13.711 Sometimes I can write a blog post [br]about the question, 0:28:13.711,0:28:15.449 but that's a lot more work for me. 0:28:15.740,0:28:18.283 [Julia] Yeah yeah[br]Yeah, yeah, no, the same. 0:28:18.283,0:28:20.786 I bet this happens to a lot of folks[br]who maintain packages. 0:28:20.786,0:28:22.678 You get the email and and [br]then that's what I do too actually is like, 0:28:24.530,0:28:29.025 And sometimes, I will like help the person[br]write the reprex 0:28:29.025,0:28:31.477 and then be like now post it because then it's like, 0:28:31.477,0:28:34.613 well now at least this person knows[br]how to post a reprex 0:28:34.613,0:28:40.201 and can do it next time,[br]because helping someone over email is not -- 0:28:40.201,0:28:43.552 doesn't multiply in the way [br]that like public stuff does. Exactly. 0:28:43.822,0:28:44.620 We've touched a little bit -- 0:28:44.620,0:28:47.593 [Leo ] Sorry, just for that, like -- [br]what I tried to reward them with 0:28:47.593,0:28:51.220 is answering as fast as I can, but 0:28:51.250,0:28:51.740 (Julia) Yeah. 0:28:51.790,0:28:53.017 [Leo] questions they make. 0:28:53.017,0:28:56.059 [Julia] Yes.[br]Yes, being really responsive on those channels. 0:28:56.059,0:29:00.368 We have already touched a little bit on, [br]like managing issues and feature request, 0:29:00.368,0:29:03.904 but I wanted to get maybe [br]one other person's perspective on that, 0:29:03.904,0:29:05.661 like about workflows, or whatever. 0:29:05.661,0:29:09.857 Scott, you have a ton of packages, 0:29:09.857,0:29:17.115 and I wonder if you have any perspective [br]on user, on issues, feature requests 0:29:17.115,0:29:19.784 and any thoughts on like workflows[br]around that. 0:29:22.490,0:29:25.637 [Scott] Um, yeah, I guess I have [br]a lot of packages 0:29:25.637,0:29:27.671 but none of them are very popular. 0:29:27.671,0:29:32.565 So I think it's -- I don't really have [br]that sort of tidyverse problem. 0:29:33.665,0:29:40.810 So, but, you know, things I try and do. [br]Or I think Leo said this, you know, responding. 0:29:40.810,0:29:44.222 I try and respond to all issues quickly, [br]even if I just say: 0:29:44.222,0:29:46.288 'Hey, I got it. [br]And I'm going to have a look at it.' 0:29:46.540,0:29:51.667 I think it's important to sort of give people[br]that feedback so they don't walk away 0:29:51.667,0:29:53.408 from your package. 0:29:53.408,0:29:57.364 And I think that's likely going to happen [br]if they don't have a response. 0:29:57.444,0:29:58.776 [Julia] Yeah. Absolutely. 0:29:58.776,0:30:01.788 [Scott] Um, and then feature requests... 0:30:02.814,0:30:07.520 I think it's always good advice[br]to think about scope creep 0:30:08.040,0:30:10.967 And if you're, you know -- [br]if something's out of scope, 0:30:10.967,0:30:15.288 then make sure to say that[br]and just, yeah. And instead of -- 0:30:15.288,0:30:22.487 try not to get your package [br]to be too disjointed for users. 0:30:24.086,0:30:25.883 [Julia] Yeah. Nice. Nice. 0:30:25.883,0:30:28.840 Alright, so one of the goals that -[br]like one of the motivating goals 0:30:28.840,0:30:33.880 for this discussion is that, [br]hey, most packages only have one maintainer. 0:30:33.900,0:30:36.869 And it'd be better [br]if there was a broader 0:30:36.869,0:30:39.459 broader groups of people [br]who can maintain. 0:30:39.459,0:30:46.370 So what is a path for someone, [br]for new contributors to R packages. 0:30:46.660,0:30:48.956 So, for example, what it would be a first step. 0:30:48.956,0:30:53.710 What should someone do [br]if they want to help maintain one of your packages? 0:30:53.710,0:30:57.629 So let's um... so Erin:[br]can you say that, 0:30:57.629,0:31:00.870 so you've got like some up [br]like a public package on GitHub. 0:31:00.870,0:31:03.254 You maintain packages internally. 0:31:03.254,0:31:05.818 What should someone do [br]if they want to help with one of your packages? 0:31:07.424,0:31:10.010 [Erin] Yeah, I'll take this [br]from the internal side. 0:31:10.300,0:31:14.931 Because I think that's a perspective that[br]I come from a lot more often. 0:31:15.310,0:31:21.409 Because I have like four packages [br]in that case in one package external 0:31:21.409,0:31:28.280 but in terms of how do I look for[br]new contributors and maintainers, 0:31:28.400,0:31:33.502 a lot of my communication and issues [br]and features or feature requests 0:31:33.502,0:31:37.115 for an internal package [br]or like a work specific package. 0:31:37.229,0:31:42.627 Come via slack, even though [br]the package is hosted on on GitHub, or Gitlab. 0:31:42.627,0:31:47.760 The questions and comments and issues[br]come in via like a different tool. 0:31:48.263,0:31:54.726 So if someone is constantly asking questions [br]or constantly asking for features, 0:31:54.726,0:31:57.858 it's pretty easy to be like, all right, [br]will onboard you to this package 0:31:57.858,0:32:01.400 and then voila, [br]you may update it yourself! 0:32:03.768,0:32:10.519 Exactly. So I think like, for me, [br]if you're interested in the package, 0:32:10.519,0:32:13.823 if you have questions on the package 0:32:13.823,0:32:21.031 and if you've like shown an ability [br]to contribute to any package at all before 0:32:21.031,0:32:25.740 I think one like first initial step is [br]to have your own package 0:32:25.740,0:32:27.703 or have something [br]that you've contributed somewhere 0:32:27.703,0:32:31.039 just to show that you know [br]what an R package is in the first place. 0:32:31.740,0:32:36.833 But really motivation is the, [br]the important thing. 0:32:36.921,0:32:39.996 [Julia] Yeah. Nice. Nice.[br]What about you, Scott? 0:32:39.996,0:32:43.416 What, like what do you see [br]as like a path for someone to get on? 0:32:43.416,0:32:47.784 And what would be like the first [br]like a first step for someone who is interested ? 0:32:49.577,0:32:52.103 [Scott] Yeah, I guess my first, [br]my main point was 0:32:52.103,0:32:56.369 what Erin already said was essentially is, [br]you know, 0:32:56.369,0:33:01.198 From my experience, like [br]the most successful sort of new contributors 0:33:01.198,0:33:05.218 are people that end up [br]taking over packages or contribute a lot 0:33:05.218,0:33:08.868 or people that use the package [br]and their package is a dependency 0:33:08.868,0:33:10.693 or in a project or whatever. 0:33:10.693,0:33:15.664 And so they sort of have this at least short term,[br]you know vested interest in the package 0:33:15.664,0:33:20.006 because you know you have [br]drive by contributors that will fix a bug 0:33:20.006,0:33:22.398 or do this or that. 0:33:22.398,0:33:27.244 But it's often [br]when your package is a dependency 0:33:27.244,0:33:30.327 or sort of major part of somebody's project [br]or something. 0:33:30.327,0:33:35.310 And so that's always a good, [br]a good place to find contributors. Um, yeah. 0:33:36.871,0:33:41.356 [Julia] Yes. Well, speaking of dependencies, [br]speaking of dependencies... 0:33:41.356,0:33:43.362 That's a big part. 0:33:43.362,0:33:48.691 I mean, that's a big bit of like the decisions [br]around maintaining an R package 0:33:48.691,0:33:53.001 like deciding what do I want to take on [br]as a dependency. 0:33:53.786,0:33:57.801 Like do I want to, do I want to...[br]like what do I want to depend on 0:33:58.811,0:34:03.802 Do I want to like rewrite something internally [br]or take on dependency, 0:34:03.802,0:34:10.493 like everything from like something like, [br]you know, off to some little algorithm or whatever. 0:34:10.743,0:34:15.157 So, so I would love to hear something[br]about that. 0:34:15.157,0:34:19.891 So Leo, what are some of the thoughts [br]you have had 0:34:19.891,0:34:22.222 as you have made those decisions [br]in your packages? 0:34:22.718,0:34:27.447 [Leo] Yes. [br]So, in the Bioconductor realm, 0:34:28.025,0:34:33.255 there's the Bioconductor core team [br]that they did their own grants and funding 0:34:33.255,0:34:37.580 and they maintain the core packages,[br]the core infrastructure packages. 0:34:37.580,0:34:39.237 So I tried to depend on those 0:34:39.237,0:34:41.855 because I know [br]they're going to be professionally maintained. 0:34:42.929,0:34:45.687 Also they have access to your package. 0:34:45.687,0:34:50.705 So if you depend on them [br]and they make change that breaks your package, 0:34:50.705,0:34:55.004 they can actually go and fix yours[br]without you actually doing anything. 0:34:56.746,0:34:59.817 And similarly, we try to rely on [br]like the tidyverse packages, 0:34:59.817,0:35:07.142 because I know that they're well funded [br]to keep working on the packages and and fix them. 0:35:07.142,0:35:12.531 But I also like to depend on packages [br]from authors that I have interacted with in the past. 0:35:12.531,0:35:16.480 That's also sometimes [br]how I find out about this packages from like-- 0:35:16.570,0:35:18.030 [Julia] Yeah yeah 0:35:18.490,0:35:22.788 Yeah yeah yeah yeah that --[br]yeah, those that -- So yeah, 0:35:22.788,0:35:25.240 so things that you know [br]are stable projects, 0:35:25.240,0:35:27.602 things that you know [br]you have relationships with people, 0:35:27.602,0:35:30.015 that you'll be able to communicate with. 0:35:30.015,0:35:32.382 Yeah, that all, that all makes sense. 0:35:32.382,0:35:36.841 Another, um, some -- [br]so there's dependencies, 0:35:36.841,0:35:40.640 and then there's --[br]then, there are also 0:35:41.380,0:35:45.625 like other things that so they can change,[br]right and you have to manage that. 0:35:45.625,0:35:48.557 Then there's also APIs that can change. 0:35:48.557,0:35:54.800 So like Erin, your package that's on GitHub [br]is an API package, right? 0:35:56.160,0:35:58.066 [Erin] Yeah, exactly! 0:35:58.106,0:36:02.931 [Julia] And like, so you have to, [br]you have to like pay attention to 0:36:02.931,0:36:04.777 when the API itself changes. 0:36:06.874,0:36:11.273 [Erin] Yeah, precisely so as an example: 0:36:12.563,0:36:18.131 Astronomy Picture of the Day, or APOD[br]as it's more commonly called 0:36:18.131,0:36:23.361 can either post a, like a picture [br]or an image or a gif. 0:36:23.361,0:36:27.346 And then all of that information is supposed [br]to get transferred back into the API. 0:36:27.346,0:36:30.871 But for a really long time,[br]there was an error. 0:36:30.871,0:36:35.959 Anytime there was the -- [br]with the API, anytime there was a video 0:36:35.959,0:36:37.521 that was accessed. 0:36:37.521,0:36:41.768 So it was able to basically download [br]any information about any pictures 0:36:41.768,0:36:44.764 but any time there was a video, [br]there was a problem. 0:36:45.060,0:36:48.033 So I wrote in this like whole test. 0:36:48.033,0:36:54.337 Like: if video,[br]do not pull this day of information. 0:36:54.690,0:37:00.245 So that the user doesn't see the error,[br]they just don't get an image back 0:37:00.245,0:37:02.304 and then they fixed the -- 0:37:02.304,0:37:03.850 [Julia] They fixed it! 0:37:03.890,0:37:09.757 [Erin] Making my whole [br]little workaround unnecessary. 0:37:10.131,0:37:12.298 So like keeping on track of like 0:37:12.298,0:37:15.651 (a) what's like issues [br]are happening in the API 0:37:15.651,0:37:18.972 to either like find workarounds [br]or solve them 0:37:18.972,0:37:26.806 or even like do a pull request to this[br]like API source to fix it for them. 0:37:27.466,0:37:31.149 I think it's like an important part [br]of maintaining 0:37:31.149,0:37:36.219 a package solely based on [br]an API structure. 0:37:36.219,0:37:37.990 [Julia] Yeah and you know that's, um -- 0:37:38.120,0:37:41.950 There are a lot of parallels just with[br]Just with like if you're dependent 0:37:41.950,0:37:45.725 on another R package in general, you know,[br]like everything you just said about the API, 0:37:45.725,0:37:49.748 that happens with just other software[br]that you're dependent on. 0:37:49.748,0:37:54.955 Either other R packages or non-R software,[br]you know, and that is for sure 0:37:54.955,0:38:01.830 part of this whole deal and like,[br]choosing carefully what software 0:38:02.120,0:38:05.348 Are you going to decide to use or not. 0:38:05.348,0:38:09.777 And, you know, people do -- [br]you know Leonardo shared his perspective. 0:38:09.777,0:38:13.216 But people have different sets of priorities[br]they bring to that 0:38:13.216,0:38:18.081 and make different decisions,[br]depending on their own perspective 0:38:18.081,0:38:20.770 which I think is, you know, makes sense [br]and it's fine. 0:38:20.770,0:38:23.460 Um, one thing that happens in packages, is that 0:38:25.790,0:38:26.500 They that 0:38:27.620,0:38:30.345 Packages don't keep the maintainer forever. 0:38:30.345,0:38:32.700 I mean we you know we are talking [br]about the fact that, 0:38:32.700,0:38:34.880 like the qualtRics package [br]had a different maintainer. 0:38:34.880,0:38:38.010 He wasn't using it anymore.[br]And then I started maintaining it. 0:38:38.090,0:38:42.300 And actually, like, since I moved --[br]I switched jobs from StackOverflow to RStudio 0:38:43.130,0:38:46.915 RStudio doesn't use qualtRics for surveys [br]and so I'm actually -- 0:38:46.915,0:38:50.667 Like I kind of have a stopgap [br]saying in place for now, 0:38:50.667,0:38:54.780 but I'm gonna, I'm actually looking for someone else[br]to take over qualtRics in the long term. 0:38:55.337,0:38:56.580 Because it like -- 0:38:56.580,0:39:00.730 it is better, if it's someone who uses it,[br]who is actually actively using it so that 0:39:01.140,0:39:05.610 So this is something that has to happen [br]in real in the real world is that 0:39:05.610,0:39:10.080 maintainers, packages, pieces of software [br]have to change and maintainers. 0:39:10.080,0:39:13.516 And so I'm wondering what sets -- 0:39:13.516,0:39:18.898 if you have experienced this, [br]what sets that up for success? 0:39:18.898,0:39:24.781 And this is something that probably [br]looks different in open source software 0:39:24.781,0:39:29.690 versus internal packages [br]versus, you know, and really big packages 0:39:29.690,0:39:31.255 versus small packages. 0:39:31.255,0:39:39.267 So maybe, Scott, can you talk about[br]what this has looked like for you? 0:39:39.267,0:39:44.274 You know, how you would manage that, [br]say in rOpenSci? 0:39:45.730,0:39:46.790 [Scott] Yeah. 0:39:47.618,0:39:51.780 So for most of the ones [br]I've been involved with 0:39:52.400,0:39:59.310 They'd mostly been sort of [br]wholesale letting somebody else 0:39:59.310,0:40:01.968 manage the package without [br]sort of me being involved. 0:40:01.968,0:40:07.985 And so that's mostly what's happened[br]and I think that's worked okay 0:40:07.985,0:40:13.930 and I think like one of the things [br]that you have to be okay with those sort of giving up 0:40:13.930,0:40:18.080 being okay with giving up control [br]of your baby. 0:40:18.232,0:40:19.530 [Julia] Yeah, it's not yours anymore so... 0:40:19.530,0:40:24.040 [Scott] Yeah, that can be hard, but you know, [br]you just have to sort of say, 0:40:24.040,0:40:29.095 you know, the new person Is the maintainer[br]and if they want to change the functions 0:40:29.095,0:40:32.620 and whatever, like it's you know [br]it's their package, they're the maintainer. 0:40:33.190,0:40:37.630 I think it's it's worked pretty well, [br]but I think an important thing is being there. 0:40:37.700,0:40:41.360 Being, you have to sort of be available [br]at least for a little while 0:40:41.360,0:40:46.319 for people to get oriented [br]and that can take some time. 0:40:46.319,0:40:49.897 And I think an important thing [br]when looking for a new maintainer 0:40:49.897,0:40:52.628 is trying to find somebody [br]that knows the topic area. 0:40:52.858,0:40:53.784 [Julia] Yes, absolutely. 0:40:53.784,0:40:56.524 [Scott] That's like [br]if it's a genomics package, 0:40:56.524,0:41:00.155 then it should be somebody in genomics probably[br]because they're going to maybe use it 0:41:00.155,0:41:05.127 and maybe know the area [br]know this sort of ins and outs of that type of data. 0:41:05.127,0:41:07.180 So. Yeah. 0:41:07.770,0:41:08.914 [Julia] Yeah, all right. 0:41:08.914,0:41:13.709 Erin, can you reflect on that maybe [br]in the internal package domain. 0:41:13.709,0:41:17.250 Like what, like, what does it[br]take to pass things off well 0:41:17.250,0:41:22.124 because that, actually in my experience, [br]it happens a lot in internal 0:41:22.124,0:41:23.750 because people change jobs. 0:41:24.410,0:41:25.629 [Erin] Yeah, exactly. 0:41:25.629,0:41:29.704 I think one of the major differences [br]that I've seen with passing an internal package 0:41:29.704,0:41:33.780 is the like time of notice 0:41:33.780,0:41:35.220 [Julia] Yeah. 0:41:35.220,0:41:38.585 [Erin] Someone switching jobs, [br]they may not tell the other people 0:41:38.585,0:41:41.554 that there's two things out until [br]the like two weeks beforehand, 0:41:41.554,0:41:46.082 in which case they have a lot[br]of other things to offboard. 0:41:46.082,0:41:49.890 That might not be top priority. 0:41:49.890,0:41:56.541 So I think it comes to having [br]clear like guidelines 0:41:56.541,0:42:00.080 around what the package does,[br]the style of the code, where it's located, 0:42:00.150,0:42:06.350 where questions and answers happen [br]like a side effect in Slack 0:42:06.350,0:42:11.810 or effect in GitHub in a way [br]to sort of pass off everything 0:42:11.810,0:42:14.530 through written documentation 0:42:14.530,0:42:18.830 if like in person or [br]over zoom communication 0:42:18.830,0:42:24.940 like can't happen due to [br]other time commitment or at work. 0:42:25.350,0:42:32.250 But if like possible, then having [br]like a real like onboarding experience 0:42:32.250,0:42:35.995 of walking someone through [br]the ins and outs of a package, 0:42:35.995,0:42:38.057 I've found to be very useful. 0:42:38.057,0:42:40.720 But there's not always [br]a lot of time for it. 0:42:41.270,0:42:43.138 [Julia] Absolutely. Absolutely. 0:42:43.138,0:42:47.670 All right, one question I'd like to ask[br]Is about the decision 0:42:47.670,0:42:56.231 to submit a package to some kind of like [br]centralized repository like CRAN or Bioconductor 0:42:56.231,0:43:00.760 or to do something like peer review, [br]like rOpenSci, 0:43:00.760,0:43:06.619 Or just the Journal of Open Source Software [br]versus maybe to say only on GitHub. 0:43:06.619,0:43:10.579 And Elin, I was wondering, [br]so you know you maybe in the context of 0:43:10.579,0:43:12.499 you've worked in a lot of [br]different kinds of software, 0:43:12.499,0:43:15.969 but then you had skimr [br]you all started it at the unconf 0:43:15.969,0:43:20.520 and then you know, [br]so it was rOpenSci package 0:43:20.520,0:43:22.239 and then you did decide [br]to submit it to CRAN 0:43:22.239,0:43:27.707 like what do you think, how do you, [br]what do you think are the right decisions 0:43:27.707,0:43:31.560 to consider when deciding [br]when making those decisions? 0:43:32.140,0:43:36.540 [Elin] So it's good [br]because it's a really good question. 0:43:36.640,0:43:42.688 We took a while to decide [br]to submit it to CRAN 0:43:42.688,0:43:47.175 like at first we were just working on [br]getting the functionality and thinking about it. 0:43:47.175,0:43:51.031 And we reverted we -- [br]you know version numbers are really important. 0:43:51.031,0:43:55.625 And at the conference at the unconf, [br]we kind of started, we said it's version one 0:43:55.625,0:44:01.430 but then afterwards, a few weeks later,[br]we went back and said it was like version 0.5 instead 0:44:01.430,0:44:04.713 Because once you say it's version one, 0:44:04.713,0:44:08.729 you really kind of making a promise to people[br]that it's going to work. 0:44:08.729,0:44:13.779 And if you, you can always if it's less than one[br]Kind of, say, it doesn't . 0:44:13.779,0:44:15.600 'Yeah we're not promising anything.' 0:44:15.600,0:44:19.270 And you can put that in your README.[br]And definitely when you're going to CRAN, 0:44:19.340,0:44:23.090 All of a sudden, it really, you know, [br]they're going to do what they do. 0:44:23.090,0:44:25.999 Everybody complains, [br]but they're maintainers too, right? 0:44:25.999,0:44:30.793 And so they're going to do what they do[br]to make sure that everything works 0:44:30.793,0:44:36.930 and they're going to find a million little things[br]that you didn't really follow the rules on. 0:44:38.580,0:44:41.865 And then all of a sudden,[br]you have this world of users 0:44:41.865,0:44:45.214 and you've kind of made [br]this published manual on the web 0:44:45.214,0:44:48.937 that anybody can find and[br]it's just a different feeling 0:44:48.937,0:44:52.567 when you once you're in one of those repos,[br]I think in one of those repository. 0:44:52.567,0:44:56.708 With just in GitHub, [br]I actually sometimes don't even put a license. 0:44:56.708,0:45:00.299 I mean, I know they get mad [br]but I just don't put a license sometimes 0:45:00.299,0:45:05.324 because I'm like, I'm not even sure [br]I want people to have that much confidence 0:45:05.324,0:45:09.820 in this package.[br]That they should be using it. 0:45:09.820,0:45:13.409 And you know, I do have another one [br]from the following year's unconf, 0:45:13.409,0:45:15.100 which is called qcoder. 0:45:15.100,0:45:18.065 And we actually have [br]quite a few users of qcoder, 0:45:18.065,0:45:21.277 but not at the same volume, [br]because it's not, you know, 0:45:21.380,0:45:25.495 It could go on CRAN, you know, probably, [br]I could get it ready in a couple weeks. 0:45:25.495,0:45:30.553 But I just, I don't feel like ready[br]to have a lot of users there. 0:45:30.553,0:45:33.777 So I just think you're making [br]that big decision. 0:45:33.777,0:45:38.272 The other thing is, once you're on CRAN,[br]that's actually when -- 0:45:38.272,0:45:41.918 and I'm sure with Bioconductor as well,[br]then all of a sudden you're going to have 0:45:41.918,0:45:47.453 other packages using you as a dependency,[br]and especially because they changed, you know, 0:45:47.453,0:45:54.998 Nobody can use a GitHub package anymore. [br]If you're, you know, in CRAN and so it -- 0:45:54.998,0:45:56.114 but it has, you know -- 0:45:56.114,0:45:59.120 once you have those other people out there,[br]then depending on you, 0:45:59.120,0:46:05.363 that also creates a level of [br]kind of social obligation, social contract 0:46:05.363,0:46:07.420 where, you know, you could say: 0:46:07.420,0:46:10.110 'Okay, I'm just gonna [br]let my package get archived.' 0:46:10.110,0:46:14.106 But then all this other stuff breaks [br]and you know you feel bad about that. 0:46:14.106,0:46:16.130 Well, if you're me anyway. 0:46:17.380,0:46:22.150 So, you're kind of once you're in, [br]it's there. 0:46:22.150,0:46:23.579 There's just a snowballing of it. 0:46:23.579,0:46:27.600 And I feel like in, you know, your GitHub, [br]you can just say: 0:46:27.600,0:46:31.080 'Hey, I put it out there.[br]Feel free to fork it.' 0:46:31.080,0:46:33.789 Right, that's another thing, [br]no one mentioned, right? 0:46:33.789,0:46:38.675 I mean, again in open source, [br]there is kind of the social contract 0:46:38.675,0:46:41.347 that a fork is the last resort. 0:46:41.347,0:46:49.506 But if a maintainer totally ghosts the project,[br]then they someone else can always work the project 0:46:49.506,0:46:53.018 and make the fixes and you know,[br]I certainly have done that. 0:46:53.410,0:46:57.270 Not for public consumption [br]but just for free. 0:46:57.270,0:47:02.717 Yeah, where there's like I use,[br]For teaching I use RStudio Server a lot. 0:47:02.717,0:47:06.340 And there's some packages that don't[br]work well on RStudio Server. 0:47:06.340,0:47:08.967 And so, you know, I have my little fixes. 0:47:08.967,0:47:13.430 They know it's like when you're ready for my bug[br]and interested in supporting it, 0:47:13.430,0:47:17.152 I'll send you my pull request again. 0:47:17.152,0:47:20.481 But I'm not going to like get into an argument [br]with a maintainer about that. 0:47:20.681,0:47:29.011 So it's -- there's just a -- but I do, [br]I feel it is this big you are, it's kind of like going public. 0:47:29.011,0:47:35.398 And now you're out there [br]and you have people depending on you 0:47:35.398,0:47:38.729 and you said you're ready so... 0:47:38.729,0:47:39.504 [Julia] Yeah, yeah. 0:47:39.504,0:47:45.240 No, those are really good thoughts on [br]those decisions to submit to those central repos. 0:47:45.310,0:47:49.683 Okay, so now it's time for our last question.[br]So for our last question. 0:47:49.683,0:47:52.816 I'm gonna -- I want everybody say [br]what their response is, 0:47:52.816,0:47:59.830 maybe just kind of in like one sentence,[br]if at all possible, and just like one sentence. 0:47:59.960,0:48:09.160 So, for this last question, let's say, let's all say, [br]what does someone need to know 0:48:09.600,0:48:17.563 Like in in terms of like need to know or skills[br]to start maintaining a package? 0:48:17.563,0:48:20.765 So, Leonardo, can you go first? 0:48:20.765,0:48:23.967 What does someone need to know[br]to start maintaining a package? 0:48:25.098,0:48:28.839 [Leo] Okay, so for me it's:[br]you have to be willing to communicate regularly. 0:48:28.839,0:48:32.820 So that means responding emails [br]or slack messages in a timely fashion. 0:48:32.820,0:48:36.670 You have to also learn how to ask questions[br]in such a way that others can help you fast 0:48:36.670,0:48:41.522 and ultimately need to practice patience [br]and be patient with yourself, 0:48:41.522,0:48:44.076 be patient with others [br]and practice empathy with others 0:48:44.076,0:48:47.629 because they're helping you[br]with their time. 0:48:47.710,0:48:49.785 [Julia] I love it, I love it. Fantastic. 0:48:49.785,0:48:55.720 Erin, what do you think people need [br]to know to start maintaining a package? 0:48:56.056,0:48:59.730 [Erin] Leo stole my answer.[br]But I will reiterate it. 0:48:59.730,0:49:03.690 What is like really [br]good communication skills. 0:49:04.630,0:49:09.890 Both to answer questions [br]and to write up really great documentation 0:49:09.918,0:49:15.080 that helps to mitigate[br]the types of questions and issues. 0:49:15.080,0:49:16.460 [Julia] That's awesome! 0:49:16.460,0:49:21.632 Elin, what do you think somebody needs[br]to know to start maintaining an R package? 0:49:22.290,0:49:25.632 [Elin] I think you need to know [br]that you are really willing to do it. 0:49:25.632,0:49:28.420 I think you need to know[br]you really like your package actually. 0:49:28.420,0:49:32.337 Like you don't put a package out[br]in the in the world 0:49:32.337,0:49:36.729 because you want other people [br]to maintain it, right? Or give you bug fixes. 0:49:36.729,0:49:38.394 It's because you want it to work. 0:49:38.394,0:49:40.529 [Julia] Nice. I love that. I love that. 0:49:40.529,0:49:46.362 Scott, what do you think someone needs to[br]know to start maintaining an R package? 0:49:48.247,0:49:53.673 [Scott] So if you're somebody [br]that only writes scripts 0:49:53.673,0:49:59.566 and what -- which I did, you know, [br]the first probably four years of using R. 0:49:59.566,0:50:00.619 Learn functions. 0:50:00.619,0:50:05.460 So you can't really make an R package[br]if you just have scripts. 0:50:05.460,0:50:11.820 So I would say if that's one thing to learn[br]is to learn how to write functions and use them. 0:50:12.220,0:50:17.075 [Julia] Nice. I love that too. Awesome. Awesome! [br]I love this whole discussion that we have had. 0:50:17.075,0:50:22.497 And it really aligns so strongly [br]with the experiences I've had 0:50:22.497,0:50:26.219 maintaining a couple different packages.[br]And when I think about -- 0:50:26.219,0:50:32.290 [br]So, I took on the qualtRics package,[br]which is an rOpenSci package 0:50:32.291,0:50:39.594 for accessing survey data from qualtrics [br]through their API. 0:50:39.594,0:50:43.475 So I took it on from one maintainer [br]from before, 0:50:43.475,0:50:48.814 and now I'm thinking about now, like, what will, [br]like what happens if I, you know like now 0:50:48.814,0:50:50.994 I need to find the new maintainer.,[br]as I pass it on too. 0:50:50.994,0:50:52.997 And as I think about [br]all those things you all said. 0:50:52.997,0:50:55.825 Like what someone needs to know,[br]I agree entirely. 0:50:55.825,0:50:58.510 And I think about like [br]in that particular -- 0:50:58.510,0:51:04.130 One thing I'm going to add, [br]as I think through this. 0:51:04.130,0:51:09.507 Is that, like, really, in an ideal world, [br]like the person is someone 0:51:11.451,0:51:23.870 Someone who is like a user of that,[br]like someone who is kind of the audience. 0:51:23.870,0:51:25.395 Like you can't -- 0:51:25.395,0:51:30.187 And it really aligned with what [br]Elin was saying about you care about that domain. 0:51:30.187,0:51:37.260 And if you're someone who is the audience for that,[br]then you're like: 0:51:37.400,0:51:44.940 'Yep, I'm ready to maintain this because[br]I'm actively using it and know how to fix it!' 0:51:45.240,0:51:50.080 And so that is another --[br]Like for example when I'm -- 0:51:50.080,0:51:52.826 When we're going to be talking about, like, [br]who's going to take over qualtRics? 0:51:52.826,0:51:57.084 Like that's going to be --[br]that's a big part of it, right? 0:51:57.084,0:52:03.362 Like someone who is a person who uses qualtrics[br]and understands how packages are put together, 0:52:03.362,0:52:07.804 and has these responsive communication skills. 0:52:07.804,0:52:12.862 So thank you so much panelists [br]for that wonderful discussion. 0:52:12.862,0:52:16.250 I think that Stefanie is going to wrap us up [br]with a few announcements. 0:52:19.120,0:52:24.179 [Stefanie] I am, thank you so much. [br]My heart is full today. 0:52:24.179,0:52:30.481 This was really such a wonderful discussion.[br]I love it, particularly because this is we thought: 0:52:30.481,0:52:33.574 'Oh, sure. Let's do a community call [br]as a panel discussion.' 0:52:33.574,0:52:38.781 But of course, that could just be [br]so disorganized and people chattering. 0:52:38.781,0:52:41.371 This was very well planned. [br]And I thank the panel so much 0:52:41.371,0:52:45.247 because we all met a week ago[br]to talk about this. 0:52:45.247,0:52:47.930 So this is not [br]what an impromptu panel discussion looks like. 0:52:47.930,0:52:51.730 A lot of work went into this [br]on the part of the panelists. 0:52:51.730,0:52:57.116 And so I thank all of you sincerely. [br]This could not have been more successful I think 0:52:57.116,0:53:00.326 We can even function [br]without Julia's house having internet. 0:53:00.326,0:53:01.710 So this is wild. 0:53:01.800,0:53:06.960 At the peak, we actually had [br]90 participants attending this call. 0:53:06.960,0:53:12.120 So congratulations to everybody for joining. [br]We shared kind of cool thing today. 0:53:12.760,0:53:15.460 I wanted, especially to thank, 0:53:15.460,0:53:18.800 I noticed Janani Ravi was taking [br]a bunch of notes in responses 0:53:18.800,0:53:22.510 as the panelists were talking. [br]So thank you very much for capturing that. 0:53:23.100,0:53:27.905 I also noticed quite a number of people [br]have been adding their questions 0:53:27.905,0:53:31.087 and answering a bit in questions Part B. 0:53:31.087,0:53:35.035 So that's really cool because I didn't notice [br]as the discussion was happening. 0:53:35.520,0:53:39.730 In this shared Google Doc, [br]I'm going to leave this open for editing, 0:53:39.730,0:53:42.200 at least for another 24 hours, 0:53:42.200,0:53:46.799 So, if you have to go off to other meetings,[br]I'll leave this open for editing for a while 0:53:46.799,0:53:50.520 so that you can come in, [br]add additional questions you have, 0:53:50.520,0:53:54.757 answer each other's questions. [br]Participants here can add their comments. 0:53:54.757,0:53:57.492 Ideally, if you're willing to put [br]your name beside that, 0:53:57.492,0:54:00.688 add your comments to some of the questions [br]that the panelists were asked, 0:54:00.688,0:54:05.520 because we really do have such a rich amount[br]of expertise here in the audience. 0:54:05.780,0:54:09.775 After about 24 hours,[br]I'll lock the document to view only. 0:54:09.775,0:54:14.417 It, along with the video of this call,[br]is going to be posted on the archive page. 0:54:14.417,0:54:19.400 So it'll ropensci.org/commcalls.[br]This will live there forever. 0:54:19.730,0:54:21.290 What else do I want to tell you? 0:54:21.290,0:54:27.460 Please, before you go, please,[br]add your name to the attendees list in the doc, 0:54:27.560,0:54:28.965 I don't share that much. 0:54:28.965,0:54:31.357 Just for us to know what countries [br]you came from 0:54:31.357,0:54:33.750 and what organizations...[br]That kind of thing. 0:54:34.460,0:54:39.128 We have a new discussion category[br]in our public forum. 0:54:39.128,0:54:45.994 So our public forum is discuss.ropensci.org,[br]and just in the last couple of days, 0:54:45.994,0:54:48.770 we created a package maintenance category. 0:54:49.130,0:54:53.185 I encourage anyone, especially people[br]who have said they're feeling a bit overwhelmed, 0:54:53.185,0:54:55.997 they're just getting involved[br]in maintaining a package. 0:54:55.997,0:54:57.990 Please ask your questions there. 0:54:59.010,0:55:05.366 Some of our, sort of like internal maintainers[br]will also get a flag when something's posted there. 0:55:05.366,0:55:07.573 So they may be able to come [br]and answer your questions. 0:55:07.573,0:55:09.996 You can answer each other's questions.[br]So right now it's empty. 0:55:09.996,0:55:12.960 It's just a category that exists, [br]and I encourage you to use it. 0:55:14.339,0:55:16.770 Do I have anything else[br]I need to tell you? 0:55:17.250,0:55:19.070 I think that's it. 0:55:19.510,0:55:24.471 You really, it's only 10 o'clock in the morning [br]for me here in Kamloops British Columbia, 0:55:24.471,0:55:27.590 you set me off to start a wonderful day. 0:55:27.590,0:55:31.605 I thank you all for joining us [br]wherever you are in the world, 0:55:31.605,0:55:38.668 and I wish you both a physically [br]and mentally healthy and happy rest of the day. 0:55:38.668,0:55:40.660 Thanks so much, everyone. 0:55:40.660,0:55:41.900 Bye bye.