GRP
Scroll
← Back to the seven keys

03 · What I do

Engineering

Data strategy · 5 min read

Two tools that solve the same problem are never the same tool. They differ in what they make easy, what they make painful, how much of your team's week they quietly consume, and what they do to everything sitting next to them. Engineering is largely the discipline of seeing those differences before committing to them, and of leaving behind a codebase that the next decision can still be made in.

Every tool is a trade, not an upgrade

Comparisons usually get framed as which option is better, which is the wrong shape of question. The managed service removes operational work and takes away control over performance and cost. The framework that generates half the pipeline saves weeks now and constrains what can be expressed later. The lightweight library keeps things simple until the first requirement it was never designed for arrives. None of these is a defect; they are the terms of the deal.

So the useful exercise is not ranking options but naming the problems each one leaves you with, and deciding which set of problems this team, at this size, with this roadmap, would rather own. Two competent engineers can pick differently for the same system and both be right, because they are optimising for different constraints. What is not defensible is choosing without knowing what was traded away.

The invoice is the smallest part of the cost

Every tool has a price that appears on a bill and a price that appears on a calendar. The second one is bigger and almost never estimated. Setup and integration. Access control and secrets. Monitoring, alerting, and the runbook someone has to write. Version upgrades that break something subtle. The hours lost when it fails at an inconvenient moment. The ramp-up time of every engineer who joins afterwards and has to learn it.

Counted that way, the ranking often inverts. A free tool that consumes a day of engineering a week is more expensive than a paid one that consumes an hour a month, and the gap widens as the team grows, because attention is the resource in shortest supply. The honest comparison is total cost of ownership over a realistic horizon, including the salary cost of the maintenance, and including what the team will not be building while it maintains.

Nothing is local

A tool is never adopted in isolation. It brings a deployment model, an authentication story, a logging format, a failure mode, and an opinion about how work should be structured. It changes what the orchestrator has to know, what the platform team has to support, how incidents get triaged, and which skills the next hire needs to have.

Which is why the evaluation has to extend one ring outwards. What does this add to the orchestration layer? How does it fail, and does the system next to it notice? Who gets paged? Does it force a second way of doing something the team already does one way? A component that is excellent on its own and awkward in context is a net loss, and that loss is paid by people who were not in the room when it was chosen.

Technical debt is only debt when it has a date of repayment. Without one it is simply poor decision making.

A clean house grows straighter

Standards for code look like overhead when a system is small, and they are the reason it is still standing when it is large. Consistent structure, tests that make change safe, names that say what things are, modules with edges, review that is about design rather than formatting. None of it produces a feature on the day it is done.

What it produces is a straight line of growth. In a clean codebase the next change costs roughly what the last one did. In a neglected one, each change costs a little more than the last, because every addition has to work around the previous compromise. That curve is not linear, and teams tend to notice it only once it has become steep, at the point where a small request takes a fortnight and nobody can explain why. Houses do not collapse because of the last brick.

Debt with a due date

Shortcuts are legitimate. Shipping something imperfect to learn whether it matters is often the correct engineering decision, and refusing to ever cut a corner is its own kind of failure. The distinction is whether the shortcut is recorded as debt or absorbed as normality.

Debt has a lender, an amount and a due date. In practice that means writing down what was skipped, why, what it will cost to carry, who owns it, and the trigger that forces repayment: a date, a scale threshold, the next feature that touches the same code. Reviewed on a cadence, with the same seriousness as a roadmap item. Without those attributes there is no debt to repay, only a decision that was quietly made permanent, and permanent shortcuts are how systems become the thing everyone is afraid to touch.

Boring technology, on purpose

Most systems benefit from fewer moving parts than their engineers would enjoy building. Mature tools have known failure modes, documentation written by people who hit those failures, and a hiring pool. Novel tools have potential and an unknown tail of surprises that will be discovered in production, by you.

That is not an argument against ever adopting something new. It is an argument for spending novelty where it creates a real advantage and being deliberately conservative everywhere else. A team can absorb one or two genuinely new things at a time. Beyond that, the compound operational cost eats the capacity that made the innovation worth it.

Judgment is the deliverable

The lasting output of an engineering function is not a set of pipelines. It is a system that the next person can reason about, change safely, and unwind where it was wrong. That comes from preferring reversible decisions where the future is unclear, keeping interfaces narrow so that parts can be replaced individually, and treating documentation of choices as part of the work rather than an afterthought.

Tools will keep changing. What survives is whether the team understood the trade it was making, counted the cost in hours as well as in currency, looked one ring beyond the component, and kept the house clean enough that the next decision is still cheap to take.

Back to the seven keys ← 02 Data architecture 04 Automation →