Most software problems are not hard to build. They are hard to get exactly right, and the difference shows up months later in somebody's money, or in an app that quietly stops working the moment the signal drops.
The device is a good place to compute. Phones are fast enough to read a receipt or translate a sentence, and doing it there means no upload, no API key, no per-use cost, and nothing sitting on a server waiting to leak. It also means the app still works on a plane.
Rules belong in the database. Permissions enforced only in an app are permissions anyone can skip by calling the API directly. If the client is wrong, or malicious, or simply out of date, the data should still be safe.
Arithmetic is not a detail. Splitting a bill three ways cannot lose a cent or invent one, and a usage limit that says 70% has to mean 70%, not an estimate rounded to look tidy. This is the sort of thing nobody puts on a feature list and everybody notices when it is wrong.
Say what is true. If a number is approximate, the screen says so. If something has not been checked, we say that too — including to you. A client site does not get a course, a fee or a testimonial invented for it because the page looked empty without one.
Deliberately small. The person who designs a screen is the person who builds it and the person who fixes it, which removes most of the opportunities for a product to become incoherent.
We take on a small number of projects at a time. If we are not the right people for something, you will hear that early rather than after an invoice.