One general design principle of the framework is that the design is based on Java interfaces and
that the actual implementations for example algorithms and helper routines are implemented as
Java classes. This allows miscellaneous implementations to be compatible with the framework,
multiple inheritances and ensures code compatibility and reuse due to interface inheritance.
The second design principle is that coherence within packages is kept as strong as possible and
coupling between packages as light as necessary.
This results in substantial encapsulation and high reusability. For example our package JDRM which
is responsible for distributed job management can be used completely independent of all other packages.
Thirdly it was paid attention to keep the design of our API as abstract as possible so that it can be
used for new and unforeseen applications, and as slim and precise enough to use it easily. This helps
to reduce the learning curve and to decrease maintenance overhead too.