Lehman’s laws of software evolution: The Fundamental Law (Of Program Evolution)

Catherine Piddington
Cloudnative.ly
Published in
2 min readNov 9, 2021

--

Software Engineering Topic of the Day #47

Credit: Originally writtend and published by Billie Thompson on Armakuni’s internal Slack

Photo by Алекс Арцибашев via Unsplash

Lehman’s laws of software evolution: The Fundamental Law (Of Program Evolution)

In On understanding laws, evolution, and conservation in the large-program life cycle this law is stated as:

Program evolution is subject to a dynamics which makes the programming process, and hence measures of global project and system attributes, self-regulating with statistically determinable trends and invariances.

This law is that, largely, how a program starts being developed, is how it will continue.

This means when there’s mess this isn’t because developers hate the code, or that they’re incapable of keeping things tidy, it’s that the organisational pressures that existed to create the mess will continue to create mess on an ongoing basis.

Likewise the inverse is true, if code is clean is that organisational pressures are such that it can be kept that way.

Lehman puts it like this

We are not free to set and achieve arbitrary design, performance, and work targets. Project constraints are at present not all under our control. Thus we must accept any limits they imply until they can be or have been changed.

Q1: Is this Conways Law?

Q2: Agile talks about a sustainable pace, is this ?

--

--