This paper presents AIBench (SING group, Ourense, Spain), a JAVA desktop application framework mainly focused on scientific software development, with the goal of improving the productivity of research groups. Following the MVC design pattern, the programmer is able to develop applications using only three types of concepts: operations, data-types and views. The framework provides the rest of the functionality present in typical scientific applications, including user parameter requests, logging facilities, multithreading execution, experiment repeatability and graphic user interface generation, among others. The proposed framework is implemented following a plugin-based architecture, which also allows assembling new applications by the reuse of modules from past development projects. F. FDEZ-RIVEROLA ET AL. represent only some examples of the broad and particular nature of scientific research software applications.Nevertheless, writing software is not normally the main focus of a research group, where the software design skills or production capacity are typically not comparable to those of a development team in a dedicated software company. The development of applications meeting the previously mentioned requisites is not easy. Furthermore, writing more elaborate software including sophisticated GUIs brings additional advantages, like the possibility of a friendly application being publicly available and useable by other researchers. This fact surely increases the group prestige, but it requires too much experience and development efforts and thus it is usually not taken into consideration. However, and regardless of whether a given application is more or less elaborate, the real benefits come when a development team is able to reuse its own code, which is not a trivial issue.Every application has repetitive (or shared) functionalities dealing with user interaction, application context handling, logging and results visualization, which are not problem-specific functionalities. Moreover, if a GUI is required, the time invested and the difficulty of developing these aspects increase significantly. It may happen that, when the core algorithms are already implemented or integrated from external packages, it takes too much additional time to start using the application because of the fact that these necessary elements are not yet available. The reuse of this code is, therefore, essential. Furthermore, data structures, algorithms, input/output routines, small custom visualization components and other problem-specific pieces of code should also be easy to reuse when needed. However, frequent bad design decisions like merging these two kinds of code (shared and specific functionalities), produce applications that are hard to subsequently maintain and/or reuse. Therefore, it should be possible (but not trivial) to increase the code reusability and consequently the overall productivity. A typical approach to cope with this kind of problem is to make use of an application framework that can be seen as a semi-finished appl...