DEV Community

Cover image for Smarter Software Architecture Builds Smarter Teams
Leon Pennings
Leon Pennings

Posted on • Originally published at blog.leonpennings.com

Smarter Software Architecture Builds Smarter Teams

Most discussions about software architecture compare technical approaches: microservices vs monoliths, frameworks vs libraries, OO vs FP.

But these debates often miss something more fundamental:

Your development approach shapes the behavior of your team.

And your team’s behavior shapes the product.

After working with both extremes — procedural service factories and deeply modeled domains — it becomes clear that the technical style determines the social structure around it.

It determines whether a group of developers naturally becomes a team

or remains a set of isolated ticket closers.

Let’s look at these two worlds.


1. Procedural Development: The Comfortable Path to Isolation

Procedural work is simple:

Input → logic → output.

Put the logic in a service. Name it something like OrderService or FooManager.

Write tests. Make them green. Done.

In this world:

  • Work can be done alone.

  • Discussions are optional.

  • Shared understanding is unnecessary.

  • A feature is a ticket, not a thought.

  • Architecture is a folder structure.

  • Progress is measured in checkmarks.

The team does not gather around meaning.

There is no meaning — there are just tasks.

A procedural codebase is a flat landscape.

Everything feels equally important and equally unimportant.

There is no center of gravity, no conceptual hierarchy.

So it’s natural that the team also behaves this way:

  • Everyone works alone.

  • Everyone builds their own little world.

  • Everything is equally disconnected.

  • Ownership is fragmented, because the system is fragmented.

A procedural team becomes a group of interchangeable workers delivering interchangeable logic.

This is not the team’s fault — it’s the architecture’s fault.

Because this approach only scales in one dimension: manpower.


2. Rich Domain Models: The Natural Magnet for Collaboration

A rich domain model has structure.

It has meaning.

It represents the essence of the product.

And structure has consequences.

When your system reflects the real world — with concepts, invariants, boundaries, collaborations — you can no longer work in isolation.

You must talk.

You must understand.

You must align.

Because every new capability plugs into something that already exists:

  • How does this concept interact with others?

  • Who owns this behavior?

  • Is there already a model capturing this concern?

  • Does this responsibility live here, or somewhere else?

These are not technical questions.

They’re product questions.

Which is exactly why domain-driven teams attract conversations with designers, business experts, analysts, and product owners.

In a modeling team:

  • The domain model becomes a shared mental map.

  • Everyone points to the same conceptual objects.

  • Discussions become easier, faster, richer.

  • The product as a whole is understood by more people.

  • Ownership becomes shared responsibility, not ticket ownership.

A domain model forces a team to become a team.

It is the campfire everyone gathers around.


3. The Counterintuitive Reality: Rich Models Are Faster

There’s a myth that procedural development is faster because “you can just start coding.”

The truth:

Both approaches start at the same speed.

Only one gets faster over time.

With a rich model:

  • The structure guides new features.

  • Complex behavior becomes combinations of existing behavior.

  • Rules, constraints, and invariants are already embedded.

  • Many decisions have already been made by the model.

  • You write less code.

  • And you make fewer mistakes.

Procedural code does not compound.

Domain modeling does.

Procedural codebases never accelerate — they only accumulate weight.

In procedural systems:

  • Every new feature is a small reinvention.

  • Every service is a new fragment of logic.

  • Every change touches multiple places.

  • Every new requirement exposes earlier shortcuts.

There is no leverage.

Just labor.


4. So Why Does Procedural Dominate?

(Because its costs are invisible.)

If domain modeling leads to better teams, faster development, and higher quality —

why does procedural development dominate the industry?

Because organizations optimize for replaceability, not effectiveness.

And procedural code is:

  • Easy to hire for

  • Easy to outsource

  • Easy to estimate (“Just make a service”)

  • Easy to replace people inside

  • Easy to explain to managers

  • Easy to justify in spreadsheets

But it is not cheap.

It is only invisibly expensive.

The long-term cost — slow development, bugs, rewrites, microservice-overgrowth, coordination overhead, cognitive load — accumulates silently.

Software doesn’t explode.

It decays quietly.

I wrote a deep dive into this phenomenon here:

Why IT Is an Expensive Mess — And Why Nobody Inside IT Notices

It explains why the cost explosion of procedural systems stays hidden, and why organizations keep choosing them anyway.


5. If You Want Replaceability, Don’t Dumb Down the Work — Make Developers Smarter

The current corporate logic goes like this:

“We want interchangeable developers,

so we should simplify the work to the lowest common denominator.”

This leads directly to:

  • Procedural code

  • Service soups

  • Endless microservices

  • Tickets instead of design

  • “Just add a service” thinking

  • Fragile systems that only scale by adding people

But this is exactly backwards.

If you want your developers to be adaptable, replaceable, and effective:

  • Give them skills, not dumbed-down tasks.

  • Give them a model to understand, not a folder of services.

  • Give them clarity, not fragmentation.

A strong model creates flexibility without chaos.

A procedural mess creates chaos disguised as flexibility.


6. Team Behavior Follows Technical Structure

This is the key thesis:

Your architecture determines your team dynamics.

Your team dynamics determine your product.

Procedural →

  • isolated workers

  • task factory

  • low ownership

  • slow growth

  • shallow understanding

Rich Domain Model →

  • natural collaboration

  • shared mental model

  • product focus

  • collective ownership

  • accelerating development

You cannot build a strong team on a weak structure.

You cannot build product ownership on procedural fragments.

You cannot build quality on “service after service.”

If you want real teamwork, give people something worth gathering around:

a model that captures the meaning of the product.


7. Closing Thoughts

Teams don’t become teams by doing stand-ups, retros, or board games.

Teams become teams when they must think together.

And thinking together only happens when there is something to think about:

  • a shared language

  • shared concepts

  • shared structure

  • shared meaning

  • shared responsibility

Procedural development removes the need for shared thought.

Domain modeling creates it.

One path leads to isolated workers and expensive systems.

The other leads to real teams and real products.

Choose the path that builds the product —

and the team.

Top comments (0)