Alloy is a language for describing structures and a tool for exploring them. It has been used in a wide range of applications from finding holes in security mechanisms to designing telephone switching networks.

Déjà Vu: Constructing Apps from Clichés

Have you ever noticed that most applications are fundamentally the same? They just combine existing concepts (such as profiles, feeds and posts) in new ways. Déjà Vu is a new language and tool for rapid construction of complex applications by composing concepts, taken from a library of clichés. Because clichés are reused, new applications can be made at much lower cost.


Espalier (formerly Object Spreadsheets) is a new computational paradigm that combines the usability advantages of spreadsheets with SQL-like expressive power, providing a way to build a wide class of interactive applications more easily than with existing tools.


Gitless is an experimental version control system built on top of Git. Many people complain that Git is hard to use. We think the problem lies deeper than the user interface, in the concepts underlying Git. In this project, we apply the theory of concept design to analyze and redesign Git.

Rethinking Software Design

The goal of this project is to develop a constructive theory of software design that focuses on the conceptual structure that underlies software. Key threads of the project include development of suitable diagrammatic notations; articulation of design criteria; and case study rewordings of existing applications, including Gitless, a conceptual redesign of the popular Git version control system.


SciFe is capable of exhaustive, memoized enumeration of values from finite or infinite domains. SciFe introduces concepts of enumerators and enumerator combinators. SciFe is a Scala library that implements a domain-specific language. SciFe can generate complex structures such as search trees and models of class hierarchies. Specifications in SciFe are short and lead to very efficient enumeration, even in case of complex data structures with invariants.