Why Do You Have to Go and Make Everything So Complicated - SoCraTesUK/socrates-uk GitHub Wiki

A session on dealing with the ever-increasing complexity of the (tech-)world.

The discussion was structured around the five stages of grief, with groups using each stage to discuss relevant points about software complexity. The groups were rotated to ensure people could discuss different stages and with different teams. At the end key points from each stage were collected on a board.

It's worth noting that complexity extends beyond software to organisational complexity. An "ideal" system can be warped by boundaries of approval, ownership and understanding. Any system is the product of the organisational culture that created it, warts and all.

Denial

  • I don't need to read the documentation (5 hours later: oh no!)
    • It can seem tedious to start by reading a book or reading docs
    • Can learn useful optimisations or quirks that would hinder development/deployment
    • Better to invest the time when developing rather than when everything breaks at a critical time
  • Elitism
    • Complexity gives people power
    • Can inadvertently make a system complex to justify oneself
    • "I'm smart because I understand the system"
    • Can hide their stagnating skillset
    • Work like an automation engineer: Aim to be redundant
  • Familiarity is not simplicity
    • Complexity can creep in, especially if a team has little turnover
      • Notice where someone trips up when you onboard them
    • If you only skim the surface of a library you might never realise its complexity
      • Until it breaks
  • Ignorance of the historical context of a system
    • Code complexity can reflect complex requirements
    • Business decisions not clear in code
    • "Cleanup" causes breakage
  • "Weeks of coding can save hours of thinking!"

Anger

  • Being forced to used certain tools/infrastructure
  • Breakdown of lines of communication
  • Organisational bureaucracy

Depression

  • Perfection is impossible
  • Jira :crying_cat_face:
  • Complexity can be overwhelming
    • Especially if you don't know where/who to look to for solutions
  • Am I even getting anywhere?
  • I'm not smart enough

Bargaining

  • I'll clean it up later
    • Honest
    • *throws Kaizen ticket on the backlog*
  • If I have good test coverage it's okay to have complex code
  • A wilfully complex organisation
    • Bending the rules is the only way to get anywhere
    • Stakeholders who benefit from complexity

Acceptance

  • Kill your heroes
    • Just like rockstar devs, they reflect larger organisational failures
  • Ban the word "just"
    • If something is simple it will be self-evident to the reader
    • If they don't find it simple then you're patronising them
  • Pay experts
    • It's okay to call for help
  • Create a culture of psychological safety
    • People need to be able to openly admit ignorance and ask for help
    • This must come from the top down
  • Everyone is an expert in something
  • If you're confused then other people in org probably are to
  • Perfection may be impossible but you can still strive for simplicity
  • The Cynefin framework

Takeaway points

  • Complexity comes in different forms (code/organisational)
  • Who benefits from complexity?
    • Ideally nobody
  • Is the complexity a reflection of complex requirements?
  • Code reflects organisational culture
  • Create an environment where people can safely admit ignorance
  • RTFM