I wrote a code generation system that put together nice tight little apps, with UI, database interface, batch processing, and a report generator. It came in really handy for the simple apps everyone seems to need every once in a while.
My partner and I sold a few simple apps and then he found an opportunity in a large company for a much more sophisticated app. He quoted based upon the already demonstrated performance of me and my “little tool”.
Unfortunately, every single unusual thing we ran into was not “generatable” by the tool. So I had a choice, hand code or upgrade the tool to generate it.
My choice was my “best failure story”. I chose to add funtionality to the tool to generate code needed for an open project already well behind schedule. I didn’t stand a chance. Even hard coding everything probably would not have saved the gig.
Lessons learned:
- Code generators must have hooks for custom code.
- Don’t commit to using a code generator until after you have the customer’s requirements and know that the generator can already handle them.
- Don’t build your tools on the job site unless you’re really good and know that you can finish on time.
- Don’t let a few early and easy successes let you get a big head. It’s never as good as it seems. (It’s also rarely as bad as it seems.)
- Have complete, open, and honest communication with your partner(s). You don’t have to know every single thing each is doing, but you better be on the same wavelength.
- Put everything dealing with external parties (customers) in writing. Commit to nothing until everyone agrees.
- If there’s only 2 of you, you both better be hackers. There’s just too much technical work for one to be overwhelmed and the other to be “waiting”.