<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Migration on Brian Faust</title><link>https://wimdy.works/tags/migration/</link><description>Recent content in Migration on Brian Faust</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://wimdy.works/tags/migration/rss.xml" rel="self" type="application/rss+xml"/><item><title>The Strangler Pattern Still Needs an Exit Plan</title><link>https://wimdy.works/thoughts/the-strangler-pattern-still-needs-an-exit-plan/</link><pubDate>Fri, 01 Nov 2019 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/the-strangler-pattern-still-needs-an-exit-plan/</guid><description>&lt;p&gt;A replacement proof of concept imported one provider&amp;rsquo;s postal data into
PostgreSQL and served one existing JSON-RPC search method from a Go binary. A
checked-in request and response fixture preserved field names, nulls, empty
strings, ordering, and identifier shape. Import failure left the last committed
dataset intact.&lt;/p&gt;
&lt;p&gt;The slice deliberately excluded every other provider, the other RPC methods,
queues, schedulers, authentication, caching, operational interfaces, and
traffic cutover. That is a good proof of one vertical path. It is not a plan
for retiring the system around it, and pretending otherwise would make the POC
less useful rather than more impressive.&lt;/p&gt;</description></item><item><title>A Rewrite Needs a Behavior Ledger</title><link>https://wimdy.works/thoughts/a-rewrite-needs-a-behavior-ledger/</link><pubDate>Wed, 01 May 2019 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/a-rewrite-needs-a-behavior-ledger/</guid><description>&lt;p&gt;A desktop rewrite had screens for shipments, reports, settings, and logs. If we
had tracked the work as a feature checklist, all four could have been marked
complete and everyone could have gone home feeling productive.&lt;/p&gt;
&lt;p&gt;The old application also had behavior no screen list would reveal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a failed temporary-file cleanup must not turn a submitted print into a
failure, or the next run may print the label again;&lt;/li&gt;
&lt;li&gt;the first run treats older unprinted records differently from later runs;&lt;/li&gt;
&lt;li&gt;setup unlocks when a credential setting exists, not when its value is
non-empty; and&lt;/li&gt;
&lt;li&gt;a visible report search box does nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of those rules protect operators. One is an awkward contract. One is
probably a dead feature. Calling all of them “parity” hides the decision we
actually need to make. A rewrite needs a behavior ledger: a finite record of
what must survive, what will change deliberately, what may be dropped, and what
evidence closes each decision.&lt;/p&gt;</description></item><item><title>Parallel Implementations Are Not a Replacement Seam</title><link>https://wimdy.works/thoughts/parallel-implementations-are-not-a-replacement-seam/</link><pubDate>Mon, 01 Apr 2019 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/parallel-implementations-are-not-a-replacement-seam/</guid><description>&lt;p&gt;An old shipping integration and its proposed replacement lived beside each
other. Both had an interface, a driver, request builders, and tests. From the
directory tree, that looked like a seam.&lt;/p&gt;
&lt;p&gt;When the replacement was finally made canonical, the change still crossed
dozens of files. The old interface disappeared, the new one moved, the
canonical driver changed its pickup and shipment flows, and a parallel driver
tree was deleted. Follow-up work then corrected a request shape and added
serialization tests.&lt;/p&gt;</description></item></channel></rss>