Web & software
Custom software: the specification you write is not the one you need
Nobody knows what they want before using it. A complete specification written beforehand is a guess set down in the present tense.
A custom software project rarely fails on the code. It fails on the gap between what was asked for and what was actually needed, and that gap only appears once somebody has used something.
It is an awkward property of the trade, and both parties spend their time pretending it does not exist. The client writes a complete specification because that is what they were taught seriousness looks like; the supplier prices it as a fixed sum because that is reassuring.
Then the first version arrives, the teams use it, and everybody discovers at the same moment three things nobody could have guessed. At that point the contract meant to protect both parties puts them in opposition.
This article does not propose abolishing the specification. It proposes writing something else in it, pricing it differently, and admitting in advance what nobody can know — which is the only way to avoid blaming each other for it later.
Nobody knows what they want before using it
Ask somebody to describe the tool they need and they will describe what they do today, improved. That is an honest answer and it is structurally incomplete: it cannot contain what the tool will make possible and that does not yet exist in their work.
The effect is clearest in the edge cases. Somebody who has handled a process for eight years has absorbed thirty exceptions they apply without thinking, and will not mention them because they do not look like rules to them.
Those exceptions all surface at the same moment: the first week of real use. That is why the first version of a line-of-business system always produces a list of requests, and why that list is a good sign rather than a bad one.
There is an immediate contractual consequence. If the requests arriving after first use are treated as scope changes, each becomes a negotiation, and the project spends its most useful period arguing about money.
The way to put it before starting is simple and defuses most of the conflict: we both know things will be missing; the question is not avoiding that but deciding now how we will handle them.
The complete specification is an expensive illusion
An eighty-page document written before the first line of code produces a feeling of control, and that feeling is the most expensive thing the project delivers.
It costs time first: several weeks during which nothing usable exists and no assumption is tested. Those are the weeks when the project is most fragile, because nobody can yet be visibly wrong.
It then costs rigidity. A detailed document becomes a reference people defend, and discoveries made along the way collide with what was agreed — even though they are the freshest information the project has.
Finally it costs false precision. Describing a screen to the comma before watching anybody use it produces requirements that look firm and are preferences, and they will be defended with the same energy as the real constraints.
What remains indispensable in a specification is whatever does not depend on use: the rules of the business, the legal obligations, the volumes, the people involved, what the tool has to talk to. The rest gets written while walking.
What to write instead: rules, not screens
The stable part of a project consists of rules, and they are stated as sentences that are true independently of any interface.
An order number is never reused. An invoice is not edited after issue, it is cancelled. A customer may have several delivery addresses but only one billing address. An item cannot be sold below its purchase price without approval.
Sentences like those are worth more than thirty mockups. They are checkable, they are discussed with the people who do the work rather than with a developer, and they stay true when the screen changes.
The second block to write is the known edge cases, the ones people remember. They will not be exhaustive — that is the previous section’s subject — but each one written down beforehand is a dispute avoided.
The third is what the tool will not do. It is the shortest and the most useful: naming out-of-scope functions explicitly turns a future disappointment into a present decision, and it is the same rule as in construction and events.
Fixed price or time and materials: what each makes you carry
There is no good contractual model in the abstract, there are two ways of allocating a risk that cannot be removed.
A fixed price moves the risk to the supplier, and makes you pay for it. A firm price on an uncertain scope contains a safety margin, and that margin grows the more honest the supplier is about the uncertainty.
It has a second, less visible and more serious effect: it aligns interests against the project. Once the price is fixed, every improvement discovered along the way costs the supplier money, so their interest is in not seeing it.
Time and materials moves the risk to you, and asks in exchange for a discipline few clients exercise: following what is produced, deciding priorities weekly, and knowing when to stop. Without that discipline it is more expensive than a fixed price.
The combination that works most often is intermediate and rarely offered: a fixed price on the stable part — the written rules, the data migration, the go-live — and a capped budget for what will be discovered. Each side then carries the risk it controls.
The first version has to be too small
The temptation is to deliver a complete tool, because a partial one is hard to defend internally. Yet it is the reduced first version that decides whether the rest succeeds.
Its function is not to serve, it is to teach. A version covering one flow, used by three people for two weeks, produces more information than six months of specification workshops.
The useful way to carve it out is not "the simplest functions" but "the most frequent path". Take the operation your teams do forty times a day, make it work end to end, and leave everything else out.
You have to accept that this version is visibly incomplete, and say so to the users. A tool presented as finished when it is not produces rejection; the same tool presented as a first stage produces feedback.
The mirror trap exists: delivering a version so reduced that nobody uses it. The test is simple — if people keep doing the operation in the old system in parallel, the version was not too small, it was incomplete on the main path.
Where the tool is actually used
One design error recurs throughout line-of-business software: it is drawn on the screen of whoever commissioned it, not on the screen of the person who will use it.
The internet market observatory published by ARPCE counts, for the second quarter of 2025, some 59.10 million internet subscriptions in Algeria, of which 88.71% are mobile and 11.29% fixed.
The ratio does not describe your company, but it describes your teams away from the office: the storekeeper, the driver, the technician on a call, the salesperson on the shop floor. None of them works seated in front of two monitors.
The consequences are concrete and get decided early. A twenty-field form is unusable standing up; an entry needing both hands cannot be done while carrying something; an operation assuming a permanent connection fails in a stockroom or a basement.
The rule we apply is to go and look. An hour spent beside the person who will do the data entry, in their real environment, changes the design more than three meetings — and it happens before the first screen, not after the first refusal.
- Mobile subscriptions88.71%
- Fixed subscriptions11.29%
ARPCE, internet market observatory, second quarter of 2025
Data migration: the line nobody prices
Every project replacing something inherits its history, and that inheritance is nearly always absent from the initial quotation.
The work is not technical, it is archaeological. Existing data contains unwritten conventions, fields repurposed away from their original use, duplicates, half-finished records, and exceptions typed into a comment box.
So three things have to be decided before starting: what is migrated, what is archived without being migrated, and what is abandoned. The third category always exists and nobody dares name it, which is why everything gets migrated by default.
You also have to decide what happens when old data fails a new rule. A customer with no phone number, an invoice with no reference: either the rule applies and the history is corrected, or the history passes and the rule has an exception. Both are defensible; having made no choice is not.
Our position, learned the hard way: migration is tested against real data in the first month, not the week before go-live. It is the line that makes projects slip, and it slips precisely because it is discovered late.
Testing, and who does it
There are two kinds of test and confusing them is expensive. The supplier checks that the software does what was asked; only you can check that what was asked was the right thing.
That second check cannot be delegated. It needs somebody who knows the work, who has time to sit in front of the tool, and who has the authority to say a rule is wrong. Those three conditions are rarely met and it is the real bottleneck on most projects.
So plan it as a workload, with a name and days set aside. "The users will test it" with nobody named means nobody will test it, and the defect will be found in production by a customer.
Useful testing uses real cases rather than examples. Take ten files from last week, two of them complicated, and put them all the way through. Invented examples validate the developer’s logic; real files validate yours.
Finally, write down what was tested. That is not bureaucracy: it is what lets you know, six months later, whether a behaviour is a defect or a decision.
Go-live: the moment everything breaks
Moving from the old system to the new is the riskiest moment of the project, and it gets the least attention because it arrives when everybody is tired.
The first decision is the switch: all at once, or in parallel for a period. Parallel is safer and far more expensive, since it means entering everything twice; a clean switch is faster and has no way back after a few hours.
The second is the date. Never go live the day before a business deadline — month end, stocktake, peak season. It is obvious written here and it is done regularly, because the date is chosen on the project’s calendar rather than the company’s.
The third is presence. Somebody from the supplier has to be reachable and available during the first days of real use, and that belongs in the contract rather than in a verbal promise.
The fourth is the way back. Write down before the switch what happens if it fails: who decides, at what point, and how you revert. A rollback plan that was never used cost nothing; its absence costs a day of downtime.
What can be measured on a build
Three measures are enough and none of them is a percentage complete, which is the most reassuring and least informative number on a project.
The first is how often something visible is delivered. A project showing something usable every two weeks is a project whose state you know; one showing something every three months is a project whose state you will learn too late.
The second is the number of open issues and their age. It is not the number that should worry you, it is the age: a list growing with six-week-old items says priorities are not being decided.
The third is real use after go-live: how many people use the tool for the operation it was meant to replace, and how many carry on in parallel in the old one. That last figure is the only verdict that counts.
What we will not quote: the IT project failure statistics that circulate everywhere. They come from one consultancy’s survey, with its own definition of failure and its own sample, and they have been repeated for decades without anybody checking the year or the method.
What to check before signing
The first question reveals the method: ask what will happen when you discover, while using the first version, that a rule was wrong. An answer about variations and cost describes a contract; an answer about a capped budget describes a method.
The second is about rhythm: how often will you see something that works? If the answer is longer than a month, you will not know where the project stands until it is too late to correct it.
The third is about data migration: is it priced separately, and on what data was it estimated? A quotation mentioning it in one line without having looked at your data is estimating something it has not seen.
The fourth is about ownership and handover: the code, the accounts, exportable data, and documentation sufficient for another supplier to take over. Ask for an export during the project, not at the end.
The fifth is about go-live: who is present, for how many days, and what the rollback plan is. A supplier with no answer to the last one has not done many switchovers.
What we do, and what we will refuse to do
What we will refuse: pricing as a fixed sum a scope nobody has yet seen working. We can do it — it sells better — but the safety margin we would have to build in would cost you more than the method we propose instead.
We will also refuse to start with an eighty-page specification. We will ask for the rules, the edge cases you remember and what the tool will not do, then build the most frequent path and show it to you.
A limit of competence, stated plainly: we do not know your business. The rules come from you; we know how to ask the questions that bring them out, and how to tell an answer describing a habit from one describing a constraint, but we will not invent them.
What we do: rules written before screens, a first version reduced to the most frequent path, data migration tested against your real data in the first month, a named person on your side for acceptance, and a rollback plan written before the switch.
And what you should do without us this week: sit for an hour beside the person who will do the data entry and watch them work without interrupting. Note the three things they do that they have never described to anybody. Those are your rules, and they are worth more than the specification you were about to write.
Frequently asked questions
Do we need a complete specification before starting?
No. Write the stable part — the rules of the business, the obligations, the volumes, what the tool talks to, and what it will not do. The detail of the screens is discovered by using a first version, and writing it beforehand produces false precision.
Fixed price or time and materials?
A fixed price makes you pay an uncertainty margin and aligns interests against useful discoveries; time and materials demands weekly prioritising from you. The combination that works is a fixed price on the stable part and a capped budget for the rest.
What should the first version cover?
The most frequent path, not the simplest functions. Take the operation done forty times a day and make it work end to end. If people carry on in parallel in the old system, that path is not complete.
Why does data migration always overrun?
Because it is discovered late. Existing data holds unwritten conventions and repurposed fields. Test the migration against your real data in the first month, and decide explicitly what is migrated, archived, or abandoned.
Who should do the testing?
Somebody on your side, named, with days set aside and the authority to say a rule is wrong. The supplier checks the software does what was asked; only you can check that it was the right thing to ask for.
What is the failure rate for projects like this?
We do not quote the figures in circulation: they come from one consultancy’s survey, with its own definition of failure and its own sample, repeated for decades without the year or the method being checked.
Where we come in
An hour spent watching whoever will use the tool, without interrupting, produces three lines that say more than an eighty-page specification.
- We write the rules before the screens, and have you read them back.
- We cut the first version down to the most-travelled path, nothing else.
- We show you something running before discussing a fixed price.
Your trade is foreign to us and we will not guess it: a supplier claiming otherwise will sell you their own habits.
Read next
The pilot that will never ship: the signs, from week two
A pilot that fails rarely fails at the end. It fails in the second week, quietly, and everybody carries on for three months.After version one: what evolving custom software really costs
Custom software is not delivered, it is put into service. Everything that matters afterwards turns on how you ask for a change.The clause your supplier contract does not contain
Your contract describes a service: availability, support, price. It almost never says what the supplier is allowed to do with your data.
Let us talk about your project
A free audit, no commitment: we look at your online presence and tell you what is holding it back.