Have you ever written a book with hundreds of people that you don’t fully know?

Software is the codified version of some activity that the computer does. If you own a company, the software describes its processes, more so if any of the activity involves data or internet use.

Over many iterations and changes the codebase and systems become brittle. Coherence dilutes and the amount of effort to keep things going increases.

Eventually it be comes hard to sustain. LLMs cannot help either, as there is a similar limit to how much complexity can they handle.

Strategies

Most strategies to mitigate the cacophony of hundreds of people working on the same thing at the same time follow one of these principles:

  • redundancy Write the software twice. E.g.: once in code and once in tests. Add typing information. This increases resilience.
  • separation Move different parts to different places. Enforce that separation. E.g.: Abstract an interface
  • distillation Create new concepts that reduce the overall complexity and increase agreement between parts
  • TDD Force high test coverage (redundancy) and depending on its flavour, separate into the right units
  • Spec driven development Add a layer of specifications as part of the code (redundancy)
  • BDD It is similar to TDD with an extra language to describe behaviours, which is a form of distillation
  • DDD Most of its techniques focus on the separation and distillation. E.g.: event storming
  • Team topologies and other Conway approaches The focus is on separation and identifying redundancy between teams.

Which one is the right one?

For new systems that have a clear scope and size, any of the strategies above is better than no strategy.

For systems that are already deep in technical or cognotive debt, the only solution that works long term is distillation, facilitated by the other two.

These scenarios are tricky because distillation will inevitably affect the structure of the teams and require making explicit what before was implicit.

Constant ironing of the language used in the company, clarifying entity and services ownership, pivot to separate (micro) services or streaming where appropriate require knowledge and facilitation.

Some stacks I can help with

  • python + django
  • C++ + Qt
  • Rust
  • Speech recognition with C and python
  • Writing parsers
  • Regex and SQL
  • Stream processing
  • functional programming
  • Dataframe programming
  • Declarative programming

I can also help documenting, testing, designing. I have worked in finance, parsers, real estate, speech recognition and desktop apps.

Need some help?