Pygmalion as a
Software Developer
scroll — the carving follows
α the year it was perfect
Nosdesk was perfect for about a year. No bugs, no confusing workflows, nothing missing. This was easy to achieve, because for most of that year it only existed in my head.
I could see the finished product with complete clarity. A helpdesk that moved as fast as the technician using it. Search that just worked. Tickets a whole team could edit at once without stepping on each other. The version in the repository never quite matched it. The real one had rough edges and half-finished features, and every time I sat down to work on it, the gap between the two was the first thing I saw.
So I kept polishing instead of shipping. There's a comfortable logic to it: an unshipped product can't disappoint anyone. As long as nobody uses it, the perfect version stays intact, and you get to keep believing you're one refactor away from it.
β the sculptor
There's an old Greek story about this. Pygmalion, a sculptor, is so put off by the flaws of the people around him that he carves his ideal woman out of ivory instead. She's flawless, because she's imaginary. He falls in love with the statue, and eventually Aphrodite takes pity on him and brings her to life.
It's usually told as a romance. Swap the chisel for a keyboard and it's every side project I've ever started.
Pygmalion gets one deal software developers don't: a goddess animates the statue for him. He keeps the ideal exactly as he carved it, and it comes to life anyway. There's no equivalent for the perfect repository sitting untouched on your MacBook. Nobody is coming to breathe life into that. Products only come to life through use. Until then it's ivory.
γ the statue talks back
Not long ago, Nosdesk went into the hands of its first real teams, and almost immediately it started heading in directions I hadn't planned.
People asked for things I didn't think of, because the product now lives in environments my imagination hadn't toured. They found uses for half-finished corners and asked me to finish them properly. A couple of GitHub issues came in that refined parts of a feature I was already reworking for the 1.1 release. A well-written issue means more to a small project than most people realise. It says someone used the thing, cared about where it fell short, and took the time to help. The roadmap I'd sketched alone is now being steered by people who have been using the thing for a fortnight, toward the changes that matter most to them, and it's exciting to watch.
This was the plan all along. I believe in the Unix philosophy: small pieces, cleanly joined, each doing one thing well. I designed Nosdesk to be interoperable and extensible from the start, because every helpdesk I'd worked in was a closed box that couldn't be bent to do the things its own users needed. The architecture always had room for other people's ideas. I just couldn't generate those ideas myself. The requests coming in were design work I couldn't have done alone, from the only people qualified to do it.
δ the other side of the counter
I've been on the wrong side of one of those boxes. Before Nosdesk existed, I spent months trying to improve the helpdesk we ran at the school where I worked. I followed up on issues, suggested fixes, and eventually solved one problem myself and posted the solution to the community forum. One of the lead developers told me the repository wasn't the right place for questions. My fix never got a reply. I wasn't attacking their product. I was trying to help finish it, and there was no way in.
That's the trap of treating your ideal as the final form. Every user suggestion becomes a deviation to defend against, and the people best placed to improve the product, the ones living inside it eight hours a day, get treated as a nuisance. Perfectionism assumes you're the sole author: there's one correct version, it lives in your head, and every step away from it needs defending. But nobody designing alone can account for every workflow their software will meet.
The product in your head isn't the product.
It's the first hypothesis.
Once I actually believed that, the rest got easier. Shipping stopped feeling like an admission that the perfect version would never exist. Feedback stopped feeling like a verdict. A request for change isn't a critique of the vision; most of the time it's the missing half of it, from someone who knows things about your product that you can't.
Nosdesk today doesn't match the version I fell in love with in early 2025. It's better. Not despite users pulling it in directions I didn't plan, but because of them. It's turning into something more than what I wanted, which is a strange thing to be glad about, but I am. The statue talks back. You'd be mad not to listen.
Venus rendered from the Scan the World 3D scan of the Venus de Milo · CC BY-SA 4.0
← more writing