Last May I decided I'd take on four fixed-price AI builds over the following twelve months and write down whatever I learned along the way. That year is now up. I shipped all four, though one of them very nearly didn't happen. This is the short version. The longer version is scattered through the changelog.
If I only got to tell you one thing, it would be this: the projects that went well all had a single person I could ask a question and get an answer from. The ones that got hard were the ones where I had to go through a group to get anything decided. That turned out to be a much better predictor of how a build would go than anything technical.
The scoping call does more work than the rest of the engagement combined. It's an hour, and by the end of it either we both know what's getting built or we don't. I'd much rather find that out on the call than three weeks in, so I've stopped being polite about pushing for specifics.
On price, the number itself is almost never the real conversation. When I quote, what I'm actually saying is how big I think the job is. When someone pushes back on the number, they're usually telling me they had a different size in their head. So now when there's a disagreement about price I try to talk about scope instead, and most of the time that sorts it out.
Four weeks is tight. Six weeks is comfortable. Anything past that and I've usually got the shape of the project wrong. Build three ran eight weeks and it really should have been split into two separate jobs, which I worked out about halfway through and then had to live with.
The AI part was rarely what slowed me down. What took the time was everything around it. The prompts, the empty states, what happens when the model gets something wrong, how someone tells it that it got something wrong, and whether they trust it enough to come back the next day. I spent far more time on the failure cases than on the happy path.
I run a demo every Friday on every engagement, and every time I've thought about skipping one I've regretted it. Missing a week doesn't cost you a week. It costs you the week after as well, because you've lost the thread and you end up re-explaining where things are.
I said no to more work than I took on. Some of it was good work with a shape I couldn't price. Some was good people on a timeline I couldn't meet. I haven't regretted any of those yet, though a couple stung at the time.
So that's four builds, four clients, nothing rolling on afterwards. The next four will look about the same and probably be a bit fussier, because Plans is taking more of my week than it used to.