[{"data":1,"prerenderedAt":564},["ShallowReactive",2],{"article-\u002Fblog\u002Fseven-signs-spreadsheet":3,"blog-others":170},{"id":4,"title":5,"author":6,"body":7,"date":160,"description":13,"extension":161,"meta":162,"navigation":163,"path":164,"published":163,"reading":165,"seo":166,"stem":167,"summary":168,"__hash__":169},"articles\u002Fblog\u002Fseven-signs-spreadsheet.md","Seven signs your company has outgrown what Excel can carry","Laurent Roy",{"type":8,"value":9,"toc":147},"minimark",[10,14,17,20,25,37,40,44,47,50,54,57,60,64,67,70,74,77,80,84,87,90,94,101,104,108,111,114,137,141,144],[11,12,13],"p",{},"Excel is a remarkable tool. It lets one person model in an afternoon what a developer\nwould take three weeks to ship. Most companies owe it years of functioning, and deservedly\nso.",[11,15,16],{},"The problem is never Excel. It is the moment a file stops being one person's tool and\nbecomes a team's infrastructure. That shift does not announce itself: there is no warning\nmessage, no limit reached, no invoice going up. You notice afterwards, while tracing where\nan error came from.",[11,18,19],{},"Here are seven signs. None is serious on its own. It is the accumulation that counts — and\nif you tick three, the limit is well behind you.",[21,22,24],"h2",{"id":23},"_1-nobody-knows-which-version-is-authoritative","1. Nobody knows which version is authoritative",[11,26,27,28,32,33,36],{},"The file is called ",[29,30,31],"code",{},"budget_2026_v3_FINAL.xlsx"," and there is another one called\n",[29,34,35],{},"budget_2026_v3_FINAL_real.xlsx",". Someone made a copy \"so as not to break the original\".\nSomeone else corrected a row in the copy.",[11,38,39],{},"This is not a discipline problem. It is a mechanical consequence of the format: a file\nduplicates by nature, and nothing in the tool designates the reference copy. Discipline\ncan delay the disorder; it cannot prevent it.",[21,41,43],{"id":42},"_2-your-teams-retype-from-one-tool-into-another","2. Your teams retype from one tool into another",[11,45,46],{},"Someone exports from accounting, pastes into a tab, reformats, then copies the result into\na third file. Every week, the same gestures.",[11,48,49],{},"That time is easy to cost and nobody costs it. Take one person spending half a day a week\non it: that is a month of work a year, spent entirely moving numbers that already exist\nsomewhere else.",[21,51,53],{"id":52},"_3-the-file-leaves-the-company","3. The file leaves the company",[11,55,56],{},"It goes out by email to a supplier, a customer, a contractor. From that point you no longer\nknow who has it, what they do with it, or which version they are using to answer you.",[11,58,59],{},"A spreadsheet cannot tell one recipient from another. It sends everything, to everyone,\npermanently. If your file contains margins, negotiated terms or a third party's data, the\nproblem is no longer organisational.",[21,61,63],{"id":62},"_4-answering-where-are-we-means-rebuilding-a-file","4. Answering \"where are we?\" means rebuilding a file",[11,65,66],{},"The question comes up in a meeting. The answer exists, but getting it takes two hours:\nconsolidate three tabs, find the last export, check the totals add up.",[11,68,69],{},"Data that takes two hours of work to read is not available. It is archived.",[21,71,73],{"id":72},"_5-the-file-does-not-know-who-you-are","5. The file does not know who you are",[11,75,76],{},"A field agent, a regional manager and a chief executive open the same file and see exactly\nthe same thing. Either you are sharing too much, or you are sharing nothing and everyone\nworks from their own stale extract.",[11,78,79],{},"This is probably the most structural limit, because there is no way around it. A\nspreadsheet has no notion of identity. Permissions do not exist in the format.",[21,81,83],{"id":82},"_6-only-one-person-really-knows-how-it-works","6. Only one person really knows how it works",[11,85,86],{},"There are formulas nested six levels deep, named ranges nobody documented, a macro written\nfour years ago. It works. One person knows why.",[11,88,89],{},"That person takes a holiday. One day, they change jobs. The file keeps running right up\nuntil it needs to be changed — and at that point nobody knows where to touch it.",[21,91,93],{"id":92},"_7-you-have-already-decided-on-a-wrong-number","7. You have already decided on a wrong number",[11,95,96,97,100],{},"A cell was overwritten. A formula pointed at a deleted row and returned ",[29,98,99],{},"#REF!",", but in a\ntab nobody opens. The total was three per cent out.",[11,102,103],{},"You did not know at the time. You found out afterwards, because a figure did not add up\nsomewhere else. This is the most serious sign on the list: it means the system no longer\nprotects you from its own errors.",[21,105,107],{"id":106},"what-the-seven-signs-have-in-common","What the seven signs have in common",[11,109,110],{},"Not one of them comes from carelessness. They are all side effects of the format: a\nspreadsheet is a file, and a file duplicates, travels, tells nobody apart and warns of\nnothing.",[11,112,113],{},"Moving to operational software is not buying Excel again at a higher price. It is changing\nthree properties:",[115,116,117,125,131],"ul",{},[118,119,120,124],"li",{},[121,122,123],"strong",{},"one set of data",", in one place, with a history of who changed it;",[118,126,127,130],{},[121,128,129],{},"permissions",", so each person sees what concerns them and nothing else;",[118,132,133,136],{},[121,134,135],{},"checks",", so an implausible entry is refused rather than recorded in silence.",[21,138,140],{"id":139},"where-to-start","Where to start",[11,142,143],{},"Not with a large project. Take the process that hurts most — the one everybody names when\nyou ask the question — and look at what it would cost to get that one, alone, out of the\nspreadsheet.",[11,145,146],{},"That is exactly what we do in a two-hour audit: map the real flows, spot what can be\nautomated, and put a number on the time being lost. You keep the document, whether or not\nwe work together.",{"title":148,"searchDepth":149,"depth":149,"links":150},"",2,[151,152,153,154,155,156,157,158,159],{"id":23,"depth":149,"text":24},{"id":42,"depth":149,"text":43},{"id":52,"depth":149,"text":53},{"id":62,"depth":149,"text":63},{"id":72,"depth":149,"text":73},{"id":82,"depth":149,"text":83},{"id":92,"depth":149,"text":93},{"id":106,"depth":149,"text":107},{"id":139,"depth":149,"text":140},"2026-07-15","md",{},true,"\u002Fblog\u002Fseven-signs-spreadsheet",7,{"title":5,"description":13},"blog\u002Fseven-signs-spreadsheet","None of these signs is serious on its own. It is the accumulation that tells you a spreadsheet is no longer enough — and that it stopped being enough a while ago.","4Ecos2_slmKvNaJihp_gna-kIixcPk88wE8CDWgTHcw",[171,321,468],{"id":172,"title":173,"author":6,"body":174,"date":313,"description":178,"extension":161,"meta":314,"navigation":163,"path":315,"published":163,"reading":316,"seo":317,"stem":318,"summary":319,"__hash__":320},"articles\u002Fblog\u002Fhire-or-studio.md","Hire a developer or use a studio: the sum nobody does",{"type":8,"value":175,"toc":306},[176,179,182,185,189,195,201,207,213,219,223,226,229,232,235,239,242,248,254,260,264,270,276,282,288,292,295,300,303],[11,177,178],{},"The question comes up every time, and it is a fair one: why pay a supplier when you could\nhire somebody?",[11,180,181],{},"The sum people do instinctively is simple. An experienced developer costs so much a month.\nA studio charges so much a day. Multiply, compare, and hiring wins comfortably.",[11,183,184],{},"That sum is not wrong. It is incomplete, and what it leaves out is often worth more than\nwhat it counts.",[21,186,188],{"id":187},"what-the-sum-leaves-out","What the sum leaves out",[11,190,191,194],{},[121,192,193],{},"The wait before you have anybody."," Between the decision and the first day, allow three\nto six months for a senior profile — writing the role, sourcing, interviews, notice\nperiods. Meanwhile the process you wanted to support keeps running on a spreadsheet.",[11,196,197,200],{},[121,198,199],{},"The wait before they are productive."," A good developer is not useful on day one. They\nare useful once they understand your business: your rules, your edge cases, what happens at\nmonth end. In a dense domain — grocery retail, logistics, anything regulated — allow\nseveral months more.",[11,202,203,206],{},[121,204,205],{},"The full cost."," Gross salary is not the cost. Add employer contributions, paid leave,\nhealth cover, equipment, licences, training, and a share of management time — because a\nlone developer in a company that has no others needs somebody to arbitrate.",[11,208,209,212],{},[121,210,211],{},"Key-person risk."," This is the most expensive line, and it appears in no budget. One\nperson writes the code, knows the architecture, and knows why each decision was taken. The\nday they leave — and one day they will — all of that knowledge leaves with them. You are\nnot hiring a replacement: you are starting again.",[11,214,215,218],{},[121,216,217],{},"The troughs."," A software project does not have a constant workload. Design and launch\ndemand a lot; maintenance demands far less. An employee costs the same in both phases.",[21,220,222],{"id":221},"the-real-sum","The real sum",[11,224,225],{},"It is not a salary against a day rate. It is two complete scenarios over three years.",[11,227,228],{},"On the hiring side: the cost of recruiting, the full cost of the post over three years, the\nmonths of non-production at the start, and a non-zero probability of having to do it all\nagain once.",[11,230,231],{},"On the studio side: the cost of the project, plus annual maintenance — which is a fraction\nof the initial build.",[11,233,234],{},"That sum does not always produce the same winner. Which is precisely why it is worth doing\ninstead of deciding on reflex.",[21,236,238],{"id":237},"when-hiring-is-the-right-call","When hiring is the right call",[11,240,241],{},"This needs saying plainly, because it is true more often than a supplier likes to admit.",[11,243,244,247],{},[121,245,246],{},"When you already have a technical team."," One more developer in a team that exists is\nimmediately supported, reviewed and integrated. The key-person risk disappears. This is by\nfar the most favourable case.",[11,249,250,253],{},[121,251,252],{},"When the software is your product."," If what you build is what you sell, it has to be\nyours in capability as much as in ownership. An in-house team is the only durable answer.",[11,255,256,259],{},[121,257,258],{},"When the workload really is continuous."," A roadmap full for two years is not an\nengagement, it is a job.",[21,261,263],{"id":262},"when-a-studio-is","When a studio is",[11,265,266,269],{},[121,267,268],{},"When the need has edges."," Getting a process out of a spreadsheet, connecting two\nsystems, building an operational tool: these are projects with a beginning and an end,\nfollowed by light maintenance.",[11,271,272,275],{},[121,273,274],{},"When you have no technical team."," Hiring an isolated developer into a company that has\nnone creates a point of fragility, not a capability.",[11,277,278,281],{},[121,279,280],{},"When time matters."," Six months of hiring plus six months of getting up to speed, or a\nfirst version in a few weeks: these are not the same project.",[11,283,284,287],{},[121,285,286],{},"When you want to know before committing."," This is our argument, and hiring has no\nequivalent to it: you will only know whether the software suits you by watching it run. So\nwe start with a small scope and a working prototype. If it does not suit you, it is not\ninvoiced. A bad hire, by contrast, is paid for in full.",[21,289,291],{"id":290},"the-question-that-settles-it","The question that settles it",[11,293,294],{},"One question, and it is simple.",[11,296,297],{},[121,298,299],{},"Does this software need to change every month for the next five years?",[11,301,302],{},"If yes, you need a team, and bringing it in-house always turns out to be the right answer.",[11,304,305],{},"If no — if what you need is for a critical process to stop running on files, and then to be\nmaintained properly — then you do not have a hiring problem. You have a project.",{"title":148,"searchDepth":149,"depth":149,"links":307},[308,309,310,311,312],{"id":187,"depth":149,"text":188},{"id":221,"depth":149,"text":222},{"id":237,"depth":149,"text":238},{"id":262,"depth":149,"text":263},{"id":290,"depth":149,"text":291},"2026-08-12",{},"\u002Fblog\u002Fhire-or-studio",9,{"title":173,"description":178},"blog\u002Fhire-or-studio","People compare a salary with a day rate and conclude far too quickly. Here are the lines that sum leaves out — and the cases where hiring is still right.","sUR8gPdXKsIhz0zZ0YK6h8bqqgX4-bDE2zV0mxTFr1s",{"id":322,"title":323,"author":6,"body":324,"date":460,"description":328,"extension":161,"meta":461,"navigation":163,"path":462,"published":163,"reading":463,"seo":464,"stem":465,"summary":466,"__hash__":467},"articles\u002Fblog\u002Fai-without-data-leaving.md","Deploying AI without a single piece of data leaving the company",{"type":8,"value":325,"toc":452},[326,329,332,336,342,348,351,355,358,361,368,372,375,401,404,408,414,420,426,430,433,436,439,443,446,449],[11,327,328],{},"The situation is almost always the same. Teams have discovered what artificial\nintelligence saves them. They use it. And management discovers, often after the fact, that\ninternal documents have been pasted into a service hosted outside Europe.",[11,330,331],{},"From there, two options present themselves, and both are bad.",[21,333,335],{"id":334},"the-false-choice","The false choice",[11,337,338,341],{},[121,339,340],{},"Ban it."," This is the reflex answer, and the least effective. A memo does not remove a\nhabit that saves two hours a day: it moves it onto personal phones, out of all visibility.\nYou have not removed the risk, you have removed your ability to see it.",[11,343,344,347],{},[121,345,346],{},"Allow it."," That is honest, but it means accepting that documents travel to an\ninfrastructure you do not control, under a law that is not yours. For a public authority, a\nprofessional practice, or a company handling health, HR or contract data, that is not a\ndecision anyone takes lightly.",[11,349,350],{},"For a long time this choice was inescapable, because every usable model was remote. That is\nno longer true.",[21,352,354],{"id":353},"what-changed","What changed",[11,356,357],{},"Open models, hostable on your own infrastructure, are now good enough for most office\ntasks: drafting, rewriting, summarising, extracting from a document, answering from an\ninternal document base.",[11,359,360],{},"\"Good enough\" deserves unpacking, because that is where the credibility of the project sits.\nA self-hosted open model does not match the best models on the market on the hardest tasks\n— long reasoning, complex code, fine-grained analysis. It matches them comfortably on what\nan administrative officer asks of it ten times a day.",[11,362,363,364,367],{},"So the right trade-off is not \"the best model\", but ",[121,365,366],{},"the best model that satisfies the\nconstraint",". When the constraint is \"no data leaves\", the field narrows — and there is\nstill plenty left to work with.",[21,369,371],{"id":370},"what-it-actually-takes","What it actually takes",[11,373,374],{},"Worth saying plainly: this is not a subscription you switch on. You need:",[115,376,377,383,389,395],{},[118,378,379,382],{},[121,380,381],{},"a machine",", sized for the chosen model and the number of concurrent users;",[118,384,385,388],{},[121,386,387],{},"a closed network",", where access happens from the inside only;",[118,390,391,394],{},[121,392,393],{},"named accounts",", so you know who did what — that is what makes the usage auditable,\nand therefore defensible;",[118,396,397,400],{},[121,398,399],{},"maintenance",", because a model you install and then abandon becomes a liability within\neighteen months.",[11,402,403],{},"That last point is the one most often forgotten at decision time, and the one that costs\nmost once forgotten.",[21,405,407],{"id":406},"what-you-get-back","What you get back",[11,409,410,413],{},[121,411,412],{},"A verifiable guarantee."," \"No outbound calls\" is not a contractual promise, it is a\nproperty of the architecture. It can be checked at network level, by somebody who does not\nhave to take your word for it.",[11,415,416,419],{},[121,417,418],{},"The end of workarounds."," When the internal tool is decent and available, unsanctioned use\nstops on its own. It is not a question of policy, it is a question of service quality.",[11,421,422,425],{},[121,423,424],{},"A predictable cost."," You pay for infrastructure, not for per-token consumption that rises\nwith adoption.",[21,427,429],{"id":428},"the-grand-chambéry-case","The Grand Chambéry case",[11,431,432],{},"For the Grand Chambéry agglomeration authority we deployed a fully internal conversational\nassistant: an open French model, access over the internal network only, named accounts,\nhosting in France. No outbound calls.",[11,434,435],{},"Delivered end to end, infrastructure included, then maintained for twelve months.",[11,437,438],{},"What makes the project interesting is not the technical feat — there is none. It is that\nthe constraint was set first, and the whole architecture followed from it. When you start\nby picking a tool and then try to bring it into compliance, you never get there.",[21,440,442],{"id":441},"how-to-tell-whether-this-is-you","How to tell whether this is you",[11,444,445],{},"Ask yourself three questions.",[11,447,448],{},"Are your teams already using AI, with or without permission? Would a document you handle\nroutinely cause a problem if it left? Could you say today who sent what, and where?",[11,450,451],{},"If the answers are yes, yes, no — you do not have a tooling problem. You have an\narchitecture problem, and it is solvable.",{"title":148,"searchDepth":149,"depth":149,"links":453},[454,455,456,457,458,459],{"id":334,"depth":149,"text":335},{"id":353,"depth":149,"text":354},{"id":370,"depth":149,"text":371},{"id":406,"depth":149,"text":407},{"id":428,"depth":149,"text":429},{"id":441,"depth":149,"text":442},"2026-07-29",{},"\u002Fblog\u002Fai-without-data-leaving",8,{"title":323,"description":328},"blog\u002Fai-without-data-leaving","Ban the tool and watch it get used anyway, or allow it and let the data go. There is a third way, and it has become practical.","tG4eErX051K2VSW0HMzP0ttPB_YvSmh6ubfmT7LQ_GA",{"id":4,"title":5,"author":6,"body":469,"date":160,"description":13,"extension":161,"meta":562,"navigation":163,"path":164,"published":163,"reading":165,"seo":563,"stem":167,"summary":168,"__hash__":169},{"type":8,"value":470,"toc":551},[471,473,475,477,479,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,523,525,527,529,531,545,547,549],[11,472,13],{},[11,474,16],{},[11,476,19],{},[21,478,24],{"id":23},[11,480,27,481,32,483,36],{},[29,482,31],{},[29,484,35],{},[11,486,39],{},[21,488,43],{"id":42},[11,490,46],{},[11,492,49],{},[21,494,53],{"id":52},[11,496,56],{},[11,498,59],{},[21,500,63],{"id":62},[11,502,66],{},[11,504,69],{},[21,506,73],{"id":72},[11,508,76],{},[11,510,79],{},[21,512,83],{"id":82},[11,514,86],{},[11,516,89],{},[21,518,93],{"id":92},[11,520,96,521,100],{},[29,522,99],{},[11,524,103],{},[21,526,107],{"id":106},[11,528,110],{},[11,530,113],{},[115,532,533,537,541],{},[118,534,535,124],{},[121,536,123],{},[118,538,539,130],{},[121,540,129],{},[118,542,543,136],{},[121,544,135],{},[21,546,140],{"id":139},[11,548,143],{},[11,550,146],{},{"title":148,"searchDepth":149,"depth":149,"links":552},[553,554,555,556,557,558,559,560,561],{"id":23,"depth":149,"text":24},{"id":42,"depth":149,"text":43},{"id":52,"depth":149,"text":53},{"id":62,"depth":149,"text":63},{"id":72,"depth":149,"text":73},{"id":82,"depth":149,"text":83},{"id":92,"depth":149,"text":93},{"id":106,"depth":149,"text":107},{"id":139,"depth":149,"text":140},{},{"title":5,"description":13},1788718838083]