Electronic structure methods and software still overwhelmingly work on a paradigm of separate complete programs  that are self-contained and depend only on the compiler and a few basic libraries. Because of this, most of the large code developments independently maintain routines providing overlapping functionalities and make use of non-universal data formats. Furthermore, the complexity of the separate programs keeps on growing, in order to keep up with developments in the theory as well as in computer hardware. This makes it increasingly difficult for scientists to contribute new ideas built on top of everything that is already known, without becoming deeply involved with the development of a specific package. In practical terms, this also limits the incentive for effective communication between scientists in the same field but involved in different codes, since technically separate solutions to the same conceptual problems must eventually be sought.
At the moment it is widely recognized in the community that these are important, yet unsolved, problems. There have been and there are a few notable efforts to go beyond the traditional paradigm by producing communal software and libraries that are agnostic to the specific electronic structure code in which they are used. Examples include visualization , symmetry analysis , the computation and use of maximally-localized Wannier functions , libraries for exchange and correlation , and data structures and standards [6,7]. The success of these particular examples may be partly attributed to the fact that they perform operations that are fairly loosely coupled to the main electronic structure code and, therefore, can be relatively easily abstracted.
In 2014 the Electronic Structure Library (ESL)  project was launched in collaboration with CECAM, with the idea of fostering a new paradigm of library-based development for electronic structure, following the promise of the early examples mentioned above. The aim of project, therefore, is to create a common online repository of high-quality software libraries, programming interfaces and data standards in the field of electronic structure, which will facilitate reuse of code, interoperability between different code bases, rapid and efficient evolution to new computer architectures, and development of new methodologies.
The ESL aims to be a community-driven project which anyone can contribute to, with regular hands-on workshops being held to encourage developers to get involved in working on individual libraries and contributing to the ESL website, and to form collaborations between different code bases. The overarching strategy and direction of the ESL is also discussed and decided upon at these workshops, coordinated by a core group of organizers.
The first ESL workshop (July 2014) was an extended six-week software development workshop hosted by CECAM HQ in Lausanne, in which the tools and infrastructure for the project were prepared (such as the wiki website ), and the first contributions were included and made available online. This was followed by a second one-week workshop (June 2015), also in Lausanne, in which some of the basic standards for library contributions were discussed and implemented . The theme was that of the "utilities toolbox", intended to be a collection of low- and medium-level subroutines, for which several new libraries were created during the workshop and added to the repository. There was also a strong effort to implement existing libraries into different pre-existing codes, in order to start putting into practice the idea of cross-code interoperability and code reuse. Two further workshops were organized this year. The first one was co-organized with the NoMaD Center of Excellence  on common data formats for electronic structure calculations, while the second focused on different types of solvers needed for electronic structure calculations (eigensolvers, Poisson solvers, and atomic solvers).
Since the first workshop in 2014, several projects have been launched within the ESL with the aim of providing libraries that cover the most fundamental tasks that an electronic structure code might need to perform. These include eigensolvers, Poisson solvers, low-level utilities, I/O for checkpointing and data sharing, atomic solvers, etc. We are now close to reaching the point where most of these libraries are usable and ready to be deployed. Therefore, we expect that, by combining the ESL developed libraries with other already existing libraries, it should be possible to write simple DFT codes from scratch in less than a week and without having to implement any complex numerical routines.
Such demonstrator codes will be a highly valuable addition to the ESL. They will provide powerful, non-trivial examples of how the ESL libraries can be used by existing electronic structure codes. They will also provide a platform to test the performance and usability of the libraries in an environment as close as possible to real-life situations. Such codes will also allow us to to uncover existing limitations in the libraries and help us improve them, in particular by enhancing the integration and compatibility of the different constituent libraries.
Two other issues we intend to tackle during the workshop are the documentation and distribution of the libraries. These points are often overlooked, but they are essential if we want the ESL libraries to be widely available and usable by the electronic structure
community. Most the libraries already follow the ESL coding conventions, that encourage developers to thoroughly document their source code. We would like to go beyond this, and also provide documentation aimed at the users of the libraries. This would take the
form of code examples and tutorials. Concerning the distribution of the libraries, we intend to provide packages for the more popular Linux distributions and specifications to integrate the ESL libraries into the EasyBuild framework, which is a powerful and efficient software manager for HPC systems.
Based on the successful experience of the previous ESL workshops, we propose to divide the workshop in two parts: one day and a half dedicated to initial discussions between the coding team, the Advisory Committee of the ESL, and other invited stakeholders, followed by a 12 days coding effort by a smaller team of experienced developers. Both the discussion and software development will take advantage of the ESL infrastructure (wiki, gitlab, etc) that was set up during the previous ESL workshops.