In the past, I've built phony tools. Isla, my programming language for children, wasn't driven by the needs and motivations of the children I hoped would use it. It was driven by my desire to write my first compiler. Code Lauren, my game programming environment for beginners, wasn't really driven by the needs and motivations of beginner programmers. It was driven by my desire to build a VM and steppable debugger.
The biggest problem was that, in both cases, I wanted to build something (a runtime), so the projects were mostly impervious to reality. Any corrective feedback from the world had to get past my preconception that, what ever the solution, it had to involve the runtime I was building.
The second biggest problem was that I invented pretend users (a child for Isla and a beginner for Code Lauren) for whom I could make the tool more accessible or appealing. So I wrote extra helpful syntax error messages. I added functions for getting mouse and keyboard input so you could make a game. But, crucially, these pretend users mostly catered to what I wanted to build. For whatever reason, an imaginary user who is learning to program is an insistent source of motivation for me.
To be clear, I think it's fine to build a runtime for fun, or to learn. It's the self-delusion that I regret.
So, with the building software faster work, I've resolved to try to stay on track by building things either for myself, or for a person who is using the tool and who is so real they have an address I can email them at.
Part of Mary Rose Cook’s research to build software quickly