Recently, I've started hacking on Twisted. Not in a big way, just nipping at the edges.
I'm struck by the many differences between my experiences on Twisted, and my experiences as a commercial software developer.
I suppose the biggest difference is that of relative competence. I'm used to being the most technically competent person on a project. The guy that sets up cvs and the makefiles and who people consult when they complex or obscure programming questions. In Twisted, I am a very long way away from that. I am unfamiliar with the development process, and I am reasonably new to the language. Also, there are some really, really smart people there.
Not being in charge is harder in some ways. I tend to ask for approval before I do things, and ask for advice a lot more. It also means that when I want to do something, I have to justify why it should be done. Oh, and I become mildly nervous when my finger hovers over the "commit" key.
However, the great thing about this is that I am learning a lot. Especially about design and code-craft. It's a real pleasure.
Distributed development is also pretty interesting. Things have to be expressed in a much clearer fashion, and much more work has to go into communicating ideas. I suppose this is an obvious truth. I find the discipline required unusual, but worth working on.
I've never done product development before, only doing bespoke work. Having to think about API changes and backwards compatibility and so forth isn't something I've had to do.
I still find it hard to get the time to do much productive work on Twisted, as I have only the evenings and the weekends to contribute, and focussing and concentrating after spending all day at work can be hard. Especially when you are an IRC monkey like me.
Working on Twisted has been a great learning experience. I look forward to further hacking.