About Expertise Work Projects
Hosted Monitoring & Dashboards Self-Hosted Observability Stack Bulk Document Data Extraction Email Deliverability Diagnosis & Repair SEO Migration Recovery AWS Security Review VPS Hardening & ModSecurity Cloud Architecture & Resilience Review SSL & Server Configuration Container Security Review DNS & Email Troubleshooting DevOps Deployment & Rollback Review WordPress Hardening Retainer Data Pipeline Rerun Review Metric Reconciliation
Free Tools
Website Health Check Email Domain Health Check DNS Health Check SSL Certificate Checker Redirect Chain Checker Robots.txt Checker XML Sitemap Validator Docker Compose Checker WordPress Security Check AWS IAM / S3 Policy Checker Domain Registration Lookup Uptime Monitoring Trial Downtime Cost Calculator AWS Cost Estimator Cloud Architecture Self-Assessment DevOps Engagement Builder Self-Managed VPS vs Managed AWS
Blog Certifications Hire Me

Your three reports disagree about one number. Each of them is computing it correctly.

That is what makes it so hard to settle. Nothing has failed, nothing is throwing an error, every test passes and every refresh succeeded — and the finance export, the warehouse and the dashboard still show three different figures for the same word. Each system stores its answer. None of them stores the question it was answering.

Nothing on this page has looked at your numbers, and I am not going to pretend otherwise. There is no free checker here that finds this, and there could not be — every component involved is behaving correctly, so there is nothing for any scanner anywhere to fail on. What follows is the argument, the causes, and both of the things a real reconciliation hands back, so you can judge it before speaking to anyone.

What you can already get for nothing, said first

Every one of these is good, and most of them are better than anything hand-written. None of them stands between two systems and does the arithmetic.

A language model
Reads three SQL statements and explains the difference between them, in seconds, and it will name most of the causes below without being prompted. Free, fast, and genuinely good at this.
A semantic layer — dbt, Cube, LookML, Power BI models
Define the metric once and serve it everywhere. Free or included with what you already pay for, and well documented. It is the right thing to build.
dbt tests, Great Expectations, Soda
Assert that a number sits inside a range, or that two tables agree on a key. Open source, and yours to install this afternoon.
Clicking a total in your BI tool
Click a total and see the rows behind it — in that tool, under that tool’s definition.
Two extracts and a spreadsheet
An afternoon with a lookup will tell you the two numbers differ. You almost certainly already know that part.

None of them tells you where the difference is, or what each piece of it is worth. They either define the metric going forward, or show you one system at a time. The gap between two figures is not stored anywhere, in any of them, because it is not a property of either system — it only exists once somebody computes it.

A reported number is an answer with its question thrown away

Every figure on every screen is the output of a definition. The figure is stored. The definition is not — it is implicit in a WHERE clause, a measure inside a BI tool, a filter somebody saved onto a view, and a convention nobody wrote down.

What every system stores The answer. A number, in a table, on a dashboard, in an export. Retrievable, refreshable, and silent about what it counted.
What none of them stores The question. You cannot recover a definition from its output, and you cannot compare two numbers when you cannot see the two questions behind them.

And nothing is broken, so nothing reports. Every system passes its own checks. There is no error, no failed test, no alert and no red row anywhere. The only symptom is a disagreement between two screens that nobody looks at side by side — which is why this gets noticed in a meeting rather than by a machine, usually at the worst possible moment.

So the arithmetic has never been done, and that is the whole thing. Everybody in the room already knows the numbers differ. What nobody knows is that the difference is made of one piece here, another piece there, and a remainder nothing accounts for — and that last figure is the one that changes the conversation, because a stated remainder is either small enough to live with or big enough to chase. An unstated one is neither.

The vendors document this in their own products

Not a competitor comparison and not a criticism — these are good tools behaving as designed, and each is straightforward about it. Quoted rather than paraphrased, with the page that carries each sentence linked so you can check it in one click.

  • Google — its own reports against its own BigQuery export A discrepancy of 2-5% between the total event count in Analytics and BigQuery is expected. The condition travels with it, and it is the sentence immediately before: the comparison is the total number of event rows exported to BigQuery on a single day against the total in the reports on the same date. This is one company’s two own surfaces, fed by one collection, and it tells you in advance they will not match. Read it
  • Google — on the mechanism, and on turning it off Data thresholds are system defined. You can’t adjust them. Under When data thresholds are applied. The purpose is good and stated plainly elsewhere on the same page — thresholds exist so that nobody viewing a report can infer the identity of individual users. But read the second sentence: this is not a default you can change. One surface withholds data the other does not, by design, permanently. Read it
  • Fivetran — on what happens to a row you deleted Connectors without this feature are still in soft delete mode by default, but deleted rows will not be marked _fivetran_deleted = TRUE. Soft delete is the default sync mode and is available for what the documentation calls the vast majority of connectors: a row deleted in your source is marked in the warehouse rather than removed. That is the right default. But where a connector cannot capture deletes, the row stays with no marker on it at all — so a COUNT(*) in the warehouse and the same count in the source are answering different questions, silently, out of the box. Read it
  • Microsoft — on the report somebody is looking at right now For example, if you open a report in the browser, then the scheduled refresh performs a data refresh of the imported tables, the report visuals in the open browser won’t update until a refresh of report visuals is initiated. That sentence is a table cell rather than running prose — the Keep in mind row of the Refresh of report visuals column, under Power BI refresh types — and it is worth reading in place. The screen and the model behind it are two different things, and how far apart they can drift depends on your capacity: the same page documents a ceiling of eight scheduled refreshes a day on shared capacity against up to 48 on the paid capacities. Read it
  • dbt — and this one is a sales pitch, not a confession Moving metric definitions out of the BI layer and into the modeling layer allows data teams to feel confident that different business units are working from the same metric definitions, regardless of their tool of choice. Marked differently because it is different. The four above are companies documenting a limit inside their own product. This is a company selling the fix — and it describes the problem in almost the same words this page does: different business units, different tools, different definitions. Worth quoting for who is saying it, not as an admission it is not. Read it

No vendor can ship the missing feature, and that is the point rather than a complaint. The feature would require one company’s product to know what another company’s product means by the same word — and then what your business means by it, which is not written down in either.

Six reasons two correct systems disagree

Not bugs. Every one of these is either a documented default or an ordinary decision somebody made sensibly, once, without telling the other side.

Deleted rows that only one side dropped
A record is deleted in the source system. The ingestion tool marks it in the warehouse rather than removing it — which is the documented default, and the right default, because throwing away history silently would be worse. Then one query filters those rows out and the other does not. Neither query is wrong. They are counting different things.
Two definitions of the same word
Gross against net. Booked against recognised. Whether an internal account, a test order or a cancelled subscription is in or out. Every one of these is a legitimate business decision that somebody made once, in one place, without writing it down — and the other surface made a different one, equally reasonably.
A definition that lives in a screen
A measure built by clicking, a filter saved onto a view, a spreadsheet column with a formula in it. It cannot be read, reviewed, diffed or searched, and often the person who set it has left. This is usually the surface that turns out to be the odd one, and it is always the slowest to establish.
The clock, in three different senses
Event time against load time. One timezone against another. And month boundaries that fall in different places because of either. A transaction at 23:40 on the last day of the month lands in different months on different surfaces, forever, and the size of that effect is not stable enough for anybody to learn to ignore it.
Reading them at different moments
One report was refreshed this morning and the other was run last night. Late data landed in between. Nothing is wrong with either number and they will never match — which is why the whole comparison has to be pinned to one agreed moment before it means anything at all.
A surface that cannot say when it is from
Some things only ever show now. A file that overwrites itself, a view with no snapshot, a report with no refresh timestamp on it. This is not an obstacle to the reconciliation — it is one of the answers. A surface that cannot state its own as-of will disagree with everything, permanently, and nobody had ever written that down.

Two artifacts, and here is what both of them look like

Rendered rather than described, because a service page that describes its own output is asking you to take the interesting part on trust. These are an example of the shape rather than anybody’s real system — the figures are illustrative, but the columns are the real columns. A real bridge contains a client’s actual revenue, so there will never be one of those on this website.

The bridge

One metric, two surfaces, one agreed moment. Every unit of the gap assigned to a named cause, working down from the figure one team quotes to the figure the other one does.

Line Effect on the gap Why it is there
Warehouse — net revenue, one month 1,284,306 The figure on the dashboard the commercial team reads. It is not wrong. It is the answer to one particular question.
Rows the source system no longer has −18,442 Deleted upstream, retained downstream, and never filtered out. The ingestion tool is doing exactly what it documents — a soft delete marks the row rather than removing it, and one query excludes those rows while the other does not.
Refunds and reversals −31,900 One surface reports gross and the other nets them off. Both are legitimate definitions of revenue and neither team had ever been told which one the other was using.
Currency −2,118 Converted at the month-end rate in one place and at the transaction-date rate in the other. A small line most months, and an alarming one in a month the rate moves.
Arrived after the earlier extract +4,015 The two surfaces were read hours apart. This is the line that turns into a recurring argument, because it is different every time somebody checks and it makes the whole comparison look unreliable.
Unexplained +611 Stated, not absorbed into the line above it. Six hundred and eleven that nothing above accounts for. It is either small enough to accept or large enough to chase, and you cannot make that call about a number nobody wrote down.
Finance export — net revenue, same month 1,236,472 The figure in the board pack. Also not wrong, and also the answer to one particular question.

The highlighted line is the one that matters and it is the one you will not get anywhere else. Every reconciliation anyone has ever been handed quietly folds the leftover into the line above so the two ends tie exactly. This one puts it on its own row with its own number. A bridge that always ties perfectly is a bridge somebody forced, and you cannot judge whether a remainder is acceptable if nobody will tell you how big it is.

The definition sheet

One row per surface. This is the half that needs somebody to have actually looked, and it is what stops the same argument restarting three months later.

Surface Where the definition lives Who can change it What it counts Grain and clock Last reconciled
Warehouse model A version-controlled model file Data team, through review Gross. Excludes internal accounts, includes refunded orders at full value. Event time, UTC, per calendar month Nothing
BI report A measure built in the tool’s interface Anyone with edit rights, and no trace when they do Nets refunds. Inherits a filter set on the saved view that nobody currently working here added. Load time, local timezone, as of the last refresh Nothing
Finance export A spreadsheet built from a scheduled extract Finance, by hand Nets refunds and converts currency at the month-end rate. Whenever it was last run — the file overwrites itself and keeps no timestamp Nothing

Look at the last column. Before anybody does this work, every row of it says the same thing, and that is true at almost every company of every size. The sheet is not impressive. It is just the thing nobody has, and having it is what makes the next disagreement a five-minute conversation instead of a fortnight.

What is free here, and what is not

Once, in one place, rather than a locked row beside every paragraph.

Free, always, with no account and no email address

  • Everything on this page, including both tables above and every column in them.
  • The full argument — why correct systems disagree, why nothing stores the definition, and the vendor pages that document it, linked so you can read them yourself.
  • All six causes, described specifically enough to go and check your own surfaces for them this afternoon. Several people find their answer in that list and never need anybody.
  • The list of what to ask before buying this from anyone, me included: which metric, at what grain, on which surfaces, and can all three be read as of one moment.

What you would be paying for

  • The bridge itself, computed from your figures — every unit of your gap assigned to a named cause, with the remainder stated.
  • The definition sheet for your surfaces, which is the part that needs somebody to have gone and looked rather than to have thought about it.
  • The three definitions turned into one written definition a named person signs off, and the surfaces changed to compute it.
  • The bridge re-run afterwards, so the agreement is proved rather than asserted.

Nothing here is gated, blurred or held back behind an email address. There is no checker on this page and therefore no result to withhold — the free column is not a sample of the paid one, it is genuinely everything that can be given away without seeing your figures. What costs money is the arithmetic on your numbers, which nobody can do from a web page.

And if the figures cannot be produced as of a common moment, that is a measurement that did not happen — not a tier you failed to buy. If one of your surfaces cannot say when its number is from, or a definition genuinely cannot be read by anyone still here, you get told that on the day and before anything is committed to. Dressing an incomplete answer as a paid upgrade is the one thing that would make this page dishonest.

This one does not ask to touch your systems. It asks to see your figures.

Every other piece of work on this site asks the same question in different words: may I do something risky to your infrastructure, carefully, and measure it. This is a different ask, and it deserves a different answer rather than the same paragraph reworded.

The reconciliation is computed on aggregates, not on rows. Getting from one figure to another needs the two totals and the size of each explaining category. It does not need to know who your customers are, and it does not need a copy of your data.

Nothing is written, anywhere, at any tier. No table, no view, no scheduled job, no export, nothing materialised. Every query is a read. This is the only engagement I offer that changes nothing at all, and it is worth saying plainly rather than leaving you to work it out.

  • Row level only where an aggregate cannot settle a line, and then keys only. An id list — not names, not email addresses, not amounts attached to a person.
  • The queries run in your environment. What leaves is the bridge. No extract lands on my machine unless you deliberately put it there, and if you do, it is on your terms and deleted on a date agreed before it moves.
  • You decide what is masked, before anything runs. And where a figure is masked, the bridge line says so rather than quietly disappearing — an unmeasured thing is reported as unmeasured.
  • Read-only credentials, or none at all. You run every query and I do the arithmetic, if you would rather. On this particular work that route is genuinely equivalent, because the work is queries rather than changes, and it would be a sales tactic to imply otherwise.
  • The bridge is yours. It has your real numbers in it, so it goes to you and is never reused, anonymised, excerpted or shown to anybody. That is why the example above is a shape rather than a client’s.

One moment, not a window. All three surfaces are read as of one agreed point in time, because surfaces read hours apart differ for reasons that have nothing to do with their definitions. That is three read-only queries against an agreed timestamp — nothing is scheduled, nobody stands by, nothing needs undoing if it goes wrong, and you run it again.

It looks like the pipeline rerun review, and it is not one

Both are about numbers being wrong in a data platform. If you have read that page the resemblance is worth putting side by side rather than glossing over, because the two answer genuinely different questions.

Pipeline rerun review This page
What disagrees One system with itself, between two runs Three systems with each other, about the same word on the same day
Whether anything is at fault Yes — a real defect, and it has a repair Often nothing. Each surface is correctly computing a different question
What is done to find out A load is run a second time on purpose, against a clone Nothing is run. Three figures that already exist are read and explained
What is written Rows, to a clone Nothing, anywhere, at any tier
The measurement Rows, expected delta against actual, per stage The gap, assigned line by line, with the remainder stated
What is asked of you May I run your load again? May I see your figures?
Where a cause lands Owns every pipeline-side cause, including a column that never arrived Names it, prices it, and hands it over. The fix is theirs

The second row is the honest one and it cuts against this page rather than for it. A perfectly real outcome here is that all three of your numbers are correct, they answer three different questions, and nothing needs repairing — in which case you have bought an explanation rather than a fix. The boundary between the two pages is in the subject matter and not in any shared code, and there is no finding on either side of it because neither page has one at all. If a cause turns out to live in your pipeline, this work names it and tells you what it is worth; repairing it is that page, and I will say so rather than quietly widening the job.

It is also not monitoring, and that boundary is closer than it looks

Hosted monitoring puts business numbers on a screen next to your infrastructure, deliberately — orders per hour, failed payments, signups. That page puts a number on a screen. This one asks whether the number on that screen is the same number as the one on the other screen. There is no shared code and no overlap in what is delivered: that one ends in something you log into, and this one ends in a document. If what you want is the number visible, go there instead.

Bulk document data extraction creates a dataset out of documents, and the deployment and rollback review is about releases rather than figures. Neither overlaps with this.

Four ways to take this

Every tier starts from the same measurement. The review fee is credited against whatever you take next, so nobody pays for the same work twice.

Metric Reconciliation

Everyone starts here. It also scopes everything else.

  • One metric across up to three surfaces, read as of one agreed moment
  • The bridge — every unit of the gap assigned to a named cause, and the unexplained remainder stated rather than absorbed
  • The definition sheet — where each definition lives, who can change it, what it counts, its grain and its clock
  • What already agrees, not only what does not. A pair of surfaces that ties is written down as tying
  • Nothing is written anywhere, and nothing leaves your environment but the bridge
  • Or you run every query and I do the arithmetic — same bridge, no access needed
Recommended

Reconciliation + Agreement

Not a starting point. Follows the reconciliation.

The tier where three numbers actually become one.

  • One written definition, signed off by a named person — the person, not the department, because a definition owned by a committee is owned by nobody
  • The surfaces changed to compute it, wherever the change is yours to make
  • The bridge re-run afterwards, so the agreement is proved rather than asserted. Included, not quoted separately — this is the only tier that measures itself twice
  • Causes that turn out to live in the pipeline are named and evidenced, then handed over rather than quietly absorbed into this job

Review fee credited — you pay the difference, not both.

Definition Baseline

Not a starting point. Follows the reconciliation.

The wider job, and a different one.

  • Everything in the agreement
  • The rest of the metric family brought onto written definitions — the siblings that will disagree next quarter for exactly the same reasons
  • The definition sheet extended across the family and put somewhere findable
  • A procedure for adding a surface without forking a definition, and handover so the next reconciliation happens without me

Review fee credited — you pay the difference, not both.

Monthly Reconciliation

Monthly. Because a definition agreed once is a definition nobody has edited yet.

  • The same bridge run each month against the current figures
  • Diffed against last month, so a remainder getting bigger is visible before a quarter closes on it
  • New surfaces caught as they appear — the definition sheet re-walked, not assumed
  • A one-page written record each month. A document, not something you log into — if you want the numbers visible instead, that is a different service and I would rather point you at it than half-build it here
  • Monthly in advance, cancel anytime, never auto-renewing

Four things about the packages, before you ask

  • The cap is one metric, one agreed moment, and up to three surfaces. One metric means one number with one unit and one grain — net revenue, per calendar month, in reporting currency. Revenue on its own is not a metric, it is a family. If two grains are in scope that is two metrics, and I will say so before quoting rather than after.
  • Three surfaces because it is arithmetic, not a sales limit. Comparing three things is two comparisons; a fourth surface is a third one, and it is quoted as such. Nobody is served by “and any other reports you have” on a page that then reprices halfway through.
  • Reconciliation + Agreement is the marked tier, and it is where most of this ends up. Not because it is the biggest — the reconciliation on its own hands you an explanation, and the agreement is what turns the explanation into one number everybody uses. It is also the only tier that measures itself twice.
  • The biggest thing that changes the size of a job is where the definitions live. A rule in a file can be read in minutes. A measure built by clicking, in a tool, by somebody who has left, cannot be read at all until we sit and look at it together — and that is a different shape of work.

What this does not do

Stated before the tiers matter rather than after, because a limit found afterwards is an excuse.

  • It does not tell you which number is right. It tells you what each one counts and what the difference is made of. Often none of them is wrong, and the answer is that three different questions were being asked by three different teams.
  • The remainder is stated, not eliminated. Some part of the gap normally stays unexplained. Naming it is the deliverable; promising it will be zero would be a lie, and you should be suspicious of anybody who does promise that.
  • A reconciliation is as of a moment, and the moment passes. Where the cause was a definition it keeps holding, which is most of the time. Where it was timing, it will move again tomorrow.
  • An agreed definition is not an enforced one. The agreement changes the surfaces that are yours to change and writes down the rest. Nothing stops somebody building a new report next month with a fourth definition in it.
  • Where a cause lives in your pipeline, this names it and does not repair it. You get the evidence and what it is worth. The repair is separate work.
  • This is not data quality testing, not monitoring, and not report building. It is one question answered with arithmetic.
  • It is not an audit and it is not assurance. A comparison between a warehouse figure and a finance figure can look like accounting work and it is not — I am not an auditor, this is not an opinion on your financial statements, and nothing here should be handed to anybody as though it were.

What I need before anything can be quoted

Most of this you can answer in the contact form in a couple of minutes, and the answers change the size of the job more than anything I could guess at.

  • Which single metric, stated with its unit and its grain.
  • Which surfaces — up to three — and where each definition physically lives. A file, a view, a measure in a tool, a spreadsheet. If the answer to any of them is “nobody is sure”, say so; that is useful rather than embarrassing.
  • Whether all three can be read as of one moment, or the honest answer that one of them cannot. That is not a problem — it is one of the answers.
  • The three current numbers, in writing, before anything is looked at. The gap between what people believe the figures are and what they actually are is part of the finding, and it evaporates if it is collected afterwards.
  • What each surface is believed to include and exclude, in your own words. This is regularly the moment two people discover they disagree, which is worth the ten minutes on its own.
  • A decision on masking, made before anything runs.
  • Whether any surface is reported externally — filed, audited, or sent to an investor, a lender or a customer. It does not make the arithmetic harder, but it raises the standard of evidence on every line.

Things this is not, and where they live instead

  • Building reports or dashboards. Report development is a different conversation, and putting numbers on a screen is hosted monitoring.
  • Building or modelling the semantic layer. The products are good and they are yours to adopt. This is what makes that decision possible, not a replacement for it.
  • Data quality testing — dbt tests, Great Expectations, Soda. Free, better than hand-written, and yours to install.
  • Repairing the pipeline — that is the pipeline rerun review, and the difference is in the table above.
  • Turning documents into a datasetbulk document data extraction.
  • Warehouse cost reduction, query tuning, and migrating between warehouses. Real work, not this page.

What I can show you rather than tell you: travel-etl-pipeline is a public repository — a serverless ETL pipeline for NYC travel data on GCP, ending in a Tableau reporting layer. Ingest, transform, warehouse, report. Read the code rather than taking my word for anything.

Tell me which number nobody can agree on.

There is no free checker to run first on this one, and I would rather say that than invent one. So the useful first step is the disagreement itself: which metric, which reports, and what each of them currently says. If it turns out the difference is one refund rule that somebody can point at in five minutes, you have saved a fee and I would rather tell you that than take it.

Prefer to talk? Book a free call ↗  ·  Or hire me on Upwork ↗  ·  Typical reply within one business day.

Questions

Will you tell us which of the three numbers is the right one?
Usually there is no right one, and a page promising otherwise would be selling you something the situation does not contain. What you get is what each number counts, what the difference between them is made of line by line, and what is left over after every line is accounted for. Once that exists you can decide which definition you want everybody to use — and that decision is yours, because it is a business question rather than a technical one.
Do you need access to our actual revenue data?
I need the figures, not the customers. The work is done on aggregates — totals, and a count for each explaining category at the grain of the metric. Row level comes in only where an aggregate cannot settle a line, and then it is keys rather than names, email addresses or amounts attached to a person. The queries run in your environment, nothing is copied out, and you decide what is masked before anything runs. Where something is masked, the bridge says so on that line rather than quietly leaving it out.
Will you change anything in our systems?
Nothing at all, at any tier. No table, no view, no scheduled job, no export. It is the only engagement on this site that writes nothing anywhere — every query is a read. If you would rather not hand over credentials at all, you run the queries and I do the arithmetic; on this particular piece of work that route is genuinely equivalent rather than a worse version, and it would be a sales tactic to pretend otherwise.
Could a language model not just compare our SQL and explain the difference?
It could compare the SQL, and it would do it well and in seconds. That is exactly why reading the definitions is not what this sells. A model can tell you that one query nets refunds and the other does not. It cannot tell you that the difference is worth 31,900 in the month you are arguing about, because that number does not exist anywhere until somebody computes it from your data. The arithmetic is the deliverable.
We are building a semantic layer. Does that not solve this?
It is the right thing to build and the products are good. But it does not tell you what your current numbers mean, and the first thing that happens after one ships is somebody noticing the new figure does not match last quarter. You cannot agree one definition until you know what the current ones are and what each difference is worth. The reconciliation is what makes that decision possible — it comes before the semantic layer rather than instead of it.
What if the answer is that nothing is broken?
That is a real and fairly common outcome, and it is worth saying plainly rather than burying: you may pay for this and get back "all three of your numbers are correct, here is what each one counts, and here is what every difference is worth". No repair, because nothing needs repairing. That still ends an argument that has been running for months, and it still hands you the definition sheet, which almost nobody has.
Will the two numbers tie exactly at the end?
Probably not, and I will not promise it. Some part of the gap normally stays unexplained, and the honest thing is to put that figure on its own line rather than folding it into the one above so the ends meet. A reconciliation that always ties perfectly is one somebody forced. What is promised is that the remainder is stated and you can see how big it is.
Is this monitoring, or a dashboard?
No, and that boundary matters enough to state twice. Putting a business number on a screen next to your infrastructure is a different service and it lives on the hosted monitoring page. This asks whether the number on that screen is the same number as the one on the other screen, and computes the difference. The output is a document. Nothing here produces anything you log into.
What do you need before quoting?
Which single metric, stated with its unit and its grain; which surfaces, up to three; where each definition physically lives; the three current numbers in writing before anything is looked at; whether all three can be read as of one moment; and whether any of them is reported externally. That fourth one does more work than it looks like — the gap between what people believe the numbers are and what they actually are is itself part of the finding, and it disappears if it is collected afterwards.