Leadership
Adapting Constraints Without Losing Coherence
Healthy systems adapt constraints deliberately, tightening, relaxing, or retiring them as context changes without losing coherence.
More in the Constraints Series
Other posts in this series:
- Liberating Constraints
- Design Before Technology
- What Makes a Constraint Good?
- A Taxonomy of Constraints
- Constraints as Interfaces
- Constraints on Teams and Decision-Making
No meaningful system remains frozen in its initial state. Markets change. Teams change. Load changes. Risk changes. Technology changes. The cost structure changes. The surrounding ecosystem changes. Even when a system begins with a healthy set of constraints, time eventually tests whether those constraints still fit the reality they were meant to serve.
That fact creates a difficult challenge. If constraints never change, they can become stale, overbearing, or detached from value. If constraints change carelessly, the system loses coherence. The goal is not to avoid change (good luck with that if you try, anyway). The goal is to adapt constraints deliberately.
Every Useful Constraint Has A Context
A constraint does not become good simply because it was once justified. It is possible for a rule, standard, ownership model, reliability target, or interface pattern to be exactly right in one stage of a system’s life and exactly wrong in another. An early-stage product may need lightweight processes, modest operational guarantees, and rapid iteration. A mature platform serving critical workflows may need stronger contracts, clearer versioning, tighter review of certain changes, and more explicit recovery requirements.
The key is to remember that a constraint is not a timeless virtue. It is a response to a context. When the context changes, the constraint deserves re-examination.
The Danger Of Drift
Unfortunately, many organizations do not adapt constraints intentionally. They drift and wander. A temporary workaround becomes an architectural norm. A local exception becomes a precedent. An informal ownership arrangement persists long after the team structure has changed. An interface remains versionless until change becomes painful, at which point everyone discovers that it was quietly functioning as shared infrastructure all along.
Drift is dangerous because it rarely announces itself. Nothing dramatic happens at first. There is simply a gradual separation between the constraints people believe govern the system and the realities that actually do. Over time that gap becomes expensive.
The Danger Of Novelty
There is an equal and opposite failure mode. Some teams treat change itself as a virtue. Old constraints are assumed to be obsolete merely because they are old. Stable interfaces are abandoned for fashionable alternatives. Proven review paths are discarded before the replacement has demonstrated that it can preserve important system properties. Teams confuse movement with improvement.
This is not adaptation. It is impatience and bias toward the novel. A system that constantly redefines its boundaries does not enable agility. It becomes an incoherent mess. Useful adaptation requires more discipline than either stagnation or chasing novelty.
When Should A Constraint Be Tightened?
Some constraints deserve to become stronger over time.
That usually happens when:
- the cost of failure has increased
- a capability has become shared infrastructure
- integration surface area has expanded
- operational load has grown
- regulatory or contractual obligations have intensified
- multiple teams now depend on a boundary that used to be local
For example, an internal API used by one team may initially tolerate a fair amount of informal coordination. That same API, once relied upon by several teams or external consumers, likely needs clearer versioning, better documentation, stronger backward compatibility discipline, and more explicit ownership. That is not bureaucratic overreaction. It is a response to increased significance and higher risk.
When Should A Constraint Be Relaxed?
Other constraints should become lighter.
That may happen when:
- the original risk has diminished
- automation has replaced manual controls
- a broad rule is constraining low-risk work unnecessarily
- a formerly scarce capability is now commonplace
- the organization has outgrown a one-size-fits-all standard
Not every system needs the same recovery target forever. Not every design rule deserves preservation. Not every approval path remains useful simply because it once caught a real problem. Relaxing a constraint is not necessarily indulgence. Sometimes it is a sign that the team has matured enough to remove unnecessary friction.
When Should A Constraint Be Retired?
A constraint should probably be retired when it no longer protects anything important, no longer aligns with reality, or now costs more than the risk it manages.
Examples include:
- architecture standards no one can justify or that are irrelevant to the actual system
- review gates that no longer catch meaningful issues
- technology rules based on defunct platform limitations
- interface assumptions invalidated by new operating models
- ownership arrangements that no longer match the actual support burden
- agile “ceremonies” that have become performative and no longer improve processes, delivery or quality
The mere age of a constraint is not evidence against it. The loss of relevance is.
Signals That A Constraint Needs Review
Teams often wait too long because they do not know what to watch for.
Here are a few useful signals:
- exceptions become frequent
- teams repeatedly route around the rule
- compliance is ambiguous or performative
- the cost of enforcement keeps rising
- downstream consumers no longer trust the boundary
- incidents expose hidden assumptions the constraint failed to address
- the constraint blocks changes it was never meant to block
- the original rationale can no longer be stated clearly
Any one of those does not automatically mean a constraint is bad. Several together usually mean it deserves serious attention.
The Actual Goal
I frequently coach teams in a couple of critical areas that surface which constraints are helping and which are hindering. The goal is not simply to change constraints. The goal is to adapt them in ways that preserve the system’s coherence while improving its ability to deliver value.
Automation, Repeatability, and Reversibility
Three of my fundamental values of software engineering are automation, repeatability, and reversibility. They are also useful lenses for evaluating constraints.
- Automation: Does the constraint enable or hinder automation? Does it create a manual bottleneck that could be automated? Does it prevent automation from being effective? Can we automate part of our process to make the constraint less burdensome?
- Repeatability: Is the constraint hampering our ability to achieve repeatable outcomes? Does it create unnecessary variability in how we deliver value? Can we make the constraint more predictable and consistent?
- Reversibility: Does the constraint enhance or attenuate our ability to reverse decisions or recover from mistakes? Can we change the constraint without creating irreversible consequences?
What Comprises an Adequate Software Delivery Methodology?
Many software teams tout their preferred methodology, but few can articulate what it actually accomplishes. They throw around words like:
- Agile
- SAFe
- Scrum and Scrum of Scrums
- Kanban
- Lean
- Waterfall (oh, the horror!)
What do all of these methodologies have in common? Each of them attempts to prescribe a set of constraints! But adherence to a particular methodology is not what matters. Touting your ceremonies or patting yourself on the back for adopting a particular approach is just plain silly. What matters is whether your methodology enables you to deliver value effectively and sustainably.
These are the two questions every team should be asking to determine if they have an adequate software delivery methodology:
- Are you meeting your commitments (and if not why not)?
- Are you continuously improving your process (and how do you quantitatively and qualitatively measure that)?
Many teams don’t even consider making and keeping commitments. That’s sad because the way trust is built is specifically by making and keeping commitments! It’s no wonder there is often a lack of trust between teams and their stakeholder (and between various stakeholder groups as well). Look, if you can’t make and keep commitments, you are not acting in a trustworthy manner. It’s that simple.
So what do you do? You start asking “how can we improve our process so that we can get better at meeting our commitments?” And “how can we make sure our commitments are meaningful, realistic and achievable?”
Asking these questions provides a framework in which you can evaluate your constraints and determine if they are helping or hindering you. If they are hindering, then you have an opportunity to adapt them in a way that preserves coherence while improving and accelerating your ability to deliver value.
How To Adapt Constraints Deliberately
Here are a few more ideas on how you can adapt constraints deliberately without losing coherence.
Revisit The Original Purpose
Why was this constraint introduced in the first place? What problem did it solve? What risk did it contain? What property did it protect? If that rationale is unclear, start there before changing anything.
Reassess The Current Context
What has changed? Has the business model changed? Has system load changed? Has the number of dependent teams changed? Has the operational model changed? Has the regulatory environment changed?
Constraints should be evaluated against present realities, not institutional memory alone.
Distinguish Core Properties From Local Implementations
Sometimes the real need remains, but the specific expression of the constraint does not. Perhaps a reliability requirement still matters, but the present approval flow is not the best way to protect it. Perhaps contract stability still matters, but the implementation standard can be relaxed. Perhaps observability still matters, but automation now enforces it more effectively than manual review.
That distinction is critical, otherwise teams end up defending an old mechanism while forgetting the actual property it was supposed to preserve.
Change Boundaries Intentionally
When constraints affect shared interfaces, ownership, or operating expectations, change should be deliberate. Version the contract if needed. Communicate the new boundary. Provide migration guidance. Make transitional expectations explicit. Avoid forcing consumers to discover change by accident.
The more central the constraint, the more carefully its adaptation should be handled.
Observe The Result
A changed constraint should not be treated as self-validating. Did the new rule improve clarity? Reduce cost? Preserve the intended system property? Increase drift? Generate confusion? Improve delivery without undermining reliability? Constraints, like designs, should be evaluated by consequences.
Reversibility Matters
Whenever possible, adapt constraints in ways that preserve reversibility. This is especially important when modifying interfaces, support models, or review mechanisms. A change that cannot be rolled back or incrementally adopted deserves a higher burden of proof. Irreversible constraint changes often produce the most painful surprises because they shift the rules of coordination at the same moment they remove the escape route. A reversible adaptation path does not guarantee success, but it reduces the cost of learning.
Closing
Good constraints are not static. Neither are good systems.
But change is not a virtue in itself. Nor is it something to be feared or avoided.
A healthy design culture knows how to tighten constraints when significance increases, relax them when unnecessary friction accumulates, and retire them when they no longer serve the system. It knows how to revisit context without dissolving coherence. It knows how to preserve core properties while changing the mechanisms that support them.
That is what disciplined adaptation looks like.
The alternative is familiar enough: drift on one side, fashion and fads on the other. And neither produces durable systems.
If constraints can be liberating, they can also mature. The challenge is to curate and adapt them without losing the coherence and clarity they exist to protect.