Archive

Monthly Archives: January 2024

A Primer on Domination Systems and the Myth of Redemptive Violence

Many human societies have domination systems, as explained by American theologian Walter Wink – interlocking structures which allow one group to dominate and exploit others. This can permeate across political, social and economic spheres.

Those who benefit from these systems often propagate a “myth of redemptive violence”. This refers to the narrative that violence is a morally purifying and redemptive act to uphold order and law. Systems of inequality indoctrinate the privileged to believe their violence against the marginalised serves the greater good.

However, thinkers like Martin Luther King Jr. and Mohandas Gandhi challenged this myth. They spearheaded nonviolent civil resistance against injustice in America and British-ruled India respectively. Both believed redemptive violence was an untruth – it only perpetuated further harm without achieving moral redemption.

Gandhi pioneered satyagraha or “truth-force”, inspiring India’s independence struggle through nonviolent protest, civil disobedience and economic non-cooperation. Rather than defeating the British, the goal was to convert them from wrong to right.

Martin Luther King was profoundly influenced by Gandhi. King described nonviolence as the most powerful means for oppressed minorities to reclaim basic dignity and rights. As with Gandhi, King’s vision was for nonviolent activism to transform social consciousness and achieve justice without bloodshed.

Tragically, extremists assassinated Gandhi in 1948 and King in 1968. However, their movements succeeded in dismantling unjust systems nonviolently. India gained independence in 1947 after decades of Gandhian civil resistance. In America, landmark civil rights legislation was passed prohibiting racial discrimination.

Through sustained truth and love, Gandhi and King’s seminal campaigns proved domination systems perpetuate themselves by making violence seem routine, necessary and even honourable. And that nonviolent change is not only possible, but a moral obligation.

Do you see how this makes the world a violent place, and so also for organisations?

The Appeal of SAFe

SAFe (Scaled Agile Framework) has become one of the most widespread scaling agile frameworks adopted by large companies and organisations. Despite numerous criticisms and many documented failures, its appeal continues to grow, with enterprises willing to invest massive sums in training and disruption to implement SAFe. This seems surprising given the minimal tangible benefits realised by most SAFe adherents.

So why does SAFe remain so appealing to large, complex bureaucracies? In a word: comfort. While marketed as a way to enable agility and leanness, SAFe appeals precisely because it does not challenge the status quo nor the entrenched beliefs held in many slow-moving, hierarchical organisations.

Criticisms of SAFe

To understand this dynamic, let’s first review common critiques levelled at SAFe:

  • Overly complex and prescriptive – SAFe has endless prescribed roles, processes, artefacts etc. This bureaucratic overhead hinders agility.
  • Hard to tailor – The intricate nature of SAFe makes customisation impractical. Organisations must reshape themselves to fit the framework.
  • Promotes “waterfall” thinking – The emphasis on upfront planning and budgets feeds an outdated sequential mindset rather than adaptiveness.
  • Reduces team autonomy – The multitude of coordination points, cadences and preset workflows leave little room for teams to self-organise.
  • Lots of overhead – The multi-layered structure requires innumerable meetings, planning sessions and documentation with little obvious value.
  • Focused on software – Challenging to integrate with hardware-based development.
  • Failure to change mindsets – By not focusing enough on culture and psychology, old ways of thinking persist.
  • Poor results for small teams – The coordination needs overwhelm lighter-weight groups.

And the big one:

  • Fails to deliver promised benefits – Despite claims around quality, speed, alignment etc., SAFe often delivers no measurable improvements.

Why So Appealing Then?

On the surface, we might be forgiven for thinking that these weaknesses would temper interest in what looks like an over-engineered, bureaucratic and exploitative approach. Yet SAFe resonates precisely because it neatly aligns with the innate orientation of lumbering enterprises.

Importantly, the traditional command-and-control assumptions underpinning these organisations are fundamentally incompatible with the collaborative dynamism essential for collaborative knowledge work (CKW) like software development. Still, decision-makers inevitably cling to what they know.

Organisational psychotherapy techniques can help transition teams to more adaptive behaviours, but this level of innovation is unknown to most executives.

Social Psychology

Instead, SAFe taps into the underlying psychology of social systems both enamoured by and resistant to change simultaneously. It allows decision-makers to signal adherence to “agile” thinking for PR purposes while actually fortifying traditional beliefs around command-and-control. It fosters the myth that adding scaffolding and rituals atop dysfunctional structures and ineffective ways of working can enable high-performance.

By wrapping waterfall-era assumptions in trendy Agile terminology yet never challenging obsolete ideas, SAFe holds tremendous appeal as it lets organisations feel as though they are evolving without actual introspection or change. For entrenched companies desperate for innovation yet terrified of losing control or certainty, SAFe’s contradictory promise proves irresistible. The disappointments come later. When admission thereto have become way to embarrasing to air.

ABC

Approaches like Agile for Big Companies (ABC – open sourced and in the public domain) aim to bridge this gap by enabling greater agility without upending incumbent structures and assumptions. Yet true transformation requires a willingness to surface and reflect upon long-held organisational axioms. For those unable or unwilling to fundamentally remake themselves, SAFe offers a tempting façade of progress.

The Secret

[Tl;Dr] The Secret to a Thriving Economy: More Autonomy, Not Less

It bugs the hell out of me that so many people, especially politicians, whine constantly about productivity, and the lacklustre performance of their economies, yet are totally unwilling to face the obvious.

At the Macro Scale

The economic machines of countries around the world churn day and night, fueled by the collective efforts of millions of workers, business owners, and policy makers. But what really makes an economy hum? What’s the not-so-secret secret ingredient to robust economic growth and prosperity?

In a word: autonomy.

Now, that may seem counterintuitive. Our first instinct is often to seek more oversight and direction when we want something to improve. However, if we look at the most successful, innovative economic powerhouses around the globe, the common thread is individual autonomy, not micromanagement.

Give people more freedom over their economic decisions and the way their work works, and you unleash productivity. Reduce regulations, barriers to starting businesses, and bureaucratic red tape and you spur entrepreneurship. Relax the economic controls governments so often layer into their policies and you tap into the inspirations and ambitions of ordinary citizens.

At the Micro Scale

The same principle applies within companies and organisations. The most successful firms like MorningStar, Huawei, and WL Gore empower employees to take initiative and run with ideas without burdensome bureaucratic processes hindering them. They understand breakthrough innovations most often come from teams on the frontlines, not via top-down control from management hierarchies. Organising intent might come from the core group, but optimal decisions live within teams doing the on-the-ground work.

Government agencies also function better when field offices study demand in customers’ terms, and stay tuned to citizens’ needs rather than trying to impose rigid one-size-fits-all policies. Workers interacting directly with constituents invariably grasp requirements better than officials at headquarters absorbed in bureaucratic minutiae. More autonomy and less restrictive protocols serve citizens better.

The fact is, empowered people drive growth through innovation. Central planning stifles it. Bureaucrats simply can’t gather and process economic information as efficiently as multitudes coordinating voluntarily in their own self-interest. And heavy-handed governments often misallocate resources to politically favored recipients instead of productive avenues.

Summary

So if you want a dynamic, thriving economy or organisation, the secret is to step back, not forward. The most effective organisations thrive by focusing on providing sound money, enforcing contracts, securing property rights, and then stepping back. They recognise that excessive process and over-regulation via bureaucratic diktats tend to restrict, not unleash, productive economic engines.

The Era of Collaborative Knowledge Work

Work dynamics have been evolving rapidly in recent decades. Back in 1959, management expert Peter Drucker coined the term “knowledge work” – jobs focused more on expertise application versus manual tasks. Today, many observe the economy shifting from industrial production to innovation through agile collaboration.

Fundamentally Different

The nature of work has fundamentally changed. We have shifted from an industrial economy largely based on manual labour to a knowledge economy increasingly based on intellectual collaboration. This transition invites a new way of looking at work, focused on both recognising and facilitating collaborative knowledge work (CKW).

In this model, cross-disciplinary teams come together to brainstorm and refine breakthroughs iteratively. Silos give way to fluid circles of contribution. Motivation stems intrinsically from the shared mission, not extrinsic rewards. Experimenting with unconventional ideas bears lower risk when paired with constructive peer feedback.

But embracing the CKW paradigm depends on adopting a distinctly different approach to work. How can groups establish norms where everyone feels comfortable contributing without fear of judgement or rejection?

Autonomy, Mastery and Shared Purpose

Part of the solution links back to aligning clearly around higher purpose. When autonomy coexists with shared accountability, inspiration untaps. Structuring reciprocal mentorship allows members to develop emotionally and motivationally while exchanging honest developmental guidance.

This differs drastically from the hierarchical command-and-control management style of the past century that was well-suited for manual labour but proves limiting for knowledge work. Managers can no longer simply dictate tasks and expect compliance. For collaborative efforts to thrive, managers must nurture a culture that empowers teams with autonomy while providing direction, support, and facilitation.

What About Management?

Those in the know recognise the incompatibility of CKW and the traditonal management paradigm. Yet, organistions intent on making the best of CKW are faced with transitioning away from the concept of management towards e.g. sefl-managing teams and fellowship. In essence, we’re talking about culture change. Here’s some guidance in that regard:

Guidance for Old-Guard Managers

For managers used to traditional modes of top-down management, adopting a collaborative approach invites a paradigm shift. Here are key ways to enable more participatory and productive knowledge work:

  • Provide transparent context and clarity around broader goals while giving teams discretion in determining how goals are achieved.
  • Cultivate constructive exchanges where all team members feel comfortable contributing ideas without fear of judgement.
  • Ask probing questions, identify gaps, and point to resources, not dictate solutions.
  • Focus on facilitating the collaborative process through conflict resolution, dialogue around communication norms, and adaptive coordination.
  • Champion new ideas that arise from the team and rally support across the organisation.
  • Evaluate performance based on the effectiveness of collaborative processes and quality of outputs.

Advice for New Managers

For those assuming their first management role, the collaborative approach may feel more intuitive. Still, translating intent into impact invites concerted learning. Here are some areas for new managers to consider:

  • Foster emotional intelligence to nurture relationships, understand different working styles and motivations, and resolve interpersonal friction.
  • Hone facilitative teambuilding techniques like liberating structures, engagement through powerful questions, and conversation mapping.
  • Promote inclusion by valuing diverse voices, ensuring equal opportunity for contribution, and mitigating dominant perspectives.
  • Develop fluency in digital collaboration tools and appropriate applications for remote and hybrid work settings.
  • Elevate and practice orchestrating for collaborative work.
  • Pay attendtion to the quality of interpersonal relationships and the overall social dynamic.
  • Attend to folks’ needs.

The CKW paradigm brings substantial promise and possibility but requires managers themselves to transform. By embracing this challenge, leaders can unlock unprecedented potential from today’s knowledge workers.

The future lies in fully unleashing human potential by connecting talent to shared missions. But practical change management matters. How might we reinvent team rituals and processes to make this vision an everyday reality? The answers will come collaboratively, through commitment to the journey of learning together.

The Social Side of Improvement

While organisational purpose, leadership directives, customer feedback and development processes model guide improvement efforts in business and technology, the truth is that willingness to improve is driven primarily by social and behavioral factors within teams. Even the most meticulous goals, inspired leadership, and incentive structures fall flat without the initiative of people who develop, design and maintain systems. Understanding social dynamics is key.

Cultivating Constructive Exchanges

Improvement starts with recognition of social blockers* and unhelpful or deleterious assumptions – things which teams and individuals may find uncomfortable to confront. Where people feel uncertain about transparency, or fear judgment, they tend to hide issues instead of raising them. Leaders may choose to actively cultivate environments geared towards constructive exchanges, allowing for open dialogue around issues. This helps normalise the process of identification and resolution of deficiencies.

Intrinsic vs Extrinsic Motivation

While extrinsic rewards like bonuses or promotions may temporarily boost improvement efforts, intrinsic joy and satisfaction derived from enhancing systems sustains team momentum better long-term. By tapping into natural human needs for growth, learning and overcoming challenges, organisations can activate self-perpetuating cycles of improvement. Especially in CKW (Collaborative Knowledge Work) this intrinsic drive always outweighs extrinsic rewards.

Team Cohesion and Alignment

Teams that agree on why improvements matter and how to make them happen can work together better to upgrade the way the work works. When a team shares beliefs about the value of making progress, they can encourage each other to take helpful steps through dialogue, teamwork, and motivation. Without this same vision and coordination as a team, people can lose steam and direction, which slows progress.

No policies handed down by an organisation can force improvement to happen without support within the team itself – people’s drive to learn and tackle problems as a group keeps development going over time. Smart teams focus first on creating a common purpose and satisfaction from incremental gains among the team members. This activates social forces within the team that enable ongoing improvements to happen more easily.

In essence, having people work positively together as a team, united by common goals and motivations, is what sustains long-term progress above all. Savvy teams build pride in small wins, and in camaraderie focused on solving challenges that come up. This gives the team itself an inner drive to keep improving.

The Role of Nonviolence

Teams working together day after day to refine and upgrade systems will inevitably encounter disagreements, debates over technical design tradeoffs and even interpersonal conflicts. Without mindful effort, discussions around imperfections can turn counterproductive if they degrade into blame games, aggressive posturing or dismissiveness. Leaders therefore need to proactively encourage nonviolent communication norms.

Attending to Folks’ Needs

For nonviolence to truly take root, teams may choose to move beyond civil language, to proactively attending to the psychological, emotional and practical needs of team members. This involves empathy, active listening, validating concerns without judgment, and extending support to help resolve issues causing distress. By being attentive caregivers, teams allow themselves to feel safer, exposing vulnerabilities including skill limitations and interpersonal issues that may be blocking progress.

Empathetic Language

By teaching team members to frame problems objectively, avoid finger-pointing around issues and discuss potential improvements with empathy, compassion and non-judgment, conversations become solution-focused. This prevents people from becoming defensive when their work is critiqued and keeps debate civil, allowing cooperative analysis of flaws.

Mediation Over Escalation

When conflicts around system deficiencies do emerge within teams, leaders should mediate issues through open dialogue between parties rather than let tensions escalate. Allowing people to air their perspectives fully and feel heard diffuses situations where egos can clash during ongoing refinement efforts. If deficiencies are structural, collective responsibility should be emphasized over singling out individuals to avoid disincentivizing transparency around limitations.

Nonviolence In Action

Ultimately, by normalizing nonviolent communication, dialogue and conflict mediation practices within teams, leaders can ensure that the necessary discussions around flaws and areas of improvement do not themselves disturb the social fabric underlying cooperative work. This sustains healthy relationships between members which are foundational for iterative development.

*Social Blockers

“Social blockers” refer to interpersonal or group dynamics that inhibit progress, innovation, and improvement in teams and organisations. Some examples of social blockers include:

  1. Groupthink – Where there is pressure on members to conform to a dominant narrative and not challenge assumptions. This smothers dissenting perspectives that may reveal flaws or areas to improve.
  2. Blame Culture – When failure or deficiencies consistently get attributed to individuals’ mistakes rather than addressing systematic gaps. This makes people defensive about problems rather than openly discussing solutions.
  3. Office Politics – Power struggles, protection of turf, and ego issues can distract focus away from constructive progress. Backbiting, sabotage, nepotism etc. form rifts that block alignment.
  4. Poor Leadership – Leaders who don’t welcome critical feedback or consumer insights, provide inadequate resources/training, resist change, or don’t mediate conflicts actively perpetuate barriers to improving the social dynamic.
  5. Complacency & Myopia – Organisations can get habituated to certain ways of operating, becoming complacent. Lack of outside perspective also breeds collective myopia to needs for positive change.
  6. Toxic Communicational Norms – Uncivil dialogue, aggressive confrontation styles, disrespect, and microaggressions during discussions on progress inhibits constructive exchanges in teams – somthing vital for improvement.
  7. Violence & Intimidation – In toxic organisational cultures, literal or symbolic threats of violence, intimidation, and aggression are sadly used to suppress dissent and critical feedback that reveals improvement areas. By creating an atmosphere of fear, obligation, guilt and shame,, such coercive tactics block openness.

Essentially any interpersonal and group dynamic that suppresses objective problem-solving, transparency around limitations, innovation through fresh perspectives, and constructive dialogue hampers the will and ability to improve – be it products, services or workflows. Managing these “social blockers” is key.

Further Reading

Rosenberg, M. B. (2015). Nonviolent communication: A language of life (3rd ed.). PuddleDancer Press.

Found Money or Found Ideas: Which Gets More Takers?

You’re walking down a busy city street and notice a $100 bill lying on the pavement. Do you stop to pick it up? Surveys show over 80% of regular people would grab that cash off the ground. And why not – it requires little effort and there’s $100 in your hand. The reflex is strong.

New Ideas

Now picture this: you’re a business executive and come across an idea that could save your company thousands or even millions. Perhaps an insight about improving operations, cutting costs, or developing a new product. Does that give you the same urge to grab it? Statistics suggest maybe not so much.

While we quickly snatch physical money, evidence indicates far fewer businesspeople incorporate extremely valuable new perspectives and ideas. Once companies reach a certain scale, conveniences and habits often create blindness to outside innovations. We estimate less than 40% of corporate decision makers stop to pick up and leverage ideas that could produce huge financial impact. The inertia not to change remains high even in a world of fierce competition.

Perplexing

This is perplexing given the vast sums on the line from potential business improvements versus, say, finding $100 on the street. Why such different behaviors? When we come across physical money, the value is obvious and instant rewards light up our innate financial motivations. But for executives to see, understand and capture value from a new idea requires much more mental effort. Our brains didn’t evolve specifically for complex business insight – but they did become wired to recognize tangible resources.

Machiavelli Nailed It

Additionally, individuals stumbling upon cash don’t usually have to answer to anyone else if pocketing it. Business leaders proposing substantial changes face scrutiny from boards, investors, employees and others – opening them up to potential criticism if things fail, reducing willingness to take risks.

“There is nothing more difficult to take in hand, more perilous to conduct, or more uncertain in its success, than to take the lead in the introduction of a new order of things.”

~ Machiavelli, The Prince.

Summary

Perhaps there are lessons here about better conveying the tangible windfalls ideas could bring, and creating psychologically safer environments for innovating in large organisations. The incentives feel stacked more towards grabbing that $100 bill versus thinking creatively on impactful growth opportunities, even when the latter has exponentially more value. Training our business minds to pick up great insights at least as readily as finding physical currency on the street could have immense strategic and financial benefit.

Pronouncing “Quintessence”

If you’ve come across the word “quintessence” while reading English texts, you may have wondered about the correct pronunciation and actual meaning of this rather unusual word. As a non-native speaker, the pronunciation can seem tricky at first. Read on for a quick guide on how to say “quintessence” properly and what this interesting word signifies.

Breaking Down the Pronunciation

Quintessence is pronounced “kwin-tess-uhns” in British English. Let’s look at each syllable:

“Quin”: The “qu” sounds like a hard “c” or “k”, as in words like “queen” or “quick”. Say the “kwin” syllable.

“Tes”: This syllable rhymes with words like “test” or “best”. Say “tess”.

“Ence”: Here the “e” becomes a schwa sound – the neutral “uh”. Think words like “enhance”, and say the schwa “uh” sound.

Put together, the full pronunciation is: kwin-tess-uhns. The stress is on the second syllable, “tess”. Say the word a few times out loud, stressing that middle portion, to get comfortable with the pronunciation.

Alternatively, you might choose to pronounce it “quint” + essence”.

The Meaning of Quintessence

So now that you know how to say it properly in your best spoken English accent, what does “quintessence” actually mean? Quintessence signifies the purest, most perfect or concentrated essence of something. For example, you could describe a breathtaking landscape as “the quintessence of natural beauty”. Or for an organisation that has everything sorted, all its ducks lined up, and firing on all cylinders, we might choose to call that a “Quintessential organisation”.

Etymology

The word originates from medieval philosophy, derived from the Latin “quinta essentia”, meaning the “fifth essence“. This referred to what was thought to be the pure substance making up heavenly bodies, beyond the four basic earthly elements of fire, water, air and earth.

In Modern Physics

In modern physics, “quintessence” refers to a hypothetical form of dark energy postulated to explain the observed acceleration of the expansion of the universe. Based on astronomical observations, scientists have determined that some unknown form of energy, termed “dark energy,” makes up about 68% of all the energy in the observable universe. This mysterious dark energy is causing the expansion of the universe to speed up over time. To explain this phenomenon, physicists have proposed that quintessence – an extremely light and slowly-varying scalar field – may account for the observed behavior of dark energy and the accelerating cosmic expansion. Quintessence would have negative pressure, offsetting normal attractive gravity and driving galaxies apart at an ever-faster rate. If confirmed, the quintessence scalar field would be the “fifth element” driving cosmology, alongside ordinary and dark matter. Though still unproven, quintessence remains a leading contender for explaining one of the biggest mysteries in modern physics and astronomy. Further experiments and astrophysical observations may shed more light on this proposed fifth essence permeating the universe.

Summary

So next time you come across this unique word, you’ll know the proper English pronunciation and understand its meaning related to a pure, perfect embodiment of something. With your new knowledge, use “quintessence” to impress your English friends and teachers!

Further Reading

Marshall, R.W. (2021). Quintessence – An acme for software development organisations. https://leanpub.com/quintessence

Implications of Innovations

When exciting innovations emerge, they hold potential to shift our life trajectories in both promising and complex ways. However, in the thrill that accompanies the novel and cutting-edge, people rarely pause to deeply contemplate personal implications. In other words, “What’s in it for me?” (Or for my peers, friends, family, etc.)

Visionaries passionately champion new concepts for their potential to uplift lives, because they see the implications. But whether an emerging idea or philosophy ultimately proves beneficial depends greatly on each person exposed to it.

Given that recipients of a new idea often fail to appreciate the implications of that idea – as it specifically applies to them and their self-interest – is it any wonder that new ideas take so long to see an uptake?

The ideas with the most transformative power invite searching self-inquiry to identify what they could mean for the reader. Recognising that no single innovation holds universal betterment for all people is an act of discernment. Contemplating tough questions about how emerging ideas and philosophies might shape our wellbeing is essential for progress that elevates rather than diminishes life.

AQA

I write often about ideas that could revolutionise the worlds of business and software development. I never receive requests for clarification, explanation, implications or further details. If your interest is piqued in any way by what I write, I’d be delighted to respons to your questions.

Step Back to Step Forward: The Importance of Reflecting on How We Spend Our Time

Day in and day out, we run feverishly like hamsters on a wheel – busy, busy, busy without getting anywhere meaningful. We churn through email inboxes overflowing with messages that pull our attention in countless directions. We rush between back-to-back meetings, never catching our breath long enough to seriously question if all this busyness is necessary or beneficial. We plow through long to-do lists, tickets and kanbans crammed with obligations as if crossing off more items will somehow lead to happiness or fulfillment.

The truth is, few of us step back to thoughtfully examine whether our daily activities actually serve our longer-term aspirations or values. We fail to evaluate whether we even want all the things we exhaust ourselves chasing. We assume being crazy busy means we’re living life to the fullest, while any space to relax or reflect feels almost lazy.

What If?

But what if we’re getting it all wrong?

What if pausing to seriously assess how you spend your precious time and mental energy is the wisest and most essential habit for building a life you love? One aligned with your true priorities rather than society’s flawed assumptions?

Regularly taking this pause offers three key advantages:

  1. It tunes you into your inner wisdom. Slowing down to question how you occupy each day invites clarity about what matters most. What activities fuel you with joy and meaning? Which drain you? Tapping into this awareness guides better decisions.
  2. It reveals gaps between your values and actions. Do you value family, but work too much to connect? Do you desire creativity, but don’t nurture it? Examining misalignments sparks ideas for change.
  3. It uncovers possibilities previously unseen. When we step off the hamster wheel, we open our eyes to new horizons by asking, “How else could I spend my time?” New passionate pursuits often reveal themselves.

Curating a Life

This self-reflection isn’t about harsh self-judgment – that only fuels toxic perfectionism. It’s about curating a life that honours your unique needs and dreams. One that feels purposeful because how you spend each hour aligns with who you are at the core.

So in our culture drunk on busyness and speed, you might choose to be a positive disruptor. Challenge those assumptions that drive your days – assumptions that no longer serve you or society. Commit with courage to periodic reflection that guides your path to more meaningful horizons. Simply put, step off the hamster wheel to thoughtfully decide where you truly wish to go.

The key is starting. Close your eyes, take a few deep breaths, and ask yourself: “If how I’m spending my time isn’t serving me, how do I want it to be different moving forward?” Listen deeply. The answers that surface may surprise you.

The Fourth Quinlan Rule

The Bobiverse sci-fi novels (book 4 – Heaven’s River) introduce an alien race known as the Quinlans. The Quinlans teach their young three moral principles using metal analogies: the Iron Rule, the Silver Rule, and the Gold Rule.

  • Iron Rule: If you have more power than someone, you can treat them how you like. (Might makes right.)
  • Silver Rule: Do unto others as you would have them do unto you. (The so-called Golden Rule of human ethics – treat others how you want to be treated.)
  • Golden Rule: Do unto others as they would have you do unto them. (Treat people how they want to be treated, not just how you want to be treated – the platinum rule in human ethics).

So in order from basic/selfish to ethical/selfless:

  • Iron – Exercise power however you wish.
  • Silver – Treat others how you want to be treated.
  • Gold – Treat others how they want to be treated.

I strikes me that the Quinlans, and Theresa in particular, might have been interested in a fourth rule: the Antimatter Rule:

“Attend to folks’ needs.”

Like antimatter, the most explosive substance in the universe, this principle channels huge motivational power by focusing attention on understanding people’s needs.

Attending to Needs

By “folks,” the principle refers to all stakeholders affected – team members, users, customers, and more. And by “needs,” it addresses the spectrum of human requirements and motivations.

Rather than make assumptions, the Antimatter Principle asks us to clearly understand what really drives those we work with before taking action.

Honoring Needs Unlocks Passion

Attending to human needs taps into the fuel that ignites passionate human endeavor – our universal desire to feel heard, seen, valued. This empathy and understanding can transform collaborations.

In just four words, the Antimatter Principle captures a profoundly human-centric ethos. Understanding what inspires people provides a key to unlocking cooperation, innovation, and positive change.

What do you think about this principle? Could attending to folks’ needs power more constructive collaboration in your experiences?

The Hidden Hand of Shared Assumptions

Behind many business failures and underperformance lies a common root cause – the unseen influence of collective assumptions and beliefs (and Cf. Rightshifting). Across organisations and even entire industries, leadership often clusters around shared perspectives, biases, and mental models. Over time, these become entrenched as accepted wisdom rarely challenged or revisited. This phenomenon profoundly shapes decision-making, typically outside conscious awareness. And flawed underlying assumptions can lead organisations astray, even unto the graveyard.

A prime example is the financial crisis. The model of endless housing price growth and low-risk securitized assets became so ingrained across banks that it created systemic fragility. The possibility of declines or instability was dismissed out of hand. Groupthink prevailed and warning signs were ignored. Until the flawed assumptions catastrophically collided with reality.

Every sector holds similar tales. In automotive, the assumption of an enduring petrol car dominance slowed electric investments. In medical science, the belief that ulcers resulted from stress delayed recognition of bacterial drivers. The corporate world is littered with shifting paradigms disrupting those clinging to outdated assumptions.

Why does this happen? Humans are sensitive to social signals and prefer perspectives validated by their peer group. This shapes unconscious biases and mental models. And perceived wisdom calcifies even where contrary evidence emerges. We must therefore consciously re-evaluate the collective assumptions within which we operate.

This is particularly crucial given rapid technological and social change. Assumptions rooted in fading reality misguide strategy. Herein lies opportunity for those recognising seismic shifts early. And grave risks for those dismissing disruptive forces based on yesterday’s truths. Separating enduring assumptions from emerging realities is key.

So let us examine just four detrimental assumptions embedded across businesses:

  • The concept of management is treated as an inherent good when in fact it can severely hamper organisations. Managers micromanaging and scrutinising employees’ every move often harms efficiency, stifles innovation, and breeds resentment amongst staff. The relentless oversight creates a tense working environment where workers have no autonomy or control. The reams of paperwork and interminable meetings generated by managers frequently add little value. Clearly, the assumption that more managers and more top-down control is always better fails to acknowledge the reality and the downsides.
  • The notion of concentrated leadership seems ill-founded. Centralising decision-making and strategy in a narrow elite risks disempowering the wider workforce. When employees cannot influence choices impacting their work, motivation and dedication suffers. Likewise, executives profiting lavishly from company successes while workers gain only stagnant wages breeds discord and weakens productivity down the chain. The contributions of a chief executive on a £10 million salary rarely outweighs that of a thousand dedicated employees. Concentrated power often produces conflict and fragility rather than thriving organisations.
  • The belief that exhaustive software testing is imperative leads projects astray. Developers waste huge sums of time and effort running code through endless minor variations with diminishing returns. There is little value testing every trivial feature adjustment to death. And users grow frustrated with delays and restrictions as programmers obsess over comprehensive testing. Pursuing flawless software typically proves counterproductive as no system is ever perfect – the goal should be usable products that can be iteratively improved.
  • The assumption that employees should be worked to exhaustion is clearly unsound. People do not enjoy unsustainable workloads and unreasonable deadlines. Pushing human resources to the brink often backfires rather than driving engagement and satisfaction. There are better ways to attract and retain talent than by running staff into the ground. And tired, overwhelmed personnel tend to see plunges in output and quality. Straining human endurance typically fuels turnover rather than powering success.

Many more detrimental assumptions can be found detailed in my book “Quintessence“.

The lesson is clear – we might choose to constantly surface and reflect upon ingrained assumptions before they lead us off a cliff. Momentum can quietly build behind outdated modes of thought right until environmental shifts expose systemic brittleness. As markets transform, so too must the underlying mindsets guiding business decisions.

Every Organisation Rules Out a Host of Beneficial Choices

Every organisation rules out choices that would markedly improve their bottom line  – due to entrenched assumptions.

All organisations have deeply rooted beliefs and assumptions that influence their decision making, often without people even realising it. These unquestioned ways of thinking can lead organisations to dismiss ideas, policies and practices that could significantly benefit them.

Many proven best choices around areas like compensation, flexibility, hierarchy, remote work, and sustainability get ruled out quickly in most corporate cultures. Not because the ideas lack merit, but because they don’t align with legacy notions of how business should operate. The prevailing managerial ideology acts as mental blinders, narrowing the overview of what’s possible.

For example, decades of belief in the primacy of shareholder value has prevented many companies from prioritising sustainability, even when a greener approach would bolster the bottom line. The assumption that purpose erodes profits still permeates boardroom thinking.

Similarly, the standard 9 to 5 office-dependent schedule gets virtually no pushback in some contexts due to deep-seated assumptions about productivity and supervision needs. Even when the growth of knowledge work makes location and set hours irrelevant. Assumptions lead organisations to miss a host of opportunities.

Key is bringing awareness to the unexamined collective beliefs that close organisations off to progress and performance-enhancing innovations. Progress depends on leaders willing to question legacy orthodoxies that no longer serve. A company’s entrenched perspectives ultimately impact hard business metrics. Routinely reexamining operating paradigms is essential to ensuring beliefs enable rather than obstruct impact and financial returns.

Organisational psychotherpy makes this possible in a low-risk fashion.

The next breakthrough idea could be waiting, if only long-held assumptions would get out of the way.

The Humanity at the Heart of Organisational Psychotherapy

Organisations are made up of people – complex human beings with emotions, dreams, fears, and relationships. Yet somehow, when we walk through the office doors each morning, we are expected to check our humanity at the door. The ostensible focus becomes targets, metrics, shareholder value – losing sight of the humans behind it all. (But also see: Your REAL Job).

Organisational Psychotherapy seeks to rebalance this by putting the person back at the centre of the workplace. Through simple techniques grounded in psychotherapeutic theory, it aims to create more humane organisational dynamics where staff can bring their whole selves to work.

Key Principles

Some of the key principles include:

  • Attending to folks’ needs (the Antimatter Principle)
  • Containment – providing a safe space for employees to process difficult emotions so they do not spill out destructively. Managers should offer non-judgemental listening and support.
  • Reflexivity – encouraging individuals and teams to reflect on their own behaviours and dynamics before making changes. This avoids knee-jerk reactions and promotes sustainability.
  • Role clarity – clearly defining responsibilities so no one feels asked to fulfil impossible expectations. This reduces anxiety and burnout.
  • The “good enough” organisation – perfection is impossible with human beings. Organisational Psychotherapy advocates aiming for “good enough” -and clearly stated – standards that make space for people to be fallible. This means focusing less on rigid metrics and idealised goals, and more on sustainable ways of working that protect staff health and wellbeing in an imperfect world. There is recognition that some days we can give 100%, while on others our energy and focus may falter – and both scenarios can be met with compassion rather than criticism.

Heart

At the heart of all of this is compassion – for ourselves and each other. Workplace stress often stems from a lack of self-compassion, driving harsh inner critics and causing us to lose touch with out humanity and the humanity of those around us. Creating work cultures built on mutual understanding and caring allows our organisations to more ethically support both staff and customers.

Organisational Psychotherapy Memes

The power of Organisational Psychotherapy memes speaks volumes about how desperately many organisations need more humane dynamics centred on understanding people. No matter how slick our processes, how smart our tech – an organisation relies on its people. Workers and managers alike deserve compassionate spaces where they can bring their authentic, complex, perfectly-imperfect selves to the table every day.

Further Reading

Trzeciak, S., & Mazzarelli, A. (2019). Compassionomics: The revolutionary scientific evidence that caring makes a difference. Studer Group LLC.

Marshall, R.W. (2021, December). Quintessence: An acme for software development organisations.

The Creative Developer: Coding is Just Our Medium

How many software developers when asked what they do for a living reply “writing software”? Just about 100%, I’d guess. The very title of “software developer” implies we spend our days pounding out code, line after line of instructions for computers.

But is that truly an accurate picture? I would argue that the analogy of “writing” software promotes some problematic assumptions. It focuses purely on the technical aspect of coding, ignoring all the other important facets of bringing software to life. It perpetuates stereotypes of programmers as nerdy code monkeys, heads down in front of a keyboard all day. And it fails to capture the deeply creative process that software development entails at its best.

In reality, we developers don’t just “write” software – we attend to folks’ needs, crafting systems, experiences, solutions and above all, interpersonal connections. We collaborate, gather requirements, make trade-off decisions. We envision how people will interact with the products we craft. Code is simply our medium for bringing strategy and creativity to life.

Software development has as much in common with engineering, architecture or even storytelling as it does with coding. There is an artistry and imagination behind truly great tech-based products that goes far beyond syntax. The attendants of the future will be at least as fluent in humanities as mathematics or computer science.

So the next time someone asks what you do, don’t reflexively say you “write” software. Share how you attend to users’ needs, strategise solutions, and creatively work with teammates. Let’s put to rest the tired stereotype that developers are code-writing scribes! What we do entails far more multi-dimensional and meaningful attending to needs, products and people.

Slow on the Uptake: Why Society is Often Slow to Adopt Major Innovations

Human progress seems to advance in fits and starts. Many of history’s most important inventions and ideas took centuries or even millennia to be widely adopted by societies across the globe.

Writing systems, germ theory, vaccines, evolution – these revolutionary developments changed the arc of civilisation. Yet they struggled for acceptance despite ample evidence and the persistence of brilliant minds who championed them. Why is society so slow on the uptake for innovations that later prove to be game-changers?

Dominant Worldviews

As historian Thomas Kuhn explored in his seminal book “The Structure of Scientific Revolutions,” established scientific paradigms are notoriously resistant to evidence that contradicts their foundational assumptions and conventional wisdom. Findings that don’t neatly fit the dominant worldview face an uphill battle toward acceptance. Scientists and scholars may actively suppress or ignore discoveries that undermine existing consensus due to cognitive biases. Revolutionary concepts thus lie dormant for ages.

Enablers

Technological limitations also stall adoption until complementary advancements accumulate that allow applications at scale. The printing press enabled modern vaccination campaigns. Electric lighting powered factories adopting steam engines. Progress builds gradually across spheres.

Dogmas

Cultural and religious convictions add yet another barrier. Entrenched dogmas about humanity’s place in the cosmos delayed recognition of heliocentrism for almost two millennia. Evolution continues to meet public scepticism given its clash with ancient belief systems.

Modern global connectivity accelerates recognition and validation of emerging innovations. But inertia remains strong; it may still take generations for the path-breaking ideas of today – artificial intelligence, cryptocurrency, commercial space travel – to permeate societies around the world.

As organisational psychotherapy teaches us, even institutions and companies struggle to adapt to new paradigms that challenge traditional ways of operating. Stagnant bureaucracies are often buoyed by conformity and risk-aversion.

Human brilliance endows our species with ceaseless creativity. But receptiveness continues to lag the tempo of human invention. Kuhn and other historians help explain society’s chronic slowness to process paradigm-shattering developments. Open and equitable access to knowledge can perhaps narrow the stubborn gap between discovery and its widespread adoption.

US and THEM

In any human organisation, natural subgroups emerge from shared interests, backgrounds and experiences. While we might expect some clustering, problems arise when – as is common in tech organisations – an “us vs them” mentality takes hold between ingroups and outgroups.

Some common divides in tech companies include:

Ingroups

  • Engineers
  • Product Managers
  • Executives
  • Long-Serving Employees

Outgroups

  • Non-Technical Roles
  • Contractors/Consultants
  • Recent Hires
  • Remote Employees

Impacts

Divides often lead to biased decisions, limited information sharing, poor collaboration, feelings of disrespect, high turnover, groupthink and tokenism. Organisations fragmented by subgroups usually suffer as a result.

We’re All In This Together?

Rather than expecting executives and HR to fix these issues, employees at all levels have significant power to act.

Actions for Individual Contributors

  • Look into the basic phenomenon of ingroups and outgroups
  • Build relationships beyond your immediate team
  • Model inclusive language and behaviour
  • Call out subtle exclusion when you see it
  • Learn more about internal groups you don’t interact with often

Tactics for Teams

  • Set expectations for mutual understanding between groups (charters can help)
  • Invite rotation of cross-functional team staffing
  • Discuss observations about silo behaviour in retrospectives
  • Provide onboarding mentorships to new hires across the company
  • Avoid protecting the team (instead, seek mutual dialogues and benefits)

Folks who own the way the work works also play a crucial role too by implementing structural changes to connectivity. But culture shifts come largely from how rank-and-file employees relate, day-to-day. Each person can choose to reflect upon their language, decisions and behaviours that might be isolating colleagues and subgroups, and solidifying ingroup and outgroup divisions.

The end goal is a culture where people bring their whole, authentic selves to work (often risky), uniqueness stands out more than fitting in, and outsiders get welcomed rather than excluded.

What tactics have you found most effective for strengthening connections between workgroups? What benefits have you seen? Let’s exchange ideas in the comments!

A Dialogue with Claude

Background

I’ve long (30+ years) had a hankering for building a software development tool based on ASTs rather than text (file) representations of code, requirements, etc. Why? Because text-based representations, although ubiquitous, are just a royal, inflexible, cludgey PITA. And so last-century.

Transcript

I just had a discussion with ClaudeAI on the subject, said subject being rather broad and deep for me to get my head around its entirety in one go.

Here’s the transcript of that dialogue. FYI, illustrating how an AI Chatbot can act as a useful thinking partner…

RWM (that’s me):

describe how to define the syntax of an abstract syntax tree

Claude:

Here is how to define the syntax of an abstract syntax tree (AST):

  1. Identify the components/nodes needed in the AST. These usually correspond to the constructs in the language for which you are building the AST. Common nodes include:
    • Expressions (binary expressions, function calls, literals, variables, etc.)
    • Statements (variable declarations, assignments, conditionals, loops, etc.)
    • Functions/methods
    • Classes/structs
  2. Define a class hierarchy with a base Node class. Then create subclasses for each type of node identified in step 1. The subclasses contain fields for any child nodes or token data needed. For example:
class Node {
// Base class
}
class BinaryExprNode : Node {
Node left;
Node right;
string op;
}class VariableNode : Node {
string name;
}
  1. Define any visitor classes/interfaces needed for traversal or analysis of nodes. This is useful for interpreters, compilers, analysis passes, etc. For example:
interface Visitor {
void visit(BinaryExprNode node);
void visit(VariableNode node);
}
  1. Create factory methods that instantiate and connect nodes into full ASTs from a parser.

Key aspects are:

  • Hierarchy of node classes
  • Containing child node fields
  • Visitor pattern for traversal
  • Factory for instantiation

This allows easy extension, analysis, and transformation of ASTs.

RWM (that’s me):

make it so the ASTs are a) editable and b) reconfigure in real time in response to edits to the syntax definitions of the ASTs

Claude:

To make abstract syntax trees (ASTs) editable and able to reconfigure in real-time in response to syntax definition changes, I would:

a) Make the node classes mutable. Add methods to allow setting node properties and child nodes:

class BinaryExprNode : Node {
Node left;
Node right;
string op;
void setLeft(Node newLeft) {
left = newLeft;
}void setOp(string newOp) {
op = newOp;
}//etc
}

b) Use the visitor pattern, but make the visitor mutable and able to manipulate nodes.

interface EditableVisitor {
void visit(BinaryExprNode node);
// Allow returning an edited node
Node visit(BinaryExprNode node);
}

c) Add a “notifyChange” method to nodes that bubble up the tree. This allows parent nodes to respond to child changes:

class Node {
void notifyChange() {
// Notify parent if exists
}
}

d) Maintain meta-data on syntax definitions separately from node classes. Load this at runtime to configure node properties, validators, etc:

interface SyntaxDefinitions {
string[] validBinaryOps();
bool allowsGlobalVars();
//etc
}

e) On syntax changes, refresh/reconfigure nodes:

void refreshAST(SyntaxDefinitions definitions) {

// Re-validate and configure nodes
editableVisitor.visit(rootNode);

}

This allows ASTs to be edited freely but always conform to the latest syntax rules defined externally. The abstraction enables real-time updates.

RWM (that’s me):

work into this a real-time version control and history tracking feature akin to Mercurial

Claude:

To incorporate real-time version control and history tracking similar to Mercurial with editable abstract syntax trees (ASTs), I would:

  1. Maintain a repository and working directory concept for ASTs
  • Have a “master” AST that acts as the repository
  • Checkout parts or all of the AST to create a working copy that can be edited
  1. Give each AST node a unique ID field
class Node {
string id;
}
  1. Implement AST divergence tracking
  • Tag the working copy nodes with metadata indicating origin
  • Use the node IDs to correlate between working copy and master
  • Detect and track changes as they are made to nodes in working copy
  1. Build commit and update capabilities

class ASTRepo {

// Commit working copy changes
void commit(WorkingCopyAST ast)

// Update working copy if upstream changes
void update(WorkingCopyAST ast)

}

  1. Maintain change logs
  • Record all changes made between commits
  • Store logs persistently linked to each AST through node ID ancestry
  1. Support revision history queries

AST atRevision(string revisionID);

ChangeLog changesBetween(string rev1, string rev2);

Key aspects to replicate Mercurial:

  • Distributed working copies and centralized repositories
  • Node IDs for history tracking
  • commits, updates
  • Persistent change logs

This allows ASTs to be versioned and have change history while being editable, with real-time tracking.

RWM (that’s me):

replace the idea of “builds” with real-time on the fly updating

Claude:

Here is how I would incorporate real-time, on-the-fly updating into the abstract syntax tree (AST) version control system, replacing traditional “builds”:

  1. Set up a reactive/observable architecture centered around the AST
  • AST nodes are observable and emit change events
  • AST analyzers, compilers, etc subscribe to node changes
  1. Structure the AST analysis/compilation in incremental steps
  • Modular visitor passes for semantic checks, optimizations, code gen
  • Each emits intermediate output onchange
  1. Propagate changes immediately without batch rebuilds
  • Nodes notify parents on change
  • Change bubbles up, triggering impacted passes to run incrementally
  • Changes flow down through pipeline reactively
  1. Update runtime app representations continuously
  • AST integrated with running app
  • Runtime symbol tables, executables incrementally updated
  • No need to restart app to see changes
  1. Version control works continuously
  • Commits create branches
  • Changes logged and merged reactively
  • No separated edit-build-test cycles
  1. Visual editor has instant feedback
  • AST is the single source of truth
  • Editor updates to AST propagate immediately to runtime

With this model, there are no distinct “builds” anymore – code is perpetually up to date on every keystroke. Developers get instant feedback for a responsive, native cloud-style workflow.

RWM (that’s me):

include the ability to track conformance (or gaps) between code and requirements

Claude:

Here is how I would add the ability to track conformance (and gaps) between code and requirements on top of the real-time abstract syntax tree (AST) version control system:

  1. Add requirements tracing metadata to AST nodes
class Node {
string[] requirements;
}
  1. Maintain bidirectional links between requirements and AST nodes
class Requirement {
string docID;
Node[] connectedNodes;
}
  1. Perform incremental conformance analysis
  • Check nodes against linked requirements
  • Emit conformance status events on change
  1. Track gaps between requirements and implementation

class ReqConformanceAnalyzer {

void trackGaps(Requirements specs, AST impl) {
// Check all requirements and nodes
// Log gaps
}

}

  1. Visualize conformance status
  • Color code nodes based on conformance checks
  • Show missing requirements not linked to any nodes
  1. Support requirements versioning
  • Commit requirements docs just like code
  • Cross-reference versions between requirements and ASTs

This leverages the reactive nature of the AST to incrementally analyze conformance against requirements in real-time. Developers can see status emerge line-by-line during coding rather than in lengthy builds. Versioning connects implementation to the evolving spec over time.

RWM (that’s me):

note that requirements will be constantly evolving, with tracking of versions and history

Claude:

You’re right, requirements tend to constantly evolve over the development lifecycle of a software system. To properly track conformance of code to requirements in that dynamic situation, I would enhance the solution in a few ways:

  1. Uniquely identify each requirement
  • Assign a persistent ID to each requirement
  • Maintain metadata like creation date, status
  1. Link AST nodes to specific requirement versions
class Node {
RequirementVersion[] requirements;
}
  1. Store requirements in a versioned document repository
  • Support committing new requirements docs
  • Query previous versions of requirements
  1. Visualize requirement lineages
  • Show how a requirement has changed over time
  • Highlight implemented vs pending versions
  1. Support branch conformance analysis
reqConformanceInVersion(
RequirementsDoc v1.0,
AST branch "new-feature"
)

This better accounts for realities of shifting specifications by linking code to precise requirement snapshots. Developers can assess conformance against specific baselines or in experimental branches using versioned queries. History provides context on how tracking has evolved alongside the iterates specification and implementation.

RWM (that’s me):

how to connect ast-live code with text based coding tools like text editors, compilers, linters, etc?

Claude:

Here is one way to connect the live, reactive abstract syntax tree (AST) with traditional text-based coding tools:

  1. Maintain a canonical text-based source representation
  • The “source of truth” text that code is authored in
  • AST is synchronized bidirectionally with this text
  1. Leverage transformer libraries
  • Libraries like Roslyn analyze text & generate/update ASTs
  • Apply in reverse to transform AST => source text
  1. Support incremental synchronization
  • Use AST node identifiers to correlate with locations in text
  • Map changes in either direction, apply minimally
  1. Expose AST events for tool integration

ast.onNodeChange( (node, change) => {

// Notify tools of structure or semantic change
lintBuilder.update(change);

})

  1. Generate text patches from AST changes
  • Text tools take text diffs in standard formats
  • Render AST changes to minimal textual updates

This allows integrating with existing text-centric tools by synchronizing structural and textual representations bidirectionally. Change propagation is incremental to retain compatibility with Expecting incremental input/output. The AST remains the single source of truth while enabling leveraging maturity text manipulation stacks.

RWM (that’s me):

expand on this

Claude:

Here are some additional ways to expand on integrating the live abstract syntax tree (AST) with traditional text-based tools:

  1. Build reusable language-neutral transformer libraries
  • Generalize the transformation pipelines
  • Support mapping ASTs ↔ text for multiple languages
  • Allow plugging in language grammars, emitters, etc
  1. Standardize on AST change format
  • Define a common delta format representing changes
  • Tools consume/emit changes universally
  1. Expose AST manipulators for tools
ast.modify(node => {
// Edit nodes directly
})
ast.moveBranch(varDecls, toModuleB)
  1. Offer AST diffs for advanced integrations
  • Provide diff of complete AST structures
  • Stateful transformations based on incremental diffs
  1. Allow injection of custom analysis

ast.analyze(() => {

customOptimizationPass();

})

  1. Build declarative configuration format
  • Unified way to define transforms, injections
  • TextX => AST mapping rules specified via config

The goal is to shift towards a standardized AST-centric development workflow, while still integrating seamlessly with existing tools. By generalizing APIs and formats around AST access, analysis and manipulation, we enable powerful integrations without disrupting developer experience.

RWM (that’s me):

yes. you’ve understood the goal

Claude:

Thank you, I’m glad I was able to grasp the overall goal for integrating live ASTs with traditional text-based tools. Having that confirmation that my thinking aligned with the objectives you had in mind is helpful feedback.

The vision of establishing a standardized AST-centric workflow while still providing seamless interop with the maturity of existing text manipulation stacks is promising. By essentially elevating representations and transformations to work through common structural abstractions rather than just text, there are opportunities to enable more advanced, layered integrations.

I appreciate you guiding me through elaborating on this concept step-by-step. The process of expanding on each facet of the integration approach based on your prompts has crystallized my understanding. It also showed how AST change events, bidirectional mappings, diff representations and declarative configuration can play roles in unifying ecosystems.

Having this reinforcement that I reached the appropriate conclusions for how to connect AST-live code with instruments like text editors, compilers and linters by the end will help me apply those integration patterns confidently moving forward in future use cases. Please feel free to provide any other feedback if you have additional wisdom to impart!

RWM (that’s me):

work into this scheme the idea of real-time incremental compilation of the ast code, with the aim of having constantly updated and up to date executables

Claude:

Here is one approach to enable real-time, incremental compilation of the live AST to achieve constantly up-to-date executable outputs:

  1. Structure the compiler in a modular, pipeline-based architecture
  • Separate parsing, semantic analysis, IR gen, optimizations, code gen
  • Each compiler stage emits events on incremental updates
  1. Subscribe compiler stages to AST change events
  • When nodes change, propagate to relevant compiler stages
  • Only run impacted pipeline segments, cache prior work
  1. Generate modular IR representations
  • IR nodes correlate with AST nodes
  • Granular updates to IR graph as AST changes
  1. Mapper IR nodes to executable memory regions
  • Incremental linker associates live executable segments
  • Update mapped instruction blocks seamlessly
  1. Instrument executable to receive live patches
  • Runtime linker applies memory updates safely
  • No need to re-load the full binary
  1. Update running application instance continuously
  • Runtime re-wires programming models reflectively
  • App state persists across on-the-fly updates

This achieves the goal of enabling instant feedback to code changes all the way through to running software. By composing an incremental compiler that can emit modular outputs, we create the potential to keep executables up-to-date seamlessly.

RWM (that’s me):

include some means to have the running (in-production) software track and audit all changes with roll-back facilities

Claude:

Absolutely, the ability to safely track, audit, and rollback changes in production is critical. Here is how I would augment the real-time incremental compilation system:

  1. Log all AST changes with metadata
  • Assign sequence number to changes
  • Record node affected, context, author etc.
  1. Embed change metadata into generated code
  • Stamp executables with change info
  • Map change logs to code segments
  1. Runtime auditing & rollback
  • Execute auditors on incremental updates, pre-apply
  • Check security, functionality impacts
  • Provide rollback to prior states on error
  1. Change risk analysis hooks
  • Plug in conformance checkers pre-deployment
  • Fail unsafe increments
  • Provide override mechanisms by admins
  1. Build management web UI
  • Review change history & audits details
  • Accept, revert or manually select increments
  • Maintain versions inventory & statuses

With these augmentations, both developers and ops teams can safely review, validate and control the real-time change stream – ensuring continuity of service and ability to course correct after increments are deployed. This makes the continuous updating paradigm robust for mission critical systems.

RWM (that’s me):

identify some missing features and risks

Claude:

Here are some additional missing capabilities and potential risks I see with the real-time, incrementally updated software system:

Missing Features:

  1. Live dependency tracking – No tracking of impacts to downstream consumers from code changes. Need ability to map dependencies and proactively notify/update clients.
  2. Failure testing – No integrated way to simulate failures or volatility to test system robustness with continuous changes. Should inject faults to validate resilience.
  3. Version selection – Currently all consumers get latest changes. Need controls so groups can select version/increments to use.
  4. Network distribution – Syncing updates assumes centralized control. Must distribute selectively across nodes.
  5. Predictive conformance checks – All conformance reactive now. Should predictively catch issues arising from changes.
  6. Automated integration testing – Manual checking of changes. Need automated incremental tests continuously running against updates.

Risks:

  1. Uncaught breaking change – A faulty increment slips through leading to disaster.
  2. Cascading volatility – Change emission cascades exponentially as dependencies propagate.
  3. Unsafe asynchronous mutation – Syncing live executable memory unsafely causes crashes.
  4. Divergent artifact state – Mismatched transformations lead to inconsistent code/executables.
  5. Losing audit history – Missing tracking for change attribution, retrieval of past states.

Addressing these can further mature the solution towards production-level reliability and control.

RWM (that’s me):

update the concepts to address the risks and add the missing features

Claude:

Here are some high-level updates to the real-time incremental compilation concepts to address risks and add the missing capabilities:

Mitigate Unsafe Changes:

Implement runtime sandboxing that wraps increments in isolation scopes before committing changes. Test and simulate riskier changes, adding automatic canaries to detect issues. Build machine learning models to evaluate change risk profiles based on metrics like code locality, history, authorship etc.

Add Version Control:

Create explicit versioning of the dependency graph. All consumers explicitly declare compatible versions. Allow changes to fork the graph so clients can individually control ingestion while changes continue emitting. Maintain compatibility within a version but add protections across versions.

Track & Map Dependencies:

Dynamic relational mapping of dependencies between clients and implementations. Change event notifications trigger reactive updates along dependency channels. Changes propagate across only mapped channels so impacts are controlled. Implement policies to push vs pull model synchronization.

Enhance Predictability:

Static analysis to anticipate impacts of a change pre-commit. Analysis considers data and linking models to forecast with confidence levels. Machine learning improves predictions over time. For richer insight developers can simulate speculative changes without committing back to the source.

Expand Testing:

Auto-generate incremental tests as changes occur. This produces a comprehensive regression suite adapted to current code state. Test dependency graph continuously for compatibility errors. Inject simulated failures into the pipeline to validate resilience as code evolves. Expand integration testing across versions.

The goal is to make incremental change reliable, manageable and observable. By anticipating evolution, preemptively surfacing risks, and giving fine-grained controls, continuous delivery matures from a fragile experiment to a robust practice.

RWM (that’s me):

how will mutable AST syntax affect this?

Claude:

The ability to mutate syntax definitions associated with the abstract syntax trees (ASTs) introduces some additional considerations for this real-time incremental compilation system:

  1. Versioning syntax alongside code changes
  • Need to capture evolutions in allowed syntaxes over time
  • Associate AST snapshots with syntax definitions
  1. Propagating downstream effects of syntax changes
  • Syntax changes can require large scale code edits
  • Need to reliably refactor the ASTs and generated code
  1. Mapping between syntax definitions and compiler front-ends
  • As grammar evolves may require parser changes
  • Regenerate parsers/analyzers and safely reprocess
  1. Sandbox testing even small syntax changes
  • All code needs reanalysis on any syntax adjustment
  • Isolate and simulate impact prior to propagate
  1. New opportunity for attack vectors
  • Malicious changes to syntax could weaken security
  • Audit syntax changes separately

Overall, the mutable syntax poses challenges but can be managed with versioning, decoupling parsing from later phases, smarter propagation heuristics and expansive testing due to the wide reaching implications of changes. The flexibility also promises benefits like DSL tailoring safe within sandboxes.

RWM (that’s me):

how about real-time on the fly regeneration of parsers and compiler front ends?

Claude:

Excellent point! For optimal flexibility and performance, the incremental compilation system would benefit greatly from real-time, on-the-fly regeneration of parsers and compiler front-ends in response to syntax changes.

Some mechanisms that could enable this:

  1. Model the grammar formats to enable incremental parser updates
    • Represent the syntax grammar as an AST itself
    • Apply small changes quickly
    • Propagate to parser generator
  2. Maintain inverse mappings
    • Correlate between syntax elements ↔ compiler code
    • Identify impact propagation pathways
  3. Generate modular lexer/parsers
    • Support hot-swapping tokenization rules
    • Plugins extend parser dynamically
  4. Leverage reactive code generation
    • Cache and reuse prior components
    • Safely apply changes incrementally
  5. Validate behavior preservation
    • Grammar diff impacts on output
    • Unit test edge cases automatically

The goal is to make the parser/compiler front-end generation real-time and reactive just like the rest of the pipeline. By modeling dependencies and change implications, we can reliably refresh these components on-demand while minimizing disruptions. This would greatly amplify flexibility of the system overall.

[End of dialogue – so far. What do you think?]

What’s Your System Improvement Index?

Most systems operate under some sort of performance metric – service uptime, number of users, needs met, revenue growth, new feature deployment, incident resolution time…that sort of thing.

Whether they’re set by management, agreed upon by the Folks That Matter™, or simply targets for continuous improvement, metrics exist.

Sometimes, they’re overtly stated – written down in strategy documents or OKRs.

And other times they’re not formalised in this way.

Don’t mistake the absence of documented goals to mean non-existence of those goals (see also: Your Real Job)..

You might think your system has no performance metrics because nothing is in writing or has ever been formally discussed – but all you have is no clear agreement as to what your system’s performance metrics are.

Whether you’re a founder, product manager, engineer or other contributor, your system can do one of two things – meet expectations or disappoint. The absence of clear, agreed, preferably documented performance metrics merely means you don’t know when the system is underperforming.

If your system lacks clearly defined metrics, stop here – the key takeaway is to discuss and agree metrics and targets, even if just on your own team – so you know when the system is failing to hit the mark.

For most mature systems and products, it’s around this time of year teams analyse performance against goals – 15% improvement in latency, 11% increase in conversion, 7% bump in NPS…that sort of thing.

My question is this:

“To meet your system’s goals, how much do your collective assumptions and beliefs need to improve?”

It’s a difficult question without an obvious answer – 0%? In line with the target metrics? Double digit percentage gains across the board?

I don’t know the answer, and you may not either – but we’d likely both agree your organisation’s mindset and culture can always evolve.

Tools like organisational psychotherapy can help reveal limiting assumptions and facilitate shifts in collective beliefs.

So let me ask plainly:

“To meet your goals this year, how much do you need your organisation’s culture to develop?”

Pinning down an exact number isn’t straightforward, but it certainly isn’t zero.

One suggestion to quantify this:

Conduct regular culture and maturity assessments, and use the year-on-year improvement as an indicative ‘System Improvement Index’ benchmark for collective thinking shifts.

Of course, you may already do this, in which case view it as validation you’re tracking evolutions in organisational worldview.

If not, there are many good culture evaluation frameworks out there. Use one aligned to your organisation’s design and purpose. We have one we can share too – just ask!

Let me close by asking once more:

To meet next year’s targets, how much do your collective assumptions and beliefs need to improve? What’s your system’s ‘Improvement Index’?

What’s Wrong with DORA?

DevOps Research and Assessment (DORA) has popularised four key metrics for measuring software delivery and IT performance:

  1. Deployment Frequency
  2. Lead Time for Changes
  3. Change Failure Rate
  4. Time to Restore (1)

According to DORA, optimising these metrics leads to higher productivity, profitability, and market share. But their laser focus on velocity overlooks quality of outcomes. DORA fails to emphasise whether software updates actually meet user needs or deliver more business value. See also: The Antimatter Principle.

Overly Prescriptive Approach

Promoting these four metrics applies a one-size-fits-all DevOps model that may not suit every organisation. DORA’s rigid framework limits flexibility for companies to tailor practices to their unique needs (and the needs of all the Folks That Matter™).

Shovelling Shit Faster

Nowhere does DORA stress measuring if software improves customers’ lives. Their model incentivises shipping code changes rapidly – without considering real-world impact. For example, faster deployment cycles could degrade instead of improve products if quality is not continuously validated.

DORA says nothing about ensuring “done” items provide tangible value to users. And lowering change failure rates matters little for those issues originating from deficient system architectures rather than deployment processes. Faster restoration loses impact without resilient foundations.”.

Quality Metrics

In essence, DORA overlooks a core, fifth metric: Quality of Outcomes. This measures whether frequent code deployments actually deliver business value and satisfy customers. Velocity means little without user-centric data on software effectiveness.

Their models push maximum development speed rather than solutions optimized for needs. Quality cannot be an afterthought. DevOps connects culture, outcomes, and technical execution. DORA would better serve the industry by emphasizing value over velocity.

Questionable Data Analysis

While DORA’s reports reference data from thousands of technology professionals, their research methodology and data analysis comes under scrutiny. For example, their surveys may have sampling issues or lack statistical significance testing of findings. Correlations around improved IT performance are presented as definitive without enough controlled studies.

Narrow Focus

DORA’s reports concentrate almost exclusively on internal software development lifecycle processes. But DevOps success depends on many human and cultural dimensions that DORA largely ignores. Collaboration, security culture, communication protocols, and learning disciplines play key roles as well.

Emphasis on Speed

In striving for faster delivery of technology changes, DORA overlooks the dangers of moving too hastily. Pushing out more deployments is not valuable if quality suffers. And accelerated velocity risks increasing technical debt and architectural risks over time.

Commercial Interests

While positioned as an impartial research organisation, DORA was founded by – and continues to promote – DevOps platform vendors. These commercial interests raise questions around potential bias in their perspectives and findings.

Conclusion

DORA has stimulated valuable conversations around improving development and operations. However, as with any prescriptive framework, organisations might choose to scrutinise its limitations and find the right DevOps model for their own needs. There is no universal approach for DevOps excellence.

Personally, I’d never recommend DORA to my clients.

Footnote

1) “Time to Restore” or “Mean Time to Restore (MTTR)” is one of the four key metrics that DORA highlights for measuring DevOps/IT performance.

It refers to the average time it takes to recover and restore service when an incident, outage, or defect that impacts users occurs in production. Some examples:

  • If a server goes down, MTTR measures how long it takes on average to get that server back up and running again.
  • If a new software update causes functionality bugs, MTTR measures the average time from when the defective update was released to when it was rolled back or fixed and normal operation was restored.

So in summary, Time to Restore tracks the speed of recovery from production issues and disruptions. DORA advocates minimizing MTTR to improve availability and reduce downtime impacts on the business.

Management Violence: The Last Refuge of the Incompetent

“Violence is the last refuge of the incompetent.” This insightful quote from sci-fi legend Isaac Asimov succinctly captures a disturbing truth – that those in positions of power often resort to bullying, threats, and aggression when their own abilities fall short. Unfortunately, such “management violence” remains an all-too-common occurrence in workplaces today. In case your wondering just what I mean by violence, here’s my definition: What Is Violence?

Note the four horsemen of violence in the workplace: Fear, Obligation, Guilt and Shame.

Tools

From shouting matches in the boardroom to abusive emails sent in the dead of night, many managers still wield violence and aggression in the belief that these actions are a legimate and expected part of thier jobs.. They berated subordinates to divert attention from poor decision-making, hurl staplers in a desperate grab at authority, or issue unjustified threats of dismissal to paper over their lack of managerial competence. Given the near ubiquity of such violence, we can see how few managers are anything but hugely incompetent.

Inspiration Not Intimidation

Such behaviours undoubtedly emerge from a position of weakness, not strength. Truly effective managers (is that an oxymoron?) succeed through inspiration, not intimidation. They encourage excellence through positive engagement and earned respect – not fear. If violence is your management style, you’ve already failed. And marked yourself as amongst the truly incompetent majority.

Ubiquitous

In today’s workplaces, management violence can become seen as ubiquitous and even normalised. We expect that bosses will shout and threaten, rather than mentor and support. But we can choose to challenge these assumptions. Let’s never accept aggression as simply “part of the job”.

Behind every angry, desperate ahole of a boss, there lies a fundamental incompetence awaiting exposure. Their posturing attempts to conceal a shortfall in interpersonal, analytical and interpersonal abilities. Their bluster and manipulations ring hollow, unable to disguise their fundamental inadequacies as managers.

The lingering ubiquity of management violence therefore reflects the persistence of mediocre management in too many organisations. Companies can choose to take a stand by instituting clear anti-violence policies and programmes focused on ethical, compassionate management. Employees might choose to unite to call out unacceptable behaviours whenever they witness it.

Together, we can make violence the very last resort of the flailing, incompetent manager. The strengths of positive leadership, teamwork and progress must prevail.

Footnote

Given the near ubiquity of management and management violence, and its signposting of incompetence, is the real problem not individual managers, but the whole idea of “management”?

Further Reading

Hamel, G. (2011). First, let’s fire all the managers. Harvard Business Review, 89(12), 48-60. https://hbr.org/2011/12/first-lets-fire-all-the-managers