Locality of Behaviour (LoB)

"The primary feature for easy maintenance is locality: Locality is that characteristic of source code that enables a programmer to understand that source by looking at only a small portion of it." -- Richard Gabriel

The LoB Principle:

The behaviour of a code unit should be as obvious as possible by looking only at that unit of code


The LoB principle is a simple prescriptive formulation of the quoted statement from Richard Gabriel. In as much as it is possible, and in balance with other concerns, developers should strive to make the behaviour of a code element obvious on inspection.

Consider two different implementations of an AJAX request in HTML, the first in htmx:

<div hx-get="/clicked">Click Me</div>

and the second in jQuery:

  $("#d1").on("click", function(){
<div id="d1">Click Me</div>

In the former, the behaviour of the div element is obvious on inspection, satisfying the LoB principle.

In the latter, the behaviour of the div element is spread out amongst multiple files. It is difficult to know exactly what the div does without a total knowledge of the code base.

Surfacing Behaviour vs. Inlining Implementation

A common conflation is surfacing behaviour with inlining implementation of that behaviour. These are separate concepts and, while inlining the implementation of a behaviour isn't always incorrect, it may often be incorrect.

Increasing the obviousness of the behaviour of an element is, ceteris paribus, a good thing, but it falls to both end-developers and especially framework developers to make LoB as easy as possible.

Conflict With Other Development Principles

The LoB will often conflict with other software development principles. Two important ones are:


LoB is a software design principle that can help make a code bases more humane and maintainable. It must be traded off against other design principles and be considered in terms of the limitations of the system a code unit is written in, but, as much as is it is practical, adherence to this principle will increase your developer productivity and well-being.