Bluefly Technology Reduction — Delivery Method¶
How the three offers are actually delivered. Field names are not defined
here — they are defined in data-model.yaml and referenced by entity.
1. MAINTENANCE REVIEW¶
The customer's question, in their words:
What are we maintaining that we don't need anymore?
One item row per candidate. 21 fields, grouped so each group answers a
question that actually changes the verdict.
Phase 1 — Scope and access¶
Agree the SCOPE_UNIT in writing before anything starts: one platform family,
one business unit, N sites, N applications, or N repositories. An unbounded
estate produces an unbounded review and an unsellable second engagement.
Record the denominator. "We reviewed 34 of an estimated 40 custom modules; the remaining 6 were in a repository we were not granted access to" is a finding. "We reviewed the custom modules" silently claims a total it never established.
Phase 2 — Discovery and inventory¶
Populate identity, ownership and burden for every item. Three fields do most of the work here, and two of them are usually uncomfortable:
current_owner— "Unknown" is a result, not a blank. An unowned system is already a finding regardless of its verdict.who_uses_it— "Nobody identified" is the single strongest retire signal available. Chase it before accepting it; the users are sometimes real and undocumented.credentials_or_access— what this thing holds open. Frequently worth more to the buyer than the maintenance hours, because it is auditable.
Interview before reading code where possible. why_it_was_built usually names a
constraint that no longer exists, and that sentence does more to justify a
retirement than any measurement.
Phase 3 — Replacement assessment¶
The core of the offer. For each item, answer: does the customer already own something that can carry this outcome?
replacement_evidence is graded, and the grade is the integrity of the whole
engagement:
| Grade | Meaning | Sufficient to recommend removal? |
|---|---|---|
SIDE_BY_SIDE_PROVEN |
Run against real customer data, outcomes compared | Yes |
TESTED_IN_CUSTOMER_ENV |
Exercised in their environment, not production data | Yes, with the gap stated |
VENDOR_DOCUMENTED |
Vendor says it does this; we have not run it | No — rank NEXT, not NOW |
ASSERTED_ONLY |
Somebody believes it does this | No — verdict is INVESTIGATE |
A vendor's documentation is a hypothesis about the customer's environment. The
estate's own hard-won rule applies: documented is not the same as working.
Never promote VENDOR_DOCUMENTED to a NOW removal.
replacement_maturity of BETA or NOT_AVAILABLE caps the verdict at
INVESTIGATE or KEEP. Do not plan a removal onto an unreleased capability.
Phase 4 — Verdicts and ranking¶
Five verdicts. Not fifty categories.
| Verdict | Meaning |
|---|---|
KEEP |
Justified. No adequate replacement, or the custom version is genuinely better. |
RETIRE |
Not needed at all. No replacement required — the need is gone. |
REPLACE |
Needed, but an owned platform capability can carry it. |
CONSOLIDATE |
Several implementations of one capability; collapse to one. |
INVESTIGATE |
Cannot be decided on current evidence. Must name the specific missing evidence. |
INVESTIGATE is legitimate and must not be used to avoid a decision. It carries
the question that would resolve it, or it is not a verdict.
Then rank: NOW · NEXT · LATER · KEEP. NOW means low risk, proven
replacement, and the customer can approve it in this engagement.
Phase 5 — Deletion Plan and readout¶
Acceptance: every item carries a verdict and a rank, and the customer has made
a decision on every NOW item. A plan the customer has read is not acceptance;
a plan the customer has decided on is.
2. THE DELETION PLAN¶
The customer-facing deliverable. Projects item plus the removal-planning
fields of removal.
Per item: CURRENT_THING · WHY_IT_EXISTS · WHAT_REPLACES_IT ·
WHY_REPLACEMENT_IS_PREFERRED · CURRENT_ANNUAL_BURDEN · REMOVAL_EFFORT ·
REMOVAL_RISK · SECURITY_SURFACE_REMOVED · CREDENTIALS_CLOSED ·
UPGRADE_TESTING_REMOVED · ROLLBACK_PATH · CUSTOMER_APPROVAL · STATUS
Ranked NOW / NEXT / LATER / KEEP.
The plan must lead to decisions. It does not end with "recommendations for
consideration" — that phrase is the failure mode this deliverable exists to
avoid. Every NOW item has a named approver and a decision field that is filled
in during the readout, not after it.
3. SAFE REMOVAL¶
Twelve steps, in order. The order is the safety property; reordering it removes the guarantee.
| # | Step | Why it is where it is |
|---|---|---|
| 1 | Establish baseline | Measure the current business outcome before touching anything. A baseline captured after the first change is not a baseline. |
| 2 | Configure existing replacement | Using the platform's supported configuration path. Not a bridge, not a shim. |
| 3 | Run old and new side by side | Both live, same inputs. |
| 4 | Compare required business outcomes | Compare the outcome, not the implementation. Identical internals are not the goal. |
| 5 | Document differences | known_differences of "none" is only valid if something was actually compared. Say what. |
| 6 | Customer approves | Named approver, in writing, on the evidence from steps 4–5. |
| 7 | Switch old implementation off | Disabled, not deleted. |
| 8 | Retain bounded rollback capability | Tested, not assumed. |
| 9 | Verify production | Read the result back from production, not from the deploy log. A green deploy is not a working outcome. |
| 10 | Revoke old credentials and access | This is where most of the security value is realised, and it is the step most often skipped because the feature already appears to work. |
| 11 | Remove old implementation | Only after the rollback period has elapsed. |
| 12 | Record the ownership removed | measure rows, with provenance. |
The rollback period¶
Default: 30 days.
This is a default, not a promise that every item can use 30 days. It is set
per removal in removal.rollback_period_days and is driven by the customer's
reality:
- A quarterly financial close may require the window to span a full cycle.
- A regulatory retention or change-freeze requirement overrides the default in either direction.
- A seasonal peak may require the window to extend past it.
- A trivial, zero-integration item may justify a shorter window with the customer's agreement.
Never quote 30 days as a fixed property of the service.
Why steps 7 and 11 are separate¶
Switching off and removing are different events with different risk. Collapsing them removes the rollback window, which is the entire reason the customer can approve step 6 without taking a leap of faith. A removal that deletes at cutover is not Safe Removal.
4. THE VERIFICATION CONTRACT¶
A removal does not count because code disappeared. It counts when the customer outcome still works.
One verification row per removal, 15 fields, ending in
final_verdict = PASS | FAIL | ROLLED_BACK.
Three fields are the ones that make it a contract rather than a checklist:
rollback_test—NOT_RUNmeans there is no rollback path, only an intention. An untested rollback is not a control.production_readback— read from production. Not the pipeline, not the deploy log, not the absence of alerts.functional_equivalence— three values, becauseEQUIVALENT_WITH_DIFFERENCESis the honest and most common answer. Forcing it to binary produces either a false claim of identity or a false claim of failure.
ROLLED_BACK is a real and acceptable verdict. It is recorded, reported to the
customer, and counted. Hiding rollbacks would make the pass rate meaningless and
is the fastest way to lose the only thing this offer sells.
What Bluefly must be able to prove at the end:
Same required outcome, less customer-owned machinery.
5. MAINTENANCE WATCH¶
Recurring, quarterly, two pages maximum unless material evidence requires an appendix.
Not a dashboard. Not a platform. Not a portal the customer has to log into — that would be new technology for them to own, which contradicts the offer.
LIST 1 — What can you stop maintaining now?¶
Driven by the platform catching up. Per finding: NEW_PLATFORM_CAPABILITY ·
CURRENT_CUSTOM_IMPLEMENTATION · WHY_IT_MAY_NOW_BE_REDUNDANT ·
RECOMMENDED_ACTION.
Note the hedge in "may now be redundant" — it is deliberate. A quarterly watch
item is a candidate, at VENDOR_DOCUMENTED evidence at best. It feeds a
Review, it does not authorise a removal.
LIST 2 — What are you about to build that you shouldn't?¶
The prevention half, and the reason this is recurring rather than a follow-up.
Per finding: PROPOSED_CUSTOM_WORK · EXISTING_CAPABILITY · DUPLICATION_RISK
· RECOMMENDED_ACTION.
Reduction without prevention regrows. A customer who retires 20 systems and builds 25 new ones has bought nothing. List 2 is what makes the engagement compound instead of repeat, and it is increasingly the more valuable list as custom code becomes cheaper to produce than to decide on.
Honest limitation¶
List 2 requires visibility into what the customer is planning — roadmaps, design docs, or a standing conversation with the platform team. Where that access does not exist, say so in the quarterly report and name what would be needed. A List 2 compiled without planning visibility is guesswork wearing a deliverable's format.
6. Where the method must not drift¶
- No artifact invents a field. If it needs one, it goes in
data-model.yamlfirst. Twelve documents with twelve field lists drift inside a single engagement. - No number without provenance.
measurerows carrysource,assumption,customer_confirmed. A number that cannot carry those is not shown. - No removal without a named approver. Not a team, not an email thread — a person with the authority to authorise it.
- No
NOWrank onVENDOR_DOCUMENTEDevidence. That is the specific shortcut that turns this offer into an outage generator.