.. _strategy-development:

****************
Code Development
****************

There are many strategies that can be employed for a code development process. The choice of such a procedure depends on what the overall project is creating. And even after a development process has been selected, it is often tailored to the needs of the specific code project.

The LAMÉ code development team has spent some time deciding on an appropriate process that reflects the needs of the project and its stakeholders.

Given that LAMÉ has two roles, as an interface to a host code that will supply a material model response and as a repository for constitutive models, this led us to consider two different code development processes: one for the interface and one for the constitutive models.

For the interface an *iterative* process was chosen. The iterative process allows us to plan and generate requirements, perform analysis and design, implement and deploy code changes and finally test and evaluate the code. This process can work well for the interface design where we implement the conceptual changes that we want to the interface. The models beneath the interface should be unaffected by these changes, and where they are affected it will be on the surface.

For the constitutive models a *waterfall* process was chosen. Generally the process of developing and implementing a constitutive model is a linear process that is followed by a single person. That person generates requirements, designs the solution, implements the solution as a piece of code, verifies the code and maintains the code. Much of the constitutive modeler's work involves formulating the model, which is a solid mechanics and applied mathematics problem first and foremost. This can be seen as either the gathering requirements phase or part of the design phase. The design and implementation phases are where the code development occur. All models are verified after they are implemented. However, model verification itself is quite complicated, so this step is not simple. Finally the model is maintained through documentation and user support. Bug fixes are also an aspect of code maintenance in this process.
