The cheapest data stack in the world is the one you already own: Excel, some Python, a shared drive, and a BI tool somebody's license already covers. Twenty-five dollars a month, give or take. I want to take that option more seriously than most vendors do because for a lot of readers it's the right answer, and because the ways it stops being the right answer are quiet, gradual, and expensive.
This is the DIY entry in our comparison series, and the series rule applies: credit first, boundaries stated, numbers with method.
Where DIY genuinely wins
If you are one technical person doing a one-off analysis of a semester of data, a single site investigation, or an exploratory look at a new instrument, then the DIY stack isn't just acceptable, it's probably the cost of your education. Python and pandas are magnificent tools. Excel has more installed seats than any analytics platform will ever see, that's not nothing. You already know them, there's nothing to procure, and when the analysis is done you close the laptop and owe nobody anything. We use these tools ourselves. Anyone who tells you a platform beats a script for a one-off is selling something.
The critique that follows is about a different situation: ongoing monitoring. When data keeps arriving from more than one instrument vendor, and more than one person needs to trust the data. That's where the free puppy comes home.
The free puppy
A DIY stack is a free puppy. The acquisition cost is the least interesting number about it; the ownership cost is the story. And unlike the puppy, nobody warns you that the ownership costs of a data stack don't arrive as vet bills, they arrive as your own calendar, fifteen minutes at a time.
Somebody reformats the logger export whose columns moved after a firmware update. Somebody maintains the script, and its Python environment, and the machine it runs on. Somebody rebuilds the dashboard when the schema shifts. Somebody fields "why does March look weird?" and spends an afternoon discovering the answer is a timezone. Each task is small. The sum is a job. In our cost model an environmental scientist's loaded rate is about $59 an hour, meaning the ≈$42 base rate plus roughly 40% for benefits and overhead, and a mid-size network of about a dozen sensors consumes roughly 26 hours of this work a month. The $25 stack ends up with costs about $1,559 a month. That's 62 times the sticker. The full arithmetic, line by line, is in its own post; here's the shape of it.
These are estimates, and I'd rather you argue with them than accept them: swap in your own hourly rate and your own hours. In our experience the hours are the number people underestimate, because nobody logs them. They're the shadow payroll of a "free" stack. They show up as a salary line that never appears in any budget, paid in the most expensive currency a science team has: its scientists' attention.
And there's a cost the hourly model can't capture at all: the bus factor. In most DIY setups, exactly one person understands the pipeline, the folder structure, the script's quirks, why the 2023 files need the other parser. When that person changes jobs, goes on leave, or simply forgets, the stack doesn't degrade gracefully; it becomes an archaeology site. I've watched teams lose a season of momentum to a departed postdoc's undocumented notebook. No invoice records that either.
The quieter failure: the defaults fabricate data
The labor bill is the visible cost. The one that worries me more is silent. To combine instruments that report on different clocks, every DIY pipeline eventually reaches for the standard moves: resample().mean(), a forward-fill, a pivot that fills the blanks. Each of those, by default, manufactures readings in the intervals where a sensor was actually offline. The gap, the most diagnostically interesting feature in the record, the thing that tells you about the outage, the dead battery, the fouled probe is quietly replaced by plausible-looking numbers.
This isn't a bug in pandas; the documentation is perfectly clear about what filling does. Forward fill works "by propagating the last valid observation forward," by design. It's a default aimed at a different job. But defaults are destiny in a busy team, and the DIY stack's defaults are wrong for environmental data in a way that no amount of diligence fully patches, because the diligence has to be re-applied in every script, by every author, forever. We've written a whole post on why gaps are data; the short version is that a platform for this domain has to preserve them structurally, not by convention.
What replacing the puppy actually looks like
Datasparks' pitch against DIY is not "our tools are better than Excel." It's that the recurring jobs on that shadow payroll become platform features. The vendor-export reconciliation becomes a mapping you configure once in the connector wizard, aliases for the columns, fallbacks and overrides for what's missing, and reuse on every subsequent file. The resampling-script question becomes a variant setting: raw data always keeps an untouched observed series, and any harmonized view carries an explicit gap tolerance beyond which the record stays empty. The "is this number right?" conversation becomes a quality ruleset, written once, applied across datasets, with a permanent record of which rules ran on what. The emailed CSV becomes a data product with versioning and freshness tracking.
On the same mid-size network, our meter runs about $65 a month in our model, plus somewhere under an hour of your team's attention. No base fee. The free allowance doesn't expire. Around $115 all-in, and not zero: I don't believe any vendor's "zero-effort" claim and you shouldn't either. But it's the difference between owning a dog and visiting one.
When to keep the stack
The boundary, stated plainly. Keep DIY when the work is a one-off, when a single person owns it end to end, or when the dataset is small enough that "redo it from the raw files" is an acceptable recovery plan. Those are real and common cases. The switch earns itself when three things become true at once: the data keeps coming, more than one vendor's instruments feed it, and more than one person has to trust the output. That's the point where the puppy is grown, eats a salary, and bites your gaps.
One practical note for anyone at the boundary, because it's the objection I hear most: switching doesn't mean abandoning your files or your history. The stack you'd be leaving produced CSVs and exports; those upload. The free allowance is permanent and doesn't ask for a card, so the experiment costs an afternoon, not a commitment. Bring one messy vendor export and see what the connector wizard does with it.
If you're there, or close enough to wonder, run the total-cost-of-ownership arithmetic in the companion post with your own numbers. One honest look at last month's calendar usually settles the question better than any comparison post can.