Hey Thomas, that is a pretty solid write up! I would generally echo all that’s been written in your report.
Regarding Roger’s feedback, I lurked for quite a long time before I started contributing more than just bugs to the tracker or even speaking on the chat systems really. It wasn’t because the community seemed hostile, it was me trying to match the behavior I observed and trying to figure out how I could insert myself into the process without being a nuisance. Chat in particular is very sparse from the main contributors, except for Geometry Nodes and recently the Rendering module. Participation is very low in terms of discussion, questions, or general implementation chatter. Even the old Monday meetings were weird. Participation was abysmal and hardly a word was typed. Folks didn’t really ask for help from one another and little was spoken about general software development at all.
As a potential outsider this makes it very intimidating to start contributing as there’s no chance to learn from the discussions of others and because of the “no talking” environment. I felt like I was being a nuisance each time I would chat especially if I needed to directly contact someone to move forward or to raise a general question. Sometimes folks seemed so busy that when they did reply the response was so terse and alien to be nearly useless to me - and I’ve been in software for 17 years (but not 3d/math related which did not help).
This is a very tough problem in general. The main source of contention, in any environment, is figuring out how to insert yourself into the process in a way that’s helpful instead of harmful. Let me be honest, no one, not even myself, is going to be happy responding to random internet users/developers throughout the day to get questions answered while my plate is already full. I would hate doing it and am fully mindful of that when contributing as well.
All that said, there’s one thing in your writeup that probably deserves more attention. While code review is definitely a bottleneck, the proposal to front-load more design work, while absolutely correct and necessary, will most likely push the problem to that task instead. Instead of “no one’s looked at my code review in weeks” will turn into “no one’s looked at my design task in weeks”. Or “the design task spawned a lot of extra work and I can no longer do this on my own so I probably won’t even start”. The problem is ultimately time. In order to properly review a feature or design you need dedicated time to do so. There’s no way around it. If you hope to set people up for success, your feedback better not steer them off a cliff and so you need time to actually consider things and direct them accordingly. That’s hard.
In my current work environment we’ve tried a few things that have each led to some success for these problems. They’re just food for thought and, before going further, I’ll note that even still there will be plenty of ideas and code that never makes it out.
We’ve tried the following in various forms - These should all be seen through the lens of actual implementation and design and not as a “support” vessel for users:
- Office Hours – dedicated times where folks can come in for getting questions answered with some reasonable assurance that “adults” will be present to try to help. Sometimes they’re used for design work that has become stuck or hasn’t been reviewed at all. A big downside is often attendance on both sides though.
- Hack Times – general experimentation time that may or may not yield any fruit. These can also be used as a dedicated time to test out and use in progress code to root out any further issues that need to be addressed before committing it for real etc. Can also be used for additional development power to get things buttoned up.
- Some facility to “recruit” a helping hand. Having a place where you can get extra implementation/design help from a pool of additional developers is useful. This shouldn’t be a place to ask about getting your pet feature developed by someone else but rather you need help completing your already designed-reviewed/partially implemented feature. Pairing up isn’t just to make things quicker, but it might make the impossible to possible e.g. Hey, my design task requires changes to the UI/UV Editor space and I’ve never worked there, can someone work with me to complete that part of the implementation.
Generally, the platforms for putting your design/code out there like chat, devtalk, and phabricator are already present. The next step is having dedicated times, resources, and processes in place that keep the items moving through those platforms from beginning to end.