← Back to Home

After the Architect Left, Everything Became Optional

There was a time when the database schema was clean. Table names followed a consistent pattern. Database changes went through a defined process. Developers knew what they were responsible for and where the boundary was. The infrastructure team could manage environments with confidence because what they saw in development roughly resembled what they would see in production.

Then the principal backend left.

Not immediately, not in a single dramatic incident, but gradually. The kind of collapse that you only recognize clearly in hindsight. Standards started becoming suggestions, and suggestions started becoming optional.

What It Looked Like Before

When a strong architectural authority is present, a lot of things happen quietly and without much ceremony.

New developers get onboarded into a set of norms that already exist. Naming conventions are established and followed because someone is paying attention. Database changes go through a review process, or at minimum, someone is asking the right questions before anything lands in production. The architecture decisions are made by someone whose job it is to think about the system as a whole, not just the feature they are currently building.

This is not magic. It is the result of someone holding the line on standards consistently enough that the standards start to hold themselves.

Teams under this kind of structure tend to have a certain predictability. The DevOps side of the house can plan around it. Infrastructure tooling is built against known patterns. Migrations are manageable. The gap between development and production environments is narrow, and when it is not, someone notices quickly.

It is easy to take this for granted when it is working.

What It Looks Like After

When that person leaves, the vacuum does not stay empty for long. It gets filled, just not with the same thing.

Individual developers make local decisions. Not out of malice, but because there is no one coordinating the global view. One developer creates a table using snake_case because that is the convention in the language they came from. Another uses camelCase because that is what they are used to. There is no one to say that both of them are wrong, not because of their choice specifically, but because divergence itself is the problem.

Database access becomes informal. Tables get created directly against production-equivalent environments without a clear migration path. Imports happen because someone needs the data right now and the process for doing it properly is unclear or absent. Each individual action is defensible on its own terms. The accumulation is not.

The schema starts to drift. And then the environments start to drift.

This is where it gets expensive.

The Dev-Prod Gap

At some point, the development database and the production database stop being the same thing in different environments. They become different things that happen to share a name.

Column data types diverge. A field that was created as VARCHAR in one environment exists as TEXT in another. An integer column in development was backfilled differently in production. A foreign key constraint exists in one place and not the other.

The result is a category of bugs that are genuinely difficult to reason about. Something works correctly in development, passes whatever testing exists, and then behaves differently in production, not because the code is wrong, but because the ground the code is running on is different.

This is the kind of issue that should be caught long before it reaches production. In an environment with proper migration practices and schema versioning, it is caught. In an environment where the database has been managed informally by multiple developers over time, it is a recurring surprise.

The DevOps team, who is responsible for managing these environments, is now operating on infrastructure they cannot fully trust. Every deployment carries a margin of unknown risk. The work of debugging shifts from the development team, where it belongs, to operations, where the blast radius is larger.

The Real Problem Is Structural

It is tempting to frame this as a people problem. The developers who created inconsistent naming conventions are not bad engineers. The developers who ran informal database imports were not trying to cause problems. They were filling a vacuum the best way they knew how.

The problem is not the people. The problem is the absence of the structure that coordinates the people.

A principal engineer or solution architect is not just a senior developer who codes well. The role carries a specific function in a team’s organizational design: owning the standards, defining the boundaries, making decisions that affect the system as a whole, and critically, being the reason those decisions are consistent over time.

When that role is absent, every developer becomes an implicit architect for the parts of the system they touch. Most developers are not set up to do that job. Not because they lack skill, but because they are optimizing for their immediate task, not for the coherence of the whole system. That is not a failure on their part. It is a predictable outcome of removing the role that was doing that work.

Why It Compounds

The dangerous property of this kind of decay is that it accelerates.

Early inconsistencies are small. A naming convention here, an undocumented table there. The cost of fixing them is low. But they do not get fixed, because there is no one whose job it is to notice them and push back. So they stay, and new inconsistencies are added on top of them.

As the codebase and schema grow, the cost of correcting the foundational issues grows with them. A team that could have spent a few hours standardizing a naming convention six months ago is now looking at a multi-week migration effort that requires coordination across multiple services and careful handling of production data.

The issues that work fine in development but break in production are not isolated incidents. They are symptoms of an environment where the feedback loops that should catch these problems have degraded. They will keep happening, in different forms, until the structural issue is addressed.

What This Means for Engineering Managers

If you are running an engineering team and you lost your principal engineer or SA, the technical work did not stop needing architectural oversight just because the person providing it is gone.

The question is not whether your team is capable of continuing to ship features. They probably are. The question is whether the decisions being made at the level of system design, conventions, and cross-service boundaries are being made by anyone with a view of the whole.

If the answer is no, the work is still getting done. It is just getting done in a way that will be progressively harder to understand, maintain, and operate.

That cost does not show up immediately on a sprint board. It shows up months later, in production incidents that should not have happened, in onboarding time for new engineers who cannot understand why the schema looks the way it does, and in the infrastructure team spending their time debugging environment drift instead of improving reliability.

What This Means for Developers

If you are a developer on a team without a clear architectural authority, you are probably making more system-level decisions than your role is designed to handle. That is not a criticism. It is a situation you have been placed in.

The decisions you make today about naming, schema design, and how you interact with shared infrastructure will be the baseline that everyone else inherits. The shortcuts that seem harmless in isolation become the patterns that define how the system works.

It is worth asking, before every database change or schema addition, whether someone with a view of the whole system has had a chance to look at it. If there is no one in that role, that is the real problem to surface, not to your codebase, but to whoever is responsible for the engineering organization.

The standards that no one is holding will not hold themselves.