The complexity of software code is the result of the intermingling of domain knowledge with implementation information. Domain Specific Languages and Generative Programming are known techniques for factoring and reducing the total complexity, but they are limited in use today and have artificial constraints to them. Domain Specific Languages have successfully been used for a long time in the software industry, but mostly as traditional text oriented languages targeted for use by software engineers.
What limits the wider use of domain languages by business professionals? The success of spreadsheets shows that when we give business professionals a structured and constrained domain language for computation, they will be very creative in turning their specialized expertise into software leading to accelerated productivity and innovation for their organizations. People use Excel today for many complex tasks like financial modeling, medical diagnosis, and manufacturing analysis; indeed, we see entire companies run off Excel. However, people today are using Excel way beyond its original design intent.
The Intentional technology allows a business professional to put their knowledge into a new type of software we call a Knowledge Workbench. A Knowledge Workbench uses a set of integrated domain languages that are chosen by the user to express their knowledge. The users embody their knowledge using the domain languages which are suitable for the domain at hand. These domain languages are not limited to text, but can use any type and mix of notation like tables, graphics, formulas, diagrams, symbols, and text. Programmers are still involved, but focused on the task they do best – creating a clean, generic and robust implementation for the domain languages and their generators.
For a detailed description of how to create a Knowledge Workbench see Chapter 22 “DSLs for Business Users” in the book DSL Engineering.
Intentional technology is different from traditional software technologies in the following ways:
1. Business user and software engineer sit at the same side of the table
Using a traditional software process the business user articulates the requirements and the software engineer implements those requirements. The problems with this approach are well known. With Intentional technology the business user directly contributes to the software by creating the business domain code using a business domain language. The software engineer supports this process by building the business domain language and its semantics, whether interpreted or compiled.
The benefit is that correct software is created faster and with higher quality. Furthermore, revisions of both domain knowledge and software becomes much more efficient.
2. Business domain is separated from software domain
Using traditional software technology business knowledge ends up interspersed in the software code and cannot be maintained separately. With Intentional technology, the business knowledge is maintained separately from the implementation. When an updated version of software is needed, the business knowledge is updated and re-transformed into software.
The benefit is that business professionals participate directly in the creation of accurate and detailed knowledge. From the same knowledge it is possible to create software applications and also several other derived work products like check lists, training material and documentation.
3. Mix multiple domains
Using traditional software technologies the combination of knowledge from multiple domains must be done using generic languages. With Intentional technology, multiple arbitrary domains can be seamlessly combined. Not only can multiple business domains be combined — multiple technology domains can be combined as well.
The benefit is that Intentional technology better represents the multidisciplinary knowledge needed to solve real world problems.
The Intentional Domain Workbench, is a special Knowledge Workbench that builds other Knowledge Workbenches making heavy use of various meta technologies. It makes the definition, creation, editing, combination, extension, and processing of Domain Languages more practical. Key features of are the uniform representation of multiple interrelated domains, the ability to project the domains in multiple editable notations, and direct access to the domain code by a program generator. The domain languages are given meaning – semantics – by applying a set of transformations to content expressed in these languages. One of these transformations is a compiler for the domain languages if a separate application is required.
The key underlying technologies are:
- Intentional Tree – provides a uniform representation of languages (schema) and knowledge (domain code) with resolution of references by identity rather than by name.
- Reversible Transformation – provides semantics to languages through a chain of bi-directional transformations between nodes in Intentional Trees.
- Projectional editor – a special reversible transformation to project domains onto a display allowing flexible notations independent of the underlying representation. Works in two directions: display and editing.