In software engineering, a design marker is a technique of documenting design choices in source code using the Marker Interface pattern. Marker interfaces have traditionally been limited to those interfaces intended for explicit, runtime verification (normally via instanceof). A design marker is a marker interface used to document a design choice. In Java programs the design choice is documented in the marker interface's Javadoc documentation.

Many choices made at software design time cannot be directly expressed in today's implementation languages like C# and Java. These design choices (known by names like Design Pattern, Design Contract, Refactoring, Effective Programming Idioms, Blueprints, etc.) must be implemented via programming and naming conventions, because they go beyond the built-in functionality of production programming languages. The consequences of this limitation conspire over time to erode design investments as well as to promote a false segregation between the designer and implementer mindsets.

Two independent proposals recognize these problems and give the same basic strategies for tackling them. Until now, the budding explicit programming movement has been linked to the use of an experimental Java research tool called ELIDE. The Design Markers technique requires only standard Javadoc-like tools to garner many of the benefits of Explicit Programming.

See also