Navigate back to the homepage

Software Laws

Dugagjin Lashi
April 11th, 2019 · 2 min read


Groups will give far more time and attention to trivial or cosmetic issues rather than serious and substantial ones.

The common fictional example used is that of a committee approving plans for nuclear power plant, who spend the majority of their time discussing the structure of the bike shed, rather than the far more important design for the power plant itself. It can be difficult to give valuable input on discussions about very large, complex topics without a high degree of subject matter expertise or preparation. However, people want to be seen to be contributing valuable input. Hence a tendency to focus too much time on small details, which can be reasoned about easily, but are not necessarily of particular importance.

The fictional example above led to the usage of the term “Bike Shedding” as an expression for wasting time on trivial details.


It always takes longer than you expect, even when you take into account Hofstadter’s law.

You might hear this law referred to when looking at estimates for how long something will take. It seems a truism in software development that we tend to not be very good at accurately estimating how long something will take to deliver.


Work expands so as to fill the time available for its completion.

In its original context, this law was based on studies of bureaucracies. It may be pessimistically applied to software development initiatives, the theory being that teams will be inefficient until deadlines near, then rush to complete work by the deadline, thus making the actual deadline somewhat arbitrary.

If this law were combined with Hofstadter’s law, an even more pessimistic viewpoint is reached - work will expand to fill the time available for its completion and still take longer than expected.


With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.

Hyrum’s law states that when you have a large enough number of consumers of an API, all behaviors of the API (even those not defined as part of a public contract) will eventually come to be depended on by someone. A trivial example may be non-functional elements such as the response time of an API. A more subtle example might be consumers who are relying on applying a regex to an error message to determine the type of error of an API. Even if the public contract of the API states nothing about the contents of the message, indicating users should use an associated error code, some users may use the message, and changing the message essentially breaks the API for those users.


Adding human resources to a late software development project makes it later.

This law suggests that in many cases, attempting to accelerate the delivery of a project which is already late, by adding more people, will make the delivery even later. Brooks is clear that this is an over-simplification, however, the general reasoning is that given the ramp up time of new resources and the communication overheads, in the immediate short-term velocity decreases. Also, many tasks may not be divisible, i.e. easily distributed between more resources, meaning the potential velocity increase is also lower.

The common phrase in delivery “Nine women can’t make a baby in one month” relates to Brooks’s law, in particular, the fact that some kinds of work are not divisible or parallelizable.

More articles from Dugagjin

TypeScript vs Java

A little explaination on how powerfull the TypeScript type-system is compared to Java.

March 28th, 2019 · 2 min read

The Aftermath of GDPR

Practical examples of positive changes that the GDPR regulations brought to us.

February 21st, 2019 · 1 min read
© 2019 Dugagjin
Link to $ to $ to $ to $