I defended my Ph.D. thesis on September 7th, 2011. Technically, I'm still not done for a few complicated reasons, but at this point I am willing to declare victory and say I've graduated. Like most other major events in life, this has caused me to reflect on the past four years, when I quit my job at Google to become a student again. In retrospect, I made the right choice. Financially, I will almost certainly never make up for the lost income. However, I learned many valuable lessons, and I will have a more interesting life because of it. In the end, that is more valuable than money.
The most important thing I learned is that I don't want to be a professor. This is a valuable lesson, because now I won't have regrets about not pursuing that career path. I have always been interested in both industry and academia, and this hasn't changed. Many researchers are doing interesting work. At the top conferences that I follow (OSDI, NSDI, Eurosys, SIGMOD, and VLDB), I always find at least a couple of papers that are worth reading. However, I think the "publish or perish" rewards system is the wrong one, for reasons that many have written about. I'll just say that I don't personally find writing papers to be very fulfilling, and I'd rather make things that people will actually use. I'm trying to do that now.
I also learned how to do academic research. While my publication record is not stellar, it is also not terrible. Many people have written better graduate school advice than I could, so I won't try. However, there is one important piece of advice I wish I could give to my past self, when I started my PhD: Actively collaborate with others.
By "active" I mean work on the same code, the same experiments and the same papers with someone else. Discussing ideas is a first step, but it is not the same thing. In my experience, most graduate students, at least in computer science, work alone. I understand why, because I did this myself. Working with others is difficult. You end up "wasting" time explaining things to others, having meetings and writing emails, and trying figuring out how you are supposed to use their work. Even worse, someone may not think your idea is interesting enough to work on. These challenges certainly made me go off into my own little corner and work by myself, because I was working on something interesting, damnit! I didn't have time for dumb meetings.
However, the most rewarding experiences I had were when I was actively collaborating with others on the H-Store and Relational Cloud projects. We achieved more than I could have by myself, I learned more than I would have by myself, and most importantly: it is more fun to work with others. You have people to commiserate with when papers get rejected, celebrate with when you submit them, and to help you with tough problems. Even those "wasteful" meetings aren't a waste (well, sometimes they are). In productive collaborations, bouncing your ideas and designs off others makes them better. You also really get to know someone by working with them. These connections are extremely valuable for your career, as is learning how to work effectively with others. Overall, the disadvantages of collaborating are more than offset by the benefits.
To make this happen, you need to be willing to make compromises, build relationships and find mutual interests. You either need to work on someone else's idea, or convince someone to work on your idea. Ideally, when you find a really great collaborator, you will discuss and revise a concept until you find a version that you both like. I think making these sacrifices is worth it, and in retrospect, I should have done more of it.
In other words, make sure you eat lunch and take coffee breaks with your fellow students. Find out what they are working on, and what random ideas they have. Some of these ideas will be silly, but some might be good. Take the next step with the ones that are really interesting: actually do some concrete work, even if it has to be done as a side project. At the worst, you will learn a lot and have fun by working on something new with other researchers.