I've got to tell you, Google Docs integration was harder than I thought it would be.
The first thing I needed was to get the relevant library for the Google Docs API for Python. Google, by the way, has awesome documentation, both for Google App Engine and for Google Docs, as well as most everything else they do, so I highly recommend using Google libraries if you can.
That said, Google Docs times out a bit often, so I needed try to do something I'd never done before.
Most of the time out errors in Google App Engine are relatively rare. There is verbose and copious advice from Google on how to deal with the slim chance of a partial commit of an object written to Big Table, but I've found that it happens pretty rarely, and if you just throw an error page, people will refresh the page and move on.
Granted, maybe that's because not many people ever use Job-Buddy.com and that's the reason I don't see a ton of those kinds of errors. But my point is, system reliability wasn't something I had to worry about much.
Not the case with Google Docs, which times like a drunk waitress at a diner of takes fifteen minute smoke breaks. It happens often enough that you will notice it if you try to use the API. So I was left with (what seemed like) a paradox: how can I do something, but at the same time plan to deal with the circumstance where I don't do something?
I couldn't get my head around it.
This was a profound moment for me, because this is when I realized I really needed some help. So I did two things: 1) I started going to Boston Python Meetups, which was really helpful and I highly recommend, and 2) I started taking O'Reilly School of Technology classes on Python, which is also really helpful and which I also highly recommend.
I talked to a more experienced developer about my problem and he gave me some great advice. First, he explained what exceptions were, and that with them you can do exactly what I wanted to do, which is "try" something, and then if it doesn't work, deal with it.
The second piece of advice he gave me was to have the user deal with it if there was a problem, so long as it was a long frequency event.
So that's what I did; I used the examples from the library documentation to create a tie between the job opportunities you can track in Job-Buddy.com, and if there was a problem with a timeout error from Google Docs, I display a message to the user asking them to "repair" the problem.
And so, I created the ability to add a cover letter and a resume to each job opportunity, as well as use templates to create different versions of your resume for each job opportunity based off a template version.
In retrospect, it looks like I'm a bit outdated in the way I thought about the problem. Most people don't understand why I have cover letters be editable like resumes. This is an artifact of when I used to look for a job, when you did attach a cover letter and a resume to an email when you were applying for a job. It looks like now-a-days, the cover letter has been replaced by the text of an email you send, or some summary text you enter into a company's resume submission system.
An elegant way to do this is the way that Huntsy does it, where there are email cover letter templates, which you choose and then create a per job instance of with a mailto link. In addition, the system automatically creates a unique email which that system generated email BCC's, which then tracks when you send that email. This is very clever, and was on my roadmap actually to implement for Job-Buddy.com. At this point though I'd probably just recommend using Huntsy (they also have a better bookmarklet, which has a hover entry window so you can see the "add a job opportunity" window while you're viewing a job posting, as well as some clever logic that tries to pull in the job title and company name into the job add form automatically).
Anyway, it took forever and a day, but I did implement the Google Docs Integration in October of 2011, and then did another round of user testing.