विठ्ठलमाऊलीज्ञानेश्वरतुकारामपांडुरंगहरिएकनाथनामदेवरामकृष्णसोपानमुक्ताबाईचोखामेळाजनाबाईगोरा कुंभारॐ
← मुखपृष्ठ॥ श्री ॥№ 061

The Seam Outlives the Decision

The migration was announced once. The seam it opened gets paid for every week, by people who were not in the room.


ਕਬੀਰ ਦੀਨੁ ਗਵਾਇਆ ਦੁਨੀ ਸਿਉ · Kabir: He Gave Up His Faith for the World

ਕਬੀਰ ਦੀਨੁ ਗਵਾਇਆ ਦੁਨੀ ਸਿਉ ਦੁਨੀ ਨ ਚਾਲੀ ਸਾਥਿ ॥
ਪਾਇ ਕੁਹਾੜਾ ਮਾਰਿਆ ਗਾਫਲਿ ਅਪੁਨੈ ਹਾਥਿ ॥੧੩॥
Kabir: he gave up his deen, what he was bound to, for the sake of duni, the world, and the world did not travel with him. The heedless one struck the axe on his own foot, with his own hand.

Bhagat Kabir, Salok 13, Guru Granth Sahib, Ang 1365. Gurmukhi, Sant Bhasha. This is the first issue in this series to carry a verse from outside the Marathi Varkari tradition.


What I keep seeing

A company announces it is moving off its cloud vendor. There is a blog post, and a conference talk with a slide showing the projected savings. The engineering leader who made the call is quoted in a trade publication, and for about six weeks the decision is the most interesting thing about the company.

Two years later I am talking to a staff engineer there. The migration is at eighty percent. It has been at eighty percent for a year. A translation layer between the old object storage API and the new one, written during the migration, now handles every read path in the product. It has an owner, an on-call rotation, and seventeen open bugs, most about edge cases in how the two systems disagree on consistency.

The person quoted in the trade publication has since moved to another company. The staff engineer has not.

The mechanics

An allegiance shift in software is never a swap. It is the opening of a seam, and the seam is a running system that has to be maintained.

The strangler fig pattern, as Azure and AWS both document it, routes traffic through a facade while functionality moves piece by piece from the old system to the new. The pattern is sound. Its documentation is also explicit that the facade is a migration tool and not a destination, and that if the translation adapter becomes permanent you have not completed a migration, you have built a permanent border between two systems. Dual writes are the same shape, and every dual write needs reconciliation, which needs someone who understands both schemas well enough to adjudicate a mismatch at two in the morning.

The clearest case of a shim outliving its migration is six, the Python 2 to 3 compatibility library. Python 2 reached end of life in 2020. Roughly 96 percent of six downloads now come from Python 3 runtimes, because it survives as a transitive dependency of packages like python-dateutil that never dropped it. The bridge between two worlds is still installed on machines where only one of those worlds exists.

The cost structure is the point. The decision is a discrete event with a name attached. The seam is a continuous obligation with a rota attached. A quarterly business review can hold the first. It has no column for the second.

Where Kabir comes in

Kabir is describing a trade. ਦੀਨੁ ਗਵਾਇਆ ਦੁਨੀ ਸਿਉ: he let go of what he was bound to in exchange for the better offer. Then the line that does the work, ਦੁਨੀ ਨ ਚਾਲੀ ਸਾਥਿ, the world did not travel with him. What you switched to does not carry your load. It arrives with its own weight, and the carrying is now yours.

The closing image is anatomical and I think exact. ਪਾਇ ਕੁਹਾੜਾ, the axe lands on the foot. Not the hand, not the shoulder. The foot is what you stand on and walk with for the rest of the journey. An injury there is not an event you recover from and describe later. It is felt on every step afterwards.

One honest limit. Kabir puts the axe in the decider's own hand and the wound on the decider's own foot. He draws no line between the person who calls the migration and the people who maintain its seam. That line is mine, not his. What the verse supplies is the shape: a swap made for gain, whose cost is paid not in the swapping but in the walking. In an organisation the hand and the foot belong to different people, and the hand that swung the axe is on a different team by the time the limp sets in.

What I would actually do

Give every migration seam a named expiry at the moment it is created, in the same document that authorises the migration, and treat a missed expiry as an incident rather than a backlog item. Not a target date. An expiry. The compatibility shim, the dual write window, the translation adapter: each gets a date on which it is either gone or formally reclassified as permanent infrastructure with a staffed owner and a budget line.

The reclassification is the half people skip. Some seams should become permanent, and there is nothing wrong with that as long as somebody signs their name to it. What is dishonest is the seam still officially temporary in year three, because temporary things do not get budget, headcount, or architectural attention. They just get a rota.

Here is the opinion, and I do not expect agreement on it. No engineering leader should announce a migration externally until the seam it opens has a named owner who is not them, and that owner should have the standing to say the migration is not worth finishing. We have built a culture where the decision to switch is a leadership credential and the maintenance of the switch is invisible labour, and that asymmetry is not an accident of reporting. It is the incentive. The person who swings the axe writes the blog post. The person who walks on the foot writes the runbook.

Chetan Dhandal

FlJnZ6usuZ
← Previousआहांच वाहांच आंत वरी दोन्ही