We are keeping this client nameless, for a reason that will be clear in a minute. It was a hospitality project, an analytics platform and data aggregator for the HORECA trade, and on first sight it was the kind of work you say yes to before the sentence is finished. Big, clever, real numbers moving through it. We loved it on contact, and that was the problem.
The bet
The build was a proper one. Advanced dashboards sitting on top of live data flows, prediction tools, profitability calculators, performance estimates, the clean math and economics we enjoy most. The founder came to us through a referral, handed over the data flow and a workflow the size of a small company, and asked us to turn all of it into something an operator could read and act on.
We looked at the volume and the ambition of the thing and got straight to work. It felt like the good kind of hard, the kind you are glad to have on your desk.
What actually happened
About three months in, the data flow started throwing errors we did not expect. Advanced anti-bot blocks, the sort you hit when the system on the other end has decided you are not a welcome guest. We looked closer, and the floor gave way. The data was being taken illegally. The aggregator was pulling from sources that had never agreed to hand anything over, and the blocks were those sources catching on.
Where we failed
Our contract said, in plain words, that we were not responsible for how the client sourced their data. That was true, and it is no excuse. We had spent three months building careful tools on top of a pile of stolen numbers and had never once asked the first question you are meant to ask. Where does this come from. Are we allowed to have it. It would have taken an afternoon, maybe a single email.
We did not check, because we were in awe of the scale of the thing and half in love with the build ahead of us. The shiny work in front of you is very good at hiding the plain thing underneath it.
We checked the math on every tool we built. We never checked where the numbers came from.
What it taught us
A clause in a contract protects you on paper. It does not give you back three months, and it does not make you feel clean about the work. What we should have done was boring and quick, and we skipped it for the oldest reason there is. The exciting part was right there, and the dull check stood between us and it.
Now the dull check comes first. Before we build anything on a client's data, we ask where it comes from and whether it is really theirs to give us, and we do not start until we like the answer. The most impressive project in the room is the one whose foundations are most worth a look, because impressive is very good at making you forget to look down.