Lab management

4 minute read

May 23, 2024 by Bradley Voytek

Several months ago there was an email thread going around among some neuroscience professors asking for advice on lab management software to “help us get more organized and productive.” Quite a few people reached out to me after I wrote my response to tell me how helpful it was. So I figured it would be nice to share it more broadly. Below is an edited version of my response to that email chain regarding my lab’s processes for using GitHub to manage open-source projects, scientific research, administrative tasks, and teaching.

In my lab we manage a lot of our work in GitHub. While traditionally thought of as a platform for hosting and maintaining computer code in a shareable manner, GitHub is agnostic to the kinds of files it will track. This means that you can use it for a lot more than just software development. Over the years we’ve become more reliant not only on its file hosting and tracking capabilities, but also its built-in project management features.

We have a main org – voytekresearch – and within that org there are many repositories, one for each project. This means that every ongoing scientific research project has its own repo so that we can collaborate on the data analyses. This is in separate from the independent orgs that we run for our open-source Python packages: specparam, bycycle, and neurodsp.

In addition to our lab’s project-centric repos, we have various “helper” repos, like a main repo that collates basic information for the lab, a resources repo that has some helpful links for lab processes, and a tutorials repo that has interactive notebooks showing how to use the lab’s data analysis tools.

We also have an onboarding repo that states exactly what everyone who joins the lab needs to do: how to get a key to get into the lab, how to join the lab’s Slack, links to tutorials and human subjects training, etc. This repo also includes basic instructions for writing papers and making posters, writing code, cloud computing, and so on.

That page also includes a link to the lab’s Google Docs paper template that I made to help folks overcome the “staring at a blank white screen” problem that can make writing a paper for peer-review feel overwhelming. This template is organized like a standard manuscript, broken into sections: Abstract, Introduction, Methods, Results, Discussion. These are then broken into subsections, each of which is labeled to describe what should be written there. This turns the task of writing a paper into a series of smaller, fill-in-the-blanks tasks, which are much more manageable.

Each project also has its own repo. For example this one from PhD student Sydney Smith, which allows anyone to step through all the code to run the analyses and create the figures for a project. Some journals, in particular eLife, even allow you to create an “executable code” version of a paper, like this one from former lab PhD student Richard Gao.

Within each repo, you can open Issues, which are a place to document things to look into / problems to fix. An Issues page looks like this:

Voyteklab GitHub

Issues are helpful for keping track of things you want to change and improve, as well as for commenting back-and-forth about how to implement those changes, as well as for assigning specific tasks to specififc individuals.

You can also create “Projects” within any given repo, which is used for project management. I’m a fan of the Kanban board style, which looks like this:

Voyteklab GitHub project management

Here, we have columns for “to-do”, “in progress”, and “done”. When someone starts tackling one of the “to-do” cards, they drag it to the “in progress” column. Cards can also be assigned to specific individuals, and they can be commented on. Once they’re in the “done” column, tney can be reviewed. The Kanban board approach requires a fair amount of planning up front in order to break a huge project down into individual, manageable components. But just like the paper template above, this act of planning ahead and breaking a huge task into smaller pieces makes everything much easier and less overwhelming.

To keep track of everything everyone is doing, we also have a private repo, which looks like this:

Voyteklab GitHub individuals' repos

Here, each lab member maintains their own page that is broken up into sections for each project they’re working on, any grants / awards they’re applying to, etc. This includes links to individual project repos, links to google docs for paper drafts and notes, any posters they’ve presented on the research, stuff like that.

I also maintain one for myself, which is one of four tabs that are always open in my browser along with my emails and calendar. For my repo, I break it up into sections for notes for myself to keep track of student rotations and lab member vacations and internships, links for courses I teach, links to ongoing funding and prospective funding applications, links to google docs for grant and manuscript drafts, reminder notes for myself on who to contact for admin stuff, etc. It looks like this:

Voyteklab GitHub Brad's repo

I’ve even gone so far, for the courses I teach, to have templates within each course for what emails to write to students and TAs at which points during the quarter. This ensures that everyone has all of the right materials and instructions given to them at the right times. This also makes it super easy for me to hand off my courses to new folks and to let those new teachers fold in their improvements so that, the next time I teach the class it’s easier for me to get reacquainted with it, and it’s slightly improved with every iteration.

Voyteklab GitHub class management

This whole process works really, really well for our needs, and I hope it helps other folks out, too!