[2008-12-25] Recognizing failures
(or, just how much can you chew?)
Way back in late 2005 (a lifetime ago, it seems like), a friend of mine came for a visit one day. He was coming to me on behalf of a (non-mutual) friend who needed a programmer because he had an application in mind. He tried to explain the application to me, and on the face of it, I didn't think it was a particularly difficult one. I still don't, actually, but that's a purely academic distinction at this point.
So because I didn't think it was going to be that difficult, I went ahead and told him to have his friend contact me; he did, and he did, and we met, and I got to sketch out a reasonable idea for the program both in my mind, and hopefully in the client's mind as well.
And then things got bad.
I strongly suspect I was right, that the project was not particularly difficult. I also suspect that, just as I couldn't finish (or even start) it then, I would be completely unable to finish it now. It's just beyond my capabilities.
The first hint of this "too big to chew" property of the project was when I tried to start writing some kind of database abstraction for it and kept coming up with flaws in that abstraction. I had gotten a number of details on what the final application would have to deal with, and even though I had decided (together with the client) that the initial version would be limited to some much simpler-to-model data, it became more and more clear that this initial iteration would have to be thrown away almost entirely after its implementation.
And here's where I went wrong: I could have created the initial, very limited application. It would've had to have been (at least partially) thrown away after its launch, and the next iteration would probably have been more complex, but it would have been something tangible, more than just a concept in our heads, but something that could be interacted with, could be tested, could be considered for the recycle bin or for the improvements treadmill. Instead, I froze. Almost literally. I couldn't write the code. I couldn't make it happen. All I could think of was how complicated an architecture would be required, and how it was so completely beyond me because man, I've never written something like this before and I'm so fucked; I told this man I'd deliver something and now I can't deliver, I can't do it, and I'd rather die than see this man again and dash his hopes after I made it sound so good...
Now, if that sounds like I'm maybe hiding the fact that I couldn't bear the shame of not being able to write something, and I'm lying to myself (hello, armchair psychologists out there on the Interwebs!), the fact is I'm not. Yes, I was ashamed, but not that I couldn't do it -- I was ashamed that I'd ended up lying to my client about being able to do it. And, to be honest, I don't think I even ever said I would be able to do it, but I'd made it sound so good, like it was just a few steps away from being real... which, of course, it never had been -- except in my head. Before I'd really thought about it, that is.
So, the lesson I took from this was: don't promise you can do something you've never done before, and don't make it sound like you can. Because if you end up biting off more than you can chew, you'll make a liar out of yourself, and your client will not only not want to hire you again, but they will also tell their friends that you're unreliable, that you make promises you can't deliver on, and that will fuck you more than anything. Obviously, this is just after-the-fact reasoning, the real reason for me was that it made me feel like shit -- but it also happens to be true, and my feeling made me look at that, analyze it, and see it for myself. And now I can share it with you, anonymous reader.
This is the first of hopefully many "personal experience" posts, where I will detail the things I've learned -- some good, some not so good. Merry Xmas, Internet.
The next post in the series is One Is The Most Important Number, and refers to the age-old programming concept: “Don’t repeat yourself”.
Why did I rescue this?
This article literally came out of nowhere. I had completely forgotten about it, and re-reading it I couldn't help but think I was on to something back then!, and the subject is still topical even today, as I move into trying once again to do what I couldn't do before.
Just like the sample story in this article (and it happens to be one that I can still remember all too clearly), I have a job to do that might just be too big for me to chew (writing Guns). Like the sample story, I plan to do it right this time, and I have this article to remind me to just write something and don't get stuck in architecture astronaut land. I don't know how much that will help. I also have a friend who's willing to sit with me while I code and think about this stuff and who will help me stay on track. I don't know how much that will help, either.
But, so help me goodness, I'm trying again.