learn-asking-right-questions-as-de-with-phoebe / Session 2 of 6
Learn Asking the Right Questions as a Data Engineer with Phoebe · Session 2 of 6

Every system a number passes through

Door 4, data state, is your widest door, and the one Adeline cannot answer in your words. She has never heard of change data capture and never will. She does know that Priya pulls 38 files off the till system every Monday, that the bookkeeper in Kuala Lumpur sends one export a month, that there are three stock spreadsheets and Priya trusts the one on her laptop, and that Kenneth is the only person who can get into the POS. Those facts are the lineage. Tonight is how to get them out of her in plain words: where each number was born and how it reaches you, how mature the habit around each system is, and who owns, logs in to and reads each box, drawn as a map she can correct before you move a single row. The other five doors live in the corridor.

🟡 Core Data engineers, and anyone asked to "connect the systems" No code. A pen. 45 min
0-3 · Welcome 3-18 · Four origins, the ladder, owners and copies 18-40 · Build-along: the lineage map 40-45 · Q&A
Part 0

Where we start

An engineer asked about data state reaches for a system diagram, and a person who runs 38 pharmacies hears an audit. Harbourline's data state is not a diagram yet. It is a set of facts about people and calendars: a till records every sale, a bank settles cards two days later, a bookkeeper exports once a month because the contract says so, a person pastes 38 files into a spreadsheet on Monday, and a copy on one laptop is treated as the real one without anyone having said so. Every one of those facts is a plain question away. The three parts tonight are three kinds of plain question: where each number comes from, how mature the habit around each system is, and who owns, logs in to and reads each box. The build-along draws the answers as the lineage she can correct.

🎫 Clear all three quiz questions to stamp your passport Live = presented in the 45 minutes Self-study = the full depth, after class ★ Build-along = write it yourself

★ What you walk out with tonight. A one-page lineage map for a request you actually have: every number on the pack traced through every system it passes through, each hand-off drawn, an owner, a login holder and a read frequency on every box, the copy somebody has declared real (or the word "nobody"), and the one question you send it with: "which arrow is wrong?". Session 3 puts the same facts on the bench: the one key on the map is worth 4 points on the sheet, and it sits behind the highest trust gate there is.

Part 1 · covers where each number comes from

Recorded, typed, or not recorded

5 min live

The first data-state question is not "what systems do you have". It is "where does this number come from", asked once per number on the pack. An analyst gets three answers: recorded by a system as a side effect of work, typed by a person, or not recorded anywhere. An engineer needs a fourth, because it is the one a pipeline inherits: exported by a person, on a schedule. At Harbourline that is Priya's 38 CSVs every Monday and the bookkeeper's one export a month, and both of them are calendars you will be building on whether you asked about them or not.

EVERY NUMBER SHE ASKED ABOUT, TRACED TO WHERE IT WAS BORN four origins; the fourth is the one a pipeline inherits THE NUMBERS SHE ASKED ABOUT Sales by outlet on the Monday report, for the GM Stock on hand three copies in circulation Supplier orders placed no number anywhere Finance's revenue month-end, booked by working day 5 RECORDED by the till a side effect of every sale product codes differ, SG and MY TYPED into a spreadsheet three copies; Priya treats one as real who types it, and when: not asked yet NOT RECORDED anywhere supplier orders go over WhatsApp there is no order table EXPORTED by a person, on a schedule bookkeeper in KL, once a month, by contract and Priya, 38 CSVs every Monday, off the till An export is a hand-off with a person and a calendar in it. The pipeline inherits both.
🔍 Click to zoom - the teal origin is the one an engineer inherits: a person and a calendar sitting between a system and everything you build
LiveFour origins, and the question that finds them3 min▶

Take the month-end pack and the Monday report and go down them one number at a time. For each, ask the bank's question g05: "How is the report made today? Show me the file, and tell me who builds it." with its teach-back said first: "The current file is the spec. Every step done by hand is a step I have to reproduce exactly before I can improve it." She does not need to know what a source system is to answer. She knows that Priya downloads one CSV per outlet on Monday, 38 files, pastes them into a spreadsheet, and that a macro somebody wrote in 2019 merges them. Six hours.

The four answers carry four different builds. A number recorded by a system arrives on its own, in the same shape every time: sales at the till, one cloud POS vendor, a CSV per outlet, product codes that differ between Singapore and Malaysia. A number typed by a person arrives when somebody types it, in whatever shape they typed: the stock spreadsheet, in three copies. A number not recorded cannot be moved at all until somebody writes it down: supplier orders go over WhatsApp and there is no order table anywhere. And a number exported by a person on a schedule arrives as often as that person and their calendar allow: Priya's Monday files, and the bookkeeper in Kuala Lumpur, who exports once a month.

Say the fourth case out loud when you hear it, because it is the one a pipeline silently inherits. You can schedule a job to run every hour; it still reads a file that changed once a week or once a month. Ask g19 next: "How often does each system get exported today, and by whom?" with "How often a system is read today is a ceiling I inherit until a contract or a login changes it." At Harbourline the ceiling on finance's side is written into a contract: one export a month, and more is a contract change. That is a data-state fact, not a legal footnote, and it is why "pull everything daily" is a sentence you should never say before you have asked.

Self-studyWhy data preparation eats the project, quoted as it stands2 min▶

Two sources are usually run together into one number, and they should not be. In 2014 Steve Lohr reported in The New York Times that data scientists spend 50 percent to 80 percent of their time collecting and preparing data before it can be explored. In 2016 CrowdFlower's data science report found respondents spending 60 percent of their time cleaning and organising data and a further 19 percent collecting it. Two sources, two methods, two shapes of answer: one a range for collecting and preparing together, the other two separate figures. Quote whichever you use as it stands, and never fold them into one cleaning figure taken from the top of Lohr's range, because nobody measured that number.

The point for door 4 is the reason behind both. Preparation time is mostly the cost of the typed, the absent and the exported: reconciling three stock copies, finding out that refunds live only in the accounting system, discovering in week three that the finance export you planned to read nightly exists once a month. Every minute spent asking "where does this come from, and how does it reach you" is a minute not spent in week three finding out the hard way.

Real world

The refunds nobody would see. A constructed case, but the shape is common. Asked "where does finance's revenue number come from, step by step?" (g06, with "Two numbers built along two paths usually disagree about timing long before they disagree about truth."), Adeline walked the path: bank settlements into the accounting system, cards landing two days late, cash deposited weekly. Then, almost as an aside, she added that refunds are processed in the accounting system and the POS never sees them. A pipeline that copied the POS nightly into a warehouse would have been on time every night and short by every refund, forever. The number was recorded, just not in the system anyone was planning to read.

Part 2 · covers the maturity ladder, asked per system

Five rungs, as questions

5 min live

Once you know where a number comes from, the next thing is how mature the habit around each system is: whether it is done the same way each time, whether anyone wrote that way down, whether anyone checks. DAMA-DMBOK's maturity model gives five level names for exactly that. She never hears the names. She hears five plain questions, and you ask them per system, not per company, because one company holds several rungs at once. At Harbourline the till sits well above the stock spreadsheet, and the Monday merge sits at the bottom. The ladder in full depth is in the analyst's session 2; tonight is the engineer's reading of it.

FIVE RUNGS AS QUESTIONS, ONE READING PER SYSTEM rung names from DAMA-DMBOK; the questions are ours; each tag is a reading from her answers 5 Optimized 4 Managed 3 Defined 2 Repeatable 1 Initial / Ad hoc "Has it got better on its own in the last year?" "Does anyone check afterwards whether it was right?" "Is any of it written down?" "Is it done the same way every time?" "When the number is wrong, who fixes it, and does anyone find out?" Adeline, asked per system the till ledger export stock sheets Monday merge Till: same way every sale. Merge: fixed by hand, no log. Two rungs in one company, and no rung 0.
🔍 Click to zoom - the teal tag is the merge Priya fixes by hand without telling anyone, and it is the rung your pipeline would be copying
LiveThe ladder, asked per system3 min▶

DAMA-DMBOK, 2nd edition, chapter 15, names five levels of data management maturity: Initial/Ad hoc, Repeatable, Defined, Managed, Optimized. Five, not six: DMBOK has no level 0. The names are the whole of what is borrowed, and they are reported from summaries rather than read from the book. The questions beside each rung are ours, written so a person who runs pharmacies can answer them about her own systems.

Ask them once per box on the map. The till: it records every sale the same way, so it is at least rung 2; whether anything about it is written down is a question you have not asked yet, so you do not place it higher. The ledger export: the bookkeeper sends it once a month by contract, the same way each time, rung 2 on what you know. The stock sheets: three copies in circulation and none declared real, rung 1. The Monday merge: 38 files pasted by hand and a macro somebody wrote in 2019, and the bottom-rung question gets the decisive answer, asked as g20: "When a number in the report is wrong, who fixes it, and does anyone find out?" Priya fixes it by hand in the spreadsheet; nobody is told; there is no record of what changed. Rung 1.

Write the rung beside each system in your notes and never tell her the number. "Your merge is a 1" is a grade, and a grade ends a conversation that was going well. What the reading gives you, as an engineer, is where the pipeline must not start: never copy the lowest rung faithfully and call it done. A job that reproduces the Monday merge on a schedule reproduces the silent fixes too, or loses them, and either way the number changes without a record. The real assessment, with the practices behind each level, is a governance discipline, taught in the Governance 101 course; in a discovery meeting the ladder is an interview aid and nothing more.

Self-studyTwo other frames, one line each2 min▶

Joe Reis and Matt Housley, in Fundamentals of Data Engineering (O'Reilly, 2022), describe companies as starting with data, scaling with data or leading with data, reported here from summaries rather than a page. Harbourline is starting with data: one recorded source, one person who assembles the report, a bookkeeper on a monthly contract, and a request that is really a request to be able to answer an auditor. Whatever you propose should fit a company at that stage, which rules out most of what a platform vendor would propose.

Leandro DalleMule and Thomas H. Davenport, in "What's Your Data Strategy?" (Harvard Business Review, May-June 2017, reported), ask whether a company needs a single source of truth or several fit-for-purpose versions of the truth. Harbourline has both problems by accident: the POS and finance are two versions of revenue built along two paths, and the stock sheet is three versions of one thing with no agreed copy. The frame is useful because it names a choice. A company can decide to run two versions of revenue on purpose, one for Monday and one for the auditor; it should not discover it has.

Real world

The silent fix. Constructed, and typical. Adeline answered the rung-2 question about the Monday report with "yes, Priya does it every week", which sounds Repeatable. The bottom-rung question, asked next, got a pause and then "well, if something looks off she just corrects it". Nobody is told, and nothing records what changed. The teach-back for that question says why it matters to an engineer in one line: "A silent fix is a second source of truth. I would rather have a wrong number with a log than a right number with no history." The week you automate the merge, the corrections stop, and the Monday numbers change in a way nobody can explain, because nobody knew they had been changing all along.

Part 3 · covers owners, logins, the one key and the real copy

Owners, logins, the one key, and the real copy

5 min live

The last data-state facts are about people. Who can say yes to an export, who can actually log in, how often each box is read, and which copy somebody has declared real. At Harbourline the vendor API has never been used by anyone; the accounting system belongs to an outsourced bookkeeper whose contract allows one export a month; refunds exist only in accounting; three stock spreadsheets circulate and the one Priya treats as real lives on her laptop; and one person, Kenneth, holds the only POS admin login. Kenneth is leaving in January, and she has not told the team.

EVERY SYSTEM ONE NUMBER PASSES THROUGH, AS SHE CAN READ IT owner or login and how often read on every box; one key; one hand-off nobody has described the till (POS) one cloud vendor API: never used SG and MY codes differ read: Monday CSV export the one key: Kenneth dashed: nobody has said how a sale reaches the stock sheet bank settlement cards land 2 days late cash deposited weekly owner, login: not asked the ledger bookkeeper in KL refunds exist only here exports once a month finance's number booked by working day 5 more exports: contract read: monthly the POS export 38 CSVs, one per outlet pulled by Priya, Mondays read: weekly Priya's merge pastes 38 files in 2019 macro merges them fixes: by hand, no log the Monday report the GM asks every Monday feeds Tuesday reorder read: weekly stock sheets, x3 3 copies in circulation owner, login: not asked read: not asked yet Priya's laptop copy Priya treats it as real declared real: nobody the question you send with it: which arrow is wrong? Every box names a person, or says "not asked". She can correct a box; she could never correct a schema.
🔍 Click to zoom - the teal tag is one login held by one person who is leaving, and every row on the map starts behind it
LiveEvery hand-off is a place the number changes2 min▶

The map starts with one question, g08: "Which systems does one sale touch, from the till to the bank to the ledger?" Say the teach-back first: "Every hand-off between systems is a place a number can change. I am counting the hand-offs." She can answer that without knowing a single technical word, and she answers in order: the till, the bank settlement, the ledger the bookkeeper keeps. That row alone explains most of the two percent: card settlements land two days late, cash is deposited weekly, and refunds exist only in the ledger. Two numbers built along two paths, disagreeing about timing before truth.

Then ask the same question of the Monday side and you get the second row: the till again, 38 CSVs pulled by Priya, her merge, the report. Notice what you do not get. Nobody has told you how a sale on the till ends up as a line in the stock spreadsheet: whether someone counts shelves, types from the till, or copies from last week. Draw that hand-off dashed and label it unknown. A dashed arrow on the map is not a gap in your drawing; it is the next question you ask.

LiveThe key, asked by name, after trust2 min▶

Question g09 has to be asked with a name in the answer: "Who can log in to each of those, and pull an export?" Teach-back: "Access is the first blocker on most data projects, so I ask early and I ask by name." "IT can" is not an answer. "Kenneth can, and only Kenneth" is, and it is the answer that makes you ask what happens in January.

Kenneth's leaving date does not come out on the first question, whatever you ask. On the bench it sits behind a trust gate of 3, the highest on the sheet: she volunteers it only after enough open questions, each with its reason said aloud, have shown you are helping her and not auditing her, and every jargon question you ask on the way takes a point of that trust back. It is worth 4 points on the sheet, as much as the outcome itself. That is why the widest door is not the first one: one outcome question first, the month-end and Monday walk-throughs, the systems and the stock copies, and then the login, by name. Ask it cold and you get "our IT guy". Session 3 shows which meeting orders reach it in 45 minutes.

Self-studyDeclare the real copy before you move it2 min▶

Question g11: "Where do the stock numbers live, and which copy is the real one?" Teach-back: "A file that exists three times has no real copy until someone declares one. I need that declared before I move it anywhere." At Harbourline the answer is three spreadsheets in circulation and one on Priya's laptop that she treats as real. Treated is not declared. Nobody with the authority to say so has said it, which means the day your pipeline picks one, you have declared it for them, silently, and the other two copies keep being edited by the people who think theirs is the one.

The same logic runs through every box. The vendor API is a fact about the vendor, not about Harbourline: it exists and nobody has ever used it, so it is a possibility, not a source. The loyalty data sits with the app vendor and an export costs extra and needs a contract clause (g12: "Owned means who can say yes to an export. That is usually a contract, not a login."). The bookkeeper's one export a month is in her contract. Each of those is a data-state fact with a signature on it, and each sets a ceiling on your pipeline that no schedule can lift.

Real world

The API nobody has used. Constructed, and common. The vendor's brochure says the POS has an API, and an engineer who hears "API" starts designing the integration before the meeting is over. Asked plainly who can log in and pull an export, Adeline said Kenneth, and only Kenneth, and that nobody had ever touched the API. Asked whether they had tried to connect the systems before, she said a vendor integration project two years ago stalled the week Kenneth went on leave and never restarted. The API is on the map, in the till box, with "never used" beside it. The one key is next to it. The last attempt already showed where this one would stall.

Build-along

Draw the lineage from her answers

★ 22 min · everyone writes

One page, drawn by hand, from answers a business person gave in plain words. Take the request you brought from session 1, or Adeline's if you did not bring one, and draw the lineage you will send her within a day of the meeting: every number on the pack, every system it passes through, every hand-off, and on every box an owner, a login, how often it is read and which copy is declared real. Nothing on it is a schema. Every arrow is something she can correct.

THE BLANK LINEAGE, WITH THE SIX QUESTIONS THAT FILL IT the till (POS) login: Kenneth only read: weekly, Mondays hands off to: 38 CSVs declared: not asked system 2 system 3 the number on the pack IN THE MARGIN 1 Which numbers, in her words? 2 Which systems, in order? 3 Owner and login, by name? 4 How often is each read? 5 Which copy is declared real? 6 "Which arrow is wrong?" the line you send it with One number, one row of boxes. If a row needs more than six boxes, split the number, not the page.
🔍 Click to zoom - one box is filled to show the depth: a login by name, a read frequency, the next hand-off, and whether its copy was declared

List every number on the pack, in her words. Not the tables you would design; the numbers she reads, and who reads them. Each line on this list becomes one row of boxes on the map.

★ Step 1 · the numbers she reads1. Revenue for month-end: finance's number, booked by the fifth working day 2. Revenue as the POS shows it: the other number, about two percent away 3. Sales by outlet, Monday: which outlets are down (the regional GM's question) 4. Stock on hand: from the stock spreadsheet

One row of systems per number, in the order the number travels. Ask "which systems does one sale touch?" and write the boxes left to right as she names them. Beside each row, write the question that found it, so you can repeat it next time. Say the teach-back first every time; it is why she answers step by step instead of "from the system".

★ Step 2 · the path of each numberFinance revenue till -> bank settlement -> ledger (bookkeeper) -> month-end pack Found by: "which systems does one sale touch, from the till to the bank to the ledger?" POS revenue till -> POS export Found by: "where does finance's revenue number come from, step by step?" (the contrast) Sales by outlet till -> 38 CSVs -> Priya + 2019 macro -> Monday report Found by: "how is the report made today? Show me the file" Stock on hand till -?-> stock sheet x3 -> Priya's laptop copy Found by: "where do the stock numbers live?" The -?- hand-off: NOT DESCRIBED YET

Owner and login on every box, by name. "Owner" means who can say yes to a change or an export. "Login" means who can actually get in. They are often different people, and one of them is often nobody. Write the name, or "nobody", or "not asked"; never a department.

★ Step 3 · owner and login, by nameTill (POS) vendor: one cloud POS admin login: Kenneth (only) leaving January, team not told Vendor API exists used by: nobody, ever Bank settlement not asked not asked Ledger outsourced bookkeeper, KL export: once a month, by contract; more = contract change Stock sheets x3 not asked Priya's laptop copy is the one she treats as real Product master owner: nobody two outlets renamed products themselves last year Loyalty app the app vendor export costs extra + a contract clause

How often each box is read today, and by whom. This is the ceiling you inherit. Write the frequency the box is actually read, not the frequency you would like, and write the decision it has to reach in time.

★ Step 4 · read frequency against the decisionTill -> POS export weekly, Monday, by Priya feeds: reorder decision, Tuesday noon (weekly is fine) Bank settlement cards 2 days late; cash weekly feeds: finance's revenue (the two percent) Ledger export monthly, by contract feeds: month-end, needed by day 3, checked by day 5 Stock sheets not asked feeds: not asked

Mark which copy is declared real, and by whom. For every box that exists more than once, write the copy somebody with the authority to say so has declared real. If nobody has, write "nobody" in capitals. That box is your first proposal, before any pipeline: somebody declares a copy, and then you move it.

★ Step 5 · the map, as it goes in the email +------------+ +-------------+ +-------------+ +--->| bank |-->| ledger |-->| finance's | | | cards +2d | | KL, monthly | | number | | +------------+ +-------------+ +-------------+ +-------+--------+ | till (POS) | +------------+ +-------------+ +-------------+ | login: KENNETH |-->| 38 CSVs |-->| Priya+macro |-->| Monday | | [the one key] | | Mondays | | no log | | report | +-------+--------+ +------------+ +-------------+ +-------------+ : : (how? not described yet) v +------------+ +---------------------------+ | stock x3 |-->| Priya's laptop copy | | | | declared real by: NOBODY | +------------+ +---------------------------+

Ask which arrow is wrong. Not a summary, not a proposal, not a data model. One sentence that says what the map is and asks her to correct the arrows, sent within a day while she still remembers what she told you. The arrow she corrects is the one your pipeline would have got wrong.

★ Step 6 · the covering lineHi Adeline, here is every place I understood a sale travels before it becomes a number; which arrow is wrong?
The same email, as it is usually sentHi Adeline, please find attached the proposed ingestion architecture: CDC from the POS into a bronze layer, a nightly ledger sync, and a reconciled revenue mart. Let me know if you have any questions.

Declare, then move. A pipeline that copies an undeclared file makes the disagreement faster, not smaller. The map makes the declaration her decision, on one page, before anything runs. Session 5 turns the "nobody" boxes into the first joint project; session 6 folds the corrected map into the one-page brief.

Homework

Before session 3

30 min
  1. Draw the lineage for your own request. Every number on the pack, one row of systems per number, every hand-off drawn. Any hand-off nobody has described goes in dashed and labelled unknown; that is the question you ask next.
  2. Find the one key. Somewhere on your map is a login, a laptop, a contract or a person that a whole row passes through. Mark it. Write down what happens the week that person is away.
  3. Write the read frequency on every box. How often it is read today, by whom, and the decision it has to reach. Circle any box where the frequency is set by a contract rather than a schedule.
  4. Bring the map to session 3. The bench prices every fact on it, and you will see which boxes most meeting orders never fill.
Check yourself

Three questions

Clear all three and session 2 gets stamped in your passport.

1 · Three stock spreadsheets are in circulation and Priya treats the one on her laptop as real. Why does a copy have to be declared real before you move it?

"A file that exists three times has no real copy until someone declares one." Treated is not declared. The declaration is her decision, which is why it goes on the map before anything runs.

2 · The bookkeeper's contract allows one export a month, and more is a contract change. Why is that a data-state fact and not a legal footnote?

It is both a constraint and a data-state fact, and at door 4 it is the one that decides your design: "pull everything daily" is wrong before you have written a line.

3 · Kenneth holds the only POS admin login and is leaving in January. Why does that fact only come out once trust exists?

Ask who holds the admin login cold and you get "our IT guy". Ask it after the walk-throughs, with the teach-backs in between, and you get the name and the date. On the bench it is worth 4 points behind a gate of 3.

Sources covered

What this session teaches, and where it came from

✓Five maturity level names: Initial/Ad hoc, Repeatable, Defined, Managed, OptimizedDAMA International, DAMA-DMBOK, 2nd ed., Technics Publications, 2017, ch. 15; reported from summaries. DMBOK has no level 0. The interview question beside each rung, and the reading per system, are ours, not DAMA's
✓50 percent to 80 percent of time collecting and preparing dataSteve Lohr, "For Big-Data Scientists, 'Janitor Work' Is Key Hurdle to Insights", The New York Times, 17 Aug 2014; quoted as a range, as printed
✓60 percent cleaning and organising, plus 19 percent collectingCrowdFlower, 2016 Data Science Report; two separate figures, never combined with Lohr's range into one number
◐Starting with data, scaling with data, leading with dataJoe Reis and Matt Housley, Fundamentals of Data Engineering, O'Reilly, 2022; reported from summaries, chapter not confirmed so none is cited
◐Single source of truth versus multiple versions of the truthLeandro DalleMule and Thomas H. Davenport, "What's Your Data Strategy?", Harvard Business Review, May-June 2017; reported, body paywalled
◐Harbourline and Adeline TanConstructed. The POS vendor, the bank settlement timing, the bookkeeper's contract, the 38 Monday CSVs, the three stock copies, Kenneth and the vendor API are typical, not sourced; every value is printed in the bench's bank file
◐How a sale reaches the stock spreadsheetNot in her answers, so not claimed: drawn dashed and labelled unknown on every map on this page. Who types the stock sheet, and when, is likewise not asked yet

Every fact on this page, and its verification tier, is recorded in the course's source map.

Session 2 cheat sheet · pin this

Four originsRecorded by a system, typed by a person, not recorded, or exported by a person on a schedule. The fourth is the one a pipeline inherits.
Read frequency is a ceilingA daily job still reads a monthly export. Contracts and logins set freshness before schedules do.
Five rungs, per systemWho fixes it · same way every time · written down · checked afterwards · better on its own. Names are DMBOK's; no rung 0.
Count the hand-offs"Which systems does one sale touch?" Every hand-off is a place a number changes. An undescribed one is drawn dashed.
The key, by name, after trust"Who can log in, and pull an export?" Asked cold you get "our IT guy"; asked later you get Kenneth and January.
Declare, then moveTreated is not declared. Put "declared real by" on every copy, then send the map: "which arrow is wrong?"