Skip to end of metadata
Go to start of metadata
The Knight Lab software development team has 5 main software classes based on their motivations:
  1. Completely new task for the lab: micronota, Kaleidoscope
  2. A reimplementation of something we have been using: Emperor, sortmerna
  3. A reimplementation of something we developed: scikit-bio, dumpling
  4. Small scripts/tasks and analysis notebooks
  5. Prototype

Each of these have a different workflow to approach them, which are basic guidelines for future projects and collaborations:

  1. Completely new task for the lab
    1. Via online searches make sure there are no other tools that perform similar tasks, if you find something to 2
    2. Send email to the Knight lab list to double check 1.a
    3. Coordinate via the Knight lab list the initial design, mainly to collect the reach and limitation of your new software
    4. Move to point 5.a
  2. A reimplementation of something we have been using
    1. Try adding an issue in the original tool repository and try to help/coordinate with the original authors
    2. If the authors agree and you can add the new feature yourself 
    3. If the authors don't agree with the new features and you reach unsolvable differences fork the repo and add it in your local branch – Remember, this is common in CS but not in other sciences
    4. If none of these steps work, think in creating a new tool and go to 1.c
  3. A reimplementation of something we developed
    1. Organize an in (virtual - Skype, Google hangout, etc) person meeting with original developers. If no replies, email Rob. Remember we are trying to avoid duplication of effort
    2. Depending on outcome of meeting/call go to 1.c
  4. Small scripts/tasks and analysis notebooks: Small scripts are simple dataset-agnostic tasks while analysis notebooks are steps to analyze a specific dataset and add to publication.
    1. Add your script/notebook to your own repo, we suggest using gists.
    2. Add a link to the gists to the corresponding page in Confluence following this template:
      1. Author:
        Dependencies: [pip freeze]/[conda list]
        [Examples] - optional
    3. Note that if you are implementing a new functionality you should have tests (fine to only test via inputs and outputs)
  5. Prototype - Highly encouraged
    1. Should be listed in Confluence. Also remember to distribute your ideas to the lab to avoid duplication of effort
    2. It should have test driven development or tests – if possible ask others to write tests before coding
    3. It should have some kind of version control
    4. A prototype should not be used in a publication


  • No labels