m@ksim.pro
Back to all posts
IT 4 min read

What 2014 will demand from architecture: fewer monoliths, more discipline

The preparation is not about buzzwords - it is about faster release cycles and service connectivity. That requires specific architectural decisions made now.

Conversations about architecture tend to start with terminology. SOA, microservices, API-first - each year brings a new set of words that fill conference talks and vendor presentations. This creates the impression that architectural choice is a choice between fashionable concepts.

In practice, the pressure that drives architectural decisions is more concrete. Companies that can ship changes quickly and without fear operate differently from those that release once a quarter with held breath each time. The difference is not culture or team maturity as such - it is mostly about how the system is structured: release speed is an infrastructure topic, not a cultural one.

The next year or two will intensify that pressure. It is worth being clear about what exactly to prepare for.

The problem with monoliths is not size

A monolith is not inherently bad. Many successful systems run as a single application. The problem is a specific symptom: when a change in one part of the system requires testing and deploying everything else.

That means independent teams block each other. It means a small change carries the risk of a large incident. It means release becomes an event rather than a routine.

As business demands faster response, this mechanic becomes the bottleneck. Not because monoliths are wrong in principle, but because tight coupling throughout makes speed dangerous.

What to separate first

You do not need to rewrite everything. The sensible strategy is to identify where coupling is already costing money.

Good candidates for extraction are components with an independent rate of change. If the payment module changes weekly and the reporting module changes quarterly, having them coupled in the same deployment costs money at every release.

Another candidate is anything with external integrations. An API for partners or a mobile client is a natural boundary. Once separated, its contract stabilises and the internal logic can change independently.

A third candidate is load bottlenecks. A component that needs to scale independently of everything else is already asking to be separated.

Environment discipline is the undervalued part

One of the most common problems I see in teams with a rapidly growing number of services is not the service architecture - it is chaos in the environments. The idea of containerization as a way to enforce reproducible environments was already becoming practical in 2013 - see Containerization on the horizon: the market wants portable application delivery.

Development, testing, staging, production - these environments need to be as similar to each other as possible. If the database differs between development and production, that is a source of failures that only appear after deployment. If configuration is shipped together with code rather than managed separately, that is a source of accidental divergence.

Environment discipline is not a trendy topic. It is the operational hygiene that determines how predictable deployment actually is.

Contracts between services matter more than implementation

Once a system is split into parts, the most important artefact is not the code of each part - it is the contract between them. What exactly does this API accept? What does it guarantee to return? Under what conditions will it return an error?

These contracts need to be explicit. Not in the heads of developers and not in a wiki nobody reads. In the form of documented, ideally testable specifications.

This feels like unnecessary rigour when there are two teams. It becomes critical when there are five, working asynchronously.

What to check right now

A few questions that help assess architectural readiness for acceleration:

  1. How long does it take from a commit to a production deployment today?
  2. How many teams need to coordinate to ship a change in one component?
  3. How similar are the environments - what happens in production that did not happen in testing?
  4. Are the contracts between the main system components documented?
  5. If one component fails, what exactly happens to the others?

Answers to these questions will tell you more about what to prepare for next year than any architecture diagram.

Back to all posts
Contact

If this resonated, write to me. I reply personally.

WhatsApp