Lu TaorminaFrom spreadsheet to software
§ 01The problem

Your company runs on a spreadsheet. I turn it into software.

Four to eight weeks · one fixed price

Somewhere in your company there is a file that decides what you charge, what you build, or what you pay. One person understands it. When they are away, answering a customer takes three days instead of ten minutes.

Before
XCosting PRO.xlsm — Excel− □ ×
FileHomeInsertFormulasDataView
BW9872fx=IF(COUNTIF(Articles!BW2:BW9872,">0")=0,0,ROUND(SUMIFS(…)/COUNTIF(…),2))
ABBVBW
9869Steel Ø407.850.0018.40
9870AISI 4307.750.00#REF!
9871Flat bar7.850.006.12
9872
Foglio1MachinesMaterialsMaterialsNewCustomers+16
Ready21 sheets · 1,376 formulas
After
yourcompany.app/quotes/4182
Quote — bracket, 40 offDraft · v3
Material — steel, Ø40 bar€ 84.20
Turning — 42 min at €48/h€ 33.60
Milling — 18 min at €62/h€ 18.60
Heat treatment — outsourced€ 22.00
Setup, spread over 40€ 9.75
Price each · margin 31%€ 245.60
Material price dated 12 Aug — still current
§ 02You are not unusual

Half of all small companies are in exactly this position.

51% of small and mid-sized companies run on spreadsheets, scattered files and systems that do not talk to each other. Linkware, ERP for SMEs, 2026
67% of ERP projects in small companies miss what they set out to do — and the real cost lands at three to four times the original quote. Linkware, ERP for SMEs, 2026
15–20% of the build cost is what the industry charges you, every year, in compulsory maintenance. I charge none. Lemio, custom software pricing, 2026

The reason those projects go wrong is rarely the software. It is that nobody wrote down what the company actually does before the building started — so the price was a guess, and the guess was wrong by a factor of three. That is the single thing my first week exists to prevent.

The four costs already on your books

One person knows it

They cannot be ill in the week of your biggest quote — and they know it, and so do you. If they leave, part of what they know leaves permanently.

Errors nobody catches

A margin two points wrong is invisible in one quote and expensive across a year of them. A spreadsheet never tells you it has stopped being right.

It gets fed at night

The work happens in the day, the file gets updated in the evening. That is unpaid time, and it is the sort of thing people eventually quit over.

Growth hits a ceiling

You cannot hire your way past a file only one person can operate. The company stops growing at whatever that person can hold in their head.

§ 03Case studies

Three files, taken apart and replaced.

Each one below: what it was, what was actually wrong with it, what I did, and what came out. Every figure is counted from the real file and from the finished code. No company is named and no customer data is shown.

The workbook that priced every job in a machine shop

Manufacturing · 14 stages
The situation

A precision machine shop quoted every job from one Excel workbook with macros underneath. It had been growing for years: a sheet added whenever a question came up, a column added whenever a customer asked something new. It decided the price of everything that left the building, and one person could safely open it.

The file as I received it
XCosting PRO.xlsm− □ ×
BW9872fx=IF(COUNTIF(Articles!BW2:BW9872,">0")=0,0,ROUND(…))
ABBW
9870AISI 4307.75#REF!
9871Flat bar7.856.12
9872
MachinesMaterialsMaterialsNewMaterialsDemo+17
Ready21 sheets · 2.1 MB
What replaced it
yourcompany.app/jobs/4182
Job 4182 — priced from the drawingReady to send
Title block, read from the PDFauto
Stock bar, read from the STEP fileØ40
Machine time — three operations60 min
Material price, dated12 Aug
Price each · 40 off€ 245.60
Checked by 861 automatic tests
What was seriously wrong
  • Two live price lists. Materials and MaterialsNew both open, both in use. Quotes were being written from whichever one the person happened to click, and only one of them was current.
  • Eight duplicate sheets, kept in step by hand. A full parallel set ending in Demo. Every price change had to be made twice, from memory, by the same person — and there was no way to tell whether it had been.
  • A formula reaching row 9,872, column seventy-five. Nobody could see the whole of it, so nobody checked it. When a reference below it broke, the workbook did not stop: it returned a number that was simply wrong.
  • A #REF! sitting in the material cost column. Not an alarm — just a cell, in a sheet nobody scrolls to, feeding a total somebody quoted from.
  • Foglio1, the default name, never changed. Nobody remembered what was on it and nobody dared delete it, so it stayed, and it was still being recalculated.
  • Macros written in 2024 that nobody had opened since, and that nobody still at the company could read.

The workbook was not going to fail loudly one morning. It was going to keep producing prices that looked exactly like the right ones.

What I did

Fourteen stages, in the order the shop needed them rather than the order that was easiest to build. The costing engine first, with the arithmetic pulled out into small pieces that can each be tested on their own — which is why there are 861 automatic checks and not forty. Then price lists and machine records, customers, quote documents, cost drift over time, estimate against actual, and last the job sheets that go out to the floor.

  • One price list, with history. The duplicate sheets are gone. A price change happens once, and the old value is not overwritten — it is kept with the date it stopped applying.
  • Prices carry a date, so old quotes still explain themselves. A quote written in March can be reconstructed in November, and a price increase goes out with a letter that shows the customer the arithmetic.
  • A quote starts from the drawing. The title block is read out of the PDF and the stock bar out of the STEP file, instead of two people retyping both and one of them mistyping.
  • The shop floor got a screen of its own, written separately from the office one. Different hands, different light, a different question being asked.
  • Nothing fails silently. Where the workbook returned a plausible wrong number, the software refuses and says which input is missing.
  • Several sites on one system, each seeing only its own numbers.
The result
Sheets to keep in step
21 1
Unchecked formulas
1,376 0
Automatic checks
861
People who can safely change it
1 all

The point was never the app. It was that the shop stopped having one person it could not afford to lose.

The quotes that got written at the kitchen table

Trades · product with billing
The situation

No spreadsheet here. The file was a notebook and the process was the evening: measurements written on a page during the day, turned into a quote at nine at night, sent two days later. In a trade where the job usually goes to whoever answered first, two days is the whole problem.

21:40, kitchen table
Third quote of the eveningBy hand
Measurements, half from memory?
Price list, in another folder2023
Time spent, unpaid40 min
Reached the customer+2 days
Spoken, walking back to the van
quotes.app/new
Say the job out loudRecording
“Two radiators, first floor, copper…”
Your own price list, applied2026
Document, ready to sendPDF
Reached the customer30 sec
Before you have parked
What was seriously wrong
  • The price list was two years old and lived somewhere else. Materials had moved since; the margin was whatever it had been in 2023, applied to 2026 costs.
  • The delay cost the jobs, not the price. Quotes that arrive third arrive after a decision has been made, however good they are.
  • Nothing was written down twice. A quote existed once, on paper, in a van. Nobody could tell you what had been quoted to whom, or at what margin, six months later.
  • The unpaid hours were invisible. Forty minutes an evening is two hundred hours a year that nobody counts and nobody bills.
What I did

Built the whole thing around the only moment that was actually free: the walk back to the van. You describe the job out loud, the software applies your own price list and produces the finished document. Subscriptions, quotas and rate limits were in it from the first week, because a product that cannot charge is a demo.

  • Your price list, not a generic one — loaded once, then applied every time, so the margin stops being a memory.
  • Every quote is kept and searchable, with what was offered and at what margin.
  • The running cost of each quote is shown against the subscription price on a live dashboard. A supplier doubling its rates should appear on a screen, not in an invoice at the end of the quarter.
The result
Time per quote
40 min 30 sec
Reaches the customer
2 days same visit
Automatic checks
502
Independent modules
39

A company's accounts, spread across twenty sheets

Administration · runs on the office PC
The situation

Invoices issued and paid, rent, bank accounts, money moving between two owners, and the periodic reports — one workbook that had grown a new sheet every time a question came up, and then a second copy of that sheet when the first one got messy.

Twenty sheets
XAccounts.xlsx− □ ×
H214fx=SUMIF('Invoices'!$B:$B,$A214,'Invoices'!$G:$G)-H213
ABH
212Invoice 11812/062,410.00
213Invoice 11919/06#VALUE!
214Invoice 12002/07
Foglio2InvoicesPaymentsSummarySummary 2+15
Ready20 sheets
One screen, two logins
runs on the office PC — no internet needed
Invoices — outstandingJuly
Issued, not yet paid€ 41,280
Overdue more than 60 days€ 6,150
Rent due this month€ 3,400
Cash position€ 58,900
Whole history imported — nothing retyped
What was seriously wrong
  • A #VALUE! in the middle of a running balance. Every row below it inherited the error, so a figure the owners looked at monthly had quietly stopped being a number.
  • Two summary sheets, both maintained. When they disagreed, whichever one was open won.
  • Formulas across whole columns ($B:$B), so one paste in the wrong place silently changed totals elsewhere.
  • No access control at all. Anyone who could open the file could change a paid invoice back to unpaid, and nothing recorded that they had.
What I did

For an office that had never used anything but Excel, the design decision that mattered most was not a feature: it was that the program starts with a double click and needs no internet. Data in one file, kept on their own machine, with a backup they can copy.

  • The whole history was imported from the old workbook. Nobody had to retype a year of invoices before the thing was useful.
  • Two logins: one that can change everything, one read-only for whoever just needs to look.
  • One number, computed once. Where there were two summary sheets, there is now a single figure and no argument about which is right.
The result
Sheets
20 1 program
Conflicting summaries
2 0
History retyped
none
Starts with
1 click
§ 04New products

When there is nothing to replace, I build the first version.

Not every job is a rescue. Sometimes there is only an idea, and what is needed is the smallest real thing that proves whether it works — in front of users, not in a deck. Musivae is mine: an MVP for a consumer music product, taken from idea to something installable and usable, on a backend with no fixed running cost.

Musivae — a photograph, and three songs
musivae.app
Your photo → three tracksReading the scene
Mood · light · energy, written firstread
Candidates fetched for 3 places6
Checked against the real catalogue6 / 6
Invented or karaoke, dropped2
Delivered3 tracks
One slot reserved for something you would never have found

Why it is here

It shows the part of building with AI that is not writing prompts: designing around what the model gets wrong. The model has to write its reading of the photograph before it picks any music, so it chooses against something it has already committed to rather than justifying a choice afterwards. Six candidates are fetched for three places and each is checked against the real catalogue, so invented tracks and karaoke covers lose their place to a reserve instead of leaving a hole in the answer.

That is what an MVP from me looks like: a real product decision in every part of it, not a demo held together with tape.

Installable web appServerlessNo fixed costModel output verifiedLive cost per request

I also built, and run the advertising behind, the website of a small service business of my own — the half most engineers skip, where the thing has to go and find its own customers rather than merely work.

§ 05The price

What the alternatives cost, so the number has something to stand next to.

RouteCostBefore you can use it
A custom module from your ERP supplier€25,000–80,000
plus 15–20% a year
6–12 months
A software agency€50,000 and upwards6 months
Hiring a developer€40,000 a year
and one day they leave
3 months to hire
Keeping the spreadsheetnothing on paper
one person in practice
Thisfrom €9,000
no licence, no yearly fee
4–8 weeks

I am cheaper for two honest reasons, and neither is that the work is smaller. First: there is nobody here to coordinate with, and most of a six-month timeline is coordination rather than construction. Second: I am early with outside clients, and I would rather have your name on this page than your last three thousand euros.

On the yearly fee everyone else charges. The industry standard for maintenance is 15–20% of the build cost, every year, for as long as you use it. On a €9,000 project that is €1,350–1,800 a year, forever. There is none here — and if you want help later, it is a block of hours you buy when you want it and never again.
Worth asking your accountant. Custom software can fall under the Italian tax credits for digital investment, which have covered a meaningful share of the spend in recent years. The rules move every year and I am not the right person to advise on them — but the question is worth five minutes of your accountant's time before you decide.
§ 06How it goes

Three steps, and you are allowed to stop after the first.

01

Five days on your process

€2,500

I sit with whoever actually runs the file. At the end you have your process written down as it truly works — not as the manual claims — and one working piece you can put your hands on. If that document does not describe your company correctly, we stop there: you have spent two and a half thousand instead of twelve, and the document is yours either way. If we carry on, it comes off the price. This is the step that stops a project becoming one of the sixty-seven percent.

02

The rebuild

from €9,000

One fixed price, agreed before anything starts, worked out from what week one found. You see something running every Friday. Your history is imported, your documents come out right, your people are trained — and the old file keeps going until the day you decide it does not need to any more.

03

Whatever comes next — if anything

€4,500 / month

Optional and never automatic. A standing slot for the next thing, or for the requests that only appear once people are really using it. One month's notice to stop. Most of what you need should already be finished at step two.

There is no compulsory support contract, and that is deliberate. You get the code on your own account, the automated checks, and a manual written for the person using the software rather than for a developer. I would rather hand you something your own people, or your next supplier, can pick up than make you dependent on me.

§ 07Questions

The five things everybody asks.

I have never heard of you.

Fair, and true: I am at the beginning with outside clients. It is exactly why you are being quoted from €9,000 rather than the €25,000 this work costs from an established supplier, and why the first week has a way out of it built in. What I ask in return, if you end up happy, is permission to write about what we did. That is the trade, and I would rather say it plainly than pretend to be bigger than I am.

How do I know the price will not triple, like everyone says?

Because the price is set after the scoping week, not before it — and that is the whole reason the scoping week exists. Projects overrun when somebody quotes a process they have not yet seen. You will get one number, fixed, in writing, and a written list of what is not included, which is the part that actually protects you.

What if you disappear halfway through?

The code is on your account from the first week, not mine, and you pay in two halves — so the most that can go missing is work already delivered. The 861 automatic checks on the first case study exist for precisely this: a developer who has never met me can change something and be told at once whether it broke.

We cannot stop working while this happens.

Nobody can, and you will not have to. The old file keeps running throughout. We move one process at a time, and you decide when each one is good enough to switch — normally after a couple of weeks of both running side by side and agreeing with each other.

Our process is unusual. Everyone says that, but ours really is.

It probably is, and that is the whole point: it is why the software you could buy off the shelf does not fit, and why the file exists at all. It is also why week one is a paid, separate, five-day job rather than a free chat — I would rather discover that your process is strange while walking away is still cheap.

§ 08Contact

Twenty minutes, and you will see it working.

The fastest way to judge me is not a proposal, it is a screen. Send three lines — what the file does, who the one person who understands it is, and what happens when they are away — and I will show you a working system doing that job, with numbers close enough to yours to be worth arguing about.

I answer within a day, and if I think you are better off keeping the spreadsheet I will say so — it happens, and finding out costs you nothing. English and Italian, remote, across European and US time zones.