Research
Friction
After refilling the brush turned out to be the wrong idea (Refilling), the owner asked which other points of friction the app has, then: "Fix what we can and keep a list of what we did and didn't fix." This is that list. It comes from reading the code and the owner's reports, not yet from watching a first-time painter, which is still the real test (Reviews).
Roughly worst first when it was written.
Fixed
| Friction | What happened | What changed |
|---|---|---|
| Refilling the brush | A stroke went faint and you had to remember to tap the colour well for more. | Every stroke starts with fresh paint; a long stroke still runs dry along its length. The tap on the colour well opens the colour rings. (Refilling) |
| A blank canvas after the phone takes back the GPU's memory | iOS can take back the GPU's memory under memory pressure or in the background. The canvas stayed blank; it looked like a crash. The stress test confirmed it. | The canvas rebuilds itself from the paint the page still holds: shaders, textures and the whole painting uploaded again. The stress test now passes it. |
| One error froze the canvas | A single script error inside a frame stopped the drawing loop for good; the menus still opened, the painting didn't change. | The error is reported once, the stroke in progress is dropped, and drawing carries on. The stress test throws inside a frame to check it. |
| A wrong part in a mix couldn't be taken back | Each tap on a colour adds a part to the selected mix, and there was no "one part less": a wrong tap meant clearing the mix and starting again. | Undo (and the two-finger tap) takes back changes to a mix as well as strokes: an added part, a cleared mix, a colour picked with the eyedropper. Redo puts it back. The touch test checks it. |
| Shared images piling up | Every image shared was left in the app's temporary storage. | Only the image being shared is kept. |
Not fixed yet
| Friction | Why it isn't fixed | What it would take |
|---|---|---|
| Choosing a colour and adding to a mix are the same tap | With a mix selected, tapping yellow adds yellow to that mix; someone expecting a colour picker spoils a saved mix. It is how mixing by parts works, so changing it is a design choice, the owner's. Undo now makes a mistake cheap. | A conversation like the one on refilling: for example, tapping a colour on an empty mix picks it; a mix only grows once you've started it. |
| The paint doesn't land under the finger | By design: it lands past the fingertip so you can see it (The covering finger). Now always straight up and the same distance, so it's predictable, with no hand setting; the cost is a bottom strip that needs zooming in to reach. | A first-time test on the phone, to see whether the distance feels right. |
| Hidden gestures | Turning a ring's pages by swiping along it, the two-finger tap to undo, press-and-slide to open a menu. Hints name some of them once; the ring pages show dots only, at the owner's request. | A first-time test on the phone, to see which ones people actually miss. |
| The launch always waits | The launch screen holds at least 2.4 s even when the canvas is ready sooner. Kept on purpose: the owner asked for the 2 s hold. | Only the owner's say-so. |
| Wet paint muddies colours; Dry is out of reach | True to oil, and part of the brief. But newcomers get mud, and Dry sits in the top-left column. | A design choice: Dry closer to hand, or a hint the first time colours turn to mud. |
| Brush size is set three ways | The size arc, dragging the rings' centre, and how flat you press. It's hard to predict a stroke's width. | A design choice about which one leads. |
| The knife, finger and rag are on a third page | Of the brush ring, where they're easy to miss. | A design choice about the brush ring's pages. |
| A saved image is flat | The share is a flat picture, so the raised paint doesn't come across. | A relightable share and a height export; a large feature. |
| The rest of the stability plan | The page can't answer iOS's memory warnings, protect a save when the app goes to the background, or share without large base64 strings; each needs native work, which is only tested with Xcode and on the phone. A brand-new painting interrupted within its first seconds of saving can open empty. | The stability plan: the rest of P0 (memory warnings, background saves, sharing through the app's own scheme, a session record) and transactional saves (P2). |
Keeping it current
A fix moves its row up to Fixed with what changed; a new friction is added to Not fixed with why.