Version 14 (modified by michael.perscheid, 8 years ago) ( diff )


CoExist: Reduce Aversion to Change

CoExist is an IDE extension that preserves intermediate development states and provides immediate access to source code and run-time information of previous development states. With CoExist, programmers can easily withdraw recent changes, recover knowledge from previous development states, analyze the impact of each individual change concerning test cases and other metrics, or reassemble individual changes to meaningful increments to be shared with others. This encourages programmers to make changes in the moment they think of them without worries because they can rely on tools that help them with whatever their explorations will reveal. They no longer have to follow best practices only to avoid undesired consequences of changing code.

This figure illustrates how CoExist extends the Squeak/Smalltalk development environment: a version bar concept at the bottom that presents the continuously created versions and corresponding test results, the user debugs code on the most recent version (on the right), and recovers knowledge from a previous version next to it (on the left)


Changing source code involves risks because programmers can make errors. A promising idea to simplify the code can suddenly turn out inappropriate later in the process. Also, programmers can have flaws in their reasoning or can unintentionally ignore relevant aspects. Making an error represents a risk because it typically requires compensational activities that are time consuming and tedious to accomplish.

To deal with the risks of change, the recommended way is to anticipate that errors will be made and to continuously perform activities that keep compensation costs low. This includes checking for errors early and often as well as maintaining a safety net of stable development states one can fall back to. However, such precautionary activities can only reduce but not avoid the risk of tedious recovery work. Moreover, they can be easily ignored and distract from the actual task at hand.


Bastian Steinert, Damien Cassou, and Robert Hirschfeld. CoExist: Overcoming Aversion to Change – Preserving Immediate Access to Source Code and Run-time Information of Previous Development States. In Proceedings of the Dynamic Languages Symposium (DLS) 2012, co-located with the Conference on Object-oriented Programming, Systems, Languages, and Applications (OOPSLA) 2012, pages 107-117, Tucson, Arizona, USA, October 22, 2012, ACM DL.

paper slides bibtex > doi


CoExist has been implemented in Squeak/Smalltalk. It requires an adapted version of the !Cog virtual machine, because we introduced late class binding to allow for sharing meta-objects among versions (class objects and compiled methods).

Download one of the images offered below to have a closer look at CoExist and try it. CoExist is based on !Squeak 4.2. You need to start the image with your copy of the adapted Cog VM (above). CoExist will already be installed and running. Note that while CoExist's versioning is not limited to any package or category, unit tests are executed only for a selected package of interest. In the offered images, CoExist is setup to run tests for a game called MarbleMania. So, you might want to try out CoExist by refactoring this game.

CoExist as of Jul. 2012 (paper submission):

CoExist as of Dec. 2012 (improved layout):

Follow-up work: Integration with Monticello

During a seminar course in winter (2012/2013), two groups of students worked on the integration of the CoExist tools with Monticello. The groups consisted of: Fabian Bornhofen, Maria Graber, Jens Hildebrandt, Stefan Lehmann, Stephanie Platz, Cathleen Ramson, Lysann Schlegel, Philipp Tessenow.

slides of the students' presentation

The source code is available via Squeaksource; find the respective links below:

Team 01 Team 02


CoExist has been developed by Bastian Steinert as part of his dissertation.

Attachments (12)

Note: See TracWiki for help on using the wiki.