Tagged product
5 pieces
- · 7 min read
A Cached Price Is a Gate, Not a Quote: Two Jobs One Number Cannot Do
An indicative value and a committed value are different objects with different tolerances, and the cheapest way to break a product is to let one become the other. A cached price that ranks candidates is allowed to be wrong. The same number shown to a user as what they will pay is a promise. Keep them separate in the type system, not just in the documentation.
- · 8 min read
Price the Baseline in the Same Pass, or Your Ranking Is Not Answering the Question
A product that offers a clever alternative to an obvious option has to show it beats that option, on the same inputs, at the same moment. Ranking your own candidates against each other answers which of yours is best, which is not what the user asked. The baseline has to be computed in the same pass, or the comparison is against a number from a different time with different availability.
- · 8 min read
A Global Minimum Is Wrong in Both Directions: Feasibility Rules Belong Per Location
One threshold applied everywhere is simultaneously too strict where conditions are easy and too loose where they are hard, so it rejects good options and admits dangerous ones at the same time. Feasibility rules have to be per location and per case, and the cases differ in kind rather than in degree: clearing immigration and collecting a bag is not a longer version of walking between gates.
- · 7 min read
Put the Catalogue in Data and Growth Becomes a Row Instead of a Release
Every product has one thing certain to grow: the list of cities, currencies, carriers, document types or tenants it supports. Where that list lives is decided on day one and cannot be revisited cheaply, because by the time it matters the launch set is wired through the application. Modelled as data, adding to it is a row. Modelled as code, it is a ticket, a deployment and a regression pass, forever.
- · 7 min read
Prove You Can Get the Data Before You Build the Thing That Needs It
For products whose value is access to someone else's data, the risk that ends the project is not the engineering. It is whether you can obtain the data at all, on terms that permit your use case, at a price the product can carry. That question is answerable in days for a few hundred pounds, and it is routinely answered last, after the architecture has been built on an assumption.