Stephen J. Mellor, Author and Speaker

This is a work in progress, as I refactor some of my material to make it accessible. I hope you can find what you want. If not, please contact me.

If you wish to quote any material under fair use, please credit the source. For more extensive extracts, please contact me.


A method is a systematic approach to going about something, in our case, building systems. There are many methods, perhaps as many as there are developers. Each method comprises a set of practices (some social, some technical) that are aimed at furthering the development process.

One methodological practice to cope with change in requirements and design is to find the invariant. Capture the invariant in logic, and put everything else in data. When change--inevitably--comes, we need only change the data, not the program.

The Unified Modeling Language is not a method. It provides only a notation and a wide range of diagrams, and deliberately leaves unspecified how to use it. Demystifying UML answers questions about UML and provides a self-assessment to help you determine your usage.

Executable UML

Executable UML is an approach to constructing software using models, specifically UML models. It began with two books by Sally Shlaer and myself, Modeling the World in Data and Modeling the World in States and was re-written ten years later with Marc Balcer in Executable UML: A Foundation for Model-Driven Architecture. If that seems like a lot to read, you can find a short summary here.

Executable UML is now (partly) formalized in two OMG standards: the Executable UML Foundation (fUML), which specifies the semantics of the executable subset of UML and Alf, a UML Action Language.

Agile and Adaptive Development

The first "extreme" programming project was a payroll system. Such systems usually have the infrastructure they need (databases, network, APIs) already in place, which makes the selection of individual features ("stories") mostly a matter for the customer. Because real-time and embedded systems often do not have their infrastructure, we need some additional techniques to help us apply agile techniques effectively.

Real-time and Embedded

To meet the stringent time and space requirements of real-time and embedded systems, we need to organize the data, control and structures of the hardware and software in a consistent and uniform manner. Failure to do so can lead to bugs timing problems. One approach is to use executable models and translation, but these tools can be expensive.

An affordable approach is to think carefully about the rules for construction of the system, and code manually according to those rules.

If you wish to be informed of any updates in any of these areas, please check the box: