Updated: Please Understand That This is Not a Troll
Despite the fact that it got modded as off-topic, Please Understand Why My Wife Can't Stand Mozilla was meant in all seriousness to help the Mozilla developers succeed in their effort to win the browser wars.
I'd like to suggest that anyone writing software meant for regular users (as opposed to developers) would benefit from reading it.
(Updated yet again: filed this in bugzilla as #182221.
Embedded Systems Programming
Personally, I would be really thrilled if I could get paid for six months in order to get a beeper not to warble. I've been in that position before, and I loved it. I miss it terribly.
Well, now I'm spending six months trying to get a beeper not to warble. Sometimes it's hard to remember that I'm supposed to be thrilled.
I proposed my current project to my client. I came up with the idea myself, but he has the hardware my idea would need and is in a position to market it.
He was skeptical whether it could be gotten to work, and suggested that before he committed to funding the product, that I write a "proof of concept" that would demonstrate the core features of the product without actually going to the effort of completing a finished product.
"Sure," I said, "no problem. That should take me about a week." So he agreed to pay the amount I'd normally want for a week for the proof of concept to be demonstrated.
Well, I'm going on week six now for my "proof of concept". There have been many late nights. My wife has been very distressed at it all, seeing economic disaster on the horizon. I have to say I've been pretty distressed too, but I've mostly I kept that to myself.
I had thought I could deliver it two nights ago, but once I got the software "feature complete" (for just the features required in this early version) the performance was so slow as to make the product completely unusable. I had planned to leave any optimization for the next phase of development, but I feared that showing what I had to my client would make him decide to cancel the project.
I stayed up round the clock up until late last night hand-optimizing my code, and although I got it to go much faster, it is still too slow to even be presentable, let alone to make a product we're going to charge money for.
Late last night I thought of a different approach I could take to my optimization, and I'm working on that now. I'm pretty sure I can get it to the point that my client will believe in its potential when he sees it. But there will be significant challenges remaining before it can be brought to market.
One thing I have to say, I'm much better at embedded systems programming than I was to start with. That's been part of my problem, not having too much of a clue how to debug complex problems when the target system doesn't have enough ram to support a debugger.
I had spent some time studying how to do embedded programming before I got actual work in it, but I found long ago that I learn most effectively (at least about programming) when I'm being paid to do what I'm trying to learn.
For one thing, I can afford to put real time into the study. An importantly, the sense of desperation that ensues when I don't understand how to do something that I will only get paid if I accomplish it helps me to develop a mental focus that I'm not normally able to accomplish. If I have to understand something difficult in order to continue eating, I'll do whatever it takes to come to that understanding. It's hard to develop that kind of motivation when I'm just studying something out of idle curiousity.
But it's been really painful. I had two individual bugs that took me a week apiece to fix, and one bug that took me two weeks. I had to spend a lot of time reassuring my panicked wife that my business wasn't going to fail, we weren't about to become homeless, because fixing those bugs was "right around the corner" - even when I wasn't so sure myself.
And getting everything done that I had planned to do for my "proof of concept", and getting it all working reliably, only to find it so horribly slow, was simply devastating.
Part of what keeps me going is the simple fact that I just don't have anything better to do right now. The alternative would be to just take some time off and do nothing. I am in discussions with several potental new clients, but setting up new work takes time. So despite all the unpleasantness, I might as well continue the work and do the best I can. At the very least, I'm learning a lot, and there is still the potential that it might pay off well in the end.
I'm sorry to be so oblique about what my product actually is. I know it's not at all in the Free Software spirit, but I want to get the product to market before anyone can start working on a competing product. I will be sure to announce it here once my client announces it on his website, and I'll put a link to his announcement. My current development plans call for the product to be announced in about two more weeks :-/