Stop Shifting Left. Start Shifting Down.
Shift-left told developers to own security, compliance, and reliability earlier. A decade on, that has mostly redistributed toil instead of removing it. Shift-down asks a different question: which of these concerns should the platform absorb once, so no developer has to remember them at all? Here is a test for deciding, concern by concern.
Antonio J. del Águila
Knaisoma
The security team ships a new scanner. It finds three hundred issues across forty services, opens a ticket for each, assigns them to the owning teams, and calls the rollout a shift-left program. Six months later the same scanner finds two hundred and eighty issues. Different services, mostly the same classes of problem. Every team fixed their tickets. The number barely moved.
If that scene feels familiar, it is worth asking what “shift left” actually bought you. The phrase came out of early-2000s writing on shift-left testing, and the core insight was genuinely good: the earlier a defect is caught, the cheaper it is to fix, so move feedback toward the start of the lifecycle. Testing in CI, static analysis on every pull request, security scanning before merge. None of that was a mistake, and none of it should be undone.
What went wrong is what the industry did next. Somewhere along the way, “give developers earlier feedback” got quietly rewritten as “make developers personally responsible for every cross-cutting concern.” Security, compliance, cost, reliability, observability, supply-chain hygiene: each of them was shifted left onto the same stream-aligned engineers who are also supposed to be shipping product. The feedback moved earlier. The ownership moved sideways, onto people with no more hours in the day.
Shift-left moved the feedback earlier. Too often it moved the ownership onto whoever happened to be holding the keyboard, and called that a strategy.
Redistributing toil is not the same as removing it
Matthew Skelton and Manuel Pais gave the industry the right vocabulary for this in their 2019 book Team Topologies. Teams, like individuals, have a finite cognitive capacity. Load them past it and you get context switching, shallow work, and a slow erosion of mastery, because nobody has time to get genuinely good at anything they are juggling. The whole point of a platform team, in their framing, is to reduce the extraneous cognitive load on stream-aligned teams so those teams can spend their scarce attention on the domain problem that actually differentiates the business.
Measured against that standard, a lot of shift-left practice does the opposite. Asking every developer to remember to enable bucket versioning, rotate a certificate, pin a base image, set a sane timeout, and add an audit log line is not reducing extraneous load. It is broadcasting the same load to fifty people and hoping all fifty remember, forever, under deadline. That is redistribution, not removal, and redistribution scales the number of places a mistake can happen rather than shrinking it.
This is the gap that “shift down” names. Gartner has been making the argument specifically for security, in research titled around shifting security down rather than left, and the platform engineering community has generalized it: instead of pushing a concern out to every developer, push it down into the platform, where it can be solved once and enforced by default. The developer does not get a ticket asking them to enable bucket versioning. The platform simply refuses to create a bucket that does not have it. The mistake becomes unreachable rather than merely discouraged.
The Absorption Test
Not everything should shift down. Absorb the wrong things and you rebuild the centralized operations bottleneck that shift-left was a reaction against in the first place. The useful question is not “left or down” as a slogan but “for this specific concern, where does responsibility belong?” Three questions settle most cases. Call it the Absorption Test.
First, is there a single correct default? If nearly every service should handle the concern the same way, and deviations are rare exceptions rather than the norm, that default belongs in the platform. TLS everywhere, encryption at rest, no plaintext secrets in the environment: there is one right answer, and asking each team to re-derive it is waste.
Second, is the requirement invariant across services? A rule that is identical for the payments service and the marketing-site backend is a platform rule. A rule that legitimately differs per service, because the domain differs, is not. Invariance is what makes “solve it once” possible.
Third, is the cost of getting it wrong borne by someone other than the team that decides? When a missed audit log or an unpatched dependency becomes a company-wide incident or a failed compliance audit, the risk is externalized. The deciding team captures the convenience of skipping it; everyone else absorbs the consequence. Externalized risk is precisely what a platform default exists to internalize.
Score a concern against those three. If the answers are yes, yes, and yes, the concern should be absorbed into the platform and made the default, not left to memory. If a concern has a single sensible default but teams occasionally need to opt out for real reasons, pave it: make the safe path the easy path and the opt-out explicit and reviewed. If the concern genuinely varies by domain and the deciding team also bears the cost, leave it with that team, because shifting it down would just be miscategorizing domain judgment as toil.
The Absorption Scorecard
Run the common cross-cutting concerns through the test and the picture gets concrete. This is the artifact to copy into your own platform planning and argue with, one row at a time. “Absorb” means the platform enforces it by default and the developer cannot easily opt out. “Pave” means the platform provides the safe default as the path of least resistance, with a reviewed escape hatch. “Leave” means it stays with the stream-aligned team because the decision is genuinely theirs.
| Concern | Single correct default? | Invariant across services? | Risk externalized? | Verdict |
|---|---|---|---|---|
| TLS and certificate rotation | Yes | Yes | Yes | Absorb |
| Secret storage and injection | Yes | Yes | Yes | Absorb |
| Encryption at rest, bucket versioning | Yes | Yes | Yes | Absorb |
| Base image hardening and patching | Yes | Mostly | Yes | Absorb |
| Audit and access logging | Yes | Yes | Yes | Absorb |
| Dependency and CVE patching | Yes | Mostly | Yes | Absorb / Pave |
| Autoscaling and resource limits | Mostly | Partly | Partly | Pave |
| Retry, timeout, and backoff policy | Mostly | Partly | Partly | Pave |
| Rate limiting on public endpoints | Partly | No | Partly | Pave |
| Data retention and PII classification | Partly | No | Yes | Pave |
| API contract and versioning | No | No | Partly | Leave |
| Domain input validation and business rules | No | No | No | Leave |
| Feature logic and product behavior | No | No | No | Leave |
The shape of the table is the argument. The top rows, where all three answers point the same way, are where “shift left” quietly failed: they were handed to developers as responsibilities when they should have been platform guarantees. The bottom rows are where centralizing would fail: they belong to the team that understands the domain, and no platform default can make that call for them. The interesting work is in the middle, the “pave” band, where the platform should make the right thing the default without taking the decision away entirely.
Four ways shift-down goes wrong on paper
Most failed programs are not failures of intent. They are one of a handful of recognizable anti-patterns wearing the language of platform engineering.
Shift-left theater. A concern is declared “shifted left,” which in practice means a scanner, a backlog of tickets, and a training module. Nothing about the default changes. The symptom is the opening scene of this article: the same class of finding recurs across services indefinitely, because each team fixes its instance locally and the platform never removes the ability to create the problem. Recurrence across teams is the tell. A concern that keeps coming back everywhere is a concern that should have been absorbed, not assigned.
The checklist tax. Governance implemented as a pre-merge checklist that a human is supposed to remember. The symptom is that the checklist only ever grows; nobody removes an item, because removing one feels like lowering the bar. Every new incident adds a line. Eventually the checklist is long enough that it is either rubber-stamped or resented, and usually both. A checklist item that could be a platform default is a confession that the concern was never really shifted down.
The optional paved road. A golden path exists, it is genuinely good, and developers can step off it whenever a deadline bites. The symptom is that the fast way and the safe way are different ways. If the compliant path is slower than the shortcut, the shortcut wins under pressure, which is exactly when it matters most. A paved road with an off-ramp back onto the dirt track is not a guarantee; it is a suggestion with good branding.
The dashboard of shame. A per-team scorecard of vulnerabilities, cost, or policy violations, shipped without any default that prevents the debt it measures. The symptom is a number that goes up and to the right while everyone learns to ignore it. Visibility is not enforcement. Showing a team its debt without changing the default that generates the debt just adds “feeling bad about the dashboard” to their cognitive load, which is the one thing you were supposed to be reducing.
When shift-down is the wrong call
The honest constraint is that shift-down presupposes a platform team with the capacity to own what it absorbs, and not every organization has one. The 2024 DORA report is worth taking seriously here. Its research found that adopting an internal developer platform improves individual productivity, team performance, and overall organizational performance, but it can also decrease software delivery throughput and change stability, with a temporary dip before the benefits materialize as the platform matures. DORA is explicit that platform initiatives can be counterproductive when implemented poorly or attempted by teams too small to sustain them, and that the work should prioritize developer independence and a product orientation rather than control for its own sake.
Read that as a caution, not a veto. Absorbing a concern is a commitment to operate it indefinitely. If your platform team cannot run certificate rotation reliably for every service, then centralizing it turns a distributed inconvenience into a single point of failure, and every team is now blocked on you. The right sequence is to absorb only what you can genuinely operate, pave the next tier, and be honest that the bottom of the scorecard was never yours to take. Legacy services that cannot consume the paved path are a real cost too; a default that only new services can adopt leaves the old ones exactly where they were, and pretending otherwise is how a shift-down program quietly becomes a shift-down slide deck.
There is also a political cost that no framework dissolves. Absorbing a concern means a team that used to decide now consumes a default someone else owns. That is the right trade for an invariant concern with externalized risk, and it is the wrong trade for domain judgment. Getting the scorecard right is largely about being able to tell those two apart in a room full of people who each have a reason to keep their lever.
The reframe that survives contact
Shift-left was never the enemy. Early feedback is still correct, and moving tests, scans, and checks toward the start of the lifecycle remains one of the better ideas the industry has had. The misread was treating “earlier” and “each developer’s job” as the same instruction. They are not. Feedback belongs early; ownership of an invariant, externally-costly concern belongs in the platform, enforced once, by default, so that the fiftieth engineer does not have to remember what the first one did.
The teams that get the most out of their platform investment over the next few years will not be the ones with the longest security checklists or the most detailed compliance dashboards. They will be the ones who can point at a concern and say, truthfully, “no developer here can get that wrong, because the platform will not let them,” and who kept the domain decisions firmly with the teams that understand the domain. Shift-left moved the feedback. Shift-down moves the responsibility to where it can actually be discharged once.
If you are staring at a scanner that keeps finding the same class of problem across your services, that is usually a sign a concern has been shifted left when it should have been shifted down, and it is worth working out which rows of your own scorecard are in the wrong column before you add another ticket queue. We have helped teams draw that line, absorb the top of the scorecard without stalling delivery, and leave the domain decisions where they belong, and we are glad to compare notes on where the boundary should sit for your platform. Where we are least sure is the middle band: the concerns that are almost invariant but not quite, where a paved road with a reviewed escape hatch is the honest answer. If you have found a cleaner way to draw the line between “absorb” and “pave” than three questions and a table, that is exactly the conversation we want to have.
Stay updated
Get insights on engineering transformation delivered to your inbox.
Newsletter coming soon.