# From algorithms to software

When suitable algorithms are designed, the next step is their implementation. Here, a key challenge is to balance performance, reliability, extensibility and flexibility of the software.

Good algorithms are necessary but not sufficient to achieve good performance. Often, a theoretically worse algorithm can lend itself to a faster implementation than a theoretically better one, due to a simpler structure. The correct choice is a matter of experience and benchmarking. Reliability is a function of both algorithms (like numerical stability properties) and their correct implementation. Thus it is an advantage to be able to reuse already tested and proven components. Finally, flexibility and extensibility result from the generality of the implementation, the range of applicability of the chosen algorithms and the level of specialisation necessary for the mathematical model.

A good implementation balances the trade-off between these properties in a way adequate for the problem to be solved. I have broad experience in the optimisation of algorithms and software. Since many years, I focus on the development of flexible, universal and also efficient software for technical and scientific applications. My library GrAL implements components for geometric algorithms which combine the universality of their mathematical description and the efficiency of specialised code.

Sometimes, however, also optimal algorithms do not suffice. If the compute effort is too large, we may want to use parallel hardware or even high-performance computers. Jointly with my partners I am able to support you also in this case.