These guidelines describe best practices for software engineering in EOL. The purpose of these guidelines is to improve the development experience for users, yield better software for EOL, encourage a common set of good software engineering practices within EOL, and nurture software development skills which will best serve EOL and its scientific community. As we try to improve all of our software developments, these guidelines can be a resource to improve development in similar ways towards similar goals.

These guidelines are not intended to be mandates. The guidelines encourage some practices more strongly than others, but none are absolute requirements. Most of the practices can be adopted individually and incrementally, for any scale of software development, and by anyone developing software, not just software engineers.

In this document, key practices will be emphasized in bold, while further details and discussion may be referenced on a separate page.  The top page is meant to be a quick reference with links to specific sections and details.

Many people have contributed to this document, in particular Gary Granger, John Allison, Linda Cully, and Sandra Thurn, with helpful input from many others in EOL. It is meant to be an evolving and organic document that all in EOL are welcome to edit.  If you have questions about this document, email Gary.



The EOL software engineering first principles are the motivation for improving our software development process and the measure of the effectiveness of our software engineering practices. From these principles follow the best practices we want to follow.

EOL software engineering practices emphasize and facilitate utility, efficiency, flexibility, reliability, accountability, and cooperation.

Software development in EOL must be flexible to adapt to evolving research, instruments, deployments, and data. Like the research instruments and research data themselves, software will often be prototypes or cutting edge, but quality and maintainability need not suffer. Development must adapt to advances in software engineering tools and techniques.

Software developments must be efficient to make the most of limited software engineering resources to support EOL's mission. They must accommodate timelines dictated by available instrument hardware and field project deadlines.

The goal of any EOL development is to provide a useful tool or product to the EOL user community. EOL software engineers must be accountable and available to that community. We must work closely with the community to understand needs, solve problems, and fulfill requirements.

The culture among EOL software engineers is based on supporting science and solving technical problems in a spirit of cooperation across all disciplines.

» Next page: Project Management