[{"data":1,"prerenderedAt":410},["ShallowReactive",2],{"blog-stop-calling-that-excel-file-a-database":3},{"id":4,"title":5,"body":6,"date":395,"description":396,"extension":397,"featured":398,"meta":399,"navigation":400,"part":401,"path":402,"seo":403,"series":401,"stem":404,"tags":405,"tldr":408,"__hash__":409},"blog\u002Fblog\u002Fstop-calling-that-excel-file-a-database.md","Stop Calling That Excel File a Database",{"type":7,"value":8,"toc":381},"minimark",[9,13,26,33,36,42,45,50,53,59,75,90,94,97,102,105,108,114,120,124,127,130,135,140,144,147,154,163,172,176,179,185,195,201,210,220,224,227,249,252,259,283,286,292,302,308,312,319,340,343,355,361,364,367],[10,11,12],"p",{},"For the past few weeks I've been helping small companies automate their workflows and analyse their data. Credit modelling here, data pipelines there, the usual. And I keep running into the same thing.",[10,14,15,16,20,21,25],{},"These aren't struggling startups. They have flowing income. Real clients. Real revenue. Some of them are ",[17,18,19],"em",{},"crushing it"," on paper. But ask them where their data lives and they'll point you to a share drive full of Excel files with names like ",[22,23,24],"code",{},"client_data_v3_final_FINAL(2).xlsx",".",[10,27,28,29],{},"No single point of truth. No unified system. Just spreadsheets. Everywhere. ",[30,31,32],"del",{},"Sound familiar?",[10,34,35],{},"And I get it. Excel is comfortable. You open it, you type stuff, you make a chart, you feel productive. But here's the thing:",[10,37,38],{},[39,40,41],"strong",{},"Your Excel file is not a database.",[10,43,44],{},"It's not even close. And the fact that you've been using it as one is the reason your \"client_data_v3_final_FINAL(2).xlsx\" exists in the first place.",[46,47,49],"h2",{"id":48},"what-a-database-actually-is","What a Database Actually Is",[10,51,52],{},"Think of it this way. A spreadsheet is a whiteboard. You can write anything anywhere, erase it, overwrite it, and nobody's stopping you. It's flexible. It's fast. And it's completely untrustworthy.",[10,54,55,56,25],{},"A database is a filing cabinet with rules. Every drawer has a label. Every folder has a slot. You can't put a client record in the claims folder. You can't file the same client twice. Two people can access the cabinet at the same time without losing anything. And if someone tries to file something wrong, the cabinet says ",[17,57,58],{},"no",[10,60,61,62,65,66,69,70],{},"That's the whole difference. A spreadsheet ",[17,63,64],{},"trusts"," you. A database ",[17,67,68],{},"protects"," you. ",[30,71,72],{},[39,73,74],{},"And based on what I've seen, you need protecting.",[10,76,77,78,81,82,85,86,89],{},"The technical terms for this are ",[39,79,80],{},"constraints"," (rules about what data is allowed), ",[39,83,84],{},"relationships"," (how different pieces of data connect to each other), and ",[39,87,88],{},"concurrent access"," (multiple people using the same data without breaking things). You don't need to remember those words. Just know that a database has them and Excel doesn't.",[46,91,93],{"id":92},"the-three-you-should-know","The Three You Should Know",[10,95,96],{},"There are hundreds of databases out there, but three dominate. Each has a purpose. Knowing which one to reach for is half the battle.",[98,99,101],"h3",{"id":100},"sqlite-the-one-that-lives-in-your-pocket","SQLite: The One That Lives in Your Pocket",[10,103,104],{},"SQLite is a database that lives inside a single file. No server to set up. No configuration. No IT department needed. You create a file on your computer, point a program at it, and it just works.",[10,106,107],{},"It's already everywhere — your phone uses it, your browser uses it, your operating system uses it. You just never noticed because it works quietly in the background.",[10,109,110,113],{},[39,111,112],{},"Use it when:"," You're building a small tool, a personal project, or anything where one or two people need to work with structured data. If you're a developer building a CLI tool or an analyst with a modest laptop SQLite is probably your answer.",[10,115,116,119],{},[39,117,118],{},"Skip it when:"," You've got dozens of people hitting the database at the same time from different servers. SQLite is a single-writer — great for most things, but not for high-traffic applications.",[98,121,123],{"id":122},"mysql-the-one-that-runs-the-internet","MySQL: The One That Runs the Internet",[10,125,126],{},"MySQL is the workhorse. It's the database behind WordPress, which powers about 40% of the web. If you've ever visited a website, you've probably interacted with MySQL without knowing it.",[10,128,129],{},"It's a proper client-server database — meaning you set it up on a machine (or in the cloud), and multiple people and applications connect to it over a network. It handles thousands of simultaneous users, supports backups and replication, and has been battle-tested for over 30 years.",[10,131,132,134],{},[39,133,112],{}," You're building a web application, an internal tool, or anything where multiple users need to read and write data at the same time. MySQL is the safe default. Hosting is cheap, the tooling is mature, and it's good enough for 99% of use cases.",[10,136,137,139],{},[39,138,118],{}," You need advanced analytical features or complex data types. MySQL can do a lot, but when you start pushing into heavy analytics or flexible data structures, you want Postgres.",[98,141,143],{"id":142},"postgres-the-one-that-does-everything","Postgres: The One That Does Everything",[10,145,146],{},"PostgreSQL is the Swiss Army knife of databases. It's open-source, it's powerful, and it has features that the others simply don't.",[10,148,149,150,153],{},"It handles relational data (tables with relationships), but it also handles ",[17,151,152],{},"flexible"," data — think JSON documents stored right alongside your structured tables. It supports complex queries, full-text search, custom data types, and basically anything you can throw at it.",[10,155,156,158,159,162],{},[39,157,112],{}," You're building something complex. Financial systems, analytics platforms, credit modelling, anything where the data relationships are non-trivial. If you're doing analytical work (",[30,160,161],{},"which I've been doing a lot of lately","), Postgres is where you want your data.",[10,164,165,167,168,171],{},[39,166,118],{}," You just need something simple. If you're building a todo app or a personal tool, SQLite is lighter and easier. Postgres is overkill for small projects — but it's never the ",[17,169,170],{},"wrong"," choice.",[46,173,175],{"id":174},"why-excel-fails","Why Excel Fails",[10,177,178],{},"Let me count the ways.",[10,180,181,184],{},[39,182,183],{},"No concurrency."," Two people open the same Excel file? One gets read-only. You email it around? Now you've got five copies and nobody knows which is current. A database handles this transparently. Hundreds of users, simultaneous reads and writes, consistent data every time.",[10,186,187,190,191,194],{},[39,188,189],{},"No constraints."," Type a negative number into a premium field? Excel doesn't care. Type \"asdf\" into a date field? Excel will ",[17,192,193],{},"silently convert it to a date"," (December 30, 1900, because of course it will). A database rejects invalid data at the point of entry. Your data stays clean.",[10,196,197,200],{},[39,198,199],{},"No relationships."," Linking clients to policies to claims in Excel means VLOOKUP. And INDEX\u002FMATCH. And circular references that break when someone inserts a row. In a database, you define the connections once and the database maintains them forever. Client deleted? The database tells you there are outstanding policies first.",[10,202,203,206,207,25],{},[39,204,205],{},"No audit trail."," Who changed that number? When? Why? Excel doesn't know. A database with proper logging can tell you exactly who modified what and when. For financial services, this isn't optional. It's a ",[17,208,209],{},"regulatory requirement",[10,211,212,215,216,219],{},[39,213,214],{},"No scale."," Try loading 100,000 rows of client data in Excel. ",[30,217,218],{},"Go ahead, I'll wait."," Now try doing a lookup across that. Now try doing it while someone else is editing the file. A database handles millions of rows without breaking a sweat.",[46,221,223],{"id":222},"the-single-point-of-truth-problem","The Single Point of Truth Problem",[10,225,226],{},"Here's what I keep seeing. A company has:",[228,229,230,234,237,240,243,246],"ul",{},[231,232,233],"li",{},"A client list in one Excel file",[231,235,236],{},"Policy data in another",[231,238,239],{},"Claims data in a third",[231,241,242],{},"Financial summaries manually compiled from all three",[231,244,245],{},"Fees calculated manually from all three",[231,247,248],{},"A person whose entire job is to reconcile these files every month",[10,250,251],{},"That person is a human doing what a database does, except slower, with errors, and without an audit trail.",[10,253,254,255,258],{},"The \"single source of truth\" isn't a philosophy. It's a ",[17,256,257],{},"technical requirement",". You need one place where the data lives, with rules about what can go in, and a system that enforces those rules. That's a database. Not a share drive. Not a Google Sheet. Not a collection of Excel files named with increasingly desperate version numbers.",[10,260,261,262,269,270,275,276,279,280,25],{},"When I built ",[263,264,268],"a",{"href":265,"rel":266},"https:\u002F\u002Fgithub.com\u002Flubasinkal\u002Fv-star",[267],"nofollow","v-star",", the whole point was a single engine that processes policies correctly. When I built ",[263,271,274],{"href":272,"rel":273},"https:\u002F\u002Fgithub.com\u002Flubasinkal\u002Ffees",[267],"fees"," ",[30,277,278],{},"you wont see it cause its IP",", the first thing I set up was a PostgreSQL database with proper schema, foreign keys, and audit triggers. Not because I'm fancy. Because ",[17,281,282],{},"that's how you make sure the numbers are right",[10,284,285],{},"The companies I've been helping lately — they have good data. Real data. Data that could drive better decisions, optimise pricing, identify risk patterns. But it's locked in spreadsheets. Fragmented. Inconsistent. And every time someone compiles a report, they're making judgment calls about which version of the truth to use.",[10,287,288,289],{},"That's not a people problem. That's an infrastructure problem. And the fix is simple: ",[39,290,291],{},"put it in a database.",[10,293,294,295,298,299],{},"And for those of you who ",[17,296,297],{},"know"," this and are screaming into the void — I see you. Worse off are the people who work in an office with a database but, not knowingly, IT won't give them read access for their analysis in Excel because they think you're taking their jobs. Bro. I just want to streamline this person's workflow, get paid, and leave. That's it. That's the whole motivation. ",[30,300,301],{},"But no, gotta protect the sacred SQL Server from the actuary with a Python script.",[303,304],"img",{"src":305,"alt":306,"width":307},"https:\u002F\u002Fi1.sndcdn.com\u002Fartworks-MrGMX4hO0XXPablj-hCuNgw-t1080x1080.jpg","Trust me bro",400,[46,309,311],{"id":310},"what-id-tell-that-small-company","What I'd Tell That Small Company",[10,313,314,315,318],{},"If you're running a business on Excel files and you know it's a mess — and you ",[17,316,317],{},"do"," know, you just haven't had time to fix it — here's the minimum viable fix:",[320,321,322,328,334],"ol",{},[231,323,324,327],{},[39,325,326],{},"Pick SQLite"," if you're a small operation with one or two people accessing data. It's a single file, zero setup, and it'll handle more than you think.",[231,329,330,333],{},[39,331,332],{},"Pick MySQL"," if you've got a web application or multiple users hitting the data concurrently. Managed MySQL on any cloud provider costs almost nothing.",[231,335,336,339],{},[39,337,338],{},"Pick Postgres"," if you're doing anything analytical, financial, or complex. The flexibility alone is worth the switch.",[10,341,342],{},"Then move your data. One table at a time. Clients first. Then matters\u002Fpolicies. Then claims. Then financials. Build the relationships. Add the constraints. Write the queries.",[10,344,345,346,351,352],{},"Don't let people tell you getting a database is hard. You can run one in a ",[263,347,350],{"href":348,"rel":349},"https:\u002F\u002Fwww.docker.com\u002F",[267],"Docker"," container in about 30 seconds. The issue is a lot of us aren't technically inclined in these things. ",[30,353,354],{},"Maybe I should get a Data Protection certificate.",[10,356,357,358,25],{},"It's not glamorous work. But it's the foundation that everything else sits on. And until you do it, every report you compile, every analysis you run, every decision you make is sitting on a foundation of ",[30,359,360],{},"cell references and prayer",[10,362,363],{},"Your Excel file is not a database. Your business deserves better.",[365,366],"hr",{},[10,368,369],{},[17,370,371,372,376,377,380],{},"P.S. — If you're still using Excel for reserving\u002Fsimulations, I have ",[263,373,375],{"href":374},"\u002Fblog\u002Fwhygolang","some thoughts",". And if you're building financial systems, ",[263,378,268],{"href":265,"rel":379},[267]," processes a million policies in under 300ms. Just saying.",{"title":382,"searchDepth":383,"depth":383,"links":384},"",2,[385,386,392,393,394],{"id":48,"depth":383,"text":49},{"id":92,"depth":383,"text":93,"children":387},[388,390,391],{"id":100,"depth":389,"text":101},3,{"id":122,"depth":389,"text":123},{"id":142,"depth":389,"text":143},{"id":174,"depth":383,"text":175},{"id":222,"depth":383,"text":223},{"id":310,"depth":383,"text":311},"2026-07-10","For the past few weeks I've been helping small companies automate workflows and analyse data. Most of them have flowing income, real clients, real revenue — and not a single source of truth. Just spreadsheets duct-taped together.","md",false,{},true,null,"\u002Fblog\u002Fstop-calling-that-excel-file-a-database",{"title":5,"description":396},"blog\u002Fstop-calling-that-excel-file-a-database",[406,407],"software","actuarial","Small companies with real revenue are running their entire operations on Excel files passed around via email. Here's what a database actually is, why SQLite\u002FMySQL\u002FPostgres exist, and why your business is one corrupted file away from disaster.","Kt9eU8uBP8LcNdjR8yzC7vY2JoFeL4vVrc3ka3T3i-Q",1784119587840]