-
Notifications
You must be signed in to change notification settings - Fork 3
Add blog post on Epiverse community contribution #395
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
6d3d345
6ceaab6
e839e08
2cc2e67
3bbe130
906b8fc
f5acabc
bd2a7cd
47d6936
acbae9c
e4024b7
6743d36
52e5fa7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| @article{hellewellFeasibilityControllingCOVID192020, | ||
| title = {Feasibility of Controlling {{COVID-19}} Outbreaks by Isolation of Cases and Contacts}, | ||
| author = {Hellewell, Joel and Abbott, Sam and Gimma, Amy and Bosse, Nikos I and Jarvis, Christopher I and Russell, Timothy W and Munday, James D and Kucharski, Adam J and Edmunds, W John and Funk, Sebastian and Eggo, Rosalind M and Sun, Fiona and Flasche, Stefan and Quilty, Billy J and Davies, Nicholas and Liu, Yang and Clifford, Samuel and Klepac, Petra and Jit, Mark and Diamond, Charlie and Gibbs, Hamish and Van Zandvoort, Kevin}, | ||
| year = {2020}, | ||
| month = apr, | ||
| journal = {The Lancet Global Health}, | ||
| volume = {8}, | ||
| number = {4}, | ||
| pages = {e488-e496}, | ||
| issn = {2214109X}, | ||
| doi = {10.1016/S2214-109X(20)30074-7}, | ||
| urldate = {2025-04-09}, | ||
| langid = {english}, | ||
| file = {/Users/lshjl15/Zotero/storage/NG9MCA47/Hellewell et al. - 2020 - Feasibility of controlling COVID-19 outbreaks by i.pdf} | ||
| } | ||
|
|
||
| @article{kucharskiCOVID19ResponseIllustrates2020, | ||
| title = {The {{COVID-19}} Response Illustrates That Traditional Academic Reward Structures and Metrics Do Not Reflect Crucial Contributions to Modern Science}, | ||
| author = {Kucharski, Adam J. and Funk, Sebastian and Eggo, Rosalind M.}, | ||
| year = {2020}, | ||
| month = oct, | ||
| journal = {PLOS Biology}, | ||
| volume = {18}, | ||
| number = {10}, | ||
| pages = {e3000913}, | ||
| publisher = {Public Library of Science (PLoS)}, | ||
| issn = {1545-7885}, | ||
| doi = {10.1371/journal.pbio.3000913}, | ||
| urldate = {2025-07-22}, | ||
| copyright = {http://creativecommons.org/licenses/by/4.0/}, | ||
| langid = {english}, | ||
| file = {/Users/lshjl15/Zotero/storage/ZB4LABCU/Kucharski et al. - 2020 - The COVID-19 response illustrates that traditional.pdf} | ||
| } | ||
|
|
||
| @article{kucharskiEffectivenessRingVaccination2016, | ||
| title = {Effectiveness of {{Ring Vaccination}} as {{Control Strategy}} for {{Ebola Virus Disease}}}, | ||
| author = {Kucharski, Adam J. and Eggo, Rosalind M. and Watson, Conall H. and Camacho, Anton and Funk, Sebastian and Edmunds, W. John}, | ||
| year = {2016}, | ||
| month = jan, | ||
| journal = {Emerging Infectious Diseases}, | ||
| volume = {22}, | ||
| number = {1}, | ||
| pages = {105--108}, | ||
| issn = {1080-6040, 1080-6059}, | ||
| doi = {10.3201/eid2201.151410}, | ||
| urldate = {2023-05-23}, | ||
| file = {/Users/lshjl15/Zotero/storage/98HLKB9J/Kucharski et al. - 2016 - Effectiveness of Ring Vaccination as Control Strat.pdf} | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,77 @@ | ||||||
| --- | ||||||
| title: "Epiverse community engagement and software sustainability for research software" | ||||||
| author: | ||||||
| - name: "Joshua W. Lambert" | ||||||
| orcid: "0000-0001-5218-3046" | ||||||
| date: "2025-07-22" | ||||||
| categories: [open-source, R, R package, epidemiology, community, Epiverse, DOI] | ||||||
| bibliography: index.bib | ||||||
| format: | ||||||
| html: | ||||||
| toc: true | ||||||
| --- | ||||||
|
|
||||||
| Software that is developed for research or by researchers can be difficult to maintain given the incentive and funding structures in academia. This remains true for epidemiology, with a large volume of software written during the COVID-19 pandemic, much of which is now abandonware[^1]. This does not mean that the software developed to understand the COVID-19 pandemic was bad or does not have utility in understanding future epidemics and pandemics, but just that the capacity to maintain and further develop these tools is not available now the pandemic is no [longer considered an acute public health emergency](https://www.who.int/news/item/05-05-2023-statement-on-the-fifteenth-meeting-of-the-international-health-regulations-(2005)-emergency-committee-regarding-the-coronavirus-disease-(covid-19)-pandemic). | ||||||
|
|
||||||
| These issues around software sustainability and the academic structures that hinder software longevity were raised by @kucharskiCOVID19ResponseIllustrates2020 and were one of the leading reasons for the [Epiverse-TRACE initiative](https://epiverse-trace.github.io/). Alongside the developing novel software (R packages), Epiverse also has a commitment to support the community of package developers in epidemiology and outbreak analytics. | ||||||
|
|
||||||
| This blog post highlights some recent work by Epiverse software engineers to collaborate on research software, or researchware, to help develop an R package that was initially written in the early days of the COVID-19 pandemic (January 2020 - May 2020) and built on code written for the 2014-2016 West Africa Ebola outbreak. Code that has provided insights into ring vaccination [@kucharskiEffectivenessRingVaccination2016] and isolation and contact tracing effectiveness [@hellewellFeasibilityControllingCOVID192020]. Thus it could be of great help in future infectious disease outbreaks, but has been dormant for the past few years. | ||||||
|
||||||
| This blog post highlights some recent work by Epiverse software engineers to collaborate on research software, or researchware, to help develop an R package that was initially written in the early days of the COVID-19 pandemic (January 2020 - May 2020) and built on code written for the 2014-2016 West Africa Ebola outbreak. Code that has provided insights into ring vaccination [@kucharskiEffectivenessRingVaccination2016] and isolation and contact tracing effectiveness [@hellewellFeasibilityControllingCOVID192020]. Thus it could be of great help in future infectious disease outbreaks, but has been dormant for the past few years. | |
| This blog post highlights some recent work by Epiverse software engineers to collaborate on research software, or researchware, to help improve an R package that was initially written in the early days of the COVID-19 pandemic (January 2020 - May 2020) and built on code written for the 2014-2016 West Africa Ebola outbreak. Code that has provided insights into ring vaccination [@kucharskiEffectivenessRingVaccination2016] and isolation and contact tracing effectiveness [@hellewellFeasibilityControllingCOVID192020]. Thus it could be of great help in future infectious disease outbreaks, but has been dormant for the past few years. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe "refine"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I went with "improve", resolved in 47d6936. I couldn't commit as part of the batch of other suggestions due to a conflict with another suggested change on the same line.
joshwlambert marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe also add other implementations based on ringbp, e.g. https://github.com/lgs85/covidhm and https://github.com/timcdlucas/ringbp
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added a mention to both of these in 2cc2e67. I wasn't sure whether to link to the GitHub repo or the paper/pre-print that used them so decided to do both. I couldn't find a paper using {pepbp} but if there is one please point to it and I'll add a citation.
joshwlambert marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The first piece of work mentioned is the user interface but this is not mentioned here as a problem - add?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolved in f5acabc.
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should probably somehow clarify that I'm also part of epiverse (and perhaps that that the package existed before), otherwise it may sound like an external collaboration which strictly speaking it wasn't.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
agree; also useful to emphasize i'm not epiverse, since (as I understand it) part of the epiverse remit is making these packages more external-collab/contrib-friendly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@pearsonca I've phrased your role with Epiverse as external collaborator, if you'd like this rephrasing let me know.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
would be good here to give an example of before/after function syntax
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yep, show-don't-tell
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added old versus new scenario_sim() function signature in bd2a7cd.
joshwlambert marked this conversation as resolved.
Show resolved
Hide resolved
joshwlambert marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again maybe give an example of how this is now specified?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hopefully, the comparison between the old and new version shows how it's being specified differently. If not please let me know.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again I would put an example here which will really help people who don't know the package to follow
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, I think the comparison code chunks with the old and new scenario_sim() API should help readers see where these changes are, especially with the more informative argument names in the new version.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mention that this was previously a mix of stuff? (perhaps in "the problem" above)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The problem section mentions code style and here we mention standardisation so I would say it's implicit that there was a mix of styles previously. I'll leave as is, as I don't want the details to obfuscate the overarching message, I guess that if anyone is interested they can see the package changelog or version history (linked at the end of this post).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can't the "Problem" section have various sections/paragraphs that describe the problems so that they're all in one place? Problems could be introduced as topic sentences in various paragraphs for each kind of problem.
joshwlambert marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
joshwlambert marked this conversation as resolved.
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| There are various other changes in {ringbp} from our work. Examples include: input checking, not specifying erroneous function defaults, updating the package website, and functions that return `data.table` objects no longer [return silently](https://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.html#sec:why-do-i-have-to-type-dt-sometimes-twice-after-using-to-print-the-result-to-console). Mentioned in the introduction, model performance has been incrementally improved, but we've not focused on this aspect, and the package will benefit from time spent focusing on this in the future; especially if the set and complexity of non-pharmaceutical interventions in the model expands. | |
| There are various other changes in {ringbp} from our work. Examples include: input checking, not specifying erroneous function defaults, updating the package website, and functions that return `data.table` objects no longer [returning silently](https://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.html#sec:why-do-i-have-to-type-dt-sometimes-twice-after-using-to-print-the-result-to-console). Mentioned in the introduction, model performance has been incrementally improved, but we've not focused on this aspect, and the package will benefit from time spent focusing on this in the future; especially if the set and complexity of non-pharmaceutical interventions in the model expands. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"incrementally" seems a bit of an undersell - I recall getting some order of magnitude reductions in run times. That no longer hold?
I agree the point here isn't to do a systematic optimization comparison, but if there's a big gain, we should be able to brag a bit about the improvement.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've just run a rough benchmarking comparison and the newest version of the package (min-gen-time branch on my fork) has approximately the same (if not marginally slower) runtime than the version before I started working on the package (using package version at dbf85c1). The newer version has smaller memory allocation. Therefore I'll keep the current wording which is ambiguous about "performance".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hmm! i guess things fell off w/ some flexibility introductions or when incorporating corrections that entail drawing more samples.
joshwlambert marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you think there is scope for perhaps a reflection on sustainability / maintenance, which you mentioned extensively in the motivating intro? How do we ensure this is not again abandoned for 5 years (assuming it would be a problem if it was)?
Also perhaps there is scope for a final statement that we're hoping that this will make the package more useful for others and will re-visit the analysis for the paper (with ref to the cmmid ringbp repo) in the first instance?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the first item - maybe also lean into all the other contributor-friendliness-items you've added (contributor statement, code of contact, making issue templates, tag clean up, etc) [or will add prior to releasing blog]?
And plan for CRAN release?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you think there is scope for perhaps a reflection on sustainability / maintenance, which you mentioned extensively in the motivating intro? How do we ensure this is not again abandoned for 5 years (assuming it would be a problem if it was)?
I did consider this but initially opted again as I don't think it would be a positive message. Given the current lifecycle stage of Epiverse-TRACE I'm not sure we can make any grand statements about long term improvements in the landscape for OSS for research. Specifically on "How to do we ensure this is not again abandoned for 5 years", I think this is outside the scope of the post and I'm not sure I have an adequate answer. If you disagree, or there is something specific you'd like the post to cover please suggest and I'd be happy to incorporate.
On the first item - maybe also lean into all the other contributor-friendliness-items you've added (contributor statement, code of contact, making issue templates, tag clean up, etc) [or will add prior to releasing blog]?
We could add this to the post but it's thus far not been added to the {ringbp} repository so would be similar to the Testing section of the post which requires some more work on the package before publishing. IIRC there hasn't been any discussion of code of conduct, issue or PR templates; the contributing document has been raised in epiforecasts/ringbp#109.
And plan for CRAN release?
This has been raised in epiforecasts/ringbp#128 and is the plan. It would be nice to publish this post in tandem with the {ringbp} release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think there's a reasonably-but-not-overly optimistic statement here - that the flexibility, refactoring, expanded documentation, etc make it easier for other people to reuse it, which is the gateway for external contributors to engage with the project. That doesn't assure resources on it, but enables them.
I'd also argue that folding it into a larger effort (tho I guess Epiverse-TRACE is wrapping?), instead of just an isolated package, improves awareness.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, that's a good point that I'd largely overlooked. I've added a paragraph to the Conclusion to hopefully address this point in 6743d36. Let me know if you think it needs reworking.
tho I guess Epiverse-TRACE is wrapping?
The project is moving into Phase II with a focus on implementation with training and maintenance of tools, so will have a reduced software engineering capacity.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Last sentence bothers me mildly; maybe more like
One of the key Epiverse objectives is "[pull quote from proposal]".? Not sure what that pull quote looks like, but the current wording here is a bit awkward. I also don't think its necessary to invoke that y'all also mint new software.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've gone through some of the early documentation for the project proposal and couldn't find any information that would fit into this context. Related is the mention of the CSCCE Community Participation Model.
I wanted to phrase it this way as I didn't want it come across as contributing to other software is our primary activity. (Added bonus for advertising our tools).