Software Engineer Resources

For research software engineers, Good Research Code is a good primer.

Guiding Principles

In developing software at the Allen Institute, we have a set of guiding principles that promote Team Science and Open Science, which helps us define our best practices.

  • Software development should be collaborative, and code should be maintainable by more than one person

  • End users should be able to run our code and understand how to run it through documentation and tutorials

  • If a user discovers a bug or wants a new feature added to a package, they should know how to request support, or feel welcome to contribute to a repository

Software Design Patterns

In writing software, many recurring problems exist that cannot be solved through library encapsulation because of the problem’s nuances. In such cases, however, they can frequently be solved by leveraging one or more existing Design Patterns.

Design Patterns are vetted approaches to solving recurring, related problems. They describe a way to structure and organize code. Design patterns are expressive; they communicate intent to other contributors reading and writing code. (This is in contrast to “spaghetti code.”)

The following is a loose collection of software design patterns. This list is not exhaustive. It is intended as a starting point to approaching new problems by first investigating what patterns may be relevant.

Other resources

Other Code Review resources