We spend a lot of design effort on how data gets into a system — the forms, the validation, the transactional database quietly recording everything in neat rows. We spend far less on how it comes back out. And when the person who needs a weekly report is a loss prevention officer rather than a software engineer, "just use the API" turns out to be no answer at all.
In this episode, Andrea Magnorsky and Kenny Schwegler are joined by Kat Hempstalk, a data and AI professional who has been doing machine learning "since before it was cool." She brings what she calls "a bit of a tragic tale" from her time as head of data and AI at a company handling retail crime reports. Before she arrived, the company had solved the export problem by hiring a graduate to write Python and SQL scripts and email spreadsheets to customers by hand. It worked — until that person went on holiday and literally handed their laptop to a colleague so the reports could keep going out.
An engineer eventually received that laptop, thought "this is a bit scary," and added a little automation: a Windows VM, scripts synced through GitHub, scheduled tasks, files dropped into blob storage. The manual button-pressing stopped. The underlying problem just got faster to reproduce. Within a few years, three or four people spent their days copy-pasting scripts into 200 bespoke customer reports — reports that turned out to be five or six shapes wearing different hats. Collapsing them was the easy part. Telling customers their format was about to change, when the customer success team said "No, I'm out — I don't wanna give the customer bad news," was not.
This conversation is about where data engineering and software engineering stop talking to each other, and what leaks through the gap. We dig into invisible contracts (a column heading is an API), why the order you migrate customers in is an architectural decision that cost this team a year, what embedding data people into software teams actually requires, and Kat's discovery that most of the customers fighting to keep their scheduled email had never once opened it.
Key Discussion Points
Guest: Kat Hempstalk
Hosts: Andrea Magnorsky, Kenny Schwegler
Hello, and welcome Stories of Facilitating
2
:Software Design and Architecture.
3
:Today, I'm here with my usual conspirator,
Kenny, well as with a, a new conspirator,
4
:that is gonna join us for this event, Cat.
5
:Welcome, Cat
6
:Kathryn Hempstalk: Thanks, Andrea.
7
:Um, nice to be along to, to this podcast.
8
:Um, I am a data and AI professional,
so, I've been doing machine
9
:learning since before it was cool.
10
:And, my, career has largely been
about embedding AI into software
11
:products, so features that are
driven by AI behind the scenes.
12
:but today I really wanna talk about
a story that's about the intersection
13
:of, data and AI with software
engineering, and, a very common sort
14
:of challenge about, getting data
out of an application that, I think
15
:a lot of software engineers face.
16
:it's sort of a bit of a tragic tale.
17
:does have a happy ending, hopefully.
18
:so yeah, happy to share
that with you today.
19
:Andrea Magnorsky: Excellent.
20
:Well, we're very much looking
forward to that golf recount
21
:Kathryn Hempstalk: Cool.
22
:All right, so, um, this is a story
that actually started before I joined,
23
:my, company, AURA, that, I have been
working for as a head of data and AI.
24
:And, before I joined, they had, a
growing number of customers for their,
25
:product, which is on retail crime.
26
:so AURA takes, shoplifting
reports from, like supermarkets
27
:and big, big box retail stores.
28
:when someone comes in, they, they,
go to a shelf, they steal something.
29
:One of the staff in the store will
go and write a report and put it
30
:into the AURA platform, where it
will get sort of consolidated with
31
:other reports and, law enforcement
can come and, and look at this.
32
:And so as you can imagine, this is quite
a common problem around the world, and
33
:there's a lot of these reports happening.
34
:And when a retailer gets these, reports
into the system, they also want some
35
:mechanism to get the reports out of the
system, like, a way of downloading things.
36
:And I think as software engineers,
we often think about, transactional
37
:relational database stores as a way
of storing the information that's
38
:being entered in these reports.
39
:But when we think about getting the
information out of the platform, it's
40
:either in the UI of the application
itself, so being presented back to
41
:the users in some way, maybe like
on a one-on-one, "Here's the report
42
:that you entered," back at you.
43
:or it might be via an API, right?
44
:Where, you're giving a programmatic
way to, to grab large volumes
45
:of, of data out the platform.
46
:So, you know, give me all of the reports
that have been entered over the past day,
47
:week, month, whatever period of time.
48
:The, the problem with those kind
of approaches is that a lot of
49
:the users using these kinds of
platforms aren't software engineers,
50
:and they're not, experts at
working with APIs and databases.
51
:And, even if the APIs exist, they may
not know what to do with them, right?
52
:They…
53
:These people that we were, working with
were often loss prevention experts, so
54
:people who worked on the security side,
who were good at, accounting for all the
55
:sort of, shoplifting and other sorts of
crime events that might happen at stores.
56
:So they don't know about APIs.
57
:What they know is something like Excel.
58
:And so what they were wanting is,
basically a spreadsheet of all of
59
:the records that they'd entered.
60
:So, you know, the store staff are entering
records one by one, and at the end of
61
:each week, the team leads can go and
grab, a download of all the reports that
62
:have been entered over the past week.
63
:So before I joined, Aura they had
started, solving this problem of
64
:getting the data out in spreadsheets
by hiring someone who was, fresh out
65
:of university and just basically just
employing them to write some scripts,
66
:some, Python and SQL scripts that would,
export the data and, then they would
67
:manually email it to the, the customers.
68
:So not, not the greatest customer
experience if the customer, has
69
:to make a request, I want this
data in this, this format and, you
70
:know, getting it back via email.
71
:but the customers did get what they
were asking for, so they could actually
72
:customize the individual columns
and data and how it was filtered and
73
:how it was presented back to them.
74
:But as a startup grows and scales up and
acquires more customers, that becomes a,
75
:a problem that's limited by that person
running scripts, pressing the buttons.
76
:and, you know, I think they did
the best that they possibly could
77
:with the task in front of them.
78
:But, they, they knew the tools.
79
:They could write Python
and SQL pretty well.
80
:They didn't really understand how much
to automate beyond that, and because it
81
:was a small business and everyone was
super busy with, the company scaling
82
:up, there really wasn't the support
from the software side to kind of put
83
:some automation in behind the scenes.
84
:And what ended up happening was, when
that person would go away on holiday,
85
:they would hand their laptop over to,
to somebody else on the team, who would
86
:then press the buttons to s- send out the
reports at, at the right kind of time.
87
:And, very fortunately, an engineer, was
one of those people who was given that
88
:laptop and sort of went, "Ooh, this,
this is a bit scary to have a very
89
:manual process as part of the system."
90
:So, they decided to put a
little bit of automation in.
91
:So they spun up a, virtual
machine, a Windows remote,
92
:um, remotely accessed desktop.
93
:They, used GitHub to sync all of
the scripts into, that desktop
94
:machine, and then they used, Windows
Schedules Tasks to basically fire
95
:off the scripts at a given time.
96
:And then they wrote a
small piece of software.
97
:we were using, Microsoft Azure.
98
:And so, what they would do is, put the
output CSV spreadsheet files onto Azure
99
:Blob Storage, and assuming that the path
had the right sort of information in it,
100
:it would actually just get automatically
emailed out as a link, to, the customer.
101
:So, um, effectively, there was no
more manually pressing buttons.
102
:There would be a schedule that
would go out at a given time of day.
103
:And as the business continued to
grow, it still became an unmanageable
104
:problem, and they hired more people
to basically cut and paste each of the
105
:scripts, make a new version that was
that customer's customized version of,
106
:a report and manual, um, manually send,
107
:set the schedules so that it was
sent out at the right time of day.
108
:You know, some customers would
want it at 5:00 PM at night.
109
:Some would want it first
thing in the morning.
110
:Sometimes it was daily,
weekly, fortnightly.
111
:You know, different sort of cadences
and, and timings for all of it.
112
:so by the time that I, I joined Aura,
they had had this team working on it for,
113
:a few years, and it had grown to sort
of three or four people whose day-to-day
114
:was basically cutting and pasting these
scripts, modifying them a little bit,
115
:and Very scary if something was wrong
with one of the scripts and you found
116
:out with one of the later copies that
you made, and you'd want to go back down,
117
:the path to see where it had come from.
118
:And I think just all round just a
bit of a tragedy for everybody that
119
:the analysts weren't happy because
they weren't doing anything that
120
:was really using their brains.
121
:It was cutting and pasting and, you
know, not to their, to their skill set.
122
:The, customers weren't happy because
they had to wait a long time if they had
123
:a change because there was so much work
in the pipeline that if they said, "Hey,
124
:can you just add this extra column?"
125
:Sounds simple in practice, but when
you've got, you know, a backlog
126
:of other customers asking for that
thing, you know, there's gonna be time
127
:involved in getting that out to them.
128
:And I think not great for the business
either if you're scaling and you're
129
:gonna have to add a person every time
that you're adding, more and more,
130
:customers and scripts to the system.
131
:So when I joined, I was asked
to do a couple of things.
132
:So I, I mentioned my background
is AI, and that was one of the
133
:tasks that, I undertook initially.
134
:But the other side of things was adding
a data warehouse, partly to support
135
:that AI side of things, but also partly
to support what that, insights team
136
:were doing for those manual reports.
137
:Um, so how that, um, initially got built
was, um, we had a secondary server,
138
:so a, a mirror of what our production
server was, and we, had the reports
139
:initially running off that, server.
140
:So they weren't impacting production.
141
:But that caused its own problems, right?
142
:That you've got a secondary server, you're
not gonna pay for production transactional
143
:SQL Server the same size as what your main
customer thing is just for that one task.
144
:And so it meant that actually
it took a long time for some
145
:of these reports to run.
146
:So not only do you have them, very
manually managed, but there's also
147
:a big risk that they could fall over
because something might time out, right?
148
:And some of our customers were
really big customers and entering
149
:in thousands of reports in a day.
150
:And so what you would find is that it
might take a couple of hours to run
151
:a report, and if another report was
attempted to run in that time, there was
152
:a good chance that it could fall over.
153
:And so, you know, people were spending
nights and, and weekends trying to,
154
:keep the thing up and running, as well.
155
:And so, yeah, the data warehouse presented
an opportunity to, to start to change
156
:that, I think, because, it was something
I think the software engineering teams
157
:weren't so interested about, because
they were focused mainly on, on the
158
:platform at the time and, and building
new features into the main, main part.
159
:And where their heads were at
with the data warehouses, it,
160
:it's something that's used for
internal analytics that, um, uh…
161
:and th- this isn't, um, strictly
an internal analytics problem.
162
:It was being solved by a team that would
typically do, um, that kind of analytics,
163
:but, um, you know, uh, in a different way.
164
:And one of the cool things about the, the
modern data warehouse technology that's
165
:around, we were using Snowflake, but
BigQuery and, the things like, Databricks
166
:where you can, get some of the power
of data warehousing out of a bunch of
167
:tools, that are, are wrapped together.
168
:They, they're really good
at the analytics workloads.
169
:Like, what they're built for is
big SQL joins, big aggregations
170
:across vast amounts of data.
171
:And what's really neat about some
of the, managed ones like Snowflake
172
:and BigQuery is that you don't have
to think too much about the indexing
173
:and, how to organize that data to
really get that power out of it.
174
:That the magic of the platform is that
they do all that behind the scenes.
175
:So we could take a query that would,
take a couple of hours to run on this
176
:SQL secondary server with a few joins
in the mix, and it was, you know, less
177
:than a couple of minutes to run on the
smallest possible compute on, something
178
:like Snowflake just because it's the right
tool for that kind of task and, and job.
179
:when we first put in Snowflake, I
actually had one of the insights, folks
180
:come up to me, and it was a real moment
when I thought, "Oh, they've, they've
181
:finally understood how this can help
them," when they said, "Oh, I ran this
182
:big query and, you know, it normally
takes a couple of hours, and I thought
183
:I'd done something wrong because it
came back, you know, almost immediately.
184
:And then I realized I
had done something wrong,
185
:that I'd even forgotten to filter
it, so it had d- gone over the
186
:whole data set, not even just the
little chunk that I was after."
187
:And so they were just astounded
it could work that fast, to…
188
:Yeah, s- just absolutely
mind-blowing to, to them at the time.
189
:So, so that was a, a real sort of
win and the initial step that we
190
:took was actually just moving the
SQL onto the, the data warehouse.
191
:So same queries, same data structures,
but now it's running faster 'cause
192
:the compute is, is designed for that.
193
:and over time, we built, I guess,
views and materialized tables
194
:within that data warehouse where
it's layering it up to have, more
195
:of those joins just done for you.
196
:So the data's pre-prepared.
197
:When you go to it and run the query,
it's going to, not require you to
198
:think about the dozen or so tables
that might need to come into the mix.
199
:It's just a single table that's already
got the information formatted into it.
200
:and we use DBT to do that,
which is an infrastructure as
201
:code tool for data warehousing.
202
:So you write SQL queries and it, puts
them all into, tables and such for you.
203
:so that worked quite nicely, but we
still had 200 of these custom reports
204
:that were being run for, um, you
know, lots of different customers.
205
:So, what the team started to do was
realize because they'd been cutting
206
:and pasting things, it was actually
maybe, like, five or six sort of
207
:main reports that they were running.
208
:And actually, they could consolidate those
200 reports down to the, the five, or
209
:so, templated versions of those, reports.
210
:So a standardized version, change it
in one place, it changes for everybody.
211
:what that does mean is that customers
might get more data than what
212
:they were expecting before, right?
213
:Because you, some might have only had a
few columns, but the templated version
214
:has, has extra ones in them, that you try
and give the, smallest version that works
215
:for everybody, out of, out of doing that,
that kind of template And where, um, it
216
:became a real, um, challenge for us to, to
navigate was actually the customer side.
217
:You know, having the conversations with
the customers to go, "Okay, so you've
218
:been getting these custom reports, and
we've been firing them off to your email.
219
:and you know, it's been falling over all
the time, but we want to make it robust.
220
:But in order to do that, we
also need to template it.
221
:So actually, you're gonna get the
data in a slightly different format.
222
:You're gonna have to change your own
systems that are, reading from that data
223
:and using it in, in different ways."
224
:and some of the customers just
go, "No, we don't, we don't
225
:have time for that," you know?
226
:And when you're a growing company, it's,
often the customers unfortunately that do
227
:dictate, you know, where, you, you spend
the time and, when you can do a thing.
228
:So you might have a great plan,
as we did, to, you know, move
229
:the customers in tranches off the
reports and, you know, navigate them
230
:onto the, the templated versions.
231
:And, you know, we'd have to push the
dates out or move them to a different
232
:tranche of, of people, just because
they didn't have the capacity to, to
233
:deal with it from, from the other side.
234
:at the same time, one of the
cool advantages that, the data
235
:warehousing, tools provide now is
the capability of data shares, like
236
:direct data shares often within the
same data warehousing technology.
237
:So, one trick we decided to, to do with
a few of the bigger customers who had
238
:really big, volumes of data that, you
know, they're not gonna want to spend
239
:time downloading a CSV file, regularly.
240
:And we weren't sending the CSV
files as, attachments to emails.
241
:They were sent as a link that
they would then download off the
242
:platform, but you know, it could
still be quite a large file.
243
:using these data share, capabilities
meant that we could actually create
244
:a copy of their data within our
data warehouse that was just their
245
:data, but in a set of tables that,
that were really well-defined,
246
:and they could get those live.
247
:Like, if they were using Snowflake
like we were, it would be live.
248
:If it, if they weren't using
Snowflake, then we could dump it out
249
:to, something like BigQuery could
pick up and just load straight in.
250
:So it meant that actually there was…
251
:it was possible to get a whole
lot of automation in there.
252
:I think as an engineer going back to
the, "Oh, well, they could have used
253
:the APIs to, to do that," well, one,
our APIs at the time didn't quite
254
:have the capability to, to pull it
out, in the way we would have liked.
255
:so they couldn't have used our
APIs to do that at the time.
256
:But assuming that they were, a lot
of data people really like dealing
257
:with snapshots of data, so they don't
want to, necessarily have an endpoint
258
:that they're gonna have to query and
think about how they're querying that.
259
:But, um, often, it will still be
spreadsheets and, CSV files or, a
260
:folder full of CSV files if it's
multiple tables of information.
261
:that is something that they can
inspect directly and go, "Yes, it's
262
:got the whole day's worth of data."
263
:They can deal with all the duplication
that might happen if, there's
264
:overlap between the time zones.
265
:Um, but, you know, the, the idea of
programmatically querying an endpoint
266
:doesn't always come naturally,
in the data engineering space.
267
:And, you know, there are tools
out there that, people sell that
268
:make their money on the fact that
people don't want to deal with APIs.
269
:there's lots of tools that people will
charge money for that's basically,
270
:you know, here is the platform, get it
from this source to this destination.
271
:You make magic happen.
272
:Here's my key to, to make it work.
273
:Yeah.
274
:And here's a bunch of money
to, to, to keep it going.
275
:And you know, it just,
just happens magically.
276
:And, and there's nothing wrong
with that approach, whatsoever.
277
:but a lot of the customers that
we were dealing with, wouldn't
278
:necessarily have the funds to, to do
that, sort of API, querying piece.
279
:and even if they did, wouldn't
necessarily have the expertise
280
:or the time to pick it up.
281
:So we're very much wanting data
files, one way or the other.
282
:So w- we created two, two options out
of that data warehouse by having those,
283
:reports available as CSV files and then,
as the, the direct downloads as well.
284
:So story's not over yet.
285
:There's more to, to this, to this tale.
286
:So we started to migrate the
customers off the customized versions
287
:and onto the, the templated bits.
288
:but we still had scheduled tasks
running on a virtual machine that wasn't
289
:really being updated as we would've
liked, didn't have all the security on
290
:it that we would've liked, and would
fall over, particularly on public
291
:holidays, as we often found when no
one's around to, turn it back on again.
292
:So, we undertook moving, it into a
self-service element of the platform.
293
:So actually just giving people the ability
to press a button in the platform and say,
294
:"Hey, I want this version of this report,
and give it to me for this date range."
295
:And then went back to all the
customers and said, "So you
296
:know how you've been getting a
scheduled version of that report?
297
:Well, now you can go and
get it whenever you like.
298
:but also we're gonna turn off the
schedules, by the way, 'cause, you
299
:know, we don't, we don't really think
that, they're in anyone's interest.
300
:and That largely went okay.
301
:There was definitely a few customers
that pushed back and said, "No, I like
302
:getting that email in my inbox, thank you
very much, and I'm an important customer,
303
:so please keep that up and running."
304
:And then you realize that most of them,
when you look at the email tracks that,
305
:that you might get out of, the, the
tooling that, that's sending emails
306
:that actually they've not been opened,
they, they haven't clicked on it.
307
:They just want the confidence that
that data is there if they wanted it.
308
:and so you end up having conversations to
prove to them that they're still getting
309
:the data the way that they want it.
310
:It will always be there.
311
:It will always be accessible through
the self-service and through the data
312
:shares, and they don't, they don't need
to have lots and lots of links in their
313
:email, just for safety sort of, reasons.
314
:the other thing that we ended up doing
was, as part of that, getting it into
315
:the platform side of things, is we built
an Azure Function that, would pull the
316
:data directly out of the data warehouse.
317
:so there was no need to have individual
Python scripts running, that Azure
318
:Function was kicked off through,
Airflow, which is a very common
319
:tool in the, data engineering world.
320
:Um, I think it came out of Netflix or
something like that, um, many years ago.
321
:But, it's an orchestration layer,
so, you know, something happens at
322
:a given time, sequence of events.
323
:And in this case, it was, you
know, where do these, files need
324
:to go when they press this button?
325
:Or, with the schedules that were sometimes
still running on the platform, at this
326
:time of day, this person gets this
email, and we gradually deprecated those.
327
:where we, we, we kinda got to was
having a, platform that meant that,
328
:yes, there, there was an API, and yes,
there was the ability to look up the
329
:data from the UI within the platform.
330
:but there's also these two
options with the data sharers
331
:and those reports being able
to be downloaded by, you know,
332
:non- non-technical people.
333
:and the next phase of that, was to
start building, semantic layers.
334
:So using the data that's there,
provide ways that, agentic systems
335
:and humans can query that data and get
the meaning of the data alongside it.
336
:So, you know, understanding it, not
just a spreadsheet with a bunch of
337
:column headings and, rows that you can
actually, reason over the data as well.
338
:Um, and so that- that's kind of
where I, I left it with Aura.
339
:I've since moved on, from that role,
and the team are continuing the fight.
340
:But I am pleased to say that before
I finished up, that they had,
341
:turned off the reporting virtual
machine that had been the, thing of
342
:nightmares for, anyone on support.
343
:And, all of those custom reports were now
sort of self-service, multiple different
344
:ways of getting data in the application.
345
:And, I think it's very happy ending
to that journey even though it took us
346
:probably about two years, to g- to get
there, where at least one year of that
347
:was just that transitioning onto the
templated reports for the customers.
348
:You know, working through in tranches
and spending time with them, helping them
349
:change their scripts and understand, what,
what they were getting and looking at.
350
:and it's a very common pattern, I
think, for software that when you
351
:put it in, any sort of app, you're
expecting the data that you put in you
352
:own, you should be able to get it out.
353
:And there's even regulations in
the world, you know, GDPR has,
354
:requirements to be able to, get the
data out for access requests and such.
355
:And so, I think if we'd, as a company,
been more aware of that upfront, maybe
356
:it hadn't started with a little bit of a
sad tale of someone doing a lot of manual
357
:work, that maybe some of the upfront how
we're gonna export data out might have
358
:come in earlier and sort of saved a whole
bunch of, frustration for a lot of people.
359
:But we got there in
the end, which is good.
360
:Hooray.
361
:Kenny Schwegler: Thanks.
362
:Yeah, so, um, lots of
bits and pieces, in there.
363
:my first thing is the, what we didn't
touch upon before in the recording
364
:is with the customers, right?
365
:That was a whole, whole thing because
early on you just try to implement every
366
:request from a customer because you're a
startup and a scale-up, so you're like,
367
:"Oh, we need to keep this customer happy."
368
:And then later on, I hear is like,
"It's not, it's not doable anymore.
369
:We need to go more to a
product mindset," right?
370
:It's the product versus customer I guess.
371
:how did you start off these, these
conversations with these clients, right?
372
:Did you first start it off or did you
first this is how we want it and then
373
:s- kick off with the c- with the client,
374
:Kathryn Hempstalk: Yeah, it was
375
:Kenny Schwegler: a whole
playing field there
376
:Kathryn Hempstalk: Yeah, it was a
really big challenge at the time.
377
:we had a customer success team, so
customer support, they would be the
378
:people who usually talking backwards
and forwards to the customers.
379
:And they would be the ones that would
get the requests for, changes to
380
:the reports even though they weren't
the team that would action it.
381
:And what was fascinating to me when
we said we wanted to start templating
382
:these reports and migrating the
customers over, that we thought
383
:that that would be, you know, a, a
better way to approach the problem
384
:long term, is actually the customer
success people said, "No, I'm out."
385
:Like, "I'm s- I don't wanna
give the customer bad news.
386
:This is not gonna be … You
know, I'm, I'm there to support
387
:them and make them happy.
388
:I want them to, to be feel that,
everything that we do is for them
389
:and successful, and this feels
like we're gonna tell them that
390
:they can't have something that
they've been having for a while."
391
:so, it was kind of actually put back
on us and, we, we deliberately started
392
:with customers that we thought were
friendly to, to kinda help with,
393
:with that, pathway, and framed it,
not so much of a this is, this is
394
:our problem, but, you know, this is
actually improving the world for you.
395
:Right?
396
:That you're gonna get standardized data.
397
:It's gonna be, available more frequently,
more reliably, and, you don't have to
398
:wait two months whenever there's a change.
399
:We'll notify you because there's a
standard format that, that's going in.
400
:And if we do this, we can actually
make it self-service in the platform
401
:so you can get it whenever you want.
402
:You don't have to rely
on the email to do it.
403
:And actually, that sold most of
the customers o- on it, right?
404
:That, actually they were very happy with
the idea of self-service, and over, you
405
:know, maybe a handful of people who, it
was definitely the minority of customers
406
:that wanted to keep the emails going
and they wanted their customized formats
407
:that, you know, they had a way about doing
things and little bit adverse to change.
408
:I think if I was recommending for
other people who might be going down
409
:this path, I think it was good to
start with the easy customers to give
410
:us some confidence and some momentum.
411
:I think it was the more challenging
customers that were more resistant
412
:that actually meant that it took a
year, and if we'd started with them
413
:earlier on in the process, we could
have shortened up some of those t-
414
:timelines, because they were the ones
that were pushing back and saying,
415
:"No, I can't do it until this date."
416
:And so it meant everybody was delayed
waiting for the, for the things, uh, those
417
:customers to be ready, rather than if we'd
dealt with them upfront even though it
418
:would've been a hard conversation to have.
419
:Especially without feeling that
momentum on some of the easier
420
:customers, it would've actually moved
faster for everybody, along the way
421
:Kenny Schwegler: That's
what we usually don't see.
422
:I had that epiphany at some point,
is that I guess these larger
423
:customers use it in their own
integration maybe as well, right?
424
:I've seen this happening as a software
engineer when I was thr- three years in.
425
:I just changed the library, which
changed, like, the, the, the layout,
426
:and all of a sudden I got these requests
like, "My report is, is, is, screwed up.
427
:There, there's an o- other title and
now the rest isn't working anymore."
428
:I'm like, "You're using that
for your further integration?"
429
:"Yes."
430
:"Oh."
431
:So I guess that's the
struggle to find out, right?
432
:That we usually don't that I think
you mentioned it at the start, right?
433
:These people know Excel,
so they, they would
434
:Kathryn Hempstalk: Yeah.
435
:And, and the kind of tools that
they're using is, will ingest
436
:typically Excel, CSV-type files,
so the structured data files.
437
:but depending on the tool that they
could use, they could struggle with
438
:columns appearing in a different order.
439
:so we actually had, some custom
fields that, I guess were
440
:attributes about some of the sites
where shoplifting was happening.
441
:And this, these were
customer-defined things.
442
:And so if they added a new
attribute, it would come through
443
:as a new column in, in the report.
444
:And then we'd get an email to
say, "You've changed the format."
445
:And it's like, "No, you changed the
format 'cause you added this extra thing."
446
:And so one thing that we were really
careful to do when we moved to the
447
:templated version is anything that had
the ability to, to change the order
448
:of the columns or the add a column by
itself actually became a nested field.
449
:So you would actually have structured
JSON or, or the likes within that
450
:field, which can still be read by a
lot of the, the main sort of tools.
451
:think like Tableau, Power BI, if
they were, taking it out of Excel
452
:and, and putting it into a platform.
453
:For the customers that, I guess were more
power users and they had sort of experts
454
:behind the scenes, they were taking the
data shares, and then they would mix
455
:those data shares with their own data.
456
:So, um, for example, we would have
information about what had been stolen.
457
:We wouldn't have information
about what had been sold.
458
:And so they might want to do a
report that, has those two numbers
459
:in it, and so they're getting their
sales data from a different system.
460
:They're wanting to take those, tables
that we've given them and join them
461
:up against that sort of sales data.
462
:So, um, yeah, there was lots of,
possibilities about, if we changed a
463
:report when it's custom, because they
were defining the fields, they were
464
:getting it in the same order, the
same fields, and just those fields.
465
:As soon as it's a template, you have to
think about even the order of the columns.
466
:Um, you know, changing a column
heading name will break everything.
467
:And so, we ended up getting really
good also at, sort of the, details
468
:about the changes to reports.
469
:So, giving people warning about
470
:Andrea Magnorsky: yeah, I was
471
:Kathryn Hempstalk: how we've got-
472
:Andrea Magnorsky: if you were
gonna version the reports out, like
473
:if that was a way to kinda say,
"Well, you're in version 1.0.235.
474
:version two's available.
475
:You can basically find the same report,
but you hit this different endpoint, and
476
:Kathryn Hempstalk: Yeah, it's
actually very unusual to, to version,
477
:I guess, CSV files in that way.
478
:Like, I know from a software
engineering perspective, you know,
479
:there's different versions of APIs
and, and, bits that you would talk to.
480
:what we tended to do was say,
"Hey, we've got this change
481
:coming out in a month's time.
482
:You know, aim for the start of
the month for, for new change.
483
:Um, it's available to you in our, test
systems from now, so if you want to, you
484
:know, grab a copy and, see what it might
look like, you can go, go and do that.
485
:but also, here's a list of all the changes
that we think are breaking changes or
486
:could be breaking changes from your side."
487
:You know, a column that might
no longer be, provided into
488
:the system, was a typical one.
489
:So, a- and we, we ended up doing
that a lot initially, and then as the
490
:reports, got, got more comprehensive and
probably a little bit tidier as well.
491
:So one of the things we did on that path
is removed all the personally identifiable
492
:information out of the reports.
493
:Andrea Magnorsky: The PIR
494
:Kathryn Hempstalk: you know, when
you're dealing with shoplifting,
495
:you've got people's names, you know,
witnesses, victims, and you don't
496
:want that to end up in a big file
that, anyone can possibly look at if
497
:they've been sent an email with it.
498
:You want it to be protected by
the platform and auditable as
499
:to who's seen that information.
500
:So, the early on r- custom reports,
because people could say what they
501
:wanted, we would give them what they
wanted, and when it's a templated
502
:version, you would have to have make
some sort of concessions on that.
503
:And it turns out, you know, most
of them didn't really want or need
504
:that extra identifiable information.
505
:It was just convenient to, to have it, and
when you talk to them about it, they would
506
:have that realization of, "Oh yeah, if
something bad did happen, you know, gosh,
507
:yeah, that's gonna be bad for not just me,
that's gonna have a bad day out of that.
508
:It's gonna be a whole lot of other people,
509
:Andrea Magnorsky: Yeah, especially
if your market includes, those
510
:countries that really like suing
companies as a way of business.
511
:Kathryn Hempstalk: Yep
512
:Andrea Magnorsky: It's funny, you
mentioned a couple of things that I
513
:really would like to hear more about, and,
one of them is, you kinda talked about
514
:contracts in different ways as, like,
what I think about as a, as a contract,
515
:and between, like, you and the customer
in the CSP file, a- about the APIs.
516
:And I was wondering, in this story, you
basically talk about the boundaries of the
517
:data system and the software system, and
I kinda am really curious about how you
518
:conceptualize and think about in general.
519
:'Cause I find that, data people and
software and I don't wanna even give
520
:much more brand names than that, I
think we kind of tend to think about
521
:them in slightly different ways.
522
:And, and, uh, and this is to the detriment
of both of us, because, if we could have
523
:something a little bit more standard
that talks about the needs of data
524
:and the needs of software engineering,
as in, like, those boundaries are
525
:there, you know, like, Clear fences
make, good neighbors, that thing.
526
:Kathryn Hempstalk: Yes
527
:Andrea Magnorsky: that's not
happening, then it creates confusion
528
:and, a lot of extra work, and, well,
some of it, surfaces in your story.
529
:So I'd love to hear your take on not
just what happened, because I think
530
:you kinda explained some of it, but how
you're thinking about it these days.
531
:Kathryn Hempstalk: Yeah.
532
:It, it's an interesting one because
I think, most software engineers and
533
:data engineers, you're right, are
typically thought of in separate circles.
534
:That, the, the data people are busy
looking after databases and indexes and
535
:SQL and optimizing it, and yeah, and
then data engineers will be pipelining
536
:from that to, you know, getting it
into the, the data warehouse and
537
:transforming it and aggregating it.
538
:And, I think traditionally a lot
of those aggregations had been done
539
:for internal purposes, like, you
know, how many customers do we have?
540
:What are those customers
doing in, in the application?
541
:And that, that side of things.
542
:I think those boundaries are
becoming more and more blurred as
543
:the, data warehousing and other
tools become more and more capable.
544
:And how we kind of, broached that, at,
at, at Aura was, whilst my team was
545
:largely data people and would work with
software people, we actually ended up
546
:embedding some of the data people into
the software engineering teams to try
547
:and build those relationships, and
get some of the information early of,
548
:"Oh, hey, we're changing this database
field, and that's gonna affect the data
549
:warehouse downstream," and then all the
reports and anything in the application.
550
:And then on the, the flip side, "Hey,
we've made this new aggregation in the,
551
:the data warehouse, and now those elements
in the interface can be, you know, so
552
:much more, quicker or more interactive."
553
:And we actually ended up embedding
the data warehouse, um, results, if
554
:you like, into the platform directly.
555
:So, um, there's tooling.
556
:We used, CubeJS as an interface
layer between, the C# application
557
:and the, data warehouse.
558
:that meant the software engineers
didn't need to write SQL per se, that
559
:they could just say what sort of fields
that they wanted and filters on the
560
:data, and Cube would automatically
work out the SQL that was needed.
561
:and it was basically querying it
from the data warehouse instead of
562
:the transactional database simply
because it was faster, more efficient
563
:to do it, that, you know, you've
got a big load of data that's being
564
:queried via the data warehouse.
565
:The transactional store just wasn't
geared up for those kinds of aggregations.
566
:So I think we bridged that, by
putting the teams together and
567
:making them feel like they're,
hopefully more cohesive as a group.
568
:Andrea Magnorsky: That's
569
:Kathryn Hempstalk: it, it's still-
570
:Andrea Magnorsky: collaboration pattern.
571
:Kathryn Hempstalk: Yeah
572
:Andrea Magnorsky: it has the, the, the…
573
:It's like how do you taper it off?
574
:'Cause you wanna kinda do that
possibly temporarily if you…
575
:Yeah, I'm kinda thinking with team
topologist in my head, and I'm
576
:thinking, oh, well, if I, if I was
thinking of doing that as a kind of
577
:way to build a bridge, at some…
578
:It would be like, hey, let's
do this for insert time box.
579
:You know, some reasonable time
depending on the problem, N
580
:months, you know, N, N weeks.
581
:But you kinda say, okay, we'll
start there with this and see.
582
:You're gonna evaluate halfway through
and see whether we need more or
583
:less time, and then kinda taper
it off, as- so that the risks, and
584
:eventually, well, what is the contract?
585
:Or what the collaboration model, what
should the collaboration model be?
586
:but, do you think that that
would be how, or do- did you
587
:wanted to keep this forever?
588
:Kathryn Hempstalk: So it actually
depended a bit on the teams.
589
:So some of the teams were working
more on, the data, data heavy sort
590
:of, tooling, and so they, they would
want a particular expertise in their
591
:team, so a data engineer or someone,
with the kind of skill set to pipeline
592
:and, really write good decent sort of
SQL queries and how things are joining
593
:and the data is modeled appropriately.
594
:So they might say, "Hey, I want this
person actually permanently assigned
595
:to my team for the, for the long term."
596
:That's what's gonna help this team go
fast, is having someone who's got a foot
597
:in the camp of software engineering, but
also is part of that, that data team.
598
:We also found that there were teams
that were more, sporadic with their,
599
:their needs from a data perspective, and
so they might need a machine learning
600
:engineer for a couple of months for a
project, and when the project is done,
601
:maybe there's some responsibility on
that machine learning person to, you
602
:know, keep an eye on what that system is.
603
:But it's not the day-to-day build
integration, you know, building
604
:the monitoring, the pipelines,
that, that side of things.
605
:And so we'd put them together for the
time that was relevant and then, move
606
:them on and make sure that the data team
ha- continued those responsibilities.
607
:And probably the thing that we didn't do
especially well, at, at least at first,
608
:was perhaps having the conversation of
what, what goes with that person when
609
:they leave and what stays with the team.
610
:Because there was definitely a few
times when we had people who'd been
611
:in a team, they've moved out of the
team, and something would break in that
612
:system and- No one would know, right?
613
:It might be the
614
:Andrea Magnorsky: will look
615
:Kathryn Hempstalk: customer who
said, "Did you know this, this
616
:thing was, was broken," right?
617
:And it was because no one had had the
conversation of, okay, what happens?
618
:Who's now responsible?
619
:Who does it go to?
620
:And, what we eventually started to do was
push everything to the product managers,
621
:for those software engineering teams
as the first point, and then have the
622
:product manager engage with the right
sort of person that, you know, they
623
:could be the one to figure out, "Oh, I
think this is a problem with the, the
624
:software side," before it gets into the
data pipelines or machine learning piece.
625
:Or they would go, "Oh, something's
broken in the algorithm.
626
:We'll go straight to the
machine learning person."
627
:And I think one of the cool things I,
I particularly found at Oura, and I've
628
:had it in other businesses as well, is
it had a really collaborative nature.
629
:So, you know, people who weren't an
expert would jump in to help out.
630
:usually once you realized that there
was a challenge there, everyone was
631
:willing to jump in and help out and
see that thing through to being solved.
632
:There was none of this, "Oh, well,
it's not my problem, it's somebody
633
:else's problem," um, side of
things, and that was really nice.
634
:And I appreciate you don't always get
that in, some companies that you work for,
635
:but I've had the pleasure of working in a
company that was really good on that side.
636
:Kenny Schwegler: I want to make
one comment because this is a
637
:challenge I see, and I've been
in a lot of discussions, right?
638
:We have the PO that's usually busy
with the user and the needs, and I
639
:have this in my company now as well.
640
:I hear it from engineers.
641
:But then there's downstream teams, like
the machine learning team or other teams,
642
:that are also sort of like stakeholders,
and team topology says you don't want
643
:to really have an excess of service
with another team or whatever, right?
644
:But, that's like competing goals, and I
think this is what you just mentioned.
645
:I just wanted to make
this out as a comment.
646
:This is like one of the
challenges that teams face, right?
647
:And one thing you notice is pushing
it to the PO, and I think a PO should
648
:be much more responsible for their
data as a product a way, right?
649
:Knowing like we…
650
:This is my data.
651
:This is my responsibility as a PO,
and I know there's downstream teams
652
:who depend on it, and I also need
to, know and understand that field.
653
:So I just wanted to make
that as a general comment.
654
:I see that POs are much more busy
with the user needs, like the users
655
:itself, but these are also users.
656
:You're the ones using data, like the
machine learning team or like downstream
657
:teams are also users in a way and that
whole field is, can only be solved by
658
:what you mentioned, like the facilitative
aspect, the collaborative aspect.
659
:So I like that comment.
660
:I, I wanted to make that, uh,
661
:Kathryn Hempstalk: Yeah,
no, that's awesome.
662
:I, I think one of the things that I been
thinking about in the, I guess, agentic
663
:era of, software engineering, where,
you know, you're working with, large
664
:language models who might be doing some
of the coding for you, is those skills
665
:and collaboration and being able to share
the, the contracts and the boundaries
666
:and your expectations actually helps
you immensely with dealing with agents.
667
:Because, you know, just telling them
to do a thing doesn't give them the
668
:context that they need, and the people
that I've seen do really, really well
669
:early out of that sort of new approach to
programming have been the people who've
670
:been great at building relationships,
good at, you know, thinking about how
671
:they're gonna collaborate with their
peers and what information they need
672
:to share to, you know, give that person
the best chance of, succeeding as well
673
:Andrea Magnorsky: On that amazing
note, I'm gonna wrap it up for today.
674
:Thank you so much, Kat,
for an amazing story.
675
:I think I have about 100 questions that I
still want to ask, but, I think we took,
676
:way longer than we thought, of your time.
677
:So thank you, and see
you next time, friends.
678
:Goodbye
679
:Kathryn Hempstalk: Most welcome.
680
:Thank you