Organizational Debt
boats.gitlab.io
boats.gitlab.io
Anecdotally, I for one am not interested in the topic of organizational debt in general or wrt to the “boats” project, whatever that may be, as I’ve read and experienced quite a lot about it already. But I am very interested in it wrt to the Rust project, given their clarity of thinking in other domains. I clicked through and read this anyway, only b/c it’s Sunday and I’m not in a hurry to scan the titles and urls only and quickly decide what’s interesting to me. But on other days I might have skipped this one just due to the lack of important information in the post line.
"boats" is a person. Short for "withoutboats". From their about page:
> This is the blog of withoutboats, a Rust contributor and a stack of labrador puppies in an overcoat.
Preface: I don't think this resolves the issue completely by any means.
It's seemed clear to me for awhile that Github discussions need threading, badly. The 200 comments on one of those issues probably amounts to about 40 actual discussion topics. Many of them are the original poster adding follow-up comments to their original comment, or back-and-forth discussions about one single comment. It's especially noticeable on contentious discussion topics.
Basic conversation threads wouldn't completely alleviate the problem--200 threads is much better than 1000 comments, but probably still an intractable amount for the maintainers. Still, it might mean you're able to scan 75% of the discussion instead of 25%.
Since that's not going to happen, I don't see any better solutions than yours.
Right now, it's too easy for people to blast out unedited words and consume the attention of readers. If they had an attention budget, maybe they would spend it more wisely.
"On subject foo:.... (insert four paragraphs of blather here)
On subject bar: .... (more blather)
In response to your point .... (yada yada)"
thing, and it gets even more unreadable.
I find any serious, meaningful creative discussion almost impossible without proper threads. I have this same problem in Slack, where interesting, significant, discussions sit in a thread spawned from some innocuous comment and there's no way of highlighting it to say "this is significant.
I hate to say it, but old-school, early-internet forums did solve this problem really well.
https://github.com/scala/slip/pull/28
That is nearly the exemplar of a conversation gone off the rails. At least to some extent, threading would help. And, since so many of those people keep getting sidetracked, it would be useful to the moderator to be able to break off a section of that debate and make it a separate conversation.
Being part of an open source community must be a two-way street. I have contributed a little bit back and weigh in sparingly. I am shocked how demanding and entitled some people can be, especially those who have given nothing back.
> the community has no defined boundary of membership
I realize having the time to contribute to open source is a privilege and we should be wary of silencing voices who may have good ideas but not the time to contribute. However, I also believe that the amount of noise is drowning out the signal. I am in complete agreement that we desperately need to define what membership means.
There are a few risks when that happens. One is that the debates can get kind of toxic and political. This means you get people skilled at politics dominating the discussions. This both drives away people and attracts more wannabe politicians. Worst case you end up with a lot of politicians in charge. The other risk is that you inevitably get schisms, factions, and people going off carving out their own niches all while sucking up a lot of energy with debate, arguments, and the inevitable fallout of that. IMHO this is exactly what happened with e.g. Scala.
Rust is not quite there yet but I'd say it is starting to attract a lot of the same type of crowds meaning that, as this article identifies, now is a good time to do something about it.
One way out is simply imposing some hierarchy based on meritocracy. It starts by acknowledging that somebody needs to take decisions and that not all opinions matter equally. Find some respected long term committers and organize decision making strictly around those doing the most work. It works well in other places in the OSS community. You build it, you own it. You want to contribute, you need to learn to work with those that are going to be in charge of accepting your work.
No, that's not a way out, because that's effectively what we started with at the dawn of Rust 1.0. withoutboats addresses the problems we've had in the post.
The bottom line is that most bigger projects seem to end up with some kind of meritocracy. Not a bad thing to have a few responsible leaders staying on top of things.
But... It's swell when you meet someone and they offhandedly mention using the thing you work on, heck, even recommend it or straight up take it for granted. I know those moments probably can't sustain open source maintainers (and that leads into the second point about capturing funding), but, at least in my experience, they really help keep a more healthily balanced perspective. And that's at least a part of being able to stay happy working on such a project.
With respect to funding... As a relatively young compiler dev, I've pretty much always taken compiler software for granted. It's (almost) always been that languages have been freely available, and usually the source available, too. If I'm honest, at the price point of "free", it's almost hard to picture how compiler engineers get paid at all. Normally people sell tools, but... Programming languages are now tools freely given. And now even their advanced refactoring tools and IDE support. Strange to think about it, if I'm honest.
It depends what kind of community you have. I noticed that projects which have received a lot of hype tend to lose their thought leaders and they often end up with highly divided communities and opinions. Also, when people jump on the hype bandwagon too quickly, they set themselves up for disappointment and discussions become more emotionally charged. This is made worse by the fact that the most emotionally invested people are more likely to get involved in discussions.
> It becomes harder for users with genuinely new insights to participate because they can’t tell if their insight is new or not and may decide just not to post it.
> Working groups need a toolkit
I wonder if that toolkit might look something like: https://www.kialo.com/
Structuring and organizing discussions like this might make them more scalable.
One difference is Kialo only seems to support binary arguments. There may be more than two design options.
Especially in a global organisation, where only part of the team are awake at any one time, so it's impossible to have a real-time discussion regardless of platform.
The advantage of forums is that it's not a real-time discussion and everyone gets to contribute.
Why not revision controlled design docs as readmes with parallel discussion talk pages (discussion threads) Wikipedia style?
Buried is still searchable and linkable, IRC generally isn't. Poorly rehashing old discussions generally doesn't help improve the signal to noise ratio either IME.
It's not necessarily obvious where all discussion should take place either. I started writing a VisualRust patch to add stdlib natvis files to MSVC projects, which instead morphed into a better rustc patch: https://github.com/rust-lang/rust/pull/43221
Thanks to this buried gem I stumbled across in a search: https://github.com/rust-lang/rust/issues/36503#issuecomment-...
If that was an IRC discussion somewhere instead, it probably wouldn't have gotten done (or at least not nearly so soon), because I'd be chatting and listening in the wrong channel/silo.
Sometimes the code that feature would operate on has changed significantly, sometimes the need for it has been mooted or enhanced by other changes, sometimes the change has been made significantly harder (or easier!) by other changes.
But often the idea on it's own is relatively unchanged, and closed is just another form of buried - still searchable, reopenable for the right reason.